Как при вызове процесса через C# FlowEngine переадть коллекцию?

Привет , использую FlowEngine Для запуска процесса, если передавать коллекцию через сервис в параметв коллекция записей то все норм

GetAllContactProcess/Execute?ResultParameterName=ContactCollection&ContactCollection=[{"Name":"1"}, {"Name":2}, {"Name":"3"}, {"Name":"4"}]

Если пытаюсь передать параметры, как json параметв выше(пример с url)

var flowEngine = new FlowEngine(_userConnection);
				var param = new Dictionary {
					["ParentBudget"] = budgetId.ToString(),
					["List"] = childrenBudgets
				};
				flowEngine.RunProcess(schema, param);

Получаю ошибку 

The server encountered an error processing the request. The exception message is 'Value cannot be null. Parameter name: key'. See server logs for more details. The exception stack trace is:

at System.Collections.Concurrent.ConcurrentDictionary`2.TryGetValue(TKey key, TValue& value) at Terrasoft.Common.BaseSerializableObjectUtilities.GetInstanceFactory(String typeName) at Terrasoft.Common.BaseSerializableObjectUtilities.ReadSerializableObjectValue(DataReader source) at Terrasoft.Common.BaseSerializableObjectUtilities.DeserializeFromJson(Stream stream) at Terrasoft.Common.BaseSerializableObjectUtilities.DeserializeFromJson(String serializedValue) at Terrasoft.Core.Process.ProcessParameterDataUtils.WriteValue(ProcessSchemaParameter parameter, String sourceValue, IDataWriter dataWriter, Boolean useSerializableObjectJson) at Terrasoft.Core.Process.ProcessParameterDataUtils.InitializeParameterValues(IReadOnlyDictionary`2 parameterValues, BaseProcessSchema processSchema, IDataWriter parametersDataWriter, Boolean useSerializableObjectJson) at Terrasoft.Core.Process.ProcessComponentSet.InitializeProcessComponentSetParameters(IReadOnlyDictionary`2 nameValueMap, Boolean useSerializableObjectJson) at Terrasoft.Core.Process.FlowEngine.RunProcess(BaseProcessSchema schema, Dictionary`2 nameValueMap) at Terrasoft.Configuration.OlpAeroclubOBTMessageService.OlpAeroclubOBTMessageService.GetOBTMessage(attachments[] attachments, services[] services, String MessageText, String OrderNumber, String ProfileId, String BusinessTripNumber) at SyncInvokeGetOBTMessage(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

куда копать и что может быть не так, сверил все ключи и типы все ок

Нравится

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

Добрый день,

 

Судя из кода Вы используете устаревший API по запуску процесса из  элемента задание-сценарий. Вот пример вызова процесса с коллекцией объектов:

var list = new CompositeObjectList<CompositeObject>();
var item1 = new CompositeObject();
item1["Id"] = new Guid("94cc536a-71a7-4bfb-87ca-13f53b23c28e");
item1["Name"] = "Name1";
list.Add(item1);
var item2 = new CompositeObject();
item2["Id"] = new Guid("e694d36e-1727-4276-9fbf-b9aa193e4f44");
item2["Name"] = "Name2";
list.Add(item2);
string serializedValue = BaseSerializableObjectUtilities.SerializeToJson(list);
var parameterNameValues = new Dictionary<string, string>();
parameterNameValues["InputObjectList"] = serializedValue;
UserConnection userConnection = Get<UserConnection>("UserConnection");
IProcessEngine processEngine = userConnection.ProcessEngine;
IProcessExecutor processExecutor = processEngine.ProcessExecutor;
processExecutor.Execute("ProcessRunsFromScriptTask", parameterNameValues);
return true;

InputObjectList нужно заменить на код параметра, который хранит коллекцию.

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