Симптомы

Симулятор мобильного приложения не работает. 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"
         }
      ]
   }
},

 

Нравится

Поделиться

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

Симптомы

  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 комментариев
Показать все комментарии

Задача

В разделе активности при заполненной колонках "Контрагент" и "Контакт" нет возможности выбрать продажу. Если заполнены колонки "Контрагент" и "Продажа", то добавление контакта стирает продажу.

Решение

Необходимо убрать фильтрацию по колонкам "Контакт"-"Продажа" (большинство клиентов ведет продажи по "Контрагенту").

  1. Заместите страницу активности ActivityPageV2;

  2. В замещенную схему добавьте код:

define("ActivityPageV2", ["BusinessRuleModule"],
    function(BusinessRuleModule) {
        return {
            entitySchemaName: "Activity",
            rules: {
                "Opportunity": {
                    "FiltrationOpportunityByContact": {
                        "ruleType": BusinessRuleModule.enums.RuleType.DISABLED
                    }
                }
            },
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
        };
});

Убедитесь, что в схему добавлен BusinessRuleModule.

Нравится

Поделиться

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