Необходимо асинхронно запустить из одного БП другой. Использую элемент скрипт

var manager			= context.UserConnection.ProcessSchemaManager;
var processSchema	= manager.GetInstanceByName("ProcessDealerClaim");
var process			= processSchema.CreateProcess(context.UserConnection);
process.SetPropertyValue("FlipId", Get<Guid>("FlipId"));
process.Execute(context.UserConnection);

И всё бы было хорошо, если бы не версионность, а именно, у БП ProcessDealerClaim есть более новая версия ProcessDealerClaimNewBusiness1. Можно, конечно, вписать ее, но что будет, когда появится ProcessDealerClaimNewBusiness2 ? Переделывать?

В общем вопрос - как поддержать версионность, чтобы запускалась актуальная версия БП?

Нравится

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

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

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

Алла Савельева пишет: Где именно посмотреть? ДЛЛ декомпилировать?

Зачем dll, посмотрите в коде схем, где запускают процессы.

Например, в LeftPanelTopMenuModule фильтруют список процессов по IsMaxVersion:

openProcessPage: function() {
	var vwSysProcessFilters = Terrasoft.createFilterGroup();
	vwSysProcessFilters.name = "vwSysProcessFiler";
	var sysWorkspaceFilter = Terrasoft.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.EQUAL, "SysWorkspace",
		Terrasoft.SysValue.CURRENT_WORKSPACE.value);
	vwSysProcessFilters.addItem(sysWorkspaceFilter);
	var businessProcessTagFilter = Terrasoft.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.EQUAL, "TagProperty",
		ConfigurationConstants.SysProcess.BusinessProcessTag);
	vwSysProcessFilters.addItem(businessProcessTagFilter);
	var isMaxVersionFilter = Terrasoft.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.EQUAL, "IsMaxVersion", true);
	vwSysProcessFilters.addItem(isMaxVersionFilter);
	var config = {
		entitySchemaName: "VwSysProcess",
		isRunProcessPage: true,
		captionLookup: resources.localizableStrings.processLookupCaption,
		multiSelect: false,
		columnName: "Caption",
		filters: vwSysProcessFilters,
		hideActions: true
	};
	var handler = function(args) {
		var activeItems = args.selectedRows.getItems();
		if (!this.Ext.isEmpty(activeItems)) {
			Terrasoft.ProcessModuleUtilities.executeProcess({
	sysProcessId: activeItems[0].Id
});
		}
	};
	LookupUtilities.Open(this.sandbox, config, handler, this, null, false, false);
},

Плюс есть сообщение ActiveProcessSchemaVersionChanged, на которое в некоторых схемах подписываются, например, в VwProcessLibSection.

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