Добрый день!

После добавления визирования в стандартный раздел Продаж (Opportunity), перестали приходить уведомления в Центр уведомлений коммуникационной панели. Уведомления были добавлены отметкой чек-бокса "Enable approval in section" в секции "Approval" мастера разделов. Уведомления перестали приходить в том числе и для разделов Order, Invoice, по которым они ранее приходили. Индикатор визирования в коммуникационной панели отображается,  но текст уведомления в коммуникационной панели отсутствует. Добавление схемы "OpportunityVisaNotificationProvider", записи "Terrasoft.Configuration.OpportunityVisaNotificationProvider" в таблицу "NotificationProvider" не помогло.

В консоли браузера выводится ошибка :

POST https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities
[HTTP/2 400 Bad Request 84ms]
Error while sending request response status:
    400 (Bad Request)
    request url: https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities
    method: POST
    request data: {"sysAdminUnitId":"3190ebaf-a3cf-461d-95f6-29115215bd39","requestOptions":{"isPageable":true,"rowCount":15}} 
The server encountered an error processing the request. The exception message is '42601: each UNION query must have the same number of columns'

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

Нравится

3 комментария
Лучший ответ

Вам нужно доработать ваш OpportunityVisaNotificationProvider, в методе, где вы добавляете колонки, добавить недостающие, они должны быть аналогичны базовому запросу, поскольку используется конструкция UNION различия в колонках быть не должно.
Чтобы увидеть недостающие, вы можете отловить профайлером запрос и там увидите различия.

Дополнено:
В методе GetEntitiesSelect
Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):
Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".

В методе AddColumns
"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"

И 

public override void SetColumns(List<string> columns) {

            columns.Add("Id");

            columns.Add("Title");

            columns.Add("Date");

            columns.Add("Account");

            columns.Add("Contact");

            columns.Add("VisaObjectId");

            columns.Add("SchemaName");

            columns.Add("ImageId");

        }

Вам нужно доработать ваш OpportunityVisaNotificationProvider, в методе, где вы добавляете колонки, добавить недостающие, они должны быть аналогичны базовому запросу, поскольку используется конструкция UNION различия в колонках быть не должно.
Чтобы увидеть недостающие, вы можете отловить профайлером запрос и там увидите различия.

Дополнено:
В методе GetEntitiesSelect
Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):
Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".

В методе AddColumns
"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"

И 

public override void SetColumns(List<string> columns) {

            columns.Add("Id");

            columns.Add("Title");

            columns.Add("Date");

            columns.Add("Account");

            columns.Add("Contact");

            columns.Add("VisaObjectId");

            columns.Add("SchemaName");

            columns.Add("ImageId");

        }

Литвинко Павел,

Подскажите,
1) базовый - это BaseVisaNotificationProvider? 
2) должна ли быть запись для нового раздела Opportunity в таблице "NotificationProvider" ?
3) нужно ли добавлять копии БП по подобию "OrderVisaBaseSubprocess", 

"OrderVisaBaseSubprocessOrder1",
"OrderVisaBaseProcess",
"OrderVisaBaseProcessOrder1" ?

 

Литвинко Павел,

Спасибо, починил! Отличие было в другом разделе.

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

Доброго времени суток,

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

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

Спасибо!

Нравится

3 комментария
Лучший ответ

Если виза создаётся в процессе, то после её завершения можно поставить следующий элемент - отправку письма. 

 

Если же визу создают вручную, то можно сделать процесс, который на изменение записи визы (как-то надо будет выяснить, что это именно нужная нам виза) отправляет письмо 

Добрый день!

мы хотим проверить на вашу тестовом ПО веб приложения проверить как работать по транспортном услуги Карго работы для грузоперевозки!

Используйте low code средства платформы.

Если виза создаётся в процессе, то после её завершения можно поставить следующий элемент - отправку письма. 

 

Если же визу создают вручную, то можно сделать процесс, который на изменение записи визы (как-то надо будет выяснить, что это именно нужная нам виза) отправляет письмо 

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

У нас для некоторого нашего сотрудника создан справочник, по которому находится визирующий сотрудник. В логике БП с визированием, запись визирующего нашего сотрудника из справочника корректно вычитывается и помещается в элемент "Визирование" в поле Визирующий. После чего всякий экземпляр БП без каких-нибудь ошибок зависает на элементе "Визирование". Если жестко сделать указание на сотрудника, то бп отрабатывает.

Вопрос не о том, как исправить эту ошибку. Интересно бы повторить логику элемента Визирование на основе базовых элементов чтения/записи.

Элемент визирования работает так:

  • В системе создается новая виза. Вся информация по визе, например, визирующий, результат визирования, комментарии и т. д., отображается на вкладке [ Визы ] записи раздела, по которой запущен кейс. 
  • Email-уведомление о необходимости визирования отправляется в момент создания визы сотруднику или группе сотрудников, которые назначены визирующими.
  • После утверждения или отклонения визы выбранному сотруднику, который заинтересован в результате визирования, отправляется email-уведомление и выполняется переход на следующую стадию кейса.

Где посмотреть в коде механизм логики работы элемента визирования? Может быть логика у вас есть в виде какой-нибудь диаграммы? Может быть базовый элемент визирования кто-нибудь успешно дублировал сам?

Нравится

1 комментарий
Лучший ответ

Там очень странная логика - надо указать роль или конкретного пользователя.   В элементе визирования тип Approver'а важен (хотя, данные в любом случае берутся из System Administration Object) и самого пользователя надо читать из Users (view)

Мы в итоге сделали так:

Там очень странная логика - надо указать роль или конкретного пользователя.   В элементе визирования тип Approver'а важен (хотя, данные в любом случае берутся из System Administration Object) и самого пользователя надо читать из Users (view)

Мы в итоге сделали так:

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

Добрый день, коллеги. Необходимо добавить кнопку на панель визирования (помимо approve и reject).

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

Нравится

1 комментарий
Лучший ответ

Замещать как и расширять модули можно, если делать это правильно.
Вот пример замещения модуля BaseCommunicationViewModel.
Создаем новый модуль, в данном случае будем замещать (override, можно использовать расширение extend(вместо override заменить)). Затем, где нужно, вызываете реализованный вами модуль.
Например в детали: 
define("AppFormCommunicationDetail", ["ScBaseCommunicationViewModel"],

Реализация модуля:

define("ScBaseCommunicationViewModel", ["BaseCommunicationViewModel"],
function() {
	Ext.define("Terrasoft.ScBaseCommunicationViewModel", {
		override: "Terrasoft.BaseCommunicationViewModel",
		alternateClassName: "Terrasoft.ScBaseCommunicationViewModel",
		getLinkUrl: function(value) {
			//нужная реализация метода
		}
	});
	return Terrasoft.ScBaseCommunicationViewModel;
});

 

Замещать как и расширять модули можно, если делать это правильно.
Вот пример замещения модуля BaseCommunicationViewModel.
Создаем новый модуль, в данном случае будем замещать (override, можно использовать расширение extend(вместо override заменить)). Затем, где нужно, вызываете реализованный вами модуль.
Например в детали: 
define("AppFormCommunicationDetail", ["ScBaseCommunicationViewModel"],

Реализация модуля:

define("ScBaseCommunicationViewModel", ["BaseCommunicationViewModel"],
function() {
	Ext.define("Terrasoft.ScBaseCommunicationViewModel", {
		override: "Terrasoft.BaseCommunicationViewModel",
		alternateClassName: "Terrasoft.ScBaseCommunicationViewModel",
		getLinkUrl: function(value) {
			//нужная реализация метода
		}
	});
	return Terrasoft.ScBaseCommunicationViewModel;
});

 

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

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

В кейсе раздела на каждом этапе присутствует виза, положительный ответ на которую переводит запись на следующую стадию. После перехода на вторую стадию другому пользователю приходит виза. Также на этой стадии в бизнес-правилах поле «Примечание» становится обязательным, однако если не заполнить это поле и утвердить визу – ошибок не произойдет, стадия перейдет на 3-ью, запись сохранится, процесс согласно кейсы пойдет дальше.

 

 

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

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

Нравится

1 комментарий
Лучший ответ

Добрый день.

Недавно подобная проблема обсуждалась в этом посте.

Добрый день.

Недавно подобная проблема обсуждалась в этом посте.

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

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

Подскажите пожалуйста, как на странице карточки отловить нажатие на кнопки Утвердить/Отклонить визы (на ActionsDashboardContainer, не детали)? Дело в том, что нужно запретить пользователю утверждать визу без сохранения карточки.

Нравится

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

Логика этих кнопок реализована в схеме VisaDetailV2 в функциях, которые так и называются approve и reject:

/**
 * @inheritdoc Terrasoft.BaseGridDetailV2#addRecordOperationsMenuItems
 * @override
 */
addRecordOperationsMenuItems: function(toolsButtonMenu) {
	this.callParent(arguments);
	toolsButtonMenu.addItem(this.getButtonMenuItem({
		Caption: {bindTo: "Resources.Strings.Approve"},
		Click: {bindTo: "approve"},
		Enabled: {bindTo: "getEditRecordButtonEnabled"},
		ImageConfig: this.get("Resources.Images.ApproveImage")
	}), 0);
	toolsButtonMenu.addItem(this.getButtonMenuItem({
		Caption: {bindTo: "Resources.Strings.Reject"},
		Click: {bindTo: "reject"},
		Enabled: {bindTo: "getEditRecordButtonEnabled"},
		ImageConfig: this.get("Resources.Images.RejectImage")
	}), 1);
 
.....
 
/**
 * Approval of the selected record.
 * @private
 */
approve: function() {
	var activeRow = this.getActiveRow();
	if (!this.checkState(activeRow)) {
		return;
	}
	VisaHelper.approveAction(activeRow, this.visaHelperActionsCallBack, this);
},
 
/**
 * Rejected approval.
 * @private
 */
reject: function() {
	var activeRow = this.getActiveRow();
	if (!this.checkState(activeRow)) {
		return;
	}
	VisaHelper.rejectAction(activeRow, this.visaHelperActionsCallBack, this);
},

 Там можно добавить интересующую проверку. А передача информации между карточкой и деталью делается через «песочницу».

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

Здравствуйте Александр, спасибо за ответ!

Правда решил кейс другим способом: оверрайдом класса ApprovalDashboardItemViewModel, затем в SectionActionsDashboard указал зависимость от нового класса и передачу информацию в карточку реализовал через песочницу.

Видимо, мы с Вами имели в виду разные элементы интерфейса. Я как раз имел в виду кнопки детали, сходу не вижу разделов и с ActionsDashboard, и с деталью виз одновременно.

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

Коллеги, приветствую!

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

Благодарю заранее.

Нравится

1 комментарий
Лучший ответ

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

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

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

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

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

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

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

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

 

Подскажите, пожалуйста, как в визировании (в бизнес-процессе) при отказе сделать причину отказа обязательной для заполнения?

 

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

Нравится

3 комментария
Лучший ответ

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

Также можно попробовать настроить автогенерируемую страницу с причиной отказа обязательной для заполнения и потом результат выбора пользователя, то есть значение причины отказа передавать в элемент 'Изменить данные' для этой визы. Но этот вариант не совсем корректный, так как пользователь может закрыть окно без выбора значения причины отказа.

Как подготовка к аттестации в целом? 

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

Также можно попробовать настроить автогенерируемую страницу с причиной отказа обязательной для заполнения и потом результат выбора пользователя, то есть значение причины отказа передавать в элемент 'Изменить данные' для этой визы. Но этот вариант не совсем корректный, так как пользователь может закрыть окно без выбора значения причины отказа.

Екатерина, получилось ли сделать причину отказа обязательной ? Нигде не могу найти решение этой задачи.

Показать все комментарии
Доброго времени суток.
Вопрос по визированию.
В базовом функционале реализован механизм визирования следующего плана:
на деталь визы приходит запись с заполнением поля "Визирующий", 
которое ссылается на таблицу SysAdminUnit. После для пользователей, указанных в поле "Визирующий", в коммуникационной панели
появляются уведомления.
Возникла необходимость выполнить следующее: добавить на деталь "Визы" поле "Должность"(справочник Job).
Вместо визирующего выбирать должность. То есть получается на деталь "Визы" упадет запись с заполненным полем
"Должность", но с пустым полем "Визирующий". Уведомления нужно разослать всем пользователям, в контактах которых
указана должность соответствующая той, которая указна на записи детали "Визы". Базовый механизм убирать не нужно. Пользователь будет выбирать или визирующего, или
должность.

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

Вопрос: насколько проблематично допилить такой функционал? 

Нравится

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

Есть готовое дополнение Approval for bpm'online, которое реализует более сложные правила визирования.

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

Добрый день.

Пытаюсь выбрать шаблон письма в элементе БП "Визирование", но список пуст. Если при этом перейти в расширенный режим, то в "Шаблоне письма визирующего" шаблон выбрать можно, но при отправке письма, информация о счете, что была добавленна с помощью макроса не заполняется. В чем может быть проблема? Объект счёт вроде указан, на счёт ссылка есть, но всё равно значения в письме пусты. Такая же ерунда если выбрать Договора, Заказы.

Скрины прилагаю.

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

Нравится

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

Добрый день!

Описанная Вами проблема связана с тем, что для указанного объекта нет созданных шаблонов. Вам необходимо, чтобы в поле "Источник макросов" в выбранном шаблоне был указан объект "Виза счета", а не "Счет": http://prntscr.com/jxkfg3
 

Анна Журавель,

Спасибо, заработало!

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