необходимо запускать процесс по факту создания обращения по определенному сервису, но внутри процесса необходимо запустить задачу в определенное время ( 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 то как себя поведет таймер? Взять по модулю?
Может кто-то решал аналогичную задачу ?
Нравится
Добрый день.
Судя по приведенной ошибке, Вы инициализируете значение параметра timerSeconds прямо на вкладке параметры процесса. Инициализация параметров происходит в момент запуска процесса, из-за чего в параметр подставляется значение, когда дата регистрации еще не заполнена. Необходимо использовать элемент Формула после чтения данных, и в его рамках подставлять значение в параметр.