С точки зрения поведения является неким подобием действия update-linked-doc, за исключением того, что форма диалога зашита на клиенте. |
В схеме, по которой открывается форма добавить свойство "addLinked<Name>" со ссылкой на системную схему "SelectLinkedDocDialogResource"
<schema-ref name="addLinkedDoc" ref="SelectLinkedDocDialogResource"/> |
cancel_caption - название кнопки для отмены
Значения в них задаются с помощью формул, вычисляемым при открытии.
<schemas xmlns="http://www.intertrust.ru/schema/palette/tn-schema"> <schema name="LinkedDocSelectionParamsExample" extends="LinkedDocSelectionParamsCommon"> <meta> <category name="Система\Делопроизводство"/> <documentation>Ресурс с параметрами выбора документа в диалоге добавления связанного</documentation> </meta> <string name="title" temporal="true"> <calc-values> <script event="open" lang="SPEL"><![CDATA['Выберите документ из системы']]></script> </calc-values> </string> <boolean name="allowedManual" temporal="true"> <calc-values> <script event="open" lang="SPEL"><![CDATA[false]]></script> </calc-values> </boolean> <boolean name="isManySelect" temporal="true"> <calc-values> <script event="open" lang="SPEL"><![CDATA[true]]></script> </calc-values> </boolean> <string name="modules" array="true" temporal="true"> <calc-values> <script event="open" lang="SPEL"><![CDATA[T(java.util.Arrays).asList("OutputDocs", "InternalDocs")]]></script> </calc-values> </string> <string name="submit_caption" temporal="true"> <calc-values> <script event="open" lang="SPEL"><![CDATA['Добавить документ']]></script> </calc-values> </string> </schema> </schemas> |
На форме создать:
<!--скрытое поле --> <field attribute-ref="addLinkedDoc" recalc="true"> <properties> <hide> <condition>true</condition> </hide> </properties> </field> <!--кнопка --> <button attribute-ref="addLinkedDoc" name="${ui.form.RkkResourceForm.section.Attributes.button.addLinkedDoc.name:Добавить документ из системы}"> <appearance> <label-style width="17" unit="symbol"> <style id="tunBtnHeader"/> </label-style> </appearance> <action> <custom> <update-linked-doc schema-ref="LinkedDocSelectionParamsExample"/> </custom> </action> </button> |
Доработка обработчика событий
При нажатии на кнопку будет показан диалог выбора связей с учётом заданных параметров. Web-клиент заполнит объект со структурой SelectLinkedDocDialogResource
в поле ids web-клиент кладёт не сами ID, а self-ссылки на документы |
После выбора отправится запрос на обновление, который надо обработать в custom-event-handler и сделать с выбранным документом то, что нужно в конкретном случае.
function recalc(object, changedField) { if (changedField == 'addLinkedDoc') { var addLinkedDoc = values.get('addLinkedDoc'); if (addLinkedDoc.getValues().get("ids") != null) { var ids = addLinkedDoc.getValues().get("ids").getValues(); for (var i = 0; i < ids.size(); i++) { var unid = getIdFromHref(ids.get(i).getValue()); System.out.println("unid = "+unid); if (!unid.equals("")) { var rkk = appdp.getEntityByUNID(unid); //rkk - выбранный в диалоге документ } } } TunableObjectHelper.putAFInstanceValue(object.tuning(), "addLinkedDoc", null); } } function getIdFromHref(href) { var index = href.lastIndexOf("/", href.length())+1; if (index < 0) { return href; } else { return href.substring(index); } } |