Создание папки поиска программным способом

15 3

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

  • создать непосредственно папку определенного типа;
  • задать критерий поиска;
  • отметить её как папку поиска в базе данных.

Критерий папки поиска содержится в свойстве 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
Антон Волков

Подскажите, можно ли программно реализовать папку поиска, которая в качестве критерия использовала бы не значение типа "Пользователь", а значение типа "Группа пользователей"?

Данная папка поиска была бы удобна руководителям подразделений в которых большая "текучка" кадров и ручная настройка папок поиска затруднительна...

Арслан Абакаров

Явно на поиск заданий по исполнителям входящим в определенную группу пользователей сделать нельзя. Можно сделать по другому, можно настроить описание поиска явно перечислив в нем пользователей входящих в выбранную группу пользователей. А обновление описания на случай изменения состава группы выполнять агентом.

 

	  object TSBSearchCriteria

    object TSBReferenceCriterion
      RequisiteCode = 'Performer'
      ValuesBuildType = vbtOr
      ValuesBuildTypeSet = [vbtOr, vbtNotOr]

//пользователь 1
      object TSBReferenceValue
        PhysicalValue = 105393
      end
//пользователь 2
      object TSBReferenceValue
        PhysicalValue = 105394
      end
//пользователь 3 итд
      object TSBReferenceValue
        PhysicalValue = 105395
      end

    end
Антон Волков

Это то, что нужно! Спасибо! :-)

Авторизуйтесь, чтобы написать комментарий