Основой модуля являются макросы, используемые повсеместно для выгрузки и загрузки данных в Систему. Макрос – это словесное описание обозначения имени атрибута или ссылки на существующий объект. Макросы показывают программе, в какой атрибут заносить загружаемые данные и из какого атрибута извлекать данные. В модуле существует поддержка пяти типов макросов - для атрибута типа, для атрибута связанного справочника, запрограммированные макросы для загрузки файлов, макрос для атрибута родительского типа и атрибута типа связь.
На данный момент для импорта не поддерживаются макросы для атрибутов типа Организационная единица. Макросы для этих типов атрибутов будут проигнорированы.
Используется для загрузки/выгрузки значений в/из определенный атрибут объекта указанного типа. Формат макроса имеет вид, описанный ниже. Для написания макроса необходимо знать системное имя объекта и системные имена его атрибутов.
Формат макроса имеет вид:
$<type name>.<attribute name><!>
Примеры: $lmp_contract.code
; $lmp_contract.code!
Внутренние названия типов и атрибутов вы можете узнать, используя утилиту myAdmin, или же обратившись к Администратору системы.
Рис. 34. Тип объекта и его атрибуты в Pilot myAdmin
У каждого объекта есть зарезервированные (стандартные) атрибуты, которые можно использовать при составлении макроса. Например, такие атрибуты как:
Эти данные об объекте скрыты и некоторые из них нигде не отображаются, но их можно узнать. Например, чтобы узнать id, нужно нажать ПКМ на объект и выбрать в контекстном меню «Копировать идентификатор».
Формат макроса с зарезервированным атрибутом имеет вид:
$<type name>.<RESERVED><!>
Примеры: $lmp_contract.id
; $lmp_contract.id!
Например, шаблон для загрузки данных в справочник «Строительная документация», в котором написаны только макросы атрибута типа:
Рис. 35. Пример шаблона справочника
Обязательным условием при создании шаблона является указание особого макроса. Такой макрос является первичным ключом, и значения для этого макроса должны быть уникальны. Особый макрос обозначатся знаком восклицания !
в конце.
Особый макрос прописывается только к одному атрибуту в файле шаблона Справочника. В данном примере это макрос для атрибута Код.
В карточке такого атрибута (в утилите Pilot MyAdmin) для поля «Уникальность» рекомендуется выбирать значение «Запрещать создание дубликатов».
Первичный ключ – это значение, которое является уникальным в системе и используется в качестве уникального идентификатора объекта. Когда в системе создаётся объект (документ, CRS и т.д.) один или несколько его атрибутов будут являться первичными ключами. Атрибут, который будет использоваться в качестве первичного ключа, назначается в утилите Pilot myAdmin. Также все объекты имеют стандартный (зарезервированный) атрибут id, который всегда является первичным ключом объекта. В xlsx-файлах шаблонов загрузки документов, справочников и в xlsx-файлах шаблонов формирования CRS и TRM обязательно должен быть атрибут объекта, который будет являться первичным ключом для этого объекта. Макрос такого атрибута обозначается «!» и называется «Особый макрос». Особый макрос в таблице назначается только одному атрибуту объекта. По значениям колонки с особым макросом в системе происходит поиск этого объекта. В случае если в системе нет объекта со значением атрибута из колонки особого макроса – объект будет создан; если в системе уже есть объект с таким значением – атрибуты этого объекта будут обновлены.
Данные из колонок, для которых не прописан макрос, не попадают в Систему. Таким образом возможно ограничить попадающую в Систему информацию, добавляя макросы только к тем колонкам, данные из которых необходимо перенести в Pilot.
Для импорта атрибута типа «Состояние» при заполнении таблицы xlsx-файла необходимо использовать системное имя состояния. В ином случае будет выдана ошибка.
Если атрибут типа нумератор указан как первичный ключ, то:
Если атрибут типа нумератор не указан как первичный ключ, то:
Данное поведение доступно для загрузки справочника, загрузки структуры и пакетной загрузки документации
Используется для загрузки данных в атрибут, представляющий собой ссылку на элемент справочника. Такие атрибуты имеют тип Element Book.
Макрос имеет формат:
$<type name>.<attribute name>.<linked attribute name>
Например, нужно добавить новые договоры в справочник «Договоры». Карточка договора содержит возможность выбора «Контрагента» (системное имя атрибута ref_contractor) из связанного справочника "Контрагенты".
Рис. 36. Карточка и атрибутивный состав Элемента справочника
Для загрузки договора (системное имя типа lmp_contract) с контрагентом АО "ВНИИГ им. Б.Е. Веденеева"
, который является связанным элементом справочника «Контрагенты», нужен атрибут этого элемента. Например, этим атрибутом будет «Наименование» (системное имя атрибута name).
Рис. 37. Пример карточки элемента справочника в обозревателе проектов и системного имени атрибута элемента справочника
Макрос загрузки данных в атрибут «Контрагент»: $lmp_contract.ref_contractor.name
.
Макросы для связанных справочников также поддерживают работу с зарезервированными атрибутами, как это описано в разделе выше.
Формат макроса с зарезервированным атрибутом имеет вид:
$<type name>.<attribute name>.<RESERVED>
Например: $lmp_contract.contractor.id
Используется для выгрузки данных из системы. Позволяет получить значение атрибута родительского объекта. По строению макрос аналогичен предыдущим типам макросов и имеет вид:
$<type name>.parent.<attribute name>
или
$<type name>.parent.<RESERVED>
Например, макрос атрибута name
комплекта в котором находится TRM, будет иметь вид: $lmp_document_trm.parent.name
, так как комплект является родительским объектом для находящегося в нём TRM.
Например, макрос для получения создателя комплекта в котором находится TRM, будет иметь вид: $lmp_document_trm.parent.creator
, так как комплект является родительским объектом для находящегося в нём TRM, а атрибут creator
зарезервированным атрибутом для получения создателя.
Если атрибут имеет тип Element Book, то макрос имеет следующий вид:
$<type name>.parent.<attribute name>.<linked attribute name>
или
$<type name>.parent.<attribute name>.<RESERVED>
Данный атрибут поддерживает комбинацию с самим собой и с макросом “Cвязь”. При комбинации данного макроса с самим собой и с макросом “Cвязь” часть, отвечающая за указание атрибута, отбрасывается, только у первого комбинируемого макроса. Например, макросы $type_name.parent.link…
и $type_name.link.type_name.link…
корректные, а макросы $type_name.parent.attribute.link…
и $type_name.link.type_name.attribute_name.link…
- нет.
Например, мы хотим получить наименование проекта (предположим что в качестве проекта выступает тип project
, а в качестве наименования выступает аттрибут name
) к которому относится документ (предположим что в качестве документа выступает тип documnent
), зная что между документом и проектом есть еще объект комплект (предположим что в качестве комплекта выступает тип main_set
), макрос будет иметь вид: $document.parent.parent.name
.
Используется для выгрузки данных из системы. Позволяет получить значение атрибута связанного с данным объектом объекта (такие объекты отображаются на вкладке “связи”).
Имеет вид:
$<type name>.link.<type name (link)>.<attribute name>
или
$<type name>.link.<type name (link)>.<RESERVED>
Например, чтобы получить значение атрибута name
со связанного с документом TRM можно написать следующий макрос: $document.link.lmp_document_trm.name
Если атрибут имеет тип Element Book, то макрос имеет следующий вид:
$<type name>.link.<type name (link)>.<attribute name>.<linked attribute name>
или
$<type name>.link.<type name (link)>.<attribute name>.<RESERVED>
Данный макрос поддерживает комбинацию с самим собой и с макросом “Родитель”. При комбинации данного макроса с самим собой и с макросом “Родитель” часть, отвечающая за указание атрибута, отбрасывается, только у первого комбинируемого макроса.
Например, мы хотим подняться с документа на один уровень вверх (его родителя): $document.parent
. Далее, получить связанный раздел (предположим в качестве раздела выступает тип section
): $document.parent.link.section
. Далее, получить наименование данного раздела (предположим за наименование раздела отвечает аттрибут name
): $document.parent.link.section.name
.
Используется для выгрузки и загрузки данных.
Макрос имеет формат:
$$<Name>
Например: $$CurrentDate
– текущая дата.
В таблице ниже приведен полный список запрограммированных макросов с их описанием и местом использования.
Макрос | Описание | Где используется | Пример вывода |
---|---|---|---|
$$CurrentDate | Текущая дата | Формирование CRS | |
$$Counter | Счётчик, начиная с 1 | Формирование CRS и TRM | |
$$Files | Путь к файлу относительно xlsx файла или полный путь. Если файлов несколько, то они перечисляются через ';'. | Массовая загрузка документации, загрузка структуры проекта | files/file.txt;files/file2.docx |
$$SourceFile | Наименование файла (включая расширение). Если будет указан относительный или абсолютный путь, то часть отвечающая за путь будет отброшена. | Массовая загрузка документации, загрузка структуры проекта | files/source_file.pdf |
$$ViewFile | Путь к файлу относительно xlsx файла или полный путь. Файл указанный тут будет установлен для отображения. Поддерживаются форматы: xps, pdf. | Массовая загрузка документации, загрузка структуры проекта | files/source_file.pdf |
$$FileExtension | Расширение файла | Формирование TRM | |
$$FileModified | Дата последнего изменения файла | Формирование TRM | |
$$CRS | CRS связанные с документом | Формирование TRM | |
$$FileName | Путь к файлу относительно xlsx файла | Формирование и загрузка TRM | files/file_name.pdf |
$$Graphics | Замечание на опубликованном файле | Формирование и загрузка CRS |
Макрос
$$SourceFile
не выполняет загрузку файлов, по сути данный макрос выполняет команду, представленную кнопкойСвязать с...
>Исходным файлом на диске...
. В качестве места где будет выполняться поиск исходного файла выступает вкладкаФайлы
текущего документа.
Обработка исходных файлов осуществляется по следующей логике:
$$Files
указан файл с таким именем), то связываем его;В шаблоне письма можно указать макросы: в тексте письма и в теме письма. Макросы оформляются по общим правилам за исключением того, что в данном случае они должны быть заключены в фигурные скобки {macro}
. Пример: {$lmp_document_trm.code}
, {$parent.code}
. При формировании текста макросы будут заменены соответствующими значениями.