Добрый день. Нужна помощь в следующей задаче:
1) имеются сервисы с текстовым многострочным полем, куда записывается информация
2) эту информацию необходимо показывать на карточке обращения во время выбора того или иного сервиса
Как реализовать подстановку нужного текста по выбранному сервису?
Нравится
1. В карточку обращения в блок attributes добавляете аттрибут. Например:
"MDPStatus": {
"dataValueType": Terrasoft.DataValueType.LOOKUP,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
"value": null,
"referenceSchemaName": "MDPStatus"
}
В моем пример описывается добавление аттрибута для справочного поля, Вам, насколько я понимаю, нужен текстовый.
2. Потом в блок diff в нужное место добавляете контрол и связываете его с этим аттрибутом:
{
"operation": "insert",
"name": "MDPStatus",
"values": {
"layout": {
"colSpan": 8,
"rowSpan": 1,
"column": 4,
"row": 8,
"layoutName": "Header"
},
"bindTo": "MDPStatus",
"caption": {
"bindTo": "Resources.Strings.MDPStatusCaption"
},
"enabled": false
},
"parentName": "Header",
"propertyName": "items",
"index": 17
}
В моем примере не указано, но Вам также в контроле нужно указать, что в нем будет многострочное отображение текста.
3. В methods реализуете свой метод, в котором из сервиса вычитывается нужная текстовая информация и помещается в объявленный ранее аттрибут.
4. Для своего аттрибута добавляете dependencies от поля 'Cервис' и указываете метод, который реализовали в п.3.
5. Также, чтобы обеспечить отображение этой информации при открытии карточки обращения для редактирования при уже заполненном сервисе, метод, реализованный в п.3, нужно вызвать на onEntityInitialized. Например:
onEntityInitialized: function() {
this.callParent(arguments);
if (!this.isNew) {
/** вызов метода из п.3*/
}
},
1. В карточку обращения в блок attributes добавляете аттрибут. Например:
"MDPStatus": {
"dataValueType": Terrasoft.DataValueType.LOOKUP,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
"value": null,
"referenceSchemaName": "MDPStatus"
}
В моем пример описывается добавление аттрибута для справочного поля, Вам, насколько я понимаю, нужен текстовый.
2. Потом в блок diff в нужное место добавляете контрол и связываете его с этим аттрибутом:
{
"operation": "insert",
"name": "MDPStatus",
"values": {
"layout": {
"colSpan": 8,
"rowSpan": 1,
"column": 4,
"row": 8,
"layoutName": "Header"
},
"bindTo": "MDPStatus",
"caption": {
"bindTo": "Resources.Strings.MDPStatusCaption"
},
"enabled": false
},
"parentName": "Header",
"propertyName": "items",
"index": 17
}
В моем примере не указано, но Вам также в контроле нужно указать, что в нем будет многострочное отображение текста.
3. В methods реализуете свой метод, в котором из сервиса вычитывается нужная текстовая информация и помещается в объявленный ранее аттрибут.
4. Для своего аттрибута добавляете dependencies от поля 'Cервис' и указываете метод, который реализовали в п.3.
5. Также, чтобы обеспечить отображение этой информации при открытии карточки обращения для редактирования при уже заполненном сервисе, метод, реализованный в п.3, нужно вызвать на onEntityInitialized. Например:
onEntityInitialized: function() {
this.callParent(arguments);
if (!this.isNew) {
/** вызов метода из п.3*/
}
},
Спасибо, помогло разобраться. Еще взял для примера статью из академии и совсем все стало понятно: https://academy.terrasoft.ru/documents/technic-sdk/7-12/dobavlenie-vych…
По сути, поле я добавил мастером, и мне пришлось только докрутить атрибут и метод:
attributes: { "UsrServiceHelp": { dataValueType: Terrasoft.DataValueType.TEXT, dependencies: [ { columns: ["UsrObrUsluga"], methodName: "helping" } ] } }, methods: { onEntityInitialized: function() { this.callParent(arguments); this.helping(); }, helping: function() { if (this.get("UsrObrUsluga") != null) { var service = this.get("UsrObrUsluga"); var recordId = service.value; var esqCase = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "ServiceItem" }); esqCase.addColumn("UsrServiceHelp"); esqCase.getEntity(recordId, function(result) { if (result.success) { var help = result.entity.get("UsrServiceHelp"); this.set("UsrServiceHelp", help); } }, this); } },
Это работает как надо и не выдает ошибок, возможно можно как-то оптимизировать, но буду решать по мере появления задач
Быстров Сергей,
Я бы ещё в методе 'helping' добавила обработку кейса, когда поле "UsrObrUsluga" незаполненное, если оно не обязательное для заполнения в карточке.
Так как при очистке этого поля, значение в поле "UsrServiceHelp" тоже должно очиститься.