Вопрос
Каким образом возможно создавать связанные поля?
Например при изменении состояния документа должны появляться дополнительные поля.
Ответ
В 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 для контейнера.