Вопрос

делать активным действие детали в зависимости от значения поля в главной карточке

Добрый день!

Допустим есть контрагенты с типом А и B.

Если у контрагента тип А, то необходимо для детали Адреса у контрагента делать НЕактивным действие удалить на детали.

 

Для этого в  схеме детали

были переопределены следующие методы

 

        getDeleteRecordButtonEnabled: function() {
                var  ican=this.get("IsMyEnabled");
                return ican.value;
                },
                
                getDeleteRecordMenuItem: function() {
                    return this.getButtonMenuItem({
                        Caption: {"bindTo": "Resources.Strings.DeleteMenuCaption"},
                        Click: {"bindTo": "deleteRecords"},
                        Enabled: {bindTo: "getDeleteRecordButtonEnabled"},
                        Visible: {bindTo: "IsEnabled"}
                    });
                }

где виртуальный атрибут IsMyEnabled должен быть false, если у контрагента тип А.

Как и где надо достучаться в схеме детали адреса контрагентов до типа контрагента?

То есть как и где надо достучаться в схеме детали до какого-либо поля родительской записи?

Предположительно, что метод заполнения атрибута будет таким:

                setMyEnabled: function() {
                var accountId = this.get("MasterRecordId");
                if (!accountId) {
                    return;
                }
                var select = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                        rootSchemaName: "Account"
                    });
                select.addColumn("UsrAccountStatus.Id","AccStatus");
                select.getEntity(accountId.value, function(result) {
                    if (!result.success) {
                        return;
                    }
                    if (result.entity.get("AccStatus")) {
                        if (result.entity.get("AccStatus")===UsrConsts.AccountStatus.Approve) {
                        this.set("IsMyEnabled", true);
                        }
                        else {
                        this.set("IsMyEnabled", false);    
                        }
                    }
                }, this);
                
            }

 

Но где его вызвать, чтобы атрибут был заполнен к моменту определения доступности действия?

 

У меня такой же вопрос

5 комментариев

Дарья, тут описан пример доступности действия в зависимости от значения стадии.Возможно, для детали потребуется что-то аналогичное.

Либо пойти другим путём и реализовать невозможность удаления при помощи раздачи прав на записи детали.

Зверев Александр,

спасибо, права на записи детали здесь не нужны. Пример видела тоже, в примере все понятно, как заблокировать действие в карточке раздела тоже понятно. Проблема в том, что это деталь, и нужно получить значение определенного поля родительской записи (для блокировки действия) и при этом не натолкнуться на асинхронность и невозможность проанализировать значение.  Есть идея сделать виртуальный атрибут для заполнения значения данного поля, чтобы потом им оперировать. Но непонятно в какой момент его заполнять - какое-то событие должно быть  отрисовки детали до того, как отрисуются действия.

Можно попробовать обращаться к записи детали и добираться к полю связанной записи основного раздела по связям.

Зверев Александр,

Спасибо, понятно, что можно добраться и как добраться тоже понятно (в теме сообщения собственно был пример того, как добраться...). Проблема в том, в какой момент это сделать, чтобы иметь возможность оперировать значением.

В любой, наверное. Вас же не интересует значение поля записи детали, а запись основного раздела в момент наличия на детали записей уже создана и сохранена.

Войдите или зарегистрируйтесь, чтобы комментировать