Добрый день! Подскажите пожалуйста, как можно реализовать запуск бизнес-процесса на основании фильтрации в разделе? 

К примеру:

Есть заказы которые вручную отфильтровали по Состоянию и Дате создания, к этому результату необходимо применить БП который изменит значение текущего поля на другое (которое будет разово прописано в БП).

Нравится

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

под бизнес-задачу не подойдет готовое решение https://marketplace.terrasoft.ru/app/mass-updating-creatio? вроде бы выполняется то, что описано у вас в задаче

под бизнес-задачу не подойдет готовое решение https://marketplace.terrasoft.ru/app/mass-updating-creatio? вроде бы выполняется то, что описано у вас в задаче

И по сигналу на изменение этого поля можно запустить процесс 

Артём, если вопрос не в конкретном решении, покрываемом дополнением, а в общем случае, то это можно сделать базовыми средствами системы:

 

После выполнения фильтрации выбрать действие «Выбрать несколько записей», затем действие «Выбрать все» (это выберет не все в разделе, а именно отфильтрованные), а затем запустить ранее подключенный в мастере раздела БП для этих записей:

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

С версии 7.16 появилась возможность множественного запуска бизнес-процессов через элемент подпроцесс. 

 

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

 

Для этого необходимо создать процесс с двумя элементами: 

1. Элемент [Читать коллекцию] контактов у которых сегодня день рождения

2. Элемент [Подпроцесс] в который передать коллекцию контактов которых нужно поздравить.

 

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

 

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

Нравится

Поделиться

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

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

Так вышло, что бизнес-процессы игнорирует сигнал по добавлению пользователя (или вообще любой записи в таблицу SysAdminUnit). 

Пользователь создается вручную. 

У кого есть идеи, как все-таки запускать процесс при создании пользователя?

Нравится

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

Здравствуйте! Разве что через событийный слой

[EntityEventListener(SchemaName = "SysAdminUnit")]
    public class SysAdminUnitEntityEventListener : BaseEntityEventListener
{
  public override void OnSaving(object sender, EntityBeforeEventArgs e) {
    base.OnSaving(sender, e)
  }
  public override void OnInserting(object sender, EntityBeforeEventArgs e) {
    base.OnInserting(sender, e);
  }
 public override void OnUpdating(object sender, EntityBeforeEventArgs e) {
   base.OnUpdating(sender, e);
}
public override void OnUpdated(object sender, EntityAfterEventArgs e) {
 base.OnUpdated(sender, e);
}
public override void OnInserted(object sender, EntityAfterEventArgs e) {
 base.OnInserted(sender, e);
}
}

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

 

Так же БП можно запускать из серверного кода примерно следующее:
 

using Terrasoft.Core;
using Terrasoft.Core.Process;
using Terrasoft.Core.Process.Configuration;
 
ProcessSchema schema = UserConnection.ProcessSchemaManager.GetInstanceByName("LeadManagement");
//schema = UserConnection.ProcessSchemaManager.GetInstanceByUId(leadManagementProcessUId);
 
//Разные движки для интерпритируемых и компилироуемых БП
bool canUseFlowEngine = ProcessSchemaManager.GetCanUseFlowEngine(UserConnection, schema);
if(canUseFlowEngine) {
	var flowEngine = new FlowEngine(UserConnection);
	var param = new Dictionary<string, string>();
	param["LeadId"] = Entity.Id.ToString();
	flowEngine.RunProcess(schema, param);
} else {
	Process process = schema.CreateProcess(UserConnection);
	process.SetPropertyValue("LeadId", Entity.Id);
	process.Execute(UserConnection);
}		

 

Здравствуйте! Разве что через событийный слой

[EntityEventListener(SchemaName = "SysAdminUnit")]
    public class SysAdminUnitEntityEventListener : BaseEntityEventListener
{
  public override void OnSaving(object sender, EntityBeforeEventArgs e) {
    base.OnSaving(sender, e)
  }
  public override void OnInserting(object sender, EntityBeforeEventArgs e) {
    base.OnInserting(sender, e);
  }
 public override void OnUpdating(object sender, EntityBeforeEventArgs e) {
   base.OnUpdating(sender, e);
}
public override void OnUpdated(object sender, EntityAfterEventArgs e) {
 base.OnUpdated(sender, e);
}
public override void OnInserted(object sender, EntityAfterEventArgs e) {
 base.OnInserted(sender, e);
}
}

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

 

Так же БП можно запускать из серверного кода примерно следующее:
 

using Terrasoft.Core;
using Terrasoft.Core.Process;
using Terrasoft.Core.Process.Configuration;
 
ProcessSchema schema = UserConnection.ProcessSchemaManager.GetInstanceByName("LeadManagement");
//schema = UserConnection.ProcessSchemaManager.GetInstanceByUId(leadManagementProcessUId);
 
//Разные движки для интерпритируемых и компилироуемых БП
bool canUseFlowEngine = ProcessSchemaManager.GetCanUseFlowEngine(UserConnection, schema);
if(canUseFlowEngine) {
	var flowEngine = new FlowEngine(UserConnection);
	var param = new Dictionary<string, string>();
	param["LeadId"] = Entity.Id.ToString();
	flowEngine.RunProcess(schema, param);
} else {
	Process process = schema.CreateProcess(UserConnection);
	process.SetPropertyValue("LeadId", Entity.Id);
	process.Execute(UserConnection);
}		

 

Мне кажется, вопрос в другом.

При добавлении пользователя через интерфейс идёт обращение к веб-сервису AdministrationService и его методу UpdateOrCreateUser. В схеме AdministrationServiceUsers виден его код:

protected void SaveUser(object roleId) {
	bool isNew = false;
	object primaryColumnValue;
	changedValues.TryGetValue("Id", out primaryColumnValue);
	EntitySchema entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName("VwSysAdminUnit");
	Entity entity = entitySchema.CreateEntity(UserConnection);
	isNew = !entity.FetchFromDB(primaryColumnValue);
	if (isNew) {
		entity.SetDefColumnValues();
	}
	foreach (KeyValuePair<string, object> item in changedValues) {
		EntitySchemaColumn column = entitySchema.Columns.GetByName(item.Key);
		object columnValue = item.Value;
		if ((column.DataValueType is DateTimeDataValueType) && (item.Value != null)) {
			columnValue = DataTypeUtilities.ValueAsType<DateTime>(item.Value);
		}
		entity.SetColumnValue(column.ColumnValueName, columnValue);
	}
	entity.Save();
	if (isNew) {
		AddUserInRole(entity.PrimaryColumnValue, roleId);
	}
}

То есть видно, что вставка идёт через механизмы ESQ (значит, события отработают), но в объект VwSysAdminUnit, а не SysAdminUnit. Если посмотреть в коде встроенного БП на VwSysAdminUnit в пакетах Base, Translation и WebitelCollaborations, там как раз успешно добавляют свои обработчики на вставку, сохранение и другие события:

То есть нужно будет либо в Custom сделать своё переопределение схемы со встроенным БП, либо сделать отдельный БП, запускающийся по сигналу вставки туда:

В любом случае нужно учитывать, что в этой view видны и пользователи, и роли.

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

Запускаю из вне процесс

Имя процесса: UsrProcessWidgetTableExample

Параметр который надо вернуть: ProcessSchemaParameterJson

 

https://<url>/0/ServiceModel/ProcessEngineService.svc/UsrProcessWidgetTableExample/Execute?ResultParameterName=ProcessSchemaParameterJson

 

Сам процесс состоит из одного квадратика с кодом:

Set("ProcessSchemaParameterJson","test123");
return true;

 

Получаю ответ:

(
    [headers] => HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/xml; charset=utf-8
Server: Microsoft-IIS/10.0
Set-Cookie: BPMSESSIONID=3m.............vy; path=/0; secure; HttpOnly
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
Date: Thu, 30 Apr 2020 08:21:02 GMT
Content-Length: 81
 
 
    [body] => <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">null</string>
    [cookie] => Array
        (
            [BPMLOADER] => obz3y12.....etundy
            [.ASPXAUTH] => 68F1414ABB.......B6435F4185
            [BPMCSRF] => PEJj1P......mOjTe
            [UserName] => 83|117......111|114
        )
 
)

 

То есть всегда получаю null.

Вопрос: как запустить процесс из другого сервиса и вернуть в ответ строку? (или что я делаю не так?)

Нравится

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

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

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

Спасибо за ответ. Это печально )

В 7.17.1 должен появиться возврат результата из нынешних интерпретируемых БП, в академии будут инструкции по запуску из клиентского и серверного кода.

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

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

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

Реальный, частый кейс:

Пользователю открывается задача по БП с текстом: "Оформите счет и договор по заказу", в системе есть 2 стандартных бп, которые это делают, но, когда пользователь прямо из задачи по ссылке переходит к заказу и через действия пытается это сделать, ничего не происходит (он так думает), но на самом деле процессы то запускаются, просто в фоне...

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

Нравится

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

А если и у второго процесса галка стоит, что делать? Ещё одну настройку добавлять, «Запускать поверх вообще всех процессов»?

В таких случаях будет лучше переработать логику процессов: либо отключить стандартные и интегрировать их логику в свой процесс, либо разбить свой на несколько отдельных частей, которые завершаются поочерёдно.

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

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

П.С. Я не говорю про вариант подвязывания скрипта для кнопки создания продажи или счета.

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

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

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

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

Простейший кейс: У вас в бп 2 задачи, всего 2 задачи. Выполнятся бп начал при изменении статуса продажи, соответственно перед Вами открылась карточка задачи. В задаче написано: "Александр, дорогой, пожалуйста, создай счет к заказу, который связан с продажей". В задаче, естественно, есть связь с заказом.
Внимание, Александр, вопрос: как так переделать и оптимизировать наш с вами бп из двух задач, чтобы мы могли перейти сразу из этой задачи в заказ и нажать кнопку "Создать счет", чтобы у нас открылась картчочка счета и перенеслись туда продукты ? Вы там про автогенерируемые и преднастроенные страницы говорили, как там они перед нами появятся, если можно скриншотик.

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

Добрый день, Д. В таком случае попробуйте прямо в этом БП сделать не 2 блока, а 6, при этом вторые 2 будут связаны с заказом, а третьи 2 — со счётом. Если пользователь будет идти по процессу, ему не нужно будет ни вручную создавать счёт, ни нажимать дополнительные кнопки в карточках, а карточка нового счёта  с уже заполненными полями связи с продажей и заказом автоматически появится при сохранении заказа в соответствии с логикой процесса. Дополнительную информацию пользователю, что от него хочет в этот момент система, можно показывать как раз в автогенерируемых страницах.

Коллеги, если есть возможность создать такой признак (стартовать бп поверх запущенного), это будет супер.
Спасибо.

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

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

Коллеги, подскажите возможно ли запускать БП и передавать в него параметры из серверного кода? Если да, просьба скинуть примеры.

Заранее благодарен.

Нравится

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

Как то так 

using Terrasoft.Core;
using Terrasoft.Core.Process;
using Terrasoft.Core.Process.Configuration;
 
ProcessSchema schema = UserConnection.ProcessSchemaManager.GetInstanceByName("LeadManagement");
//schema = UserConnection.ProcessSchemaManager.GetInstanceByUId(leadManagementProcessUId);
 
//Разные движки для интерпритируемых и компилироуемых БП
bool canUseFlowEngine = ProcessSchemaManager.GetCanUseFlowEngine(UserConnection, schema);
if(canUseFlowEngine) {
	var flowEngine = new FlowEngine(UserConnection);
	var param = new Dictionary<string, string>();
	param["LeadId"] = Entity.Id.ToString();
	flowEngine.RunProcess(schema, param);
} else {
	Process process = schema.CreateProcess(UserConnection);
	process.SetPropertyValue("LeadId", Entity.Id);
	process.Execute(UserConnection);
}		

 

Как то так 

using Terrasoft.Core;
using Terrasoft.Core.Process;
using Terrasoft.Core.Process.Configuration;
 
ProcessSchema schema = UserConnection.ProcessSchemaManager.GetInstanceByName("LeadManagement");
//schema = UserConnection.ProcessSchemaManager.GetInstanceByUId(leadManagementProcessUId);
 
//Разные движки для интерпритируемых и компилироуемых БП
bool canUseFlowEngine = ProcessSchemaManager.GetCanUseFlowEngine(UserConnection, schema);
if(canUseFlowEngine) {
	var flowEngine = new FlowEngine(UserConnection);
	var param = new Dictionary<string, string>();
	param["LeadId"] = Entity.Id.ToString();
	flowEngine.RunProcess(schema, param);
} else {
	Process process = schema.CreateProcess(UserConnection);
	process.SetPropertyValue("LeadId", Entity.Id);
	process.Execute(UserConnection);
}		

 

Григорий Чех,

благодарю

Григорий Чех,

"Разные движки для интерпритируемых и компилироуемых БП"
Добрый вечер Григорий, а можете уточнить какие именно движки?
Плиз)))

Андрей, речь о том, что раньше процессы были компилируемые, а сейчас — интерпретируемые. Сейчас можно создать только интерпретируемый. Но старые, созданные давно (как стандартные, так и самодельные) остались.

Основная разница для разработчика — в обращении из скрипта в БП к параметрам (напрямую в старых или через Get и Set в новых). Ну и в запуске, как написал Григорий. Ещё до последнего времени из интерпретируемых нельзя было возвращать результат в параметре, теперь уже можно.

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

Добрый вечер!
Для объекта Лид создал замещающий модуль, в котором добавил новое действие в карточке объекта.
Подскажите, пожалуйста, как можно запустить бизнес-процесс при нажатии на созданное действие?

Нравится

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

В теле метода, который выполняется по клику на действие можно вызвать процесс как-то так:

var url = 'https://' + document.domain + '/0/ServiceModel/ProcessEngineService.svc/MyProcessName/Execute?Param1Name=Param1Value&Param2Name=Param2Value';
var request = null;
request = new XMLHttpRequest();
request.open("GET", url, true);
request.send(null);

Где MyProcessName - название БП.
Param1Name/Param2Name - названия параметров, которые необходимо передать в БП.
Param1Value/Param2Value - значения параметров, соответственно.

Максим, спасибо.

Недавно реализовывала этот вопрос.
После консультаций с суппортом вот что получилось (работает)

добавлен Action:

actions.push({
	caption: 'Menedžeru peļņas aprēķins',
	methodName: "setPaymentDate"
});

и вот метод setPaymentDate:

this.methods.setPaymentDate = function() {
	var contactId = this.get('Id');
	var processArgs = {
		sysProcessName: 'SetPaymentDate',
		parameters: {
			ContactId: contactId
			}
		};
	this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);
};

Это запуск бизнесс-процесса даже с параметром (ContactId)

Здравствуйте!
Подскажите пожалуйста куда нужно прописывать эти коды:

actions.push({
        caption: 'Menedžeru peļņas aprēķins',
        methodName: "setPaymentDate"
});

и

this.methods.setPaymentDate = function() {
        var contactId = this.get('Id');
        var processArgs = {
                sysProcessName: 'SetPaymentDate',
                parameters: {
                        ContactId: contactId
                        }
                };
        this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);
};

В какой клиентский модуль и в какую его часть?

Николай,
Добавить действие и обработчик нужно в схему, в который необходимо реализовать данный функционал. Если это страница редактирования то ..PageV2, если реестр раздела то ..SectionV2 (вместо точек подставить название объекта, например – OrderSectionV2, OrderPageV2).
Оба фрагмента кода необходимо добавить в блок methods: { ... }
Примеры можно найти в системе. Вот один из них (OrderPageV2):
methods: {
//Добавить действие
getActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.add("CreateContract", this.getButtonMenuItem({
"Caption": {"bindTo": "Resources.Strings.CreateContract"},
"Tag": "createContract",
"Enabled": {"bindTo": "canEntityBeOperated"}
}));
return actionMenuItems;
},
...
//Обработчик
createContract: function() {
...
},
...
}

Добрый день.

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

methods: {
//Добавить действие
getActions: function() {
var actionMenuItems = this.callParent(arguments);
actionMenuItems.add("CreateDespatchByOrder", this.getButtonMenuItem({
"Caption": {"bindTo": "Resources.Strings.CreateDespatchByOrder"},
"Tag": "createDespatchByOrder",
"Enabled": {"bindTo": "canEntityBeOperated"}
}));
return actionMenuItems;
},
//Обработчик
createDespatchByOrder: function() {
var contactId = this.get('Id');
var processArgs = {
sysProcessName: 'UsrProcess2',
parameters: {
ContactId: contactId
}
};
this.runProcess(processArgs.sysProcessName, processArgs.parameters, this);
},

Попробуйте запустить БП с помощью executeProcess().
Описание можно найти на академии: https://academy.terrasoft.ua/documents/technic-sdk/7-9/zapusk-processa-…

Спасибо! помогло

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

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

В случае необходимости иметь возможность запустить БП путем перехода по гиперссылке, например в формате: terrasoft://WFStart/Workflow/%7b8C91E8A4-942C-4F39-BCB3-0C7D5D9C5779}/AccountID|%7b04B25C6A-9336-42DD-838F-E686D83B882C%7d (ссылка),

где
8C91E8A4-942C-4F39-BCB3-0C7D5D9C5779 – идентификатор диаграммы БП,
AccountID|%7b04B25C6A-9336-42DD-838F-E686D83B882C%7d – параметр/значение, передаваемое в БП (Все параметры в ссылке разделяются символом «/»), проделайте следующие изменения в конфигурации:

1. Внесите следующие изменения в функцию RunHyperlink() скрипта scr_HyperlinkUtils:

function RunHyperlink(Action, Params) {
    Action = Action.toLowerCase();
    switch (Action) {
        case 'goto':
                HyperlinkGotoWorkspace(Params);
                break;
        case 'open':
                return HyperlinkOpenCard(Params);
        break;
                //Вставить
        case 'wfstart':
                return HyperlinkStartWorkflow(Params);
                break;
    }
}

2. Добавьте функцию запуска БП HyperlinkStartWorkflow() в скрипт scr_HyperlinkUtils.

function HyperlinkStartWorkflow(Params) {
         if (Params.length 2) {
                   return;
         }
         var Module = Params[0];
         var IDValue = Params[1].replace(/%7b/g, '{').replace(/%7d/, '}'); //Diagram ID
         var ParameterHash = Params.slice(2, Params.length);
         var ParamNames = new Array();
         var ParamValues = new Array();
         for (var i = 0, iLength = ParameterHash.length; i iLength; i++) {
                   var tmp = new String(ParameterHash[i]).split('|');
                   if (('length' in tmp) && (tmp.length > 1)) {
                            ParamNames.push(tmp[0]);
                            ParamValues.push(tmp[1]);
                   }
         }
         WFStartByID(IDValue, ParamNames, ParamValues);
}

Приятной работы, с запуском БП! :smile:

Нравится

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

Здравствуйте, коллеги!

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

Нравится

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

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

Потом возможны такие варианты:
1) если не нужно связывать процесс руководителя с подпроцессами сотрудников, то можно в скрипте к процессу запустить подпроцессы примерно так:

    var ParamNames = new Array('OwnerID');
    var ParamValues = new Array(null);
    for (var i = 0; i < OwnerIDs.length; i++)
    {
        ParamValues[0] = OwnerIDs[i];
        WFStartByID('{ИД сервиса-диаграммы}', ParamNames, ParamValues);
    }

2) если нужно привязаться к процессу руководителя, то (предполагаем, что количество сотрудников заранее неизвестно, а вычисляется по БП на каком то этапе):
- в родительской диаграмме ставим блок-подпроцесс, параметр которого OwnerID связываем с параметром основного процесса;
- перед этим блоком ставим блок-ромбик (условие), из которого будет два выхода - один на подпроцесс, второй на себя (это чтобы зациклить создание определенного количества подпроцессов). В обработчике условия собственно указываем очередное значение параметра OwnerID, и если еще не для всех запустили подпроцесс - зацикливаемся, иначе идем дальше.

Это так, схематично, отвечу на вопросы если надо :)

Валерий, спасибо за совет. Завтра еще раз проверим, как-то не получалось :(

Валерий, я пробовал Ваш способ, делал немного по другому - без разницы!
Новый БП получает OwnerID, но инициатором и дальше остается тот кто запустил. Соответственно следующий уже шаг обратно возвращается к инициатору БП, а не тому, чей OwnerID мы передали.
Нам, фактически, нужно изменить ответственного по БП.

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

Немного поэкспериментировал, прикладываю сервисы для 3.3.2.
Чтобы обойтись без правки базовых сервисов (wa_TaskAction и т.п), можно сделать так (это как раз в примере):
1) в дочернем БП создаем параметр диаграммы ChildOwnerID, и в каждом блоке-задаче процесса параметр OwnerID ставим в соответствие параметру ChildOwnerID диаграммы;
2) в родительском БП
- также делаем параметр ChildOwnerID
- перед запуском подпроцесса устанавливаем параметр в нужный ИД контакта
- ставим параметр ChildOwnerID блока-подпроцесса в соответствие параметру диаграммы ChildOwnerID

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

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

Нравится

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

В базовой конфигурации такой функциональности нет, взгляните на наше расширение (http://community.terrasoft.ua/catalog/4881), возможно заинтересует.

"Валерий Андрусик" написал:

Валерий, ваше решение достаточно интересное хотелось бы узнать о нем подробнее - стоимость, условие внедрения.
Что касается затрагиваемой мною темы, то здесь я считаю что была недоработка системы, т.е. если пользователь отменил действие или что то допустил не то, это другое дело, но запланированная задержка, должна быть задержкой на указанный промежуток времени, а не на все время :smile:

Да, проблему с задержкой обсуждали вот тут:
http://community.terrasoft.ua/ideas/3363

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