Разработка сценариев

7 0

Данная статья о разработке сценариев продолжает цикл материалов для начинающего разработчика на ISBL.

Механизм сценариев предназначен для написания и выполнения программных вычислений над данными системы или какими-либо внешними данными, связанными с работой системы.

Запуск сценария может производиться из проводника системы, из другого вычисления на ISBL, а также из командной строки. Для того, чтобы работать со сценарием из кода ISBL, можно получить объект IScript при помощи функции CreateScript() или фабрики сценариев IScriptFactory. 

Для запуска сценария из командной строки, нужно, как и для других компонентов системы, запустить файл SBLauncher.exe с определёнными параметрами: -S = SQLSERVER - имя SQL сервера, -D = DB - имя базы данных, -CT = Script - указывает на тип компоненты - Сценарии,  -F = Имя сценария из компоненты Сценарии, -R – предназначен для передачи значений параметров (-R = Параметр1=Значение1|…|ПараметрN=ЗначениеN). Командная строка для запуска сценария Создать гиперссылку, расположенного на сервере «SQLSERVER» в БД «DIRECTUM» будет выглядеть следующим образом: SBLauncher.exe -S=SQLSERVER -D=DIRECTUM -CT=Script -F=CreateHyperlink.

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

  • Программное обеспечение
  • Тип прав к программному обеспечению
  • Типовые права доступа
  • Права доступа работников на ПО.

Рассмотрим задачу первичного заполнения справочника Права доступа работников на ПО. Для этого необходимо связать справочник Работники со справочником Типовые права доступа через справочник Виды должности. Для этого добавим реквизит Вид должности в справочник Типовые права доступа (подробнее о создании и изменении структуры справочников в статье Разработка справочников в Directum).

C учётом произведённых изменений работать сценарий будет следующим образом: для каждого работника с непустым значением реквизита Вид должности (справочник Работники) ищутся типовые права доступа (справочник Типовые права доступа) с таким же значением Вида должности. Если права нашлись – создаётся и заполняется запись в справочнике Права доступа работников на ПО.

Итак, приступим к написанию сценария. Для начала создадим его. Для этого предназначена компонента Сценарии (Компоненты->Утилиты разработчика->Разработка сценариев). Создаём новый сценарий, открывается карточка сценария:

Основные реквизиты карточки сценария:

Имя – уникальное имя сценария.

Заголовок – отображаемое имя сценария.

Модуль – имя модуля, к которому относится сценарий.

Состояние – выполнять можно только действующие сценарии.

 

Кнопки:

Текст – редактирование текста сценария.

Примечание – редактирование текста примечания (описания) сценария.

Выполнить – запуск сценария на выполнение.

 

Заполняем необходимые реквизиты и нажимаем Текст. Появляется окно редактора ISBL-кода сценария:

Текст сценария:

// Получить и открыть справочник Типовые права доступа
TypicalPermissionsRef = CreateReference("TypicalPermissions")
TypicalPermissionsRef.Open
// Производить заполнение справочника Права доступа работников на ПО
// только если справочник Типовые права доступа непустой
if TypicalPermissionsRef.RecordCount > 0
  // Счётчик количества созданных записей
  RecCount = 0
  // Получить и открыть спр. Работники
  EmployeesRef = CreateReference("РАБ"; ArrayOf('ВидДолжности'))
  // Ограничить выбор записей спр. Работники.
  // Выбрать только те, у которых  реквизит Вид должности заполнен
  ConditionID = EmployeesRef.AddWhere(Format("%s.%s is not null"; 
    ArrayOf(EmployeesRef.TableName; EmployeesRef.Requisites('ВидДолжности').SQLFieldName)))
  EmployeesRef.Open
  // Получить и открыть спр. Права доступа работников на ПО
  UserPermissionsRef = CreateReference("UserPermissions")
  UserPermissionsRef.Open
  // Открыть запись спр. Типовые права доступа, т.к. будет 
  // необходим доступ к детальному разделу данных
  TypicalPermissionsRef.OpenRecord
  // Создать индикатор для визуализации процесса создания записей
  ProgressBar = CreateProgress("Создание записей справочника Права доступа работников на ПО"; EmployeesRef.RecordCount)
  ProgressBar.Show
  // Пройти по записям спр. Работники
  while not EmployeesRef.EOF
    // Если найдена запись спр. Типовые права доступа со значением 
    // реквизита Вид должности = значению Вида должности "текущего" работника 
    if TypicalPermissionsRef.Locate('ВидДолжности'; EmployeesRef.ВидДолжности)
      // Создать запись спр. Права доступа работников на ПО
      UserPermissionsRef.Append
      // Заполнить реквизит Логин создаваемой записи Логином пользователя работника 
      // или строкой вида user, если для работника не указан пользователь
      if not VarIsNull(EmployeesRef.Requisites('Пользователь').Value)
        User = References.ПОЛ.GetObjectByID(EmployeesRef.Requisites('Пользователь').ValueID)
        UserPermissionsRef.Реквизит = Replace(User.Дополнение; " "; "")
      else
        UserPermissionsRef.Реквизит = Format("user%s"; Trim(EmployeesRef.SYSREQ_ID))
      endif
      // Заполнить реквизит Работник Кодом "текущего" работника
      UserPermissionsRef.Работник = EmployeesRef.SYSREQ_CODE
      // Получить Детальный набор данных спр. Типовые права доступа
      TypicalPermissionsDS = TypicalPermissionsRef.DetailDataSet(1)
      // Получить Детальный набор данных спр. Права доступа работников на ПО
      UserPermissionsDS = UserPermissionsRef.DetailDataSet(1)
      // Пройти по всем записям детального раздела спр. 
      // Типовые права доступа и создать аналогичные в детальном 
      // разделе спр. Права доступа работников на ПО
      while not TypicalPermissionsDS.EOF
        UserPermissionsDS.Append
        UserPermissionsDS.PermissionsTypeT = TypicalPermissionsDS.PermissionsTypeT
        UserPermissionsDS.SoftwareT = TypicalPermissionsDS.SoftwareT
        TypicalPermissionsDS.Next
      endwhile
      // После заполнения всех необходимых реквизитов и детального 
      // раздела новой записи - сохранить её
      UserPermissionsRef.Save
      RecCount = RecCount + 1
    endif
    EmployeesRef.Next
    ProgressBar.Next
  endwhile
  ProgressBar.Hide
  EmployeesRef.Close
  EmployeesRef.DelWhere(ConditionID)
  UserPermissionsRef.Close
  TypicalPermissionsRef.CloseRecord
  ShowMessage(Format("Заполнение справочника Права доступа работников на ПО завершено. Создано %s записей."; RecCount))
endif
TypicalPermissionsRef.Close

 

Стоит сказать о некоторых возможностях окна редактирования кода сценария:

  • При необходимости использования в тексте сценария кодов записей справочников, имён справочников, реквизитов справочников, отчётов, других сценариев, констант  удобно пользоваться пунктами меню Вставка- >...:

  • Кнопка панели инструментов  «Проверить синтаксис» (также доступный по F7) позволяет проверить текст ISBL на синтаксические ошибки.
  • При установлении курсора на имя функции и по нажатии кнопки  Панели инструментов откроется карточка функции(горячие клавиши – CTRL+F4).
  • Список функций для вставки в код вычисления ISBL доступен по кнопке  (горячая клавиша – F4)

Также стоит помнить, что сохранение сценария происходит только по нажатию кнопки Сохранить в карточке сценария. Поэтому, для сохранения изменений в сценарии нужно сначала сохранить текст в редакторе ISBL, а затем сохранить сам сценарий.

Таким образом, рассмотрен процесс создания сценария в соответствии с поставленной задачей.

Пакет разработки для Directum версии 4.7: Dev.zip (27,71 Кб)

Пакет разработки для Directum версии 5.1: dev.zip (27,96 Кб)

7
Авторизуйтесь, чтобы оценить материал.
1
Пока комментариев нет.

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