Настройки типа документа
Для листа согласования добавлен тип объекта APPROVING_LIST.
В типовой версии палитры создан тип документа с этим объектом и схемой ApprovingListResource.
Для ознакомления тип объекта - REVIEW_LIST, схема по умолчанию - ReviewListResource.
Схема листа согласования/ознакомления
Системой поддерживается добавление несистемных сохраняемых и несохраняемых вычисляемых полей. Можно добавлять кастомное содержание (ричтекст и файлы). Поддерживаются события QueryCreate, QuerySave и PostSave. Стандартный recalc не используется, у листа согласования выполняется по специальной ссылке с обработчиком на сервере - нужно для корректной обработки смены типа согласования. Доступ по несистемным actor-полям не поддерживается.
Форма листа согласования
По НР-форме показывается только содержимое секции "Содержание". Параметры согласования, участники рисуются web-клиентом. Поэтому отображаемые несистемные поля можно добавить только в секцию "Содержание". В режиме редактирования (новый и приостановленный лист) секция показывается под параметрами согласования. В режиме чтения (лист в процессе или завершен/прекращен) - по иконке скрепки в правой части плашки листа.
Специальные поля
Описать поля для отображения содержания в первичном листе, поле для скрепки если нет файлов, разворачивать секцию, поля для копирования кастомных файлов в иерархию
$hideDueDate - если равно true, то скрывается общий срок согласования. Если любой другое значение - показывается.
contentTnCount - количество прикрепленных файлов в несистемных полях. Нужно для корректного отображения в WebDocs.
contentTnCopy - поле-массив объектов, содержащее информацию по полях, копируемых в лист из согласуемого документа по кнопке "Копировать содержание". Также поле может добавляться в схему и форму визы, если структура содержания там должна быть такая же, как в листе. Атрибуты объекта: id - имя поля, title - отображаемая в диалоге надпись.
Пример
Вычисление через временное свойство:
<boolean name="fillcontentTnCopy" temporal="true">
<calc-values>
<script event="open"><![CDATA[#root.isMeetingPack==true?
{
#session = T(ru.intertrust.cmj.af.core.AFSession).get(),
#list = new java.util.ArrayList(),
#appendixUOB1 = new java.util.HashMap(),
#appendixUOB1.put("id", "appendixUOB1"),
#appendixUOB1.put("title", "Проекты решений УОБ (одобрение)"),
#list.add(#appendixUOB1),
#appendixUOB2 = new java.util.HashMap(),
#appendixUOB2.put("id", "appendixUOB2"),
#appendixUOB2.put("title", "Проекты решений УОБ (утверждение)"),
#list.add(#appendixUOB2),
#appendixNDoc = new java.util.HashMap(),
#appendixNDoc.put("id", "appendixNDoc"),
#appendixNDoc.put("title", "Проекты нормативных документов"),
#list.add(#appendixNDoc),
#appendixIntDoc = new java.util.HashMap(),
#appendixIntDoc.put("id", "appendixIntDoc"),
#appendixIntDoc.put("title", "Проекты внутренних документов"),
#list.add(#appendixIntDoc),
#appendixExpNote = new java.util.HashMap(),
#appendixExpNote.put("id", "appendixExpNote"),
#appendixExpNote.put("title", "Пояснительная записка"),
#list.add(#appendixExpNote),
#appendixPresentation = new java.util.HashMap(),
#appendixPresentation.put("id", "appendixPresentation"),
#appendixPresentation.put("title", "Презентации"),
#list.add(#appendixPresentation),
#appendixADoc = new java.util.HashMap(),
#appendixADoc.put("id", "appendixADoc"),
#appendixADoc.put("title", "Проект распорядительного документа"),
#list.add(#appendixADoc),
#appendixOther = new java.util.HashMap(),
#appendixOther.put("id", "appendixOther"),
#appendixOther.put("title", "Иные файлы"),
#list.add(#appendixOther),
#appendixIssFix = new java.util.HashMap(),
#appendixIssFix.put("id", "appendixIssFix"),
#appendixIssFix.put("title", "Учет замечаний"),
#list.add(#appendixIssFix),
T(ru.intertrust.cmj.tunable.object.common.TunableObjectHelper).putAFInstanceValue(#root.tuning(), "contentTnCopy", #list),
true
}[39]
:false]]></script>
</calc-values>
</boolean>
Вычисленное значение:
contentTnCopy: [
{id: "appendixNDoc", title: "Проект нормативного документа"},
{id: "appendixADoc", title: "Проект распорядительного документа"}
...
]