Вопрос

Как при вызове процесса через 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<string, string> {
					["ParentBudget"] = budgetId.ToString(),
					["List"] = childrenBudgets
				};
				flowEngine.RunProcess(schema, param);

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

<p>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: </p>
    <p> at System.Collections.Concurrent.ConcurrentDictionary`2.TryGetValue(TKey key, TValue&amp; 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[]&amp;
      outputs)
      at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
      at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
      at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc)
      at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</p>
куда копать и что может быть не так, сверил все ключи и типы все ок

Нравится

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

Добрый день,

 

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

var list = new CompositeObjectList&lt;CompositeObject&gt;();
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&lt;string, string&gt;();
parameterNameValues["InputObjectList"] = serializedValue;
UserConnection userConnection = Get&lt;UserConnection&gt;("UserConnection");
IProcessEngine processEngine = userConnection.ProcessEngine;
IProcessExecutor processExecutor = processEngine.ProcessExecutor;
processExecutor.Execute("ProcessRunsFromScriptTask", parameterNameValues);
return true;

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

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