Задача

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

Решение

Можно отключить отображение определенных страниц редактирования с помощью метода фильтрации страниц редактирования. В этом случае страница редактирования останется в системе, но пользователи в разделе ее видеть не будут.  Пример такого метода можно посмотреть в разделе [Активности], страница «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 комментариев
Показать все комментарии

Задача

Необходимо настроить сортировку электронной почты, загружаемой в 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 комментариев
Показать все комментарии

Вопрос

Версия 7.4.1, в БП использую элемент Add data.

Нужно в поле с типом дата/время установить значение = текущая дата, время 9-00

что то вроде DateTime(DateTime.Now.Year, DateTime.Now.Month,DateTime.Now.Date, 9, 0, 0) не срабатывает...

Ответ

Для реализации данного запроса, необходимо построить БП (состоит из элементов "Чтение данных", "Формула" и "Изменение данных") и в элементе "Формула" указать следующее:

DateTime.Today + new TimeSpan(9, 0, 0);

 

Нравится

Поделиться

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

А если надо получить 21-е число следующего месяца?

У меня вышло так:

[#Параметр 1#].AddDays(-[#Параметр 1#].Day + 21).AddMonths(1)

Если у Вас тоже упомянутая старая версия 7.4.1 и в ней формулами никак, всегда можно использовать блок-скрипт с кодом, как в этих примерах.

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

Задача

Добавление ссылки на свою страницу на панели разделов

Решение

1) Cоздать новый раздел.

2) В Схеме страницы нового раздела (UsrNewSection) добавить метод в секцию методов:

methods: {
init: function() {
      window.location.replace("http://stackoverflow.com");
   }
},

 

Нравится

Поделиться

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

Подскажите, вы хотите чтоб ссылка была так реализована?



Но если вы добавляете ее как описано выше, то она не появляется?

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

Задача

Параметр определнения скрыть/ раскрыть деталь при входе на страницу

Решение

Вы можете переопределить функцию onDetailCollapsedChanged, которая отвечает за отображение детали:

/**
* Обрабатывает сворачивание или разворачивание детали.
* @protected
* @virtual
* @param {Boolean} isCollapsed Признак свернутости/развернутости детали.
*/
onDetailCollapsedChanged: function(isCollapsed) {
    var profile = this.getProfile();
    var key = this.getProfileKey();
    if (profile && key) {
        profile.isCollapsed = isCollapsed;
        this.Terrasoft.utils.saveUserProfile(key, profile, false);
    }
    this.set("IsDetailCollapsed", isCollapsed);
},

 

Нравится

Поделиться

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

Добрый день! Коллеги, подскажите как на дальше использовать переопределенную функцию на странице с деталью которую нужно раскрывать? Понимаю что в блоке metods переопределяем функцию

onDetailCollapsedChanged, а дальше нужно ее как-то вызвать из нужной мне детали, но как это корректно сделать не знаю

Стельмаш Дмитрий Сергеевич,

 

Здравствуйте.

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

 

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

В конфигурации создать "Замещающую модель представления" и наследоваться от какой-то детали - например ServicePactRecipientsDetail.

Использовав примерно такой код:

 define("ServicePactRecipientsDetail", [],
	function() {
		return {
			entitySchemaName: "ServiceInServicePact",
			messages: {},
			methods: {
				onDetailCollapsedChanged: function(isCollapsed) {
					debugger;
					var profile = this.getProfile();
					var key = this.getProfileKey();
					if (profile && key) {
						profile.isCollapsed = isCollapsed;
						this.Terrasoft.utils.saveUserProfile(key, profile, false);
					}
					this.set("IsDetailCollapsed", isCollapsed);
				}
			},
			diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
		};
	});

 

Григорьев Михаил Алексеевич,

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

Стельмаш Дмитрий Сергеевич,

 

Где вы выводите делать, там и будет она разворачиваться/сворачиваться.

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

Задача

Скрыть кнопку [добавить] в детали

Решение

Скрытие кнопки можно реализовать следующим образом:

В схеме детали, в разделе diff, добавить следующее:

{
    "operation": "remove",
    "name": "addRecordButton"
}

 

Нравится

Поделиться

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

    {

                "operation": "remove",

                "name": "AddRecordButton"

            }

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

Всем привет,

Заметил, что в версии 7.2 фронт устроен совсем по другому, чем в более поздних версиях. В коде страницы нет конфигурации расположения полей (diff в более поздних версиях). Там только ExtJs код, который объявляет поля добавленные на страницу. Отсюда вопрос: где хранятся конфигурации полей (мета полей на странице, их порядок и т.д.)?

Есть ли какой-то мануал стандартных кейсов как для новых версий (добавление кнопки, видимость и доступность полей и т.д.)?

Заранее спасибо за ответ.

Нравится

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

Дмитрий, здравствуйте!

Информация о элементах храниться на странице (page)

Вся доступная SDK информация доступна по ссылке - https://www.bpmonline.com/bpmonlinesdken/

Также есть видео на канале - https://www.youtube.com/user/terrasoftvideo/videos

Вильшанский Дмитрий,

Если поменять поля местами на карточке, то карточка не меняется (дата Изменено остается той же, никаких изменений в карточке не видно). Более того, я удалил поле из объекта и из карточки, сбросил кэш но страница всё равно ругается на это поле. Вы уверены, что конфигурация полей не хранится где-то в другом месте?

Добрый день

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

В 7.2 действительно нужно было прописывать вручную контролы. А так как они прописываются вручную, в коде, то естественно они более нигде не хранятся. Если после очистки Redis, кэша в консоле на клиенте вы увидите новый код, но система будет ругаться, то тогда нужно посмотреть откуда по callstack пришла эта ошибка. Возможно есть завязки на существования этого поля.

 

В случае с перестановкой позиций ситуация одинаковая. Скорее всего дела в Redis

Коллеги,

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

Вскрытие показало, что в этой версии diff хранится в отдельной таблице в БД (собственно об этом я и спрашивал в первом посте!). При удалении поля из карточки, в diff всё равно остается упоминание этого поля(т.к. в этой системе нет модификатора remove для удаления поля из диффа) и система на него ругается. После удаления упоминаний об этом поле из diff всё заработало как нужно.

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

Всем привет,

Написал простой конфигурационный веб-сервис по примеру как вот тут:

https://academy.terrasoft.ru/documents/technic-sdk/7-12/kak-sozdat-svoy…

пытаюсь тестировать его через приложение SoapUI, но получаю ошибку 401 unauthorized

Вызываю вот так http://mycrm/BPMOnline/0/rest/MyService/ServiceMethod/

В SoapUI на вкладке авторизации указал мои учетные данные (логи и пароль).

Что я делаю не так и в чем может быть проблема?

Заранее спасибо за ответ.

Нравится

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

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

Зверев Александр,

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

Работа с AuthService и куками была ещё в 5.Х. Если в более новых что-то менялось для защиты от CSRF-атак, смотрите старые примеры, где без неё.

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

Всем привет!

У нас в разработке интеграция с одной из внутренней систем, которая не может общаться с bpm по средством сервисов, но имеет доступ к одной из таблиц в БД. Есть ли возможность запустить БП в BPM'online при апдейте значения в БД сторонней системой?

Версия системы 7.2

Заранее спасибо за ответ. 

Нравится

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

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

Процесс можно запустить с нужными параметрами извне при помощи ProcessEngineService. Перед этим нужно авторизоваться в AuthService. Соответственно, можете либо непосредственно обращаться к ним из другой системы, либо обращаться к веб-сервисам в базе на триггере из SQL-кода.

 

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

Коллеги. всем доброго времени суток! Нужна Ваша помощь.

В преднастроенной странице реализовал метод подсчета вводимых символов - http://prntscr.com/jr6ki0

срабатывает функция - http://prntscr.com/jr6ky6

Результат - http://prntscr.com/jr6lss, http://prntscr.com/jr6m3d

Делаю так же в карточке редактирования раздела SMS:

http://prntscr.com/jr6mwu - не срабатывает

http://prntscr.com/jr6nx7

Подскажите в чем может быть проблема?

Заранее благодарю!

Нравится

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