Как при вызове процесса через 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)
куда копать и что может быть не так, сверил все ключи и типы все ок
Нравится
Добрый день,
Судя из кода Вы используете устаревший 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 нужно заменить на код параметра, который хранит коллекцию.