Не отрабатывает Enabled для действия в карточке

Создал для контрагента действие:

              getActions: function() {
                  var actionMenuItems = this.callParent(arguments);
                  actionMenuItems.addItem(this.getActionsMenuItem({
                      "Caption": { "bindTo": "Resources.Strings.SxActionOpportunity" },
                      "Enabled":  { bindTo: "isClient" },
                      methodName: "runOpportunityManagement"
                  }));
                  return actionMenuItems;
              },

Действие должно быть активно только для контрагента с типом Клиент или Потенциальный клиент. Написал метод:

              isClient: function() {
                  var type = this.get("Type");
                  if(type) {
                      type = type.value;
                  }
                  if(type === Home32Constants.Account.Type.Client || type === Home32Constants.Account.Type.PotencialClient){
                      return true;
                  }else{
                      return false;
                  }
              },

Функция возвращает "true" а действие всё-равно не активно. А вот если закрыть левую панель(там где список записей раздела) и обновить страничку - всё отрабатывает как нужно.

Та же ошибка наблюдается и с Caption. Если открыта панель, то Caption пустой, а если закрыта - всё ок.
Я так понимаю если открыта эта панель система считает, что пользователь находится в разделе...

Вопрос с Caption решается добавлением Strings в Section раздела, а вот как быть с Enabled не понятно.

Нравится

4 комментария

Добрый день, Вячеслав!

Код должен отрабатывать, на первый взгляд ошибок нет.
Скорее всего ошибка в чем-то другом.
Я Вам написал личное сообщения для продолжения анализа возникшей ошибки.

В версии 7,4 удалось решить проблему таким образом:

              initCardActionHandler: function() {
                  this.callParent(arguments);
                  var propertyNames = [
                      "isClient"
                  ];
                  this.Terrasoft.each(propertyNames, function(propertyName) {
                      this.on("change:" + propertyName, function(model, value) {
                          this.sandbox.publish("CardChanged", {
                              key: propertyName,
                              value: value
                          }, [this.sandbox.id]);
                      }, this);
                  }, this);
              },

В следующем проекте уже на версии 7.5 стоит похожая задача, но данное решение уже не помогает.

В версии 7.5 такое решение тоже будет работать если isClient будет свойством, а не функцией. Для того, чтоб все работало, нужно в Карточке сделать isClient и уже к нему байндить "Enabled" действия.

Да. Действительно если биндиться на свойство всё отрабатывает. Спасибо!

Показать все комментарии