Вопрос

Отложить процесс на расчетное количество секунд



необходимо запускать процесс по факту создания обращения по определенному сервису, но внутри процесса необходимо запустить задачу в определенное время ( 17:30 )

Для этого используется таймер. Но необходимо знать количество секунд с момента создания обращения до наступления 17:30.

для этого используем параметр

Param1730 тип данных = дата/время со значением

new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 17, 30, 00)

и параметр

TimerSeconds с типом данных целое число

и в элементе процесса формула ставим

Convert.ToInt32(([#Param1730#]-[#читать дату регистрации и ответственного.Первый элемент результирующей коллекции.Дата регистрации#]).TotalSeconds)

в результате чего процесс падает в ошибку следующего содержания

System.InvalidOperationException: Невозможно вычислить выражение "Convert.ToInt32(([#[IsOwnerSchema:false].[IsSchema:false].[Parameter:{1cf823a2-c792-4b49-ad65-1c06d4b8a9d1}]#]-[#[IsOwnerSchema:false].[IsSchema:false].[Element:{b29f58a2-4656-455f-90b2-ea2c273b142c}].[Parameter:{7344cb74-63fc-4ff0-88c2-2dfffa25a210}].[EntityColumn:{c91a9a6f-008d-4b2e-83d5-03868ad68c99}]#]).TotalSeconds)", ошибка: Адресат вызова создал исключение. ---> System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.OverflowException: Значение было недопустимо малым или недопустимо большим для Int32.

   в System.Convert.ToInt32(Double value)

   в lambda_method(Closure )

   --- Конец трассировки внутреннего стека исключений ---

   в System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)

   в System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)

   в System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

   в Terrasoft.Core.ScriptEngine.DynamicExpressoEngine.Eval(String expression, Type resultType)

   в Terrasoft.Core.Process.ProcessParameterValueProvider.EvalExpression(String expressionText, Type resultType)

   --- Конец трассировки внутреннего стека исключений ---

   в Terrasoft.Core.Process.ProcessParameterValueProvider.EvalExpression(String expressionText, Type resultType)

   в Terrasoft.Core.Process.ProcessParametersDataReader.GetValue(Type valueType)

   в Terrasoft.Core.Process.ProcessScriptTask.SetParameterValue(ProcessExecutingContext context)

   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

В чем может быть причина? Время запуска меньше чем 17:30 , кстати если будет время больше 17:30 то как себя поведет таймер? Взять по модулю?

Может кто-то решал аналогичную задачу ?

Нравится

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

Добрый день.

Судя по приведенной ошибке, Вы инициализируете значение параметра timerSeconds  прямо на вкладке параметры процесса. Инициализация параметров происходит в момент запуска процесса, из-за чего в параметр подставляется значение, когда дата регистрации еще не заполнена. Необходимо использовать элемент Формула после чтения данных, и в его рамках подставлять значение в параметр.

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