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{}" — как это выглядит в коде.
См. подробнее Скрипты и скриптовые модули