Кейс

Очень часто при решении разного рода проблем, связанных с бизнес-логикой, приходится сталкиваться с задачей получения значений разного рода таблиц. Некоторые данные можно вывести в реестр, но не все.

Цель

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

Выполнение

Пример скрипта ниже выведет в консоли браузера все идентификаторы статусов лида, а также их названия:

var esq = this.Ext.create("Terrasoft.EntitySchemaQuery"{
    rootSchemaName: "LeadStatus"
});
esq.addColumn("Id");
esq.addColumn("Name");
esq.getEntityCollection(function(result){ 
    if (result.success) {
        result.collection.each(function(item) {
            console.log(item.get("Id")+ ' -' + item.get("Name"));
        });
    }
}this);

Изображение удалено.

LeadStatus - название объекта (таблицы), запрос на выборку из которой предполагается выполнить.

esq.addColumn("Id")esq.addColumn("Name") - добавление определенных колонок в запрос.

console.log(item.get("Id")+ ' - ' + item.get("Name")) - вывод в консоль браузера результирующей информации и ее форматирование

Пример запроса с параметром фильтрации:

var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
    rootSchemaName: "Product"
}); 
esq.addColumn("TradeMark"); 
esq.addColumn("Usrrazdkat02");
var esqFilter = esq.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "Name", "133.024");
esq.filters.add(esqFilter);
esq.getEntityCollection(function(result) { 
    if (result.success) {
        result.collection.each(function(item) {
            console.log(item.get("TradeMark")+ ' - ' + item.get("Usrrazdkat02"));
        });
    }
}, this);

 

Нравится

Поделиться

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

Симптомы

Симулятор мобильного приложения не работает. System.ArgumentException: An item with the same key has already been added

Причина

Данная ошибка вызвана не корректными изменениями в конфигурации приложения, а точнее при разработке мобильных приложений.

Скорее всего были добавлены локализуемые строки в пользовательской мобильном манифесте приложения, которые дублируют строки из «MobileApplicationManifestMobile».

Решение

Для исправления необходимо или обновить приложение до последней версии 7.5.0 или изменить локализуемые строки в пользовательской схеме (например, «UsrMobileApplicationManifestCustom2Schema»).

Например в название локализированных строк добавить префикс Custom

 Изображение удалено.

Необходимые условия и возможные ограничения

Иметь права системного администратора.

Нравится

Поделиться

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

Задача

В объекте, нпаример Документ, есть две страницы редактирования - договор и доп. соглашение. Пользователи сайта создают Документ с типом Договор вручную, а документ с типом Доп.соглашение - через бизнес-процесс. Необходимо убрать возможность добавления документа с типом доп. соглашения.

Решение

Можно отключить отображение определенных страниц редактирования с помощью метода фильтрации страниц редактирования. В этом случае страница редактирования останется в системе, но пользователи в разделе ее видеть не будут.  Пример такого метода можно посмотреть в разделе [Активности], страница «ActivitySectionV2». Метод называется initEditPages.

Пример кода:

/**
* Инициализирует коллекцию страниц редактирования сущности.
* Удаляет из коллекции страницы для типа Email и Звонок
* @inheritdoc Terrasoft.BaseSection#initEditPages
* @override
*/
initEditPages: function() {
    var enabledEditPages = new this.Terrasoft.Collection();
    this.callParent(arguments);
    var editPages = this.get("EditPages");
    this.Terrasoft.each(editPages.getItems(), function(item) {
        if (item.get("Id") !== ConfigurationConstants.Activity.Type.Email &&
            item.get("Id") !== ConfigurationConstants.Activity.Type.Call) {
                enabledEditPages.add(item);
        }
    });
    this.set("EnabledEditPages", enabledEditPages);
},

Необходимые условия

Права администратора

Нравится

Поделиться

0 комментариев
Показать все комментарии
Публикация
//в схему детали
define("UsrSchema1Detail", ["ConfigurationGrid", "ConfigurationGridGenerator",
   "ConfigurationGridUtilities"], function() {
   return {
      entitySchemaName: "UsrContactAnswers",
      attributes: {
         "IsEditable": {
            dataValueType: Terrasoft.DataValueType.BOOLEAN,
            type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
            value: true
         }
      },
      details: {},
      diff: [
         {
            "operation": "merge",
            "name": "DataGrid",
            "values": {
               "className": "Terrasoft.ConfigurationGrid",
               "generator": "ConfigurationGridGenerator.generatePartial",
               "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"},
               "changeRow": {"bindTo": "changeRow"},
               "unSelectRow": {"bindTo": "unSelectRow"},
               "onGridClick": {"bindTo": "onGridClick"},
               "activeRowActions": [
                  {
                     "className": "Terrasoft.Button",
                     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                     "tag": "save",
                     "markerValue": "save",
                     "imageConfig": {"bindTo": "Resources.Images.SaveIcon"}
                  },
                  {
                     "className": "Terrasoft.Button",
                     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                     "tag": "cancel",
                     "markerValue": "cancel",
                     "imageConfig": {"bindTo": "Resources.Images.CancelIcon"}
                  },
                  {
                     "className": "Terrasoft.Button",
                     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                     "tag": "remove",
                     "markerValue": "remove",
                     "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"}
                  }
               ],
               "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"},
               "activeRowAction": {"bindTo": "onActiveRowAction"},
               "multiSelect": false
            }
         }
      ],
      mixins: {
         ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
      },
      methods: {}
   };
});

 

Нравится

Поделиться

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

Вопрос

Можно ли разместить кнопку рядом с названием группы полей (как на рисунке)?

Изображение удалено.

Ответ

Кнопка добавляется аналогично как и для детали (в diff указываете propertyName -"tools",а itemType, указываете, что это кнопка (itemTypethis.Terrasoft.ViewItemType.BUTTON,)

Пример реализации можете посмотреть в схеме «BaseGridDetailV2» (пакет «NUI»).

Также наглядный пример (на примере группы полей "Результат").

Скриншот:

Изображение удалено.

Листинг:

{
   "operation": "insert",
   "parentName": " ResultControlGroup",
   "name": "TestButtom",
   "propertyName": "tools",
   "values": { 
            itemType: this.Terrasoft.ViewItemType.BUTTON,
            caption: "111",
            click: {bindTo: "zzz"},
            visible: true,
            }
},

или

{
   "operation": "insert",
   "parentName": "GeneralInfoTab",
   "name": "ResultControlGroup",
   "propertyName": "items",
   "values": {
      "itemType": Terrasoft.ViewItemType.CONTROL_GROUP,
      "caption": {"bindTo": "Resources.Strings.ResultControlGroupCaption"},
      "items": [],
      "tools": [
         {
            itemType: this.Terrasoft.ViewItemType.BUTTON,
            caption: "111",
            click: {bindTo: "zzz"},
            visible: true,
            tag: "onUnsubscribeChannelClick"
         }
      ]
   }
},

 

Нравится

Поделиться

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

Столкнулся с проблемой неработающих правильно стилей при добавлении нескольких кнопок для нескольких групп полей.

Описание проблемы тут:

https://community.terrasoft.ru/ideas/dostupnost-knopok-na-gruppe-poley

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

Симптомы

  1. Определено несколько одинаковых позиций по распределению прав по операциям.
  2. Текущий пользователь не имеет прав доступа на объект "MobileData".

Причина

Не розданы права доступа на объекты мобильного приложения и не актуализирована организационная структура.

Решение

1. Раздать права доступа на объекты мобильного приложения;

2. Актуализировать организационную структуру.

Скриншот для 7.5:

Изображение удалено.

Скриншот для 7.4:

Изображение удалено.

Необходимые условия и возможные ограничения

Права администратора.

Нравится

Поделиться

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

Симптомы

Тип: Terrasoft.SqlProxyException%0D%0AСообщение: Возникло исключение SQL%0D%0A%0D%0AТип: Terrasoft.SqlException%0D%0AСообщение: undefined: Cannot call method 'setRecord' of undefined%0D%0A%0D%0A

Причина

Данное сообщение говорит о том, что на устройстве были произведены подключения под разными пользователями. При смене базы, бывает возникает такое сообщение.

Решение

Необходимо очистить кэш базы и выполнить повторную синхронизацию.

Важно! Если есть какие-то несинхронизированные данные, то при очистке кэша – они удалятся с мобильного устройства!

Нравится

Поделиться

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

Задача

Необходимо настроить сортировку электронной почты, загружаемой в bpm`online. Клиент привязал в виде писем к почте SMS сообщения и переписку в Skype.  В зависимости от темы, почта должна попадаит в одну из трех категорий - SMS, Email, Skype. 

Решение

  1. В разделе [Активности] с помощью мастера разделов добавить поле, в котором будет храниться тип email-сообщения(Почта, SMS, Skype).
  2. Создайте бизнес процесс и настройте его автоматический запуск при поступлении в bpm’online нового письма, который, в зависимости от темы письма, будет заполнять значение поля «Тип Email сообщения».
  3. Для того, чтобы сообщения электронной почты отобразились в разделе [Активности], необходимо отключить их фильтрацию. Чтобы это сделать, необходимо:

a. В разделе [Управление конфигурацией] создать замещающий клиентский модуль  «ActivitySectionV2» («Раздел Активности»);

b. В поле «Исходный код» добавить код:

define("ActivitySectionV2", ["ActivitySectionV2Resources"], function (resources) {
    return {
        entitySchemaName: "Activity",
        methods: {
            getFilters: function() {
                var filters = this.callParent(arguments);
                filters.removeByKey("NotEmailFilter");
                return filters;
            }
        },
        diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
    }
});

c.       Сохранить замещающую страницу;

d.       Очистить кэш браузера;

4. Теперь Вы можете настроить динамические группы в разделе [Активности] для фильтрации сообщений. Подробнее о динамических группах можно узнать в разделе Работа с группами.

Нравится

Поделиться

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

Соединяем редактируемый реестр и множественный выбор и "лечим" результат

1.Редактируемый реестр из https://community.terrasoft.ru/articles/redaktiruemyi-reestr

2.Множественный выбор из академии (https://academy.terrasoft.ru/documents/technic-sdk/7-12/mnozhestvennoe-dobavlenie-zapisey-na-detal)

3.Для корректной работы добавляем в methods{} следующие пару строк:

loadAddedRecords: function(collection) {
    this.reloadGridData();
}

 

Нравится

Поделиться

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

Вопрос

Подскажите как организовать в BPMOnline получение доступа к ресурсам, используя протокол OAuth2?

Ответ

Алгоритм подключения к внешнему ресурсу Livetex представлен в виде диаграммы (скриншот во вложении). Если же LIVETEX предоставляет JS API для работы с ним, концептуально, из диаграммы исключается ServerPage и сервисы. Пример реализации кода можно найти в конфигурации – схема SocialAccountAuthModule.

Изображение удалено.

Нравится

Поделиться

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