Симптомы

Баг-репорт:

Type: Terrasoft.SourceCodeException

Message: TypeError: undefined is not an object (evaluating 'ruleConfig.rule')

Причина

BusinesRuleManager в карточке редактирования выполняет правила паралельно 

Решение

1.В конфигурации добавить кастомную схему с типом «Исходный код», например, с названием «UsrMobileUtilities»;

2.В схеме вставить код:

Ext.define("Terrasoft.BusinessRulesManager.Override", {
    override: "Terrasoft.BusinessRulesManager",
    /**
    * @private
    */
    doExecuteRules: function(config) {
        this.executionConfig = config;
        this.allRulesAreValid = true;
        this.executeRulesForNextRecord();
    },
    executeRules: function(config) {
        if (this.rulesToExecute > this.rulesExecuted) {
            this.waitRulesInProgressId = setInterval(function() {
                if (this.rulesToExecute === this.rulesExecuted) {
                    clearInterval(this.waitRulesInProgressId);
                    this.doExecuteRules(config);
                }
            }.bind(this), 500);
        } else {
            this.doExecuteRules(config);
        }
    }
});

3. Сохраняете изменения;

4. Данную схему подключить в манифесте мобильного приложения (например, «MobileApplicationManifestDefaultWorkplace») в секции «CustomSchemas»:

"CustomSchemas": [
    "UsrMobileUtilities"
]

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

5. Сохранить изменения.

 

Второй способ решения: заполнить справочники Города, Регионы и Страны (с заполнением связывающих полей).

Нравится

Поделиться

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

Вопрос

какие возможности представляет API камеры в мобильном приложении? (mobile 5.4)

Ответ

В BPMonlineMobile 5.4 используется версия PhoneGap 2.8

О ее возможностях работы с камерой можно почитать тут: http://cordova.apache.org/docs/en/2.8.0/cordova_camera_camera.md.html#Camera

Нравится

Поделиться

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

Вопрос

Как получить ссылку на картинку добавленную в модуле в секцию Images.

Ответ

Для получения ссылки на картинку добавленную в модуле, необходимо:

1. Добавить зависимость для библиотеки Terrasoft в define;

2. Получить конфиг картинки:

var imageConfig = resources.localizableImages.ImageListSchemaItem1;

Имя картинки будет отличаться.

3. Преобразовать конфиг в ссылку:

var link = Terrasoft.ImageUrlBuilder.getUrl(imageConfig);

 

Нравится

Поделиться

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

Вопрос

Невозможно использовать поиск по продажам, если неизвестно в каком регистре введено название продажи.

Ответ

В базовой версии фильтры по текстовым полям не зависят от регистра. Попробуйте при поиске также добавить «%» перед значением, которое Вы указываете в поле поиска – возможно, название продажи немного от него отличается.

 

Нравится

Поделиться

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

Вопрос

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

Ответ

Можно создать свой «виджет» в котором описать всю необходимую логику на языке javascript. Инициировать ее в методе init() виджета. Потом добавить его на страницу виджетов.

Для этого необходимо:

1) В конфигурации  создать модуль (не указывать родительский) - например UsrDashboardHelper.

2) Сохранить модуль и перезагрузить приложение.

3) Выбрать виджет в режиме редактирования отчетности.

Пример простого виджета, который каждые 5 секунд автоматически прокручивает страницу отчетов вверх и вниз:

define("UsrDashboardHelper", ["ext-base", "terrasoft", "sandbox"], function(Ext, Terrasoft, sandbox) {
  var getView = function() {
    var config = {
      id: "UsrDashboardHelper",
      selectors: {
        wrapEl: "#UsrDashboardHelper"
      },
      items: []
    };
    return Ext.create("Terrasoft.Container", config);
  };
  return {
    timerId: 0,
    flag: 0,
    myTimer: function() {
      console.log("tik.");
      if (this.flag === 0) {
       window.scrollTo(0,800);
       this.flag = 1;
      } else {
       window.scrollTo(0,0);
       this.flag = 0;
      }
    },
    init: function() {
      console.log("UsrDashboardHelper init in: " + sandbox.id);
      this.timerId = setInterval(this.myTimer, 5000);
    },
    render: function(renderTo) {
      var view = getView();
      view.render(renderTo);
    },
    destroy: function() {
      console.log("UsrDashboardHelper is offline.");
      clearInterval(this.timerId);
    }
  };
});

 

Нравится

Поделиться

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

Вопрос

При попытке отправить е-мейл сообщение через контрагента (ярлык конвертик) — не подтягиваются последние созданные шаблоны. 

Были созданы новые шаблоны е-мейл сообщений. Они успешно ушли в рассылку. Теперь нужно дослать эти же шаблоны отдельным контрагентам, но при создании письма из раздела [Контрагент] эти шаблоны отсутствуют. 

Ответ

При создании письма из раздела [Контрагенты] указанные шаблоны отсутствуют, так как в шаблонах указан источник макросов "Контакт":

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

Это означает, что данный шаблон можно отправить только со страницы контакта, там данные шаблоны будут присутствовать в списке.



В качестве решения можем рекомендовать очистить поле [Источник макросов] в данных шаблонах. Тогда шаблоны будут отображаться в списке при написании письма из любого раздела.

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

Нравится

Поделиться

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

Вопрос

Клиент не может войти в систему(Элемент с идентификатором "" не найден)

Ответ

Первыми действиями должны быть очистка Redis, компиляция и перезапуск сайта.

Если указанные действия не принесли результат, то необходимо выполнить "Проверку конфигурации" и опеределить в каком разделе ошибка.

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

Нравится

Поделиться

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

Вопрос

Каким образом возможно создавать связанные поля?

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

Ответ

В bpm'online нет понятия связанных полей. Описанную Вами задачу возможно решить с использованием свойства visible для полей. Данное свойство может быть привязано как к булевому атрибуту, так и к методу, возвращающему булевый тип. Свойство visible проверяется как при загрузке карточки, так и при любом изменении модели.

Пример скрытия справочного поля по значению текстового поля:

1) Объявление полей в секции diff:

{
    "operation": "insert",
    "name": "myEnum",
    "values": {
        visible : {
                bindTo: "isEnumVisble"
        },
        "caption": "myEnum",
        "dataValueType": 11,
        "bindTo": "myEnum",
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 3
        },
        "controlConfig": {
            "className": "Terrasoft.ComboBoxEdit",
            "list": {
                "bindTo": "myList"
            },
            "change": {
                "bindTo": "onMyValueChange"
            },
            "prepareList": {
                "bindTo": "prepareMyList"
            }
        }
    },
    "parentName": "ContactGeneralInfoBlock",
    "propertyName": "items",
    "index": 5
},
{
    "operation": "insert",
    "name": "UsrSTRING",
    "values": {
        "layout": {
            "colSpan": 12,
            "rowSpan": 1,
            "column": 0,
            "row": 2,
            "layoutName": "ContactGeneralInfoBlock"
        },
        "labelConfig": {},
        "enabled": true,
        "bindTo": "UsrSTRING"
    },
    "parentName": "ContactGeneralInfoBlock",
    "propertyName": "items",
    "index": 6
},

в данном коде интерес представляет только фрагмент:

visible : {
    bindTo: "isEnumVisble"
},

2) Сам метод:

isEnumVisble: function() {
    return this.get("UsrSTRING") === "Hello";
},

В данном примере поле "myEnum" будет отображено только если в поле "UsrSTRING" добавлен текст Hello c последующей сменой фокуса. Связывание с атрибутом происходит таким же образом, только в bindTo указывается не имя метода, а имя атрибута.

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

Нравится

Поделиться

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

Вопрос

Подскажите, как поставить "Россия" при выборе из справочника (не выпадающий список) страны, первой по списку.

Ответ

Необходимо создать замещающий объект Country (Страна), добавить туда целочисленную колонку UsrSort (Приоритет) со значением по умолчанию «0».

Далее в конфигурации добавить и выполнить SQL скрипт который проставит приоритет так как Вам нужно, вначале Россия, далее все по алфавиту:

Текст скрипта:

UPDATE Country SET UsrSort = 0 WHERE Name = 'Россия'
 
DECLARE @sort INT
DECLARE @id uniqueidentifier
DECLARE @getid CURSOR
 
SET @sort = 1
SET @getid = CURSOR FOR
SELECT Country.Id FROM Country
WHERE Name Not In ('Россия')
ORDER BY Name
 
OPEN @getid
FETCH NEXT
FROM @getid INTO @id
WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE Country SET UsrSort = @sort WHERE Id = @id
    SET @sort = @sort + 1
    FETCH NEXT
    FROM @getid INTO @id
END
 
CLOSE @getid
DEALLOCATE @getid

Далее эту колонку можно вывести в реестр выбора справочника через «Вид», «Настроить колонки» и отсортировать по ней через «Вид», «Сортировка».

Нравится

Поделиться

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

Вопрос:

Стоит задача получить в бизнес процессе id любого пользователя(контакта), входящего в определенную функциональную роль. В рамках процесса нам необходимо назначать пользователя, входящего в роль, ответственным за различные объекты в системе(Лид, Заказ и т.п.) Соответственно, в роль входит только один пользователь, нужно получить его id и назначить ответственным.

Подскажите как, корректнее реализовать этот кейс в бизнес процессе?

Ответ:

Для этих целей можно воспользоваться стандартными элементами чтения данных.

Необходимая информация хранится в следующих объектах - "Вхождение пользователя в роли" с колонками Пользователь и Роль, 

"Объект администрирования" (в т.ч. пользователи и роли) с колонкой Контакт.

1. Читать данные из "Объект администрирования" необходимой Функциональной роли (по названию или id) 

2. Читать данные "Вхождения пользователя в роли", где Роль = Пункт1. Id

3. Читать данные "Объект администрирования", где id = Пункт2. Пользователь

4. Использовать полученное значение Пункт3.Контакт согласно бизнес-целям.

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

Нравится

Поделиться

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