Программное создание папки поиска выполняется следующим образом
Критерий папки поиска содержится в свойстве SearchDescription объекта IFolder и выглядит примерно следующим образом:
object TSBJobSearchDescription
Prepared = True
NeedCheckAccessRights = True
IconIndex = -1
object TSBRequisiteDescriptionList
end
object TSBSearchCriteria
object TSBReferenceCriterion
RequisiteCode = 'Performer'
ValuesBuildType = vbtOr
object TSBReferenceValue
PhysicalValue = 44880
end
end
object TSBPickCriterion
RequisiteCode = 'JobState'
ValuesBuildType = vbtOr
object TSBPickValue
InternalValue = 'W'
end
end
end
end
Быстрый старт
Настройте вручную в проводнике DIRECTUM свою папку поиска со всеми необходимыми критериями чтобы взять её за основу.
Программно получите её SearchDescription
папка = Folders.GetObjectByID( папка_ид )
критерий_поиска = папка.SearchDescription
ShowMessage( критерий_поиска )
//или
EditText( критерий_поиска )
Проанализируйте и в текстовом редакторе измените описание поиска чтобы использовать его в качестве шаблона описания для новой папки создаваемой программно, к примеру, варьируя нужные места через %s и функцию Format.
...
object TSBReferenceCriterion
RequisiteCode = 'Performer'
ValuesBuildType = vbtOr
object TSBReferenceValue
PhysicalValue = %s
end
end
...
Папку можно создать так:
рабочая_папка = Folders.CreateNew( ckJob ) //ckJob для папки заданий.
рабочая_папка.Form.Controls.NameMemo.Text = название
рабочая_папка.Save
А сделать из неё папку поиска так:
запрос_это_папка_поиска = Format( " UPDATE SBFolder SET FolderTYpe = 'E' WHERE XRecID = '%s' "; рабочая_папка.Info.ID )
SQL( запрос_это_папка_поиска )
рабочая_папка.SearchDescription = критерий_поиска
рабочая_папка.Save
Пример:
Так выглядит создание папки поиска которая выполняет поиск невыполненных заданий для пользователя запустившего сценарий.
В данном примере, был подготовлен шаблон описания поиска для папки, в котором варьируется значение ID пользователя для которого выполняется поиск заданий, т.е. PhysicalValue = %s
критерий_поиска_формат = " object TSBJobSearchDescription Prepared = True NeedCheckAccessRights = True IconIndex = -1 object TSBRequisiteDescriptionList end object TSBSearchCriteria object TSBReferenceCriterion RequisiteCode = 'Performer' ValuesBuildType = vbtOr object TSBReferenceValue PhysicalValue = %s end end object TSBPickCriterion RequisiteCode = 'JobState' ValuesBuildType = vbtOr object TSBPickValue InternalValue = 'W' end end end end " папка = Folders.CreateNew( ckJob ) папка.Form.Controls.NameMemo.Text = "Папка поиска моих заданий" папка.Save папка_ид = папка.Info.ID запрос_это_папка_поиска = Format( " UPDATE SBFolder SET FolderTYpe = 'E' WHERE XRecID = '%s' "; папка_ид ) SQL( запрос_это_папка_поиска ) пользователь_ид = ServiceFactory.GetUserByName( ПользовательИмя( "ISB" ) ).ID критерий = Format( критерий_поиска_формат; пользователь_ид ) папка.SearchDescription = критерий папка.Save
Подскажите, можно ли программно реализовать папку поиска, которая в качестве критерия использовала бы не значение типа "Пользователь", а значение типа "Группа пользователей"?
Данная папка поиска была бы удобна руководителям подразделений в которых большая "текучка" кадров и ручная настройка папок поиска затруднительна...
Явно на поиск заданий по исполнителям входящим в определенную группу пользователей сделать нельзя. Можно сделать по другому, можно настроить описание поиска явно перечислив в нем пользователей входящих в выбранную группу пользователей. А обновление описания на случай изменения состава группы выполнять агентом.
Это то, что нужно! Спасибо! :-)
Авторизуйтесь, чтобы написать комментарий