api.metainfo Работа с метаинформацией

Данное API определяет несколько методов для доступа к метаинформации:

  • fqn метакласса (fqn) — краткое описание метакласса: содержит код класса и код типа;
  • строковое представление метакласса — полный код метакласса, например 'serviceCall$incident';
  • метакласс — полное описание класса или типа объектов, содержит, например информацию об атрибутах, группах атрибутов и т.п.;
  • переменная subject.metaClass возвращает fqn метакласса объекта (на форме добавления возвращает null, лучше использовать api.metainfo.getMetaClass(subject))

Получение и проверка метаинформации

  • api.metainfo.getMetaClass(obj)

    Получение метакласса.

    Параметр метода:

    • obj — fqn метакласса либо строковое представление метакласса, либо объект, либо метакласс
  • api.metainfo.metaClassExists(obj)

    Проверка существование метакласса.

    Параметр метода:

    • obj — fqn метакласса либо строковое представление метакласса, либо объект, либо метакласс
  • api.metainfo.getTypes(fqn)

    Получение всех типов заданного класса (список метаклассов).

    Параметр метода:

    • fqn — fqn метакласса либо строковое представление метакласса
  • api.metainfo.checkAttributeExisting(fqn, attribute)

    Проверка наличия атрибута с заданным кодом в метаклассе.

    Параметры метода:

    • fqn — fqn метакласса либо строковое представление метакласса, либо объект, либо метакласс;
    • attribute — код атрибута.

    Возвращаемое значение:

    • пустая строка, если атрибут существует
    • сообщение об ошибке, если атрибута не существует
  • api.metainfo.checkAttrsExisting(fqn, attributes)

    Проверка наличия нескольких атрибутов с заданным кодом в метаклассе.

    Параметры метода:

    • fqn — fqn метакласса либо строковое представление метакласса, либо объект, либо метакласс;
    • attribute — набор кодов атрибутов.

    Возвращаемое значение:

    • пустая строка, если все атрибуты существуют;
    • сообщение об ошибке, если хотя бы одного атрибута не существует.
  • api.metainfo.checkAttributeType(fqn, attribute, possibleTypes)

    Проверка соответствия типа атрибута одному из списка possibleTypes.

    Параметры метода:

    • fqn — fqn метакласса либо строковое представление метакласса, либо объект, либо метакласс
    • attribute — набор кодов атрибутов для проверки
    • possibleTypes — набор кодов допустимых типов атрибутов для проверки

    Возвращает:

    • пустая строка, если список possibleTypes содержит код типа проверяемого атрибута
    • сообщение об ошибке "Для атрибута 'attribute' в метаклассе 'metaClass' задан тип '...', а ожидается один из следующих типов: possibleTypes.", если не содержит

    Пример:

    def fqn = 'serviceCall$call';
    def attribute = 'agreement';
    def possibleTypes = ['object', 'boLinks'];
    def error = api.metainfo.checkAttributeType(fqn, attribute, possibleTypes)
  • api.metainfo.checkAttrsType(fqn, attributes)

    Проверка соответствия типа атрибута одному из списка, заданного для этого атрибута.

    Параметры метода:

    • fqn — fqn метакласса либо строковое представление метакласса, либо объект, либо метакласс
    • attributes — ассоциативный список

      //def attributes = ['agreement': ['object', 'boLinks'], 'qweqtqr' : ['string']]

    Возвращает:

    • пустая строка, если для всех атрибутов выполняется условие: список кодов типов содержит код типа проверяемого атрибута
    • сообщение об ошибке, если не содержит.
  • api.metainfo.getDefaultServiceCallCase(uuid)

    Получение типа запроса по умолчанию для заданного контрагента.

    Параметр метода:

    • uuid — строковое представление уникального идентификатора контрагента запроса

    Возвращает:

    • тип запроса
    • null, если тип запроса по умолчанию не задан

    Пример:

    def uuid = 'employee$1001';
    def defaultScCase = api.metainfo.getDefaultServiceCallCase(uuid);
  • api.metainfo.fixEmptyFieldsInSearchSettings()

    Замена пустых названий в настройках поиска на локализованные.

  • api.metainfo.getParentFqn(fqn)

    Получение ClassFqn родителя для метакласса по его fqn.

    Параметр метода:

    • fqn — fqn метакласса, или строковое представление метакласса

    Параметр:

    def fqn = 'serviceCall$call';
    def parentFqn = api.metainfo.getParentFqn(fqn);

Обращение к свойствам метакласса

  • api.metainfo.getMetaClassTitle(fqn)

    api.metainfo.getMetaClassTitle(fqn, locale)

    Получение названия метакласса (РЕКОМЕНДУЕМЫЙ).

    Параметры метода:

    • fqn — идентификатор метакласса (ClassFqn):

      • строковое представление идентификатора метакласса (String);
      • объект, для которого требуется определить метакласс (IScriptDtObject);
      • метакласс (MetaClassWrapper).
    • locale — название локали.

    Возвращает: Название метакласса

  • Методы обращения к свойствам метакласса, доступны после получения самого метакласса:

    • title — название метакласса (УСТАРЕВШИЙ);
    • getAttribute(String code) — атрибут метакласса по коду;
    • attributeCodes — коллекция кодов всех атрибутов метакласса;
    • attributeGroupCodes — коллекция кодов групп атрибутов;
    • attributeGroups — коллекция групп атрибутов;
    • getAttributeGroup(String code) — группа атрибутов по коду;
    • attributes — коллекция атрибутов;
    • children — список метаклассов-подтипов первого уровня вложенности, т.е. метаклассы, родителем которых является данный метакласс;
    • code — код метакласса, например, incident;
    • description — описание;
    • fqn — объект, идентифицирующий метакласс: getCase() — код типа; id — код класса;
    • fqnCase — код типа метакласса;
    • parent — родитель (метакласс);
    • workflow — объект жизненного цикла;
    • hasAttribute(String code) — true, если у метакласса есть атрибут с указанным кодом, иначе false;
    • hasWorkflow — true, если у метакласса есть жизненный цикл, иначе false;
    • hasResponsible — логическое значение, есть ли в метаклассе механизм передачи ответственного;
    • tags — список меток, которыми помечен метакласс;
    • removed — логическое значение, является ли метакласс архивным.

Обращение к атрибутам метакласса

  • Методы обращения к атрибутам метакласса, доступны после получения атрибута метакласса (getAttribute(String code)):

    • title — название;
    • code — код;
    • type — тип атрибута;
    • declaredMetaClass — метакласс, в котором этот атрибут создан;
    • defaultValue — значение по умолчанию (если значение по умолчанию является вычислимым, то возвращает null);
    • hasDefaultValue — логическое значение, определено ли значение по умолчанию;
    • hardcoded — логическое значение, является ли атрибут системным;
    • filteredByScript — логическое значение, фильтруется скриптом;
    • computable — проверяет, является ли атрибут вычислимым;
    • computableOnForm — проверяет, является ли атрибут вычислимым на форме;
    • editable — проверяет, является ли атрибут редактируемым;
    • required — проверяет, является ли атрибут обязательным;
    • requiredInInterface — проверяет, является ли атрибут обязательным для заполнения в интерфейсе;
    • unique — проверяет, является ли атрибут уникальным.

    Пример. Название атрибута метакласса

    api.metainfo.getMetaClass(subject).getAttribute(attrCode).title

    Метод для получения кода типа атрибутов: code — возвращает код типа атрибута.

Обращение к группам атрибутов метакласса

  • Методы обращения к группам атрибутов метакласса, доступны после получения группы метакласса getAttributeGroup(String code):

    • title — название
    • code — код
    • attributeCodes — список кодов атрибутов, входящих в группы

Работа со статусами жизненного цикла

  • Методы получения статуса жизненного цикла, доступны после получения объекта жизненного цикла метакласса workflow:

    • endState — конечный статус
    • originalState — первоначальный статус, с которым создается объект
    • getState(String code) — статус по коду
    • states — список статусов
    • isTransitionExists(beginState, endState) — проверяет наличие разрешенного перехода из состояния beginState в endState, где beginState и endState — либо коды статусов, либо статусы как объекты
  • api.metainfo.getStateTitle(fqn, stateCode)

    api.metainfo.getStateTitle(obj)

    api.metainfo.getStateTitle(fqn, stateCode, locale)

    api.metainfo.getStateTitle(obj, locale)

    Методы получения названия статуса.

    Параметры методов:

    • fqn — идентификатор метакласса (ClassFqn):

      • строковое представление идентификатора метакласса (String)
      • объект, для которого требуется определить метакласс (IScriptDtObject)
      • метакласс (MetaClassWrapper)
    • stateCode — код статуса
    • locale — название локали
    • obj — бизнес-объект с жизненным циклом (IScriptDtObject), например, utils.get('ou$123'), subject

    Возвращает название метакласса.

  • Методы обращения к свойствам статуса жизненного цикла, методы доступны после получения статуса метакласса (getState(String code)):

    • code — код статуса
    • description — описание статуса
    • enabled — проверяет доступность

Работа с метками

  • Методы обращения к свойствам метки:

    • code — код метки
    • title — название метки
    • enabled — состояние метки: true, если она включена, иначе false

Получение настроек из интерфейса администратора

  • api.metainfo.getServiceCallParameters()

    Получение настроек параметров запросов из интерфейса администратора.

    Возвращает: Настройки параметров запросов: "Определяющее поле при выборе соглашения/услуги и типа запроса" (выбирать сначала), "Значение поля "Соглашение/Услуга", "Представление для редактирования".

    Пример:

    def scParams = api.metainfo.getServiceCallParameters()

    Параметры объекта scParams:

    • scParamsscParams.priority:

      • AgreementService — определяющее поле "Соглашение/Услуга";
      • Case — определяющее поле "Тип запроса"
    • scParams.agreementService.setting:

      • Agreement — только соглашения;
      • Both — соглашения и/или услуги;
      • Service — только услуги.
    • scParams.agreementService.editPresentation:

      • TreeList — иерархический список (соглашение и услуга);
      • List — плоский список;
      • FoldersTree — выбор из каталога;
      • ServiceTreeList — иерархический список для случая, когда услуга вложена в себя.
  • api.metainfo.checkTagEnabled(tagCode)

    Получение состояния метки (включена или выключена).

    Параметр метода:

    • tagCode — код метки (String).

Анализ компиляции модулей

  • api.metainfo.compileAll()

    Компилирует скриптовые модули в режиме all. Метод рекомендуется выполнять в консоли для выявления проблем компиляции скриптовых модулей.

    Метод возвращает:

    • true — если проблемы компиляции отсутствуют;
    • ошибку с описанием проблемы — если есть проблемы с компиляцией.

      Пример сообщения об ошибке:

      Script compilation error

      startup failed:

      testa: 1: Invalid duplicate class definition of class Temp : The sources testa and testb each contain a class with the name Temp.

      @ line 1, column 1.

      class Temp{}

      ^

      1 error

      где:

      • "Invalid duplicate class definition of class Temp" — описание проблемы компиляции, например, наличие в проблемных классах классов с одинаковым именем);
      • "testa and testb" — в каких классах проблемы
      • "contain a class with the name Temp" — дополнительное описание проблемы;
      • "class Temp{}" — как это выглядит в коде.

    См. подробнее Скрипты и скриптовые модули