Здравствуйте, подскажите как вытянуть данные из модального окна.

Программно вызываю открытие модального окна(Контрагенты).

Задача: по клику на элемент, вернуть данные(Например "название" или "ID") в вызывающий код.

Вот мой код:

 

//Выводим модальное окно
viewModal:function(){
var config = {
                    entitySchemaName: "Account",
                     multiSelect: false,
                     columns: ["Name","UsrINN"],
                     hideActions: false,//Скрываем кнопку "Добавить"
                     filters: contactFiler
                    };
               this.openLookup(config, this.myCallBack, this);
},
 
//Колбэк
 myCallBack:function(args){
 
                 args.???????????????????????????????(Что должно быть здесь?)
                 this.showInformationDialog("Callback");
  }

 

Нравится

2 комментария
myCallBack:function(args){
   debugger;
   //args.???????????????????????????????(Что должно быть здесь?)
   this.showInformationDialog("Callback");
}

Вы пишете дебаггер, открываете консоль(f12), ресстартите с кешем страницу, открываете ваше модальное окно(консоль всё ещё открыта), нажимате кнопку выбрать и тут выполнение кода должно приотстановиться. и уже через консоль смотрите какие переменные, что в них и т.п

По теме: в args вроде как хранится коллекция selectedRows, её уже перебирать через terrasoft.each

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

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

7.11(OnSite)

Задача вывести, значение агригирующей функции COUNT.(Т.е тупо - кол-во записей из таблицы) по правильному

Щас делаю по топорному(count++ при переборе коллекции):

 var esq = this.Ext.create(Terrasoft.EntitySchemaQuery, {rootSchemaName: "Lead" });
 
                  esq.addColumn("Id");
                  esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "ID", Terrasoft.AggregationEvalType.ALL);
                  var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrINN", INN);
                  esq.filters.add("esqFirstFilter", esqFirstFilter);
 
                  // this.showInformationDialog("message");
                     esq.getEntityCollection(function (result) {
                     	     window.console.log("Ответ сервера: "+result);
                     	  	 window.console.log(result);
                            if (!result.success) {
                              // обработка/логирование ошибки, например
                               this.showInformationDialog("Ошибка запроса данных");
 
                               return;
                            }
 
                             var count = 0;
                             result.collection.each(function (item) {
                               count++;
                             });
                               this.showInformationDialog(count);
                     }, this);

 

Также работает вот такой способ:

 this.showInformationDialog(result.collection.collection.length);

 

Нравится

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

либо

esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "CountAll");

и никакие столбцы больше не добавлять.

Вернётся 1 запись, result.collection.collection.items[0].get("CountAll")



либо

result.collection.getCount() в вашем варианте

Спасибо

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

Вызывая из кода модальное окно (скажем раздела Контрагенты), есть ли возможность в вызывающий код вернуть информацию кол-ве отображенных элементов?

И это делается только запросом к БД?

Нравится

1 комментарий

7.11(OnSite)

Народ, помогите.

В разделе "Лиды", у меня есть справочник стадий и его проекция в виде кейсов.

Задача у меня следующая, выполнять какое-то действие при выборе значения из справочника и по клику на элементе кейса представляющим тоже самое значение.

Пример:

Справочник{значение:Квалификация}

Кейс {значение:Квалификация}

Т.е не важно, где произошел клик, должна выполняться одна и та же функция.

Сейчас у меня получается обработать выбор значения из справочника, а вот как реализовать тоже самое по клику на элементе кейса я не знаю как. Я обратил внимание, ,что при клике на элементе кейса, подставляется соответствующее значение в справочник. Т.е думал будет так:

Кейс(Клик)-->Справочник-->Атрибут-->Дествие

Справочник(Клик)-->Атрибут-->Действие

Вот мой код:

    methods: {

            onSearchButtonClick :function(){

                this.showInformationDialog("Click");

            },

            setDisqualification:function(){

                view = "UsrStage";//Справочник стадий

                data = this.get(view)

                

                if(data!==undefined){

                 value = data.Name;

                  switch (value) {

                        case 'Квалификация':

                             this.showInformationDialog(value);

                            break;

                        case 'Переговоры':

                             this.showInformationDialog(value);

                            break;

                        case 'Взращивание':

                            this.showInformationDialog(value);

                            break;

                         case 'Продажа':

                            this.showInformationDialog(value);

                           break;

                        case 'Потребность отсутствует':

                            this.showInformationDialog(value);

                           break;

                        case 'Потребность удовлетворена':

                            this.showInformationDialog(value);

                           break;

                        case 'Дисквалифицирован':

                          this.showInformationDialog(value);

                             break;

                    default:

                        // code

                    }

                }

            }

        },

        rules: {},

        businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,

        attributes: {

                   "LinkForStage": {

                    // Определение зависимости колонки.

                     "dependencies": [

                                       {

                                         // Зависит от колонки Stage.

                                        "columns": [ "UsrStage" ],

                                         // Имя метода-обработчика изменения колонки Stage.

                                         // Метод setProbabilityByStage() определен в свойстве methods

                                         // объекта схемы.

                                        "methodName": "setDisqualification"

                                       }

                                     ]

                                 }

        }

    };

 

Нравится

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

Роман, добрый день!

А в чем бизнес-смысл такой задачи? Дашборд с кейсами вроде бы для того и нужен, чтобы не использовать обычное поле, а при нажатии на соответствующую стадию сетапить туда значение и сохранять карточку, не?

С уважением,

Дмитрий Тёскин

У меня задача обработать нажатие на элемент кейса через код.

Пользователь должен иметь возможность выбирать стадию, как из справочника так и через элемент кейса

Вот я и пытаюсь узнать есть ли такая возможность? 

SectionActionsDashboard, метод onActiveStageClick

Варфоломеев Данила,

Спасибо идею понял)

Только получается дублирование кода(

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

При попытке выбрать активности по Ответственному используя Http-запрос выбрасывает ошибку.

Делаю запрос:

https://dev-goldcoachcrm.bpmonline.com/0/ServiceModel/EntityDataService…'

 

и получаю в браузере ошибку: http://prntscr.com/h9v8l8

"Элемент коллекции с именем OwnerId не найден" - Но такое поле есть в Активности.

В чем проблема тогда? 

Нравится

1 комментарий

Добрый день, без данных самого запроса сложно определить причину ошибки. Рекомендую вам ознакомиться с документацией по ссылке https://academy.terrasoft.ru/documents/technic-sdk/7-7-0/rabota-s-obekt…

В документации есть примеры выборки записей по ответственному.

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

У меня не получается добавить действие НА ДЕТАЛЬ. Инструкций как это делается я не нашел. Попробовал переопределить метод addToolsButtonMenuItems, но это не помогло(возможно я что-то делаю не так?). Способ решения проблемы описанный в теме https://community.terrasoft.ru/questions/dobavlenie-novoi-detali-bpm-73 не работает.

addToolsButtonMenuItems: function() {

                this.callParent(arguments);

                var tbm = this.get("ToolsButtonMenu"); 

                tbm.addItem(this.getButtonMenuSeparator());

                tbm.addItem(this.getButtonMenuItem({                    

                    "caption": "Approve",

                    "tag": "approveAction",

                    //Click: {"bindTo": "test"},

                    "visible": "true"

                }));

            }

Хотелось бы узнать, как добавлять действие НА ДЕТАЛЬ

Нравится

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

Добрый день. Тут два момента: 1) этот метод имеет сигнатуру addToolsButtonMenuItems: function(toolsButtonMenu) 2) вы get сделали, а вот set обратно - нет. В итоге локально в методе объект изменен, но на детали ничего не видно. Если указанные места поправить - все работает.

добрый день! можете полный код написать , не получается добавить пункт меню на деталь 

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

Здравствуйте. Есть тестовая разработка. Как выяснилось потом, в тестовой разработке есть портал самообслуживания, он был настроен кем-то, хотя я лично сам туда не лез, чтобы что-то настраивать. Проблема в следующем (ниже привёл скриншот). Как сделать так, чтобы я мог спокойно зайти в конфигурацию системы под Supervisor? Раньше я мог туда заходить спокойно и делать какие-то разработки (мог заходить именно НЕ НА портал самообслуживания, а в то место системы, где есть базовые разделы BPM'Online)? И как выйти из режима перехода на портал самообслуживания при авторизации пользователя?

Прикрепленные файлы

Нравится

1 комментарий

У пользователя Supervisor скорее всего указан тип пользователя = Пользователь портала.

Проверить можно запросом select * from Sysadminunit where name = 'Supervisor'

см. ConnectionType, где 0 - сотрудник компании, 1 - пользователь портала.

Если указано значение 1, то нужно выполнить апдейт.

 

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

Всем доброго времени суток. Версия 7.10.

Можно ли одну и ту же деталь выводить на разных страницах под разными заголовками?

Нравится

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

Здравствуйте, Денис!

К сожалению, пользовательскими методами нет возможности устанавливать разные названия детали для разных страниц редактирования. Данную логику необходимо дорабатывать в схемах страниц редактирования.

Необходимо в схеме детали в секции diff написать:

diff

diff: /**SCHEMA_DIFF*/[
{
   "operation": "merge",
   "name": "Detail",
   "values": {
      "caption": {"bindTo": "getDetailCaption"}
   }
}
]/**SCHEMA_DIFF*/

А в методе уже анализировать имя карточки, в которую загружена деталь, и менять caption на необходимый, к примеру, так:

methods

getDetailCaption: function() {
   var cardPageName = this.get("CardPageName");
   if (cardPageName === "ActivityPageV2") {
      return "Name 1";
   }
   return "Name 2";
}

Можно также использовать локализируемые строки.

В типовых конфигурациях, аналогичный пример есть в схеме «OpportunityContactDetailV2»

OpportunityContactDetailV2

/**
 * Устанавливает заголовок детали в зависимости от открытой страницы.
 * @protected
 * @return {String}
 */
getDetailCaption: function() {
   var cardPageName = this.get("CardPageName");
   if (cardPageName === "OpportunityPageV2") {
      return this.get("Resources.Strings.InOpportunityCaption");
   }
   return this.get("Resources.Strings.InContactCaption");
},

Юлия, спасибо.

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

Всем привет, есть ли возможность скрыть контейнер элементов.

Сейчас приходится удалять каждую кнопку по отдельность

Если есть то подскажите как

Нравится

1 комментарий

Коллеги, добрый день.

 

Столкнулся с такой проблемой. При совместной разработке функциональности вовлечены как кастомизаторы, так и разработчики. Разработчики делают правки через код схемы страницы, а кастомизаторы пользуются визардами страниц редактирования.

В целом, проблем с этим нет, но есть одна единственная проблема. У меня объявлена деталь на странице редактирования. В этом описании указан еще и subscriber, чтобы отрабатывать различные функции в случае возникновения событий об изменениях детали. Так вот визарды зачищают этот участок кода схемы страницы, что ломает бизнес логику страницы. Вопрос в том, каким еще способом можно определить подписку на стандартные события изменения детали, чтобы перенести код в секцию methods?

 

Нравится

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

О, да! И мне постоянно на это отвечала поддержка, что этого не может быть :)

Владимир Соколов,

а поддержка случайно не предлагала какие-то воркэраунды?

у меня, конечно, есть мысли, как "обезопасить" себя от перетерания, но это будет добавлять еще один пакет в систему и лишнюю замещающую схему

Добрый день, сабскрайбер не будет удаляться, если вы воспользуетесь следующей конструкцией:

subscriber: {
   "methodName": "sendSaveCardModuleResponse"
}

где sendSaveCardModuleResponse имя метода.

Терещук Сергей,

оО! Спасибо! Помогло.

Терещук Сергей,

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

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