Auto Print from Epicor REST API

I’m trying to Auto Print an email with the Stock status report attachment (.pdf) with a Data Directive. It should be triggered when a custom field in the Warehouse table is changed from false to true. When i manually change the checkbox from false to true, the Auto Print works. However when i update the field from false to true from the Epicor REST API the Auto Print doesn’t work.

I’ve tried using both the OData method PATCH /Warehses({Company},{WarehouseCode}) and the Custom Method Update. Both API calls did change the checkbox, but still return an error when trying to execute the Data Directive. The error is as follows:

<![CDATA[
Failed to run autoprint report. Error: Business Logic Error
Business Layer Exception
BusinessObjectException
Description: Failed to run autoprint report. Error: System.Data.ConstraintException: This property cannot be set to a null value.
at System.Data.EntityUtil.ThrowPropertyIsNotNullable(String propertyName)
at Ice.Tables.SysTaskParam.set_ParamCharacter(String value) in c:_Releases\ICE\3.1.600.0\Source\Server\Db\Ice.Data.Model\IceContext.Model.cs:line 127538
at Ice.Core.TaskServiceBase1.setParmValue(IceRow paramRow, IceColumn column, LinqRow rptDefRow, Boolean setDefRow, Boolean setToken) in C:\_Releases\ICE\3.1.600.16\Source\Server\Internal\Lib\TaskLib\TaskBase\TaskServiceBase.cs:line 1185 at Ice.Core.TaskServiceBase1.WriteSysTask(IceRow paramRow) in C:_Releases\ICE\3.1.600.16\Source\Server\Internal\Lib\TaskLib\TaskBase\TaskServiceBase.cs:line 268
at Ice.Core.RptServiceBase1.WriteSysTask(IceRow paramRow) in C:\_Releases\ICE\3.1.600.16\Source\Server\Internal\Lib\TaskLib\RptBase\RptServiceBase.cs:line 129 at CallSite.Target(Closure , CallSite , Object , IceRow ) at Ice.Lib.AutoPrint.SubmitImmediateAutoPrintReport.GetSysTaskNumberAndTaskProgram(Object reportService, IceRow reportParameters, Int64& sysTaskNumber, String& taskProgram) in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\BAM\AutoPrint\SubmitImmediateAutoPrintReport.cs:line 63 at Ice.Lib.AutoPrint.SubmitImmediateAutoPrintReport.SubmitImmediateReport(IceRow reportParameters, Object reportServiceBO) in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\BAM\AutoPrint\SubmitImmediateAutoPrintReport.cs:line 44 Program: Ice.Lib.BAM.dll Method: SubmitImmediateReport Line Number: 44 Column Number: 16 Server Trace Stack: at Ice.Lib.AutoPrint.SubmitImmediateAutoPrintReport.SubmitImmediateReport(IceRow reportParameters, Object reportServiceBO) in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\BAM\AutoPrint\SubmitImmediateAutoPrintReport.cs:line 44 at Epicor.Customization.Bpm.DBA3C30100D7934B92AC3AE72F92E07B1B.PostTranDirective_Voorraad_9213CE89D62B4B279D3ED9F0862F8CD1.A001_AutoPrintAction() at Epicor.Customization.Bpm.DBA3C30100D7934B92AC3AE72F92E07B1B.PostTranDirective_Voorraad_9213CE89D62B4B279D3ED9F0862F8CD1.ExecuteCore() at Epicor.Customization.Bpm.DirectiveBase3.Execute(TParam parameters) in c:_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\DirectiveBase.Generic.cs:line 129
at System.Linq.Enumerable.All[TSource](IEnumerable1 source, Func2 predicate)
at Epicor.Customization.Bpm.CustomizationBase23.Execute(TParam parameters) in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\CustomizationBase2.cs:line 71 at Epicor.Customization.Bpm.Standard.MonitoringSessionManager.ProcessCollectedData(IceContext db, IRowChangesCollection data, IDirectiveEnabler enabler) in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\Standard\MonitoringSessionManager.cs:line 130 at Epicor.Customization.Bpm.SvcFacadeBase3.Epicor.Hosting.IBpmReadyService.FinalizeCall(Object state, Boolean fail) in c:_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\SvcFacadeBase.Generic.cs:line 205
at Epicor.Hosting.OperationBoundInvoker.Invoke(Object instance, Func2 func) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 32 at Ice.Hosting.RestApi.OperationInvokeHelper.CallInvoker(IceDataContext dataContext, Type svcType, MethodInfo mi, Object[] inputs, Boolean isRoot) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.Ice\Hosting\ServiceCaller\OperationInvokeHelper.cs:line 282 at Ice.Hosting.RestApi.OperationInvokeHelper.MakeServiceCall(IceDataContext dataContext, Type svcType, MethodInfo mi, Object[] parameters) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.Ice\Hosting\ServiceCaller\OperationInvokeHelper.cs:line 240 at Epicor.RESTApi.DataSources.IceServiceCaller.CallCustomMethod(TypeMapping typeMapping, ContextInfo context, String methodName, Object inputObject) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.RESTApi\DataSources\IceServiceCaller.cs:line 250 at Epicor.RESTApi.Controllers.CustomActionController.CustomMethod(Object input) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.RESTApi\Controllers\CustomActionController.cs:line 25 at lambda_method(Closure , Object , Object[] ) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary2 arguments, CancellationToken cancellationToken)
at System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.Start[TStateMachine](TStateMachine& stateMachine) at System.Web.Http.Controllers.ApiControllerActionInvoker.InvokeActionAsyncCore(HttpActionContext actionContext, CancellationToken cancellationToken) at System.Web.Http.Controllers.ApiControllerActionInvoker.InvokeActionAsync(HttpActionContext actionContext, CancellationToken cancellationToken) at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>b__0(ActionInvoker innerInvoker) at System.Web.Http.Controllers.ActionFilterResult.<>c__DisplayClass101.b__f()
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.Start[TStateMachine](TStateMachine& stateMachine) at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecutedAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func1 continuation)
at System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.Start[TStateMachine](TStateMachine& stateMachine) at System.Web.Http.Filters.ActionFilterAttribute.ExecuteActionFilterAsyncCore(HttpActionContext actionContext, CancellationToken cancellationToken, Func1 continuation)
at System.Web.Http.Filters.ActionFilterAttribute.System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func1 continuation) at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.Start[TStateMachine](TStateMachine& stateMachine)
at System.Web.Http.Controllers.ActionFilterResult.ExecuteAsync(CancellationToken cancellationToken)
at System.Web.Http.Filters.AuthorizationFilterAttribute.d__2.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.Start[TStateMachine](TStateMachine& stateMachine) at System.Web.Http.Filters.AuthorizationFilterAttribute.ExecuteAuthorizationFilterAsyncCore(HttpActionContext actionContext, CancellationToken cancellationToken, Func1 continuation)
at System.Web.Http.Filters.AuthorizationFilterAttribute.System.Web.Http.Filters.IAuthorizationFilter.ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func1 continuation) at System.Web.Http.Controllers.AuthorizationFilterResult.ExecuteAsync(CancellationToken cancellationToken) at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.Start[TStateMachine](TStateMachine& stateMachine)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Web.Http.HttpServer.d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.Start[TStateMachine](TStateMachine& stateMachine) at System.Web.Http.HttpServer.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Web.Http.Owin.HttpMessageHandlerAdapter.<InvokeCore>d__0.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine) at System.Web.Http.Owin.HttpMessageHandlerAdapter.InvokeCore(IOwinContext context, IOwinRequest owinRequest, IOwinResponse owinResponse) at Epicor.RESTApi.ConfigureStartup.<>c__DisplayClass3_0.<ConfigureIceAuth>b__0(IOwinContext context, Func1 next) in C:_Releases\ICE\3.1.600.16\Source\Framework\Epicor.RESTApi\Startup.cs:line 140
at Microsoft.Owin.Mapping.MapWhenMiddleware.d__0.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine)
at Microsoft.Owin.Mapping.MapWhenMiddleware.Invoke(IDictionary2 environment) at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.<RunApp>d__5.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& stateMachine) at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.RunApp(Func2 entryPoint, IDictionary2 environment, TaskCompletionSource1 tcs, StageAsyncResult result)
at Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.BeginEvent(Object sender, EventArgs e, AsyncCallback cb, Object extradata)
at System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
at System.Web.HttpApplication.PipelineStepManager.ResumeSteps(Exception error)
at System.Web.HttpApplication.BeginProcessRequestNotification(HttpContext context, AsyncCallback cb)
at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
at System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr pHandler, RequestNotificationStatus& notificationStatus)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)

(BusinessObjectException)
at Epicor.Customization.Bpm.DirectiveBase3.ProcessRememberedExceptions() in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\DirectiveBase.Generic.cs:line 247 at Epicor.Customization.Bpm.DirectiveBase3.Execute(TParam parameters) in c:_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\DirectiveBase.Generic.cs:line 153
at System.Linq.Enumerable.All[TSour
ce](IEnumerable1 source, Func2 predicate)
at Epicor.Customization.Bpm.CustomizationBase23.Execute(TParam parameters) in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\CustomizationBase2.cs:line 71 at Epicor.Customization.Bpm.Standard.MonitoringSessionManager.ProcessCollectedData(IceContext db, IRowChangesCollection data, IDirectiveEnabler enabler) in c:\_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\Standard\MonitoringSessionManager.cs:line 130 at Epicor.Customization.Bpm.SvcFacadeBase3.Epicor.Hosting.IBpmReadyService.FinalizeCall(Object state, Boolean fail) in c:_Releases\ICE\3.1.600.0\Source\Server\Internal\Lib\Epicor.Customization.Bpm\SvcFacadeBase.Generic.cs:line 205
at Epicor.Hosting.OperationBoundInvoker.Invoke(Object instance, Func2 func) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 47 at Ice.Hosting.RestApi.OperationInvokeHelper.CallInvoker(IceDataContext dataContext, Type svcType, MethodInfo mi, Object[] inputs, Boolean isRoot) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.Ice\Hosting\ServiceCaller\OperationInvokeHelper.cs:line 282 at Ice.Hosting.RestApi.OperationInvokeHelper.MakeServiceCall(IceDataContext dataContext, Type svcType, MethodInfo mi, Object[] parameters) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.Ice\Hosting\ServiceCaller\OperationInvokeHelper.cs:line 240 at Epicor.RESTApi.DataSources.IceServiceCaller.CallCustomMethod(TypeMapping typeMapping, ContextInfo context, String methodName, Object inputObject) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.RESTApi\DataSources\IceServiceCaller.cs:line 250 at Epicor.RESTApi.Controllers.CustomActionController.CustomMethod(Object input) in C:\_Releases\ICE\3.1.600.16\Source\Framework\Epicor.RESTApi\Controllers\CustomActionController.cs:line 25 at lambda_method(Closure , Object , Object[] ) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters) at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary2 arguments, CancellationToken cancellationToken)
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Filters.AuthorizationFilterAttribute.d__2.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Web.Http.HttpServer.d__0.MoveNext()
]]>

I’m guessing your DD is looking for some Context value that isn’t there (CallContext, ClientClontext)

Do you have any idea how to solve this? I can’t manually set these fields in de DD since they are Read-only and i can’t put them in the REST API Post request either.

Try changing the AutoPrint from “Immediate” to “Queued”. If that still generates an error, it is likely a Session Variable that is not being initialized via REST - WorkstationID (Client machine reference not Shop Floor) is used in Reporting and may be the culprit.

1 Like

Unfortunately, changing “Immediate” to “Queued” still results in the same error

@josecgomez Do you know if the REST api can pass the the WorkstationID through the callSettings request header. The BPM would probably work if you added that in right?

This was recently solved here

1 Like