6. Web Designer

27 марта 2020 г.

17:22

https://www.oneidentity.com/community/identity-manager/f/forum/27167/grid-band-search-function

Чтобы создать новую страницу - надо сначала создать новый проект и для портала выбрать этот проект.

If properties that are defined in the web project (languages, display settings, menu structure) are going to be changed, you must make a copy of the default web project.

https://support.oneidentity.com/technical-documents/identity-manager/8.0/web-designer-reference-guide/22

Затем создать новый модуль - это и будет страницв с ссылкой в меню.


Добавление ячеек в таблицу

https://support.oneidentity.com/technical-documents/identity-manager/8.0/web-designer-reference-guide/39


Для того, чтобы отобразить данные из таблицы на странице

Выбрать элемент на веб странице - он отобразиться на вкладке Properties

Правой кнопкой по нему - Show definition object

Выбрать Main - правой кнопкой - Structure nodes – Container

Затем по созданному контейнеру правой кнопкой - выбрать элемент


https://support.oneidentity.com/technical-documents/identity-manager/8.0.1/web-designer-reference-guide/30

https://support.oneidentity.com/technical-documents/identity-manager/8.0.1/web-designer-reference-guide/28

https://support.oneidentity.com/technical-documents/identity-manager/8.1/web-designer-reference-guide/31#TOPIC-1136569


Добавить строку в таблицу

https://www.oneidentity.com/community/identity-manager/f/forum/22545/webdesigner-question-again


Cont*83 Gridl ed b.nd: PersonCOl_Test List view - definitions Gr&OOterRow Add row Server action Insert: personCOU_Test Action after insert Save: persmCd_Test FirstName Database access options GridCoünnCobnnTemdate ColumnListI FrstName


Grid band: PersonCoII_Test List view GridFiIters1 Ron defnitons GridFooterRonI Add ron Container (Iteration): PersonCoII_Test Database access optons [3—+ GridCoIumnCoIumnTempIate ColumnListI First'ame LastName


Для того, чтобы иметь возможность добавить TextBox - надо сначала создать Container (Iteration) и в него уже поместить TextBox.

Container 3 Grid band: PersonCOIl_Test Oat*uase "Cess cotms List view ROW definitions GridFOOterRovvI Container (Iteration): personCoII_Test TextSox Server acton save: personc01_Test Ct«abon): TextBox3 Add row SeNer action Insert: persmCd_Test @ Acoon after insert FirstNarne Last•ame Gr dCoIumnC olumnTempIate I FirstName — i Column group


Did you load the table ADSAccount? It seems like you are having trouble there as well....
In the initilizer choose the data action "load collection" and use a wise whereclause. Something like UID_Person=getuser(). You can have this whereclause on the collection itself as well...
Or are you ok with that?

The filter on ADSAccount would be something like:
UID_Person = (from Person select current UID_Person)

https://www.oneidentity.com/community/identity-manager/f/forum/5892/text-box-not-displaying-on-attribute-update-in-web-portal


Выделить надпись жирным

COMPANYNAME Extended properties •style' - 'font-weight


Цвет верха страницы (синий) задан в переменной VI_Common_Color_MastHead

Правка configuration keys.

To configure a web project

  1. Click Edit in the menu bar.

  2. Select Web project in the Configure project sub-menu

https://support.oneidentity.com/technical-documents/identity-manager/8.0/web-designer-reference-guide/16

Отображение приветствия

format("Hello, {0}!", from user select firstname)

Надо изменить заголовок


Удаление строки

Создаем контейнер итерации и накидываем на него кнопку

Действие сервера - Delete

Выбираем коллекцию. В Правило фильтрации "Collection with filter rule" пишем

FirstName = (select current FirstName from PersonColl_Test)

А лучше выбирать UID!!!

Container (Iteration): PersonCoII_Test Delete: PersonCoII_Test [3 —i Extended proper bes • 'style' - 'display:block'

Кнопка

• Server action Delete: CCCOrgUnitMappingCoII Extended properties e' - display: Database access options GridCoIumnCoIumnTempIateI Title Containerl A PeaaKT'4posaH'•1e cooTseTCTSVIA OLI le editor t,'le' - (HTML attribute) Sorting -z; Grouping Show extension values 'style' ' display: block; height: 9px '


Русификация портала

Заходим в дизайнер - Base Data – Databases - справа внизу Edit translation in database -

o import the files using the Designer

  1. In the lower pane of the navigation view, select Base Data.

  2. In the Language Editor Task pane (far right pane), select the Edit translation in database.

The Language Editor appears.

  1. Click the

Import toolbar button.

Database Translations View a Commit to database Navigation Base Data [E} • General Databaklö TimeTracedatabases Configuration parameters Schedules Change labels Icons Large images @ Web services Getting Started One Identity Manager Schema Permissions Process Orchestration Script Library user Interface Mail Templates Documentation Base Data Favorites Help X Base Data State Search Job Server Editor Table Select Languages • Language Editor Column Usage ADSAccount ADSAccount ADSAccount ADSDomain ADSDomain ADSDomain ADSGroup ADSGroup ADSGroup ADSMachine ADSMachine ADSMachine AERole Search translation Search edsvaDeprovisionStatus edsvaDeprovisionStatus edsvaDeprovisionStatus NamespaceManaged8y NamespaceManaged8y NamespaceManaged8y edsvaDeprovisionStatus edsvaDeprovisionStatus edsvaDeprovisionStatus MachineRoIe MachineRoIe MachineRoIe Descri tion Source List of perm List of perm List of perm List of perm List of perm List of perm List of perm List of perm List of perm List of perm List of perm List of perm Data x Deprovisioni Deprovisioni No deprovisi %Globals.Ql FIM No synchron Deprovisioni Deprovisioni No deprovisi Domain con Server Workstation All resources to all emplo a lication r Tasks O Base data informabon Configura ton Editconfigurationparan*as Job Server Editor Edit]observer Language Editor Edittramslationindatabase

  1. Navigate to the required .csv language file, and click Open.

The file import may take several minutes to complete. Click the

Commit to database toolbar button to save the files to the One Identity Manager database.

| | Note: There are separate language packs for each module and each language, allowing you to install the required translations for the modules you have installed. Repeat this import process for each language pack to want to install. | |----|----|

Once the language files are imported into One Identity Manager, there are no additional steps required to configure the web portal to display in a different language. The web portal will display in the current browser language. For information on installing the web portal, see the One Identity Manager Installation Guide.

Заходим в IE и настраиваем на русский - чтобы первым был.


Чтобы делать записи на 2х языках с переводом

В значении указывать

translate('#LDS#Test1')

Затем идем в Edit – Captions и там добавляем ключ Test1 с текстом на русском.


Условие для отображения меню

В проекте для пункта меню указать условие, например:

Exists("personinaerole",sqland(sqlcompareuid("uid_person",getuser()),"xorigin > 0 and uid_aerole in (select UID_Aerole from AErole where Ident_Aerole in ('CCC_gph_manager', 'CCC_trigram_manager', 'CCC_allusers_view'))"))

или для конкретного пункта меню

Exists("personinaerole",sqland(sqlcompareuid("uid_person",getuser()),"xorigin > 0 and uid_aerole in (select UID_Aerole from AErole where Ident_Aerole in ('CCC_allusers_view'))"))


Не работает поиск по индексу на портале

https://support.oneidentity.com/identity-manager/kb/214091/error-the-search-index-is-currently-not-available-in-it-shop-search

Не указывать балансировщик для поиска, а указывать конкретный App Server!!!

Переконфигурация портала и настройка поиска (app server)

In Web Portal bin folder, launch WebDesigner.ConfigFileEditor tool to check if App server connection defined in Search service section works. Most likely app server or its configuration has an issue. HTH.

From \<https://www.oneidentity.com/community/identity-manager/f/forum/29663/intermittent-error-in-web-portal-when-searching>


Передача action из меню

Case I (Case) 'ndition Forms Forml Initalizer Person - CurrenGPHEmpIoyee Main El—i Switch I [3 e Case Container4 EditEmpIoyee ' ' ) = 'edi Sorting z; Aj Grouping 1 $ i snull ) Show extension va

То есть, если у нас из меню приходит действие edit - он просто загружает текущего сотрудника из коллекции


Проверка значения

from Person select not match(CCC_Trigramm, '^[A-z0-9_]*\$')

airthDate CCC _ Trigramm TrigrammNotlJnique Container21 Container24 - Organisatonal data - Fields Container" - Contactlnformaton - Fields nFormat (Validation) Sorting -z; Aj 1 Grouping Show extension values ' only digit s


На карточке пользователя на портале не отображаются все свойства

Сначала думал, что проблема с правами на просмотр атрибутов.

Атрибуты просто не были перечислены в конфиге, откуда функция (PropertyList()) берет их.

Надо зайти в Edit – Configure Project – WebProject.

Параметр называется VI_ObjectView_Person_Fields

Start page IVI_UserMenu Options Search results(l) columns of table Database column selection Available columns [3 Employees Actual employee Additional Email Additional Phones Answers to password question locked Canonical name Category Coda Central SAP user account Central password Central user account Certification status - Column settings CCC _ Perso le • VI m mo n_Obj ectSheet_Perso n Value (stardard) 13 column(sl selected used columns Primary department Primary cost center pnm ary location Manager Phona Mobile phone Building ' Floor 9030m ' Street CCC _ Perso Pro pertyViewer Configure project Value (custom) 28 column(sl selected iaIogCour nce RI,


При выборе департамента в всплывающем окне отображается полный путь до департамента

Надо в компоненте VI_ObjectCollection_Hierarchical изменить текст

Configuration Definition Initializer Container Container3 Container2 8—• Extended properties [3—+ Switchl [3-0 Casel - Tree Treel E]" Tree band: HierarchyTabIe Database access options ControlListI A current GetParentKeyOfromhierarChytablein(fromhierarchytabIeseIectprimaryk Extended properties Multilingual Captions Captions.. i sel- Node Quick edit if (select f nm hierarchytable in hierarchytable select ) ) ) Gene else a pæt key that of this display, shN it DisplayLong f nm splay ( ) f nm

На select current display() from hierarchytable (через Extension)


Передача определенного параметра в форму

В модуле формы создания нового сотрудника (например) создаем ComponentInterface

Componentlnteffacel Person EmployeeWpeO DepartpmentWhereCIauseO LanguageO Node editor Person - UID_DlaIogCuItureFormat (Update) General settings Collection Property Collection with filter rule Value Advanced Settings Person UID_DiaIogCuItureFormat I (No ass igned) L angu age

Назначаем его на Update коллекции

save - SAVE [30 Server action Person - IsExternaI Person - CCC_EmpIoyeeType Person - LlIO_OiaIogCuIture Person - UID_DiaIogCuItureFormat Validate form values OnExist Action Redirects Redirect to a form component OnNotExist Action SaveChangesToPerson Person - Person WhereCIauseForExistingEmpIoyeesO - WhereCIauseForExistingEmpIoyeesO

В модуле, откуда вызываем

Main [3—+ Switchl Casel [3—+ Case2 Container (iteration): CurrenExernaIEmpIoyee Person - CurrenExernaIEmpIoyee DepartpmentWhereCIauseO - format( •UID_Departmen EmployeeType0 - •ForeignEmpIoyee• Language'] - 'QSM-CLlLT-en-LlY Title


Изменения отображения поля

{{ _currentColumn3.DatabaseSourceColumn.Columnname }} in ("UID_DialogCulture")

Start page I Customization overview CCC _ Extem a IE m ployee_ Ed it M asterData DateLastWorked CCC_Contract Container25 Extended properties Container29 codeLitera13 Container43 Extended properties Container26 - DepartmentCoIumn AdditionalContentHeader ShowChangeVaIueO - true EnableNavigationO - true NullTextO - is empty') EditTabIe - Person SdditionaI'.VhereCIause0 - Departpment'.VhereCIause0 Container2

Чтобы 2 поля не отображалось одновременно, надо в defaultColums прописать условие, например

{{ _currentColumn2.DatabaseSourceColumn.Columnname }} in ("ExitDate","DateLastWorked","CCC_Direction", "Title", "CCC_Contract")

А вообще, я остановился на Задании правила для ячейки

HIE Street LlIO_OiaIogCuIture Container45 Extended properties Container47 Container53 - UID_DiaIogCuIture AdditionalContentHeader Node editor ' * UID DialogCuIture (Single property) Show General settings Property Sorting z; Grouping UID_DiaIogCuIture Database table name for artificial foreign-key relation Database column name for artificial foreign-key relation Rule Label Lue Lue a s s igned ) a s s igned ) a s s igned ) a s s igned )

Ошибка "There is no cursor defined on the collection"

Надо указывать контейнере итерации и в нем компонент Column Editor

"You are getting this error because the text box does not know which row of the ShoppingCartOrder collection it should bind to.

You can try putting your textbox inside a container iteration."


Корзина

При помещении продукта в корзину - создается запись в таблице ShopingCartOrder

А сами продукты в корзине хранятся в таблице ShopingCartItem


Возможность назначения продуктов всем сотрудникам

Конфиг параметр VI_ITShop_Filter_PersonOrderFor (Employee for whom a request can be placed)

"uid_person in ( select uid_person from QER_VEditEmployee)"


Возможность назначения роли другим сотрудникам

Модуль VI_ITShop_ProductSelection

Функция CanOrderForSomebodyElse()

exists("personinaerole",sqland(sqlcompareuid("uid_person", getuser()),"xorigin > 0 and uid_aerole in (select UID_Aerole from AErole where Ident_Aerole in ('Security Administrator'))"))

-------------------------------

Чтобы руководитель мог назначать только своим подчиненным продукты, а Security Administrator - всем сотрудникам

1) Делаем копию модуля ITShop_ProductSelection с заменой

2) Добавляем параметр VI_ITShop_Filter_PersonOrderFor1 (тип SQL Filter Condition)

3) Прописываем значение только что созданного параметра

"uid_person in ( select uid_person from QER_VEditEmployee)"

4) В коллекции Container - uidPersonCandidate делаем модификацию Filter on candidate objects

format("UID_Person in(

select UID_Person from Person where {0}

UNION

select UID_Person from Person where {1}

)",if( exists("personinaerole",sqland(sqlcompareuid("uid_person", getuser()),"xorigin > 0 and uid_aerole in (select UID_Aerole from AErole where Ident_Aerole in ('Security Administrator'))")) ) then

getconfig("VI_ITShop_Filter_PersonOrderFor1") else getconfig("VI_ITShop_Filter_PersonOrderFor"),

if(PersonHasSubIdentity())then

format("UID_Person in (select uid_person from {0})", SqlFunctionCallTable("QER", "GGetInfo", "FTPersonsAreMe", sqlformatvalue(getuser(), "string", "NonUnicodeLiterals")))

else

SqlCompareUid("UID_Person",GetUser())

)

Таким образом, если сотрудник имеет подчиненных, он сможет назначать продукты своим подчиненным.

Если сотрудник Security Administrator - сможет назначать продукты всем сотрудникам.


Ориг uidPersonCandidate

format("UID_Person in(

select UID_Person from Person where {0}

UNION

select UID_Person from Person where {1}

)",

getconfig("VI_ITShop_Filter_PersonOrderFor"),

if(PersonHasSubIdentity())then

format("UID_Person in (select uid_person from {0})", SqlFunctionCallTable("QER", "GGetInfo", "FTPersonsAreMe", sqlformatvalue(getuser(), "string", "NonUnicodeLiterals")))

else

SqlCompareUid("UID_Person",GetUser())

)


Отображение в таблице имени по UID из другой таблицы

from Point_of_View select CCC_PoV_Name where UID_CCCPoint_of_View = (from CCCPointOfViewInAccProd_Temp select current CCC_UID_Point_of_View)

Tables I Node editor Sorting z; Grouping Database table name for artificial foreign-key relation Database column name for artificial foreign-key relation Rule Label Filter on candidate objects Condition Expression for display value Grid band: CCCPointOfViewInAccProd_Temp List view GridFilters1 Row definitions Database access options GridCoIumnCoIumnTempIateI ColumnListI HIE ccc Column group CUrrentcoIumn (Single property) ' Point a s s igned ) a s s igned ) a s s igned ) a s s igned ) specified Show extension values View ' ) f nm Point of View CCC UID select CCC POV N whe UID CCC Point View = f CCCPointOfViewInAeeProd Point of View )


Отображение подкатегорий на портале

Надо создать service category верхнего уровня и для категорий нижнего уровня указывать ее как Parent service category


На портале висит надпись вверху "Development system - Updates pending"

Надо обновить портала зайдя по адресу

https://nl-sd-idmweb01.ao.nlmk/IdentityManager/monitor

WebDesigner runtime status WebOesigner ru nti me status user account Memory usage (physical/virtual) Memory usage managed objects Web Application Sessions U p dates Active In maintenance mode, the application does not allow new sessions. Users trying to log in will see the file Maintenance.html from the folder on the Server. Make sure this file is updated as necessary. Start maintenance mode Active kb 952,496 kb 136,025 kb update Available update now Update when all user sessions are closed The application update uses the account AONLMK\nI-as-Iid-iis-t and writes to the folder Ensure that appropriate rights are configured. updating is only possible when new updates are available and there are no active sessions. During the update procedure, the web application including this monitor is not available. During the time the application is waiting for all user sessions to end in order to update, the application will be in maintenance mode.

В корзине нужно отображать обязательное поле UID_Department

Надо в процессе Workflow у ITShop добавить Approval level – DP - Manager of department.

Тогда при заказе продукта поле Департамент будет обязательным!

Убрать надпись Developement system из правого угла портала

В Designer поставить Production system

Base Data General Databases TimeTracedatabases Configuration parameters Schedules Charrge labels Release management Icons Large images Web services Security settirrgs Installation Localization Ad va nced Getting Started One Identity Manager Schema Permissions Process Orchestration Script Library user Interface Mail Templates Documentation Base Data Data bases Main Database General Settings Extended Custo mer Description Customer ID Custo mer p refix Module owner Stagirrg level Custom stag i tv level Status bar color Last comp i ler relevant configurat... Simulation started Main database Maindatabase NLMK Main Database ccc ccc Production system FFFODF3F 7/28/2020 12:51 PM Stop D3Queue Processor Stop One IdentityManagerService Staging level Production system Font color

Создание выпадающего окна с требованием указать доп параметр

Фишка в том, чтобы указать обязательный параметр для продукта. И уже выпадающей формой задавать этот параметр.

  1. Создать в ITShop Request Property - с указанием Mandatory Field

  2. У ServiceItem указать в поле Request Properties (это ShoppingCartItem) это новое поле

  3. Для того, чтобы у определенного продукта отображался определенный компонент - надо настроить Object-depended references, чтобы переопределить стандартные модули!

А именно:

  • Insert Shopping Cart Item

  • Parameters Shopping Cart Items

  • Edit Shopping Cart Item

  1. Расширить схему параметрами для отображения

  2. Для того, чтобы выводить всплывающее окно после выбора продукта, Object-depended references надо создать Insert_ShoppingCartItem компонент указываем VI_Insert_ShoppingCartItem_Default (его копию) (Этот компонент вызывается из VI_Insert_ShoppingCartItem_Default)?.

Копия VI_Insert_ShoppingCartItem_Default вызывает компонент VI_ITShop_ShoppingCartItem_Editor, который мы и можем кастомизировать!

  1. Пилим VI_ITShop_ShoppingCartItem_Editor (копию)

  2. Загрузка для коллекции ShoppingCartItem создаем виртуальные поля (Webinar…)

Componentlnteffacel ShoppingCartItem HIE External_mail File_exchanger ForMobile ITSupport ITDeveIoper

  1. Загружаем коллекцию Person

Указываем Create interactive entitles

Definition Initializer Load collection: POV Load collection: BalanceUnits Load collection: Person Database access options ShoppingCaftItem - Webinar ShoppingCartItem - Social ShoppingCartItem - External_mail ShoppingCartItem - File_exchanger ShoppingCartItem - ForMobiIe Action Load collection: AccProduct Node editor DbObJectLoadTypeIO (Database access options) General settings Sorting z; Grouping Show extension values Load foreign key displays for columns contained in the display pattern Load foreign key displays for all display columns Load foreign display values even when loading them is very expensive (single shot) Create interactive entities Do not create default ORDER BY clause and ignore display columns

  1. При инициализации загружаем значения полей у пользователя уже прописанные

Definition Initializer Load collection: POV Load collection: BalanceUnits Load collection: Person Database access options ShoppingCartItem ShoppingCartItem ShoppingCartItem ShoppingCartItem ShoppingCartItem Webinar - Social - External mail - File_exchanger - ForMobiIe

Value берем из поля CCC_ExtendedInternetAccess (у поля значение 01010)

if(Substring((select CCC_ExtendedInternetAccess from Person where UID_Person = getuser()),0,1) = '1' ) then 'true' else 'false'

  1. Запись в поле

format("{0}{1}{2}{3}{4}",if(select current Webinar from ShoppingCartItem) = 'True' then '1' else '0',if(select current Social from ShoppingCartItem) = 'True' then '1' else '0',if(select current External_mail from ShoppingCartItem) = 'True' then '1' else '0',if(select current File_exchanger from ShoppingCartItem) = 'True' then '1' else '0',if(select current ForMobile from ShoppingCartItem) = 'True' then '1' else '0')

OK - Default autton Server action Validate form values Actions - MultiPerson Person - CCC_ExtendedInternetAccess a Shoppingcattltem - CustomPrope'ty08 Save: Person Save: ShoppingCartItem Action3 - Add selected AccProducts to ShoppingCart Close popup OnlnsertSuccess Cancel

  1. Для того, чтобы настроить отображение полей в корзине - идем в Object Depended References

Связь VI_Interfaces_ObjectSwitch_Parameters_ShoppingCartItem

  1. Затем, в ComponentInterface1 создаем CollectionExtension для коллекции ShoppingCartItem

[3—1' Componentlnteffacel VirtualTabIeExtensionI Webinar Social External_mail File_exchanger HIE ForMobile Node editor VirtualTabIeExtensionI (Collection extension) iene ral settings Collection Object type Control ID Sorting -z; Grouping — ShoppingCartItem ShoppingCartItem VirtualTabIeExtensionI

Добавляем Properties

В Initialization обновляем эти поля

if(Substring((select current CustomProperty08 from ShoppingCartItem),0,1) = '1' ) then 'true' else 'false'

На форме отображаем эти поля

Container Container2 - Additional Parameters Header Container3 É]5N LayoutPaneII Container 12 - Webinar A Webinar Containers Webinar Container4 - Social A Social Container6 Check80xI Container7 - Ex_mail A External_mail Container8 Checkaox2 de editor Webinar (Checkbox) Sorting -z; Grouping pety ShoppingCartItem Webinar I (No ass igned)

Отключить возможность изменения поля

надо в Extensions HTML attr указать 'disabled' в обоих полях

Node editor • disabled' 'disabled' (HTML attribute) General settings Identfier Value Advanced Settings Control ID Sorting -z; Grouping I ' disabled' HtmlAttribute2

В дополнение

Колонки при указании параметров:

Navigation IT Shop Basic configuration dat:a Processing status Standard reasons Approual procedures Approual policies Predefined Custom defined Mail templates Role classes Role types Business partners Functional areas Service categories questprope rties Chief approual team x Request properties groups (5) eatICIQYa Hadoop permissions Hiue permissions Modify Service Account Request Properties New Service Account Request Properti Yarn permissions O Home New Service Account Request Prop... Request properties group Description Column Displayualue Soft order Column Displayualue Soft order New Service Account Request Properties Mandatoryparameter Editable for apprcnrr Read-onb'

являются колонками таблицы ShoppingCartItem

https://support.oneidentity.com/technical-documents/identity-manager/8.0/it-shop-administration-guide/9

При добавлении новых колонок, расширении ShoppingCartItem надо так же расширить таблицу PersonWantsOrg этой же колонкой! Так как данные уходят в PWO после Submit заказа.

Только нужно не забыть про права на колонку новую! А то может не хватить прав у пользователя писать в нее!


В выпадающим окне сделать поле, которое будет отображаться в зависимости от условия

  1. Сделать копию VI_Insert_ShoppingCartItem_Default (CCC_Insert_ShoppingCartItem_TechOwner)

  2. В Object-Dependent установить для Insert SHoppingCartItem созданный компонент CCC_Insert_ShoppingCartItem_TechOwner

  3. Сделать копию VI_ITShop_ShoppingCartItem_Editor (CCC_ITShop_ShoppingCartItem_Editor_TechOwner)

  4. CCC_Insert_ShoppingCartItem_TechOwner будет открывать CCC_ITShop_ShoppingCartItem_Editor_TechOwner если есть Request Properties обязательные у ServiceItem

  5. Stat page from Acc Product (Ident Ac c P r o duct CCC Techow-n VI_StandardVVeb references Elfi Container Elfi Container2 Container3 PropertyList0 ColumnList3 LlID_VVorkDeskOrdered EnableNauigation0 - true EditTabIe - ShoppingCaftItem Container 7 PropertyList0 ColumnList4 EnableNauigation0 - true EditTabIe - ShoppingCaftItem Container6- auailable ACCProducts Popup80ttom CCC CCC CustomTechOwner PopupTitIe0 - if(Edit411EquaIAccProductsD and (O < from ShoppingCartItem select count0 Where LJID_PersonOrdered <> (from shoppingcaltitem select current LJID_Per50nOrderedl Node editor Container 7 (Container) General settings Vie•.ming condition Grouping Shouu eRension values m ccc Server ccc Serve r Name Uh ERended properties Identifier (optional) Workflow Control Delay rendering of HTML content for this container

  6. У CCC_ITShop_ShoppingCartItem_Editor_TechOwner убрать стандартный элемент PropertyEditor и дополнить самостоятельно нужными колонками, в колонке, для которой нужно будет условие отображения - указать поле Viewing condition (у ее контейнера)

  7. Для отображения колонки в поле деталей ShoppingCartItem (справа) после помещения в корзину, нужно создать пустой компонент и дополнить его полями для отображения из ShoppingCartItem (не из Request Properties)

  8. В Object Dependent сделать для компонента Parameters ShoppingCartItem - этот компонент будет отображаться ниже Request Properties

  9. Stat page VI_StandardVVeb ccc CCC CustomTechOwner Configuration Custom Techowner Load collection: CMD8 Servers Shoppingcaftltem- CCC_LII Container LayoutPaneII Elfi Container3 8,1aAeneu Elfi Containers ShowChangehÆIue0 - true DisplayNoPopup0 - false EnableNauigation0 - true AdditionalVVhereCIause0 - [E]ÉÉlä EditTabIe- ShoppingCaftItem EditCoIumn- CCC DID Person Object-dependentreferences Shouu eRension values Node editor Container I (Container) General settings Vie•.ming condition Identifier (optional) Grouping ShoppingCarCICem ERended properties s lect u rent CCC UID Person


Условие Condition отображения контейнера

from PersonWantsOrg select current (DisplayOrg in ('Доступ в интернет'))


(IsNull(ShowCancelOrder(), true) = true)

and

(from PersonWantsOrg select top 1

(Orderstate in ('OrderProduct','OrderProlongate','OrderUnsubscribe', 'Granted')

and (uid_personinserted = (select uid_person from user) or uid_personordered = (select uid_person from user))

and convert( isnull(getconfig("VI_ITShop_OrderHistory_CancelOrder"), 'false'), 'System.Boolean')) where UID_PersonWantsorg = '\<UID_PersonWantsOrg you are currently looking at>')

From \<https://www.oneidentity.com/community/identity-manager/f/forum/6072/visibility-condition-for-withdraw-request-container>


exists("personinaerole",sqland(

sqlcompareuid("uid_person", getuser()),"xorigin > 0 and uid_aerole in (select UID_Aerole from AErole where Ident_Aerole in ('IDM Operator' ))"))


Добавить поле на страницу нового сотрудника иностранного или по договору

Сначала расширить схему у Person.

В WebDesigner помимо того, что добавить поле

Надо в ColumsEditor проверить, что поле указано в условии отображения

Container26 - DepartmentCoIumn Container23 - ManagerCoIumn Container41 - defaultCoIumns ColumnEditor3 EnableNavigationO - true Validator3 Container44 - Contactlnformation - Fields Container28 - AccessData - Fields Container8 - auttons Container (Container) Sorting -z; Aj Grouping "CCC Contract " , "CCC Show extension values " CCC Direction " , "


Upload file

Имя файла

format("C:\temp\0}",select filename from localvars)

format("C:\temp\0}",select current UID_AccProduct from ShoppingCartItem)

From \<https://www.oneidentity.com/community/identity-manager/f/forum/6147/how-to-upload-a-file-through-a-form-in-it-shop>

If you do, then the "File name" could be filled out with : format("C:\Upload\0}-{1}", from FileUploadLocalCollection select filename, FormatDate(getdate(), "yyyyMMdd-hhmmss"))

From \<https://www.oneidentity.com/community/identity-manager/f/forum/22202/web-designer-file-upload-node-retain-filename>


Создание модуля для редактирования объектов

  1. Надо создать модуль и повесить его на пункт меню

  2. В этом модуле указать коллекцию - объект БД

  3. Создать грид на форме для отображения данных из коллекции

Ma•n 曰 1 CO 曰 』 G , i 矿 曰 Grid band; AccountprOduttGtOup O b 0 i01 Selection d - UIO Rediredl Gridftttersl | Row d in 0 ; 日 -4 Grid 〔 0 〔 0 m 〔 0 m Li 1 一 Oi y 日 一 - 「 0 mn 0r02p A C f00

  1. Создать коллекцию типа Single Row для хранения временных данных (TempVars)

  2. Создать коллекцию для хранения выбранной записи из таблицы (CurrentAccountProduct) - Object Type как у основной коллекции

  3. У грида основной таблицы указать Selection Action - сохранение в временую коллекцию UID (from AccountProductGroup select current uid_accproductgroup)

  4. Создать ещё одну форму

  5. Указать редирект на новую форму из действия Selection Action

ROW definitions 一 ; Column

  1. У новой формы сделать инициализацию коллекции Current с условием WHERE (sqlcompareuid("uid_accproductgroup", from TempVars select UID))

  2. Сделать итерацию по этой коллекции

Ang 4-+ p roperties 'style' •margin-right: auto; upload rile Server action Popup editor (itUation); Sorting % Grouping ntProd up with filte

| 410ns10np0 ; , 06-•upeoldn peoldn 'OllPa aPON


Сохранение существующего имени файла, через Upload

If you do, then the "File name" could be filled out with : format("C:\Upload\0}-{1}", from FileUploadLocalCollection select filename, FormatDate(getdate(), "yyyyMMdd-hhmmss"))

In my example, I defined a local single row collection called "FileUploadLocalCollection" with string Property "filename".

With that, you must assign "Collection for file name" to "FileUploadLocalCollection", and "Property for file name" to "filename".

From \<https://www.oneidentity.com/community/identity-manager/f/forum/22202/web-designer-file-upload-node-retain-filename>


Изменение имени файла, через Upload

Надо создать 3 функции в модуле или компоненте

**1)  FullFileName() **

select filename from FileUploadLocalCollection

2) GetFileName()

Substring(FullFileName(), 0, Indexof(FullFileName(), ".", 0))

3) GetExtension()

Substring(FullFileName(), Indexof(FullFileName(), ".", 0), )

Потом можно их использовать для составления имени файла

format("C:\inetpub\wwwroot\IdentityManager\Doc\0}-{1}{2}",GetFileName(),FormatDate(getdate(), "dd-MM-yyyy-hhmmss"),GetExtension())

From \<https://www.oneidentity.com/community/identity-manager/f/forum/31505/web-designer-upload-file-and-change-name-with-same-extension>


Написать код в функцию

{{ string.Concat(System.Linq.Enumerable.Repeat("--", length)) }}


Указать тег html

В Extended Properties создать Variable

Идентификатор TagName

значение - имя тега


Отображение полей редактируемой таблицы на форме

  1. Создаем Container Iteration по Current объекту таблицы

  2. В нем property iteration и в нем Property list - перечисляем свойства таблицы для редактирования

  3. Потом в property iteration создаем контейнер с расширенными свойствами HTML Attribute - "class" -

"LayoutpPropRow"

  1. В этом контейнере создаем ещё контейнер со свойством class

"imx-layoutpanel-cell imx-layoutpanel-mobileblock LayoutpPropCol LayoutpPropCol0 imx-flex-row"

Там будет VI_Edit_PropertyCaption

  1. И создаем параллельно ещё контейнер с class

"imx-layoutpanel-cell imx-layoutpanel-mobileblock LayoutpPropCol LayoutpPropCol1"

в нем ещё один контейнер с Column-Depended Reference

6 ddev. u 「 一 0 凵 凵 凵 艹 u ! :uo 一 0 凵 p 01 0 」 d p u 可 0 」 d p u 可 asnuwm•o * 可

Добавление нового элемента в таблицу

  1. Создаем новую коллекцию с типом объекта - наша таблица, куда будем писать данные

  2. Создаем новую форму

  3. Делаем кнопку на основной форме и делаем Insert в новую коллекцию и действие после Insert -> переадресуем на новую созданную форму

  4. Новая форма - копия формы для редактирования таблицы, только объект - новая коллекция

Title A select CCC_CompanyName from NewCCCOrgUnitMapping Main Container (iterationl: NewCCCOrgUnitMapping ContainerCoIumnTempIate2 ColumnList3 CCC_CompanyName CCC_CompanyCode CCC_CompanySubCode ccc_clty CCC_OrganizationaIUmt CCC_CompanyMaiI CCC_CompanyRemark ContainerIO Extended properties Container13 Extended properties EditTabIe - NewCCCOrgUnitMapping EditCoIumn - currentcolumn Containerll Extended properties Container12 ColumnEditor2 Container; - auttons Save [30 Server action [9 Save: NewCCCOrgUnitMapping

Добавить колонку в индекс для поиска

Browse the column in Designer, and assign an index weight (for example 1). This will cause the description field to be included in the index for service items.

From \<https://www.oneidentity.com/community/identity-manager/f/forum/28976/how-to-add-new-column-in-search-filter-for-web-portal>

* *

Потом можно перезапустить индекс - надо зайти на AppServer

One Identity Manager ONE I DE N T I T Y One Identity Manager A Status Logs API Documentation 08:27 as 00 aa:27 20 Search... O About 00 Update immediately Update index

Identity Manager 8.0 - Web Portal User Guide (oneidentity.com)


Добавить таблицу для поиска на портале

Например, по дефолту на портале не ищутся сервисные категории.

Чтобы добавить поиск по сервисным категориям, надо в WebDesigner зайти в модуль VI_Common_Search и добавить, как Extension новую таблицу

projet_ VI Common Search Configuration Compilationsettingsl System.CoIIections.Generic Type member a Search - TeR Action2- Configure search tables Delete: Tables Insert: Tables Action after inset Insert column ualue Insert: Tables Action after inset Inset: Tables Inset: Tables Inset: Tables Inset: Tables Inset: Tables Inset: Tables VI Common Search Added in: VI Common Node editor Search Name (Insert column value) General settings Name "Acc Condition Grouping Product Group " Shouu eRension va!ues

Search results - One Identit... ONE IDENTITY One Identity Manager Request Attestation Responsibilities Search results View Settings Name Access L ifecycle • Anderegg, Access (ACCESSA) Setti Type Service ca tegory Employee


Перевод колонки

Language dependent column name for displaying in the administration tool’s user interface. Translate the given text using the 

button.

From \<https://support.oneidentity.com/technical-documents/identity-manager/8.0/configuration-guide/30#TOPIC-860954>

Если на портале

datacaption(personwantsorg,displayorg)

Designer - AO.NLMQOnelM (Main Database) QataDase Optiom Yelp *Commit to database Back • Nau•gahon One Identity Manager Schema Most.te CERAssign u RE t titl—7tSOL.rce aERPolio• Getting Stan ed St2re ColumM CustomPtoperty10 OateAdivated OateHead Oecisionlevel OiSp15ßbjedKe•yAssignment Disploorg Oisplayorgparer,totparent Oisplaypersonordered Genproao Colin n properties d itor X Disol'y æme no. 10 Activation date Deactivation date App mal dat e App Assignment app Requester pi ent h_mctional f led by D re, - Sort Oder Log Log user Column permissions scripts MulitJanguage dependencies Dependencies T, ble Column Display name prod u a Display name product requested.

Отключить возможность саморегистрации на главной (Click here if you do not have an account.)

十 一 ~ 一 0 こ と コ 」 "O し ・ 、 [ 三 」 p 「 に ー キ 一 - 一 」 5 と ュ 、 」 ー ユ 045 ヒ 5 一 4 ! 、 一 1 ~ し : を 」 ー ユ 上 5 ヒ ー し し 」 一 Lu 「 一 , 一 し - を コ - 0 し 工 こ に ー 「 一 ′ 工 u ℃ こ ま ー ユ 、 よ 5 ヒ ー 」 し 」 ー - L コ - 0 し ℃ に 「 一 茎 て ℃ 覆 2 ー 」 上 い 」 5 「 を 一 一 を 一 い 一 ト 0 一 当 当 一 塁 ・ 第 2 0 -00- 一 0 - - に を 0 、 、 0 - 物 = ! - 0 こ 59 奄 の 00-0- du 」 奄 を ed 当 」 へ - と 第 0 奄

Перевести Строк верхнего уровня в Корзине

В переводах ключ WD_GridPagingTotalCountTopLevel

Заказ продуктов Все для всех

Значение параметра VI_ITShop_Filter_PersonOrderFor

заменить на

"uid_person in ( select uid_person from QER_VEditEmployee)"

У VI_ITShop_ProductSelection

Collections - Container - uidPersonCandidate фильтр указать

format("UID_Person in(select UID_Person from Person where {0})",getconfig("VI_ITShop_Filter_PersonOrderFor"))

Чтобы даты отображались в архиве в нормальном формате, а не daysago

Change the date display in ITSHOP's requests - Forum - Identity Manager Community - One Identity Community

There is an editor available for these column-dependent references.

On the start-page click on Column-dependent references.

Then go to the tab Display values by column and identify the columns that use the component VI_Edit_View_DateTimeago. Click on these columns and customize them to use the Component VI_Edit_View_Date.

Vl_Edt \ Oe 03t2Tn23 〕 Vl_Edit_Vrw_DateTmen ~ fg -0 423d VISdit_Vrvv_OateTmen Vl_Edt 03t2Tn23 〕 、 1- edit - -0 , 1 , , VISdit_Vrvv_OateTrne»:• VI_Edt 03t21h 3 ~ 〕 VI 一 t , 一 03

That should do the trick.

From \<https://www.oneidentity.com/community/identity-manager/f/forum/27926/change-the-date-display-in-itshop-s-requests/68531#68531>

>Но это не изменило отображение!

Поэтому, я зашел в стандартный проект (Vi_StandartWeb) и удалили формат ячеек, через Extension

r_Pe r' ntsO tg. Datea d r_ ntsO _S ntil

The WebDesigner component reponsible for the "user-friendly" display is called VI_Edit_View_DateTimeago. If you search for that name in WebDesigner, you will find component references that look like in the following screenshot. These rules say that the user-friendly display will be used to display values from the specified column.

You can delete these rules and the display will revert to the "technical" display.

丨 0 如 | 20 0 1 dno 20s O' 屮 00d , ㄨ 0 吅 se , 0 虍 p , •:• 丬 04L 」

From \<https://www.oneidentity.com/community/identity-manager/f/forum/27926/change-the-date-display-in-itshop-s-requests/68531#68531>


Убрать поля в колонке справа

400

CCC help regarding a decision GndCcu Comm lccc b x Appro"r ask a columns Of 'Req u p not defined Displaypemlnsuted, UlD_PWOState, OrduDate, WidFm, WdUntil, ulD_ProtitCentU, Specifi which fields ot this table displaßd the Web "use fields QMOt be edited the Web VI. ObjutViu.Defun

WEBSQL кусочек из строки взять

VI_Common_DecisionHistory

Substring(from DecisionHistory select current displayvalue(UID_PWODecisionRule),5)

Проверка значений на корректность Regex

Пишем скрипт

#If Not SCRIPTDEBUGGER Then

Imports System.Text.RegularExpressions

#End If

Public Function CCC_isWhiteSpace(ByVal str As String) As Boolean

Dim pattern As String

pattern = "^[\s|\|\]"

If Not Regex.IsMatch(str, pattern, RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant) Then

Return False

Else

Return True

End If

End Function

Public Function CCC_isPhoneNumber(ByVal str As String) As Boolean

Dim pattern As String

pattern = "^((8|\7)[\ ]?)?(\?\d{3}\?[\ ]?)?[\d\ ]{7,10}\$"

If Not Regex.IsMatch(str, pattern, RegexOptions.IgnoreCase Or RegexOptions.CultureInvariant) Then

Return False

Else

Return True

End If

End Function

CCC_ITShop_Approvals

В Веб дизайнере добавляем валидатор

container" u10_QERJustincationoeny (Validation) Sorting % Grouping Show —tension values

translate('#LDS#IncorrectValue')

CCC_isWhiteSpace(from Vars select current ReasonDeny)

И перевод не забыть добавить!

Или можно ещё через FormatScript у поля сделать

rm attirg Not VID Throu Nev End If not a Valid SMTP EXC

Web designer validation not triggered - Forum - Identity Manager Community - One Identity Community


Imports System.Text.RegularExpressions

Public Function CCC_ServiceAccount_CheckName(ByVal text As String) As Boolean

Dim pattern As String = "[^A-Za-z0-9\]"

Dim c As MatchCollection = Regex.Matches(text, pattern)

Dim m As Match

Return (c.count=0)

End Function

--

Убрать сообщения об ошибках при логине на портале

Перевести портал в прод режим

Just configure your web portal to run in production mode and not in debugging mode as it currently does.

From \<https://www.oneidentity.com/community/identity-manager/f/forum/27929/information-in-error-popup-on-login-page>

Отображение категорий списком верхнеуровневым

\<\<HowTo ITShop Service catalog accordeon.docx>>

Настройка опционального шага обоснования принятых решений по запросам на доступ в IT Shop

\<\<HowTo ITShop Simplified approval.docx>>

Балансировщик

Hello Community,

we have 1IM V8.1 running in the environment with 2 Application Servers connected via load balancer and 2 Web Servers connected via load balancer.

Is it enough to configure the load balancer for the Application Servers as follows:

  • sticky sessions support from the load balancer

  • ss-id cookies for Application Server

  • the signing (session token) certificate of both application servers is the same, which allows reusing a session from one application server in case of a server switch.

Should the load balancer for Web Servers have a similar configuration?

Load balancer configuration for Application and Web Servers - Forum - Identity Manager Community - One Identity Community

Поиск

Identity Manager 8.0.5 - Web Designer Reference Guide (oneidentity.com)

Чтобы работал поиск у Grid, надо указать дополнительные Extended Properties

Gridl [3æ Grid band: CCCOrgUnitMapping Database access options List view Selection action GridFilters1 Row definitions Extended properties IsSearchActive - true Renderlmmediately - true Z• Appl}FiIIedHeight - true

Добавить дополнительную информацию в PWO для отображения на портале

Поле PWO DisplayObjectKeyAssignment

Код режима режим доступа Согласование новой даты действия сотрудника категории б новая дата: Код услуги

LOAD Collection условие WHERE

sqlcompareuid("uid_person", from Container select UID_PersonSelected)

sqland("CCC_EmployeeType='Contractor'","IsInActive='1'")

format("UID_AccProduct in (select StructureDisplay1 from AttestationCase where StructureDisplay1 \<> '')")

Sqlcompareuid - возвращает только одно значение.


Добавить кнопку для отображения уволенных при заказе продукта при выборе получателя

CCC_ITShop_ProductSelection из него идет VI_Edit_MultiFK

Делаем копию VI_Edit_MultiFK

Копируем кнопку Change

Configuration [30 Definition Initializer Container containers - WITH popup Extended properties Container7 Container2 Extended properties Change Change with Server action [3—+ Extended properties •style• - •margin-left:7px• : container6 - WITHOUT popup

Создаем Content1

Contentl Definition Control list ObjectSWltchContainerI TargetTabIe - Vars TargetWhereCIause - PreselectWhereCIause AdditionalWhereCIauseO - additionalwhereclauseo TableNameO - FKParentTabIeNameO Candidate - ChildCandidate Selectedltems - EditTabIe uidList - EditCoIumn8uffer UidListTextQuaIifierO - CandidateDbTabIe0 - FKParentTabIeNameO CandidateTargetVaIueO - objectwalker(select current GetParameterParentCoIumn(editcoIumn) from editable) CandidateTargetVaIueCoIumnO - select current GetParameterParentCoIumn(editcoIumn) from editable CandidateDbWhereCIauseO -

CandidateDbWhereClause заменяем на ""

У кнопки делаем ссылку на Content1

Change with inactive Server action VI_Popup CssCIassO - Vimx-popup-largev PopupContent Container AdditionalContentHeader Contentl Popupaottom Container Close - Default autton Extended properties Server action CodeLitera14 Close popup Actionl Contentl (Control Ii ; following component: Sorting z; Grouping Contentl :ional)


Multi-request resources

Qatabase Object Home Sack Navigation Entitlements Info system Yiew Help Forward • Custom target system groups Active Directorygroups System roles Reso urces Multi-request resources for IT Req uested Assigned Types Predefined "E Custom defined *Database search New Save x Multi-request resources (6) ala•ICAya Delete Active Directory group Modify Active Directory group New Active Directory distribution list New Active Directory security group New manager assignment Remove system entitlement memberships Multi requestable/unsubscribable resources for IT Sh Assignment resources for IT Shop Account definitions E Report subscriptions &asic configuration data Employees Organizations • Business Roles Entitlements IT Shop Result list Tasks Tasks Favorites Cha nge p rod uct„ O Service item overview Change master data Assign extended properties Editservice item hierarch} Edit productdeperdencie-s for request • Assignbusinessroles Assignorganizatiom

From \<https://support.oneidentity.com/technical-documents/identity-manager/8.0/it-shop-administration-guide/2>


Для Object Dependent References привязать интерфейс к компоненту

CCC • Definiti" Node editor , -i Componenenterfacel So-ding Show Settings n e p em _ ShoppingCattnem


Валидатор выкидывает ошибку (validate)

Функция exists ведет себя странно, вместо нее использовать можно count


Where Clause

"(UID_WorkDeskType='e6e5472b-3fe0-4eb8-b5d9-84b3fa16c2a4')"

Node edi HOFS_Permissions (Database Object) Sorting Grouping Shovm extension values al se ttings Identifier Interface updates 0b' ect e Mandatory field WHERE clause HDFS_permissions Determine automatical* WorkDesk Dvn.rnically determine

Или

sqlcompare ("LastName", "Schm*", "string", "LIKE")


Не хватает прав на отображение поля на портале "Viewing permission denied for value"

Добавил сотрудника, под которым вхожу на портал в APP роль "Identity & Access Governance\§Auditors"


За связь ITShop и UNSGroupB (с имеющимся ServiceItem и галкой ITShop) отвечает таблица ITShopOrgHasUNSGroupB


Быстрый вывод записей из таблицы (вывод сотрудников)

VI_ITShop_QueryToPerson


Выбор из множества записей

VI_Edit_FK / VI_Edit_FK_AutoComplete

Использовать поле FK! Которое ссылается на другую таблицу!

Можно использовать виртуальную коллекцию.

image

Смысл: Создаем виртуальную Single-row коллекцию, в ней определяем Column, как на скриншоте

А в VI_Edit_FK_AutoComplete указываем эту колонку из Single-row коллекцию


Автопубликация AD групп в ITShop

Процесс

ADS_ADSGroup_Publish_to_ITShop

Параметр для включения фичи

QER\ITShop\GroupAutoPublish


Наследование полномочий - заказ продукта как у другого пользователя (select reference user)

Отвечают компоненты

VI_ITShop_ProductSelectionByReferenceUser

VI_ITShop_ProductSelection_ReferenceUser

From \<https://www.oneidentity.com/community/identity-manager/f/forum/27283/selecting-a-reference-user-to-copy-its-products-assigned-does-not-show-all-the-assigned-products-of-the-user>

Stat page hfl_start reference Options Search results(3) Creating requests by reference employees is allowed Filter for requests which can be copied from a reference employee Selectable reference employees VI_StandardVVeb Value (custom) x Configure project Value (standard) "IsNoCopyParametersPerson=O'


Условие отображения меню для определенной категории, чтобы можно было указать связанного пользователя (заказать продукты как у другого пользователя)

Для остальных категорий ссылка в меню будет скрыта

Модуль VI_ITShop_ProductSelection

Start page IVI_Start IVI_StandarffWeb I Configure projet Configuration Colle&ions Local components ÉIÜ Order Buttons Definition ÉIÜ Control list Containerl Extended properties Container4- toolbar button for various actions Extended properties ToolbarButtonI Menul Check requests for this recipient Select request template Node editor Selecta reference user (Menu item) Sorting Grouping Show extension values odud Selection General settfr•gs Action to execute Condition cute action A reference

from Container select current WhereClauseGroup = "uid_accproductgroup = 'd492fba0-3be1-49df-a355-d84b3ad1eb20'"


Для более корректной работы я создал отдельный пункт меню:

  1. Делаем копию VI_ITShop_ProductSelection_ReferenceUser

  2. В компоненте VI_ITShop_ProductSelection добавляем расширением для коллекции Container - параметр uidPersonReferenceSED такой же, как uidPersonReferenceSED

  3. Добавляем пункт меню, как Select a reference user

Stat page hfl_start PersonTMP Local components Order Buttons Control list Elfi Container I [0-+ ERended properties VI "Shop_ProductSeIection Added in: Container4- toolbar button for uarious actions ERended properties Toolbarauttonl Check requests for this recipient Selecta request template Selecta reference user Show products other employees requested Selecta reference user for SED Server action VI_Popup PopupContent VI ITShop_ProductSeIection

  1. Условие отображения пункта меню делаем:

from Container select current WhereClauseGroup = "uid_accproductgroup = 'd492fba0-3be1-49df-a355-d84b3ad1eb20'"

  1. Set Foreign Key ставим uidPersonReferenceSED

TableName0- "Person' CssCIass0 - imx-tabIe-{O}", DbVVhereCIause0 - HierarchyTabIe - PersonReference Popupaottom Added in: VI ITShop_ProductSeIection Node editor Set foreign key General settings Collection Child collection of the Grouping Container uidPersonReferenceSED PersonReference Shouu eRension values

  1. В Events добавляем событие на Update Container

Inse du an Update • Container Load colletion: personReference Container- uidPersonReferenceSED CCCForeachRov,u1 Redirect to a form component Property watch Initializer El Forms Added in: Node editor '@CCCAction2 (Action) Sorting % Grouping Show eRension values Identifier (optional) Execution condition Advanced Settings not ( isnullorempey( I trom container CCCAction2 Control ID •

  1. Load Collection - PersonReference условие Where

format("uid_person = {0}", sqlformatvalue(from container select uidpersonreferencesed, "string", "NonUnicodeLiterals"))

  1. Делаем редирект на копию VI_ITShop_ProductSelection_ReferenceUser

  2. Property watch = uidPersonReferenceSED

В копии VI_ITShop_ProductSelection_ReferenceUser через расширение удаляем

Description - Containerl VI _ Common_pageDescription [äE contained. ASSIGNMENT 'E ContainerA Text0 - is

  1. Через расширение для Fill Collection ObjectAssignment делаем условие Where

FullPath LIKE "SED*"


Использование Database queries

Создать запросы в WebDesigner -> Edit -> Edit database queries

Используем так:

Advanced Settings General settings Node editor to - o a d Type* Maximumnumberofobjects SQLcommandidentifier* C o = t. n w Loadcollection:Person 工 asObjectAndPWO(Loadcollection) 一 … 一 Container VI_Roles Membership D efi n iti O n Configuration 田 TS8ACtion3-TS8A 冖 冖 ountDef 田 TS8ACtionl-l_lNSGroup 田 ActionIl-ESet 田 RPSActionlO-RPSRepott Ta b - es 1 C O ntro - 5 1 Initializer Actiong-Loadassignmentdatafromper50ntoobject5 Action2-Loadassignmentdatafromobjecttopersons C O d e Litera - 3 O d e Lite ra - 1 ReadOnlyTableModitierl Delete:PersonHasObject4ndPVVO Loadcollection:DynamicGroup Acti O n 1 3 • QE RR e u u S Acti O n 10 • QE RRes O u rce Fillcollection:PersonObjectS a d CO = e 一 O n … P 5 0 n H a 5 0 e n d Sorting ecutepreparedstatement rsonHasObject4ndPvVO - - Webp 0 rC al . VI ko 12 Memb r ship . P Grouping onT 0B as T r

image

DynamicGroup ShoppingCaftOrder ShoppingCaftItem PersonForMembershipRequest PersonHasObject4ndPvV Node editor PersonHasObjectAndPWO (Database query) Shouu eRension values ieneral settings Interface updates Primary key Display properw SQL expression 'dyanced Settings Control ID w Grouping PersonHasObject4ndPvVO not reflect. data updates in the interface value assigned) value assigned) DataTabIeLimitedSQLI

Грабли:

  • Если создавали запрос не через wizard то потребуется добавить права для групп. Ниже запрос который это делает. Нужно только поменять название группы и название запроса.

insert into QBMGroupHasLimitedSQL(UID_QBMLimitedSQL,UID_DialogGroup,XObjectKey) select UID_QBMLimitedSQL,UID_DialogGroup,concat('\<Key>\<T>QBMGroupHasLimitedSQL\</T>\<P>',UID_QBMLimitedSQL,'\</P>\<P>',UID_DialogGroup,'\</P>\</Key>') as XObjectKey from (select (select UID_DialogGroup from DialogGroup where GroupName = N'CCCViewPermissions') as UID_DialogGroup,(select UID_QBMLimitedSQL from QBMLimitedSQL where Ident_QBMLimitedSQL = N'CCC_CMDBGetParamFilter') as UID_QBMLimitedSQL) as x

  • Нужно обязательно определить поля в коллекции, которые возвращает запрос иначе будете получать исключение что запрос не возвращает некие стандартные поля.

Изменить отображение записей в модальном всплывающем окне выбора FK

Для самой колонки можно изменить Display в Designer


Кастомизация заказ продукта как у другого пользователя (только для определенной категории)

  1. Создан кастомный модуль на основе VI_ITShop_ProductSelection_ReferenceUser (CCC_ITShop_ProductSelection_ReferenceUser_SED)

  2. В модуле VI_ITShop_ProductSelection (у заказчика CCC_VI_ITShop_ProductSelection)

добавить в Collections - Container - Property (uidPersonReferenceSED) - как копия uidPersonReference

  1. В ToolbarButton4 добавить как копию "Select a reference user" - Select a reference user for SED - с переводом

  2. В ObjectSwitchContainer2 в Action - Set foreign key задать Property - uidPersonReferenceSED

  1. Добавить сработку на событие Update - Container по полю uidPersonReferenceSED и редирект на компонент CCC_ITShop_ProductSelection_ReferenceUser_SED

  1. В компоненте CCC_ITShop_ProductSelection_ReferenceUser_SED для Fill collection: ObjectsAssignment указываем правило фильтрации - только продукты СЭД

  1. Для того, чтобы пункт меню отображался только для категорий СЭД - надо установить условие отображения этого пункта в модуле VI_ITShop_ProductSelection

  1. Для того, чтобы отображать только группы AD Sed - В компоненте CCC_ITShop_ProductSelection_ReferenceUser_SED добавим таблицу AccProductGroupCollection

  1. Загрузим коллекцию

  1. Загрузим только группы из этой коллекции

  1. Задать конфигурационный параметр - UID категории СЭД!

Вариант, через кнопку в компоненте CCC_ITShop_AccProductGroupSelector

  1. Из компонента VI_ITShop_ProductSelection скопировать VI_Popup из Select reference user

В Action кнопки компонента CCC_ITShop_AccProductGroupSelector

В ComponentInterface1 в virtual collection Container добавить VirtualProperty uidpersonreference

Добавить виртуальную коллекцию PersonReference

Из компонента VI_ITShop_ProductSelection скопировать Event Update uidpersonreference

В CCC_ITShop_AccProductGroupSelector


Аттестация. Отображение случаев аттестации сгруппированным и с бегунком по высоте страницы.

В компоненте CCC_Attestation_AttestationCase_ViewMultiplePolicy установить ApplyFilledHeight = false


Изменение модального окна выбора дополнительных параметров продукта

Для отображения модального окна при помещении продукта в корзину используется компонент VI_ITShop_ShoppingCartItem_Editor

Для получения списка параметров используется функция GetAccProductParams


Скрыть продукты из отображения для выбора (Candidates)

В компоненте VI_ITShop_ProductSelection GridBand: AccProductCandidate меняем условие Where на

from container select sqland(GetEffectiveGroupWhereClause(), whereclauseperson, "uid_AccProduct in (select UID_AccProduct from AccProduct where IsSpecialProduct = '0')")

Вариант 2

В компоненте VI_ITShop_ProductSelection (ССС_VI_ITShop_ProductSelection)

  1. Добавляем функцию ExcludeHiddenAccProducts() со значением

"uid_AccProduct in (select UID_AccProduct from AccProduct where XTouched = 'H')"

  1. GridBand: AccProductCandidate меняем условие Where на

from container select sqland(GetEffectiveGroupWhereClause(), whereclauseperson, ExcludeHiddenAccProducts())

Для продуктов с доп. параметрами (которые хотим скрыть) устанавливаем атрибут XTouched = 'H'


Удаление родительского продукта из корзины

В кастомном модуле CCC_ITShop_ShoppingCartItem_Editor_SED добавляем шаг удаление ShoppingCartItem из БД! С условием отбора - что это Parent продукт

uid_shoppingcartitem = (from ShoppingCartItem select uid_shoppingcartitem where IsOptionalChild = False)


Сделать checkbox неактивным (серым) и с поставленной галочкой

Для checkbox сделать Extended properties с Identifier:

if (from AccProductOptional select current Orderable = false) then "checked disabled" else ""


Отображение окна для Multirequetable ресурса если нет доступных (не заказанных) доп. Продуктов

Надо сделать ещё один Action с условием:

(select count() from AccProductOptional where Orderable = true) = 0 and (from shoppingcartitem select current IsOptionalChild = false)

И просто отображать PopUp с текстом


Убрать плашку аттестация сотрудников с главного экрана

Надо в модуле VI_Start отключить, через расширение, Container3