Вопрос
Каким образом возможно создавать связанные поля?
Например при изменении состояния документа должны появляться дополнительные поля.
Ответ
В bpm'online нет понятия связанных полей. Описанную Вами задачу возможно решить с использованием свойства visible для полей. Данное свойство может быть привязано как к булевому атрибуту, так и к методу, возвращающему булевый тип. Свойство visible проверяется как при загрузке карточки, так и при любом изменении модели.
Пример скрытия справочного поля по значению текстового поля:
1) Объявление полей в секции diff:
{ "operation": "insert", "name": "myEnum", "values": { visible : { bindTo: "isEnumVisble" }, "caption": "myEnum", "dataValueType": 11, "bindTo": "myEnum", "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 3 }, "controlConfig": { "className": "Terrasoft.ComboBoxEdit", "list": { "bindTo": "myList" }, "change": { "bindTo": "onMyValueChange" }, "prepareList": { "bindTo": "prepareMyList" } } }, "parentName": "ContactGeneralInfoBlock", "propertyName": "items", "index": 5 }, { "operation": "insert", "name": "UsrSTRING", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 2, "layoutName": "ContactGeneralInfoBlock" }, "labelConfig": {}, "enabled": true, "bindTo": "UsrSTRING" }, "parentName": "ContactGeneralInfoBlock", "propertyName": "items", "index": 6 },
в данном коде интерес представляет только фрагмент:
visible : { bindTo: "isEnumVisble" },
2) Сам метод:
isEnumVisble: function() { return this.get("UsrSTRING") === "Hello"; },
В данном примере поле "myEnum" будет отображено только если в поле "UsrSTRING" добавлен текст Hello c последующей сменой фокуса. Связывание с атрибутом происходит таким же образом, только в bindTo указывается не имя метода, а имя атрибута.
Для того, чтобы не привязывать видимость каждого поля к одному и тому же методу, Вы можете добавить все поля в контейнер и установить свойство visble для контейнера.