Добавить кнопку к элементу реестра и инициировать запуск бизнес-процесса по ее нажатию

Добрый день!

Как добавить "зеленую" кнопку c именем "Начать работу с лидом" в разделе "Лиды" к уже существующим:
1

И самое главное, как сделать так, чтобы при клике на нее запустился определенный бизнес процесс, скажем "LeadProcess" ?

С системой работаю еще мало, поэтому если можно больше подробностей. Буду очень благодарен.

Спасибо!

Нравится

5 комментариев

Запуск БП по кнопке:
http://www.community.terrasoft.ru/forum/topic/10554#comment-47944

Добавление кнопки в активную строку (на примере кнопки позвонить водителю в кастомном разделе):

define("SfEvacuatorSection", ["SfEvacuatorSectionResources", "GridUtilitiesV2"],
function(resources) {
	return {
		entitySchemaName: "SfEvacuator",
		contextHelpId: "1001",
		diff: /**SCHEMA_DIFF*/[
			{ // добавление самой кнопки
				"operation": "insert",
				"name": "DataGridActiveRowCallDriverAction",
				"parentName": "DataGrid",
				"propertyName": "activeRowActions",
				"values": {
					"className": "Terrasoft.Button",
					"style": Terrasoft.controls.ButtonEnums.style.BLUE,
					"caption": resources.localizableStrings.CallDriverRowButtonCaption,
					"tag": "call"
				}
			}
		]/**SCHEMA_DIFF*/,
		messages: {},
		methods: {
			onActiveRowAction: function(buttonTag, primaryColumnValue) {
				switch (buttonTag) {
					// замещение базового метода для правильной обработки нажатия по тэгу
					case "call":
						this.callDriver(primaryColumnValue);
						break;
					default:
						this.callParent(arguments);
						break;
				}
			},
			callDriver: function(recordId) {
				//функция-обработчик
			}
		}
	};
});

Попробую подробнее описать задачу.

В разделе "Лиды" в реестре есть зеленые кнопки "Квалифицировть" и т.д. наряду с "Открыть" "Копировать" и т.д.

Мне нужно чтобы при нажатии этих кнопок запускались мои собственные процессы. Например при клике на кнопку "Квалифицировать" мне нужно запустить свой процесс "SellsLeadProcessContact".

Вот код, который у меня получился:

Кнопка:

				{
					"operation": "insert",
					"name": "DataGridActiveRowQualificationProcessAction",
					"parentName": "DataGrid",
					"propertyName": "activeRowActions",
					"values": {
						"className": "Terrasoft.Button",
						"style": Terrasoft.controls.ButtonEnums.style.GREEN,
						"caption": {"bindTo": "getQualificationProcessButtonCaption"},
						"tag": "continueQualify",
						"iconAlign": Terrasoft.controls.ButtonEnums.iconAlign.RIGHT,
						"imageConfig": resources.localizableImages.QualificationProcessActionImage,
						"classes": {"textClass": "ts-grid-image-action"},
						"visible": {"bindTo": "getIsQualificationStageActive"}
					}
				}

Обработка нажатия:

				onActiveRowAction: function(buttonTag) {
					if (buttonTag === "continueQualify") {
						this.continueQualify();
					} else {
						this.callParent(arguments);
					}
				},

Функция запуска процессов в зависимости от статуса лида

				continueQualify: function(id) {
					var qualifyStatusId = this.getQualifyStatus(id);
					var qualifyStatus = LeadConfigurationConst.LeadConst.QualifyStatus;
					var LeadId = this.get(id);
					var processLeadContact = {
						sysProcessName: "SellsLeadProcessContact",
						parameters: {
							LeadId: LeadId
						}
					};
					var processLeadInformation = {
						sysProcessName: "SellsLeadProcessInformation",
						parameters: {
							LeadId: LeadId
						}
					};
					var processLeadMeet = {
						sysProcessName: "SellsLeadProcessMeet",
						parameters: {
							LeadId: LeadId
						}
					};
					if (qualifyStatusId === qualifyStatus.Qualification) {
						this.runProcess(processLeadContact.sysProcessName, processLeadContact.parameters, this);
					}
					if (qualifyStatusId === qualifyStatus.Distribution) {
						this.runProcess(processLeadInformation.sysProcessName, processLeadInformation.parameters, this);
					}
					if (qualifyStatusId === qualifyStatus.TransferForSale) {
						this.runProcess(processLeadMeet.sysProcessName, processLeadMeet.parameters, this);
					}
					return "";
				},

В бизнес процессе создал параметр:

222

В итоге процессы не запускаются.

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

Ошибка 1
POST https://sells.bpmonline.com/0/DataService/json/SyncReply/SelectQuery 500 (FormatException)

Ошибка 2
Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Ошибка 3
user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: https://sells.bpmonline.com/0/core/e8b5149b83cf4b4da75b8dc1338afb83/com…
line: 600
message: Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Весь код схемы в приложении

Помогите пожалуйста с проблемой. Уже 3 дня прошло с момента ее возникновения.

Спасибо!

Добрый день!

Насколько я понял, речь идет о странице раздела.

В этом случае получение идентификатора записи с помощью функции this.get(id) не сработает:

var LeadId = this.get(id); //неправильно

Ошибка ниже как раз и говорит о том, что this.get(id), вероятнее всего, возвращает undefined:

message: Uncaught Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Получайте Id следующим образом:

var LeadId = this.get("ActiveRow");

Все, получилось. Но ошибка была не только в этом.

Строка запуска процесса была написана так:

this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);

А когда заменил спереди "this" на "ProcessModuleUtilities", то процесс запустился.

ProcessModuleUtilities.runProcess(processArgs.sysProcessName, processArgs.parameters, this);

Спасибо большое за помощь!

Вопрос снят

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