Вопрос
Как при вызове процесса через C# FlowEngine переадть коллекцию?
23 октября 2023 14:54
Привет , использую 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& 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)</p>
куда копать и что может быть не так, сверил все ключи и типы все ок
Нравится
1 комментарий
23 октября 2023 18:55
Добрый день,
Судя из кода Вы используете устаревший 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 нужно заменить на код параметра, который хранит коллекцию.
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать