Установка параметра типа - "Collection of records" при вызове процесса
Привет.
При запуске процесса из элемента "Задание сценарий" следующим образом:
var manager = UserConnection.ProcessSchemaManager;
var flowEngine = new FlowEngine(UserConnection);
var processSchema = manager.GetInstanceByName("test process");
Dictionary parameter = new Dictionary();
TestCompositeObjectList list = new TestCompositeObjectList();
list.Add(new A { ColName= "test1" });
list.Add(new A { ColName= "test2" });
parameter.Add("TestCollection", list);
parameter.Add("Name", "Test");
flowEngine.RunProcess(processSchema, parameter);
return true;
Сам класс TestCompositeObjectList был создан по этому примеру.
При запуске процесса ловим:
System.InvalidCastException: Unable to cast object of type 'Terrasoft.Common.CompositeObjectList`1[Terrasoft.Common.CompositeObject]' to type 'System.Collections.Generic.List`1[System.String]'.
В документации не нашел примера заполнение и этот способ, что выше, тоже как ясно - не работает.
TestCollection - и есть коллекция записей с полем стринг.
Name - просто ещё один параметр.
Дайте пожалуйста пример как сделать это.
Нравится
Разобрался.
Ничего не нужно придумывать, а просто брать готовое и правильно использовать, прошу добавить инфу в документацию, что бы не приходилось как и мне тыкаться в стену.
Код вызова:
var manager = UserConnection.ProcessSchemaManager; var flowEngine = new FlowEngine(UserConnection); var processSchema = manager.GetInstanceByName("ProcessName"); Dictionary<string, object> parameter = new Dictionary<string, object>(); CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>(); objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName", "SubParamValue1"}})); objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName", "SubParamValue2"}})); // .... // Первый коллекция записей - второе примитивный parameter.Add("CollectionName", objList); parameter.Add("PrimaryParam", "Test"); flowEngine.RunProcess(processSchema, parameter);
Получение в скрипте:
CompositeObjectList<CompositeObject> collection = Get<CompositeObjectList<CompositeObject>>("CollectionName");
if (ProcessSchemaManager.GetCanUseFlowEngine(userConnection, processSchema)) {
var flowEngine = new FlowEngine(userConnection);
Dictionary<string, string> parameter = new Dictionary<string, string>();
parameter.Add("CaseRecordId", CaseRecordId.ToString());
flowEngine.RunProcess(processSchema, parameter);
} else {
var moduleProcess = processSchema.CreateProcess(userConnection);
if (processSchema.Parameters.ExistsByName("CaseRecordId")) {
moduleProcess.SetPropertyValue("CaseRecordId", CaseRecordId);
}
moduleProcess.Execute(userConnection);
}
Полозюков Евгений Петрович,
У вас в примере обычный параметр, а не лист. С обычными то все понятно. Меня интересует передача именно параметра типа коллекция записей.
Возможно ли это вообщ? Потому что тут последний коммент говорит что "неа".
Разобрался.
Ничего не нужно придумывать, а просто брать готовое и правильно использовать, прошу добавить инфу в документацию, что бы не приходилось как и мне тыкаться в стену.
Код вызова:
var manager = UserConnection.ProcessSchemaManager; var flowEngine = new FlowEngine(UserConnection); var processSchema = manager.GetInstanceByName("ProcessName"); Dictionary<string, object> parameter = new Dictionary<string, object>(); CompositeObjectList<CompositeObject> objList = new CompositeObjectList<CompositeObject>(); objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName", "SubParamValue1"}})); objList.Add(new CompositeObject (new Dictionary<string, object>() {{"SubParamName", "SubParamValue2"}})); // .... // Первый коллекция записей - второе примитивный parameter.Add("CollectionName", objList); parameter.Add("PrimaryParam", "Test"); flowEngine.RunProcess(processSchema, parameter);
Получение в скрипте:
CompositeObjectList<CompositeObject> collection = Get<CompositeObjectList<CompositeObject>>("CollectionName");