Configurator Errors Upon Saving in Sales Order

We ran into another odd one. Our product configurator adds lines to sales order/quote as part of the document rules. Out of the blue (isn’t it always?) we can’t save a configuration in the Sales Order if it includes lines that will be added to the order using the document rule in the Configurator. We get this generic error “Error in the application”. It identifies the UD method that is being ran when it errors (which is the AddOrderLine UD method). The only thing that has happened recently is we moved our Test and Pilot environments off the server that our Production environment is on. But this issue is affecting both environments. I have not made any changes to the Production configurator since 5/24/22. It’s worth mentioning that we CAN save the configuration in the Quote for the same “configuration” - so this is only affecting the sales order. We’ve tried different configurations and they all error the same on a Sales Order. Any ideas?

Here’s the error if it helps point to a direction:

Business Layer Exception
Exception was found for Document Rule
Business Logic Error
Business Layer Exception
BLException
Description: Error in the application.
Program: VANAIR_VER68__CONFIGUDSINGLE.dll
Method: AddOrderLine
Server Trace Stack: at Erp.Internal.Cfg._CONFIGUDSINGLE.VER68.UDMethods.AddOrderLine(String
PartNum, String ParentID)
at
Erp.Internal.Cfg._CONFIGUDSINGLE.VER68._CONFIGUDSINGLEDocRuleEngine.RuleSet1_Rule1_Action2(RuleAr
gs args)
at
Erp.Internal.PC.Configuration.RuleEngine.RuleCommands.RuleActions.ExecuteExpressionCmd.Execute(RuleArgs
args) in
C:_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\RuleCommands\RuleAction
s\ExecuteExpressionCmd.cs:line 30
at Erp.Internal.PC.Configuration.RuleEngine.PcRule1.ExecuteActions(TRuleArgs args) in C:\_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\PcRule.cs:line 94 at Erp.Internal.PC.Configuration.RuleEngine.PcRuleSet1.ExecuteRules(TRuleArgs args) in
C:_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\PcRuleSet.cs:line 98
at Erp.Internal.PC.Configuration.RuleEngine.RuleEngine2.Invoke(String ruleKey, TRuleArgs args) in C:\_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\RuleEngine.cs:line 203 at Erp.Services.BO.ConfigurationRuntimeSvc.ProcessDocumentRules(ConfigurationSequenceTableset& configSequenceDS, ConfigurationRuntimeTableset& configRuntimeDS, PcValueTableset pcValueDS) in C:\_Releases\ERP\UD10.2.300.40\Source\Server\Services\BO\ConfigurationRuntime\ConfigurationRuntime.cs:line 1835 at Erp.Services.BO.ConfigurationRuntimeSvcFacade.ProcessDocumentRules(ConfigurationSequenceTableset& configSequenceDS, ConfigurationRuntimeTableset& configRuntimeDS, PcValueTableset pcValueDS) in C:\_Releases\ERP\UD10.2.300.40\Source\Server\Services\BO\ConfigurationRuntime\ConfigurationRuntimeSvcFaca de.cs:line 477 at SyncInvokeProcessDocumentRules(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at Epicor.Hosting.OperationBoundInvoker.InnerInvoke(Object instance, Func2 func) in
C:_Releases\ICE\ICE3.2.300.40\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 59
at Epicor.Hosting.OperationBoundInvoker.Invoke(Object instance, Func2 func) in C:\_Releases\ICE\ICE3.2.300.40\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 28 at Epicor.Hosting.Wcf.EpiOperationInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) in C:\_Releases\ICE\ICE3.2.300.40\Source\Framework\Epicor.System\Hosting\Wcf\EpiOperationInvoker.cs:line 23 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) at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext) at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext) at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result) at System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result) at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.SecurityChannelListener1.ReceiveItemAndVerifySecurityAsyncResult2.InnerTryRe ceiveCompletedCallback(IAsyncResult result) at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.TransportDuplexSessionChannel.TryReceiveAsyncResult.OnReceive(IAsyncResult result) at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object state) at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state) at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result) at System.Net.LazyAsyncResult.Complete(IntPtr userToken) at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken) at System.Net.Security.NegotiateStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32 count, AsyncProtocolRequest asyncRequest) at System.Net.Security.NegotiateStream.ReadCallback(AsyncProtocolRequest asyncRequest) at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result) at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes) at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult) at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously) at System.ServiceModel.Channels.ConnectionStream.IOAsyncResult.OnAsyncIOComplete(Object state) at System.Net.Sockets.SocketAsyncEventArgs.OnCompleted(SocketAsyncEventArgs e) at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(SocketError socketError, Int32 bytesTransferred, SocketFlags flags) at System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped) at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) Exception caught in: Epicor.ServiceModel Error Detail ============ Description: Exception was found for Document Rule Business Logic Error Business Layer Exception BLException Description: Error in the application. Program: VANAIR_VER68__CONFIGUDSINGLE.dll Method: AddOrderLine Server Trace Stack: at Erp.Internal.Cfg._CONFIGUDSINGLE.VER68.UDMethods.AddOrderLine(String PartNum, String ParentID) at Erp.Internal.Cfg._CONFIGUDSINGLE.VER68._CONFIGUDSINGLEDocRuleEngine.RuleSet1_Rule1_Action2(RuleAr gs args) at Erp.Internal.PC.Configuration.RuleEngine.RuleCommands.RuleActions.ExecuteExpressionCmd.Execute(RuleArgs args) in C:\_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\RuleCommands\RuleAction s\ExecuteExpressionCmd.cs:line 30 at Erp.Internal.PC.Configuration.RuleEngine.PcRule1.ExecuteActions(TRuleArgs args) in
C:_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\PcRule.cs:line 94
at Erp.Internal.PC.Configuration.RuleEngine.PcRuleSet1.ExecuteRules(TRuleArgs args) in C:\_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\PcRuleSet.cs:line 98 at Erp.Internal.PC.Configuration.RuleEngine.RuleEngine2.Invoke(String ruleKey, TRuleArgs args) in
C:_Releases\ERP\UD10.2.300.40\Source\Server\Internal\PC\Configuration\RuleEngine\RuleEngine.cs:line 203
at Erp.Services.BO.ConfigurationRuntimeSvc.ProcessDocumentRules(ConfigurationSequenceTableset&
configSequenceDS, ConfigurationRuntimeTableset& configRuntimeDS, PcValueTableset pcValueDS) in
C:_Releases\ERP\UD10.2.300.40\Source\Server\Services\BO\ConfigurationRuntime\ConfigurationRuntime.cs:line
1835
at Erp.Services.BO.ConfigurationRuntimeSvcFacade.ProcessDocumentRules(ConfigurationSequenceTableset&
configSequenceDS, ConfigurationRuntimeTableset& configRuntimeDS, PcValueTableset pcValueDS) in
C:_Releases\ERP\UD10.2.300.40\Source\Server\Services\BO\ConfigurationRuntime\ConfigurationRuntimeSvcFaca
de.cs:line 477
at SyncInvokeProcessDocumentRules(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at Epicor.Hosting.OperationBoundInvoker.InnerInvoke(Object instance, Func2 func) in C:\_Releases\ICE\ICE3.2.300.40\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 59 at Epicor.Hosting.OperationBoundInvoker.Invoke(Object instance, Func2 func) in
C:_Releases\ICE\ICE3.2.300.40\Source\Framework\Epicor.System\Hosting\OperationBoundInvoker.cs:line 28
at Epicor.Hosting.Wcf.EpiOperationInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) in
C:_Releases\ICE\ICE3.2.300.40\Source\Framework\Epicor.System\Hosting\Wcf\EpiOperationInvoker.cs:line 23
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)
at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean
cleanThread, OperationContext currentOperationContext)
at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext
currentOperationContext)
at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)
at System.ServiceModel.Dispatcher.ChannelHandler.OnAsyncReceiveComplete(IAsyncResult result)
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at
System.ServiceModel.Channels.SecurityChannelListener1.ReceiveItemAndVerifySecurityAsyncResult2.InnerTryRe
ceiveCompletedCallback(IAsyncResult result)
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at
System.ServiceModel.Channels.TransportDuplexSessionChannel.TryReceiveAsyncResult.OnReceive(IAsyncResult
result)
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at System.ServiceModel.Channels.SynchronizedMessageSource.ReceiveAsyncResult.OnReceiveComplete(Object
state)
at System.ServiceModel.Channels.SessionConnectionReader.OnAsyncReadComplete(Object state)
at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Security.NegotiateStream.ProcessFrameBody(Int32 readBytes, Byte[] buffer, Int32 offset, Int32
count, AsyncProtocolRequest asyncRequest)
at System.Net.Security.NegotiateStream.ReadCallback(AsyncProtocolRequest asyncRequest)
at System.Net.AsyncProtocolRequest.CompleteRequest(Int32 result)
at System.Net.FixedSizeReader.CheckCompletionBeforeNextRead(Int32 bytes)
at System.Net.FixedSizeReader.ReadCallback(IAsyncResult transportResult)
at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)
at System.ServiceModel.Channels.ConnectionStream.IOAsyncResult.OnAsyncIOComplete(Object state)
at System.Net.Sockets.SocketAsyncEventArgs.OnCompleted(SocketAsyncEventArgs e)
at System.Net.Sockets.SocketAsyncEventArgs.FinishOperationSuccess(SocketError socketError, Int32
bytesTransferred, SocketFlags flags)
at System.Net.Sockets.SocketAsyncEventArgs.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes,
NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes,
NativeOverlapped* pOVERLAP)
Program: Erp.Internal.PC.Configuration.dll
Method: Invoke
Line Number: 203
Column Number: 25
Client Stack Trace
==================
at Epicor.ServiceModel.Channels.ImplBase`1.ShouldRethrowNonRetryableException(Exception ex, DataSet[]
dataSets)
at Erp.Proxy.BO.ConfigurationRuntimeImpl.ProcessDocumentRules(ConfigurationSequenceDataSet
configSequenceDS, ConfigurationRuntimeDataSet configRuntimeDS, PcValueDataSet pcValueDS)
at Erp.Adapters.ConfigurationRuntimeAdapter.ProcessDocumentRules(PcValueDataSet pcValueDS)

Dan, my expectation would be that the configurator is calling the business object that adds a line to the sales order. I would recommend taking a look at the code of the UD Method and see if the server is getting called out on the business object or somewhere else in the UD Method.

Yes, it does use the business object to create the line on the order. I’ll try to do a trace

Long story short, our try/catch statement in the Configurator was masking a more useful error that revealed that we were failing in a BPM. I was able to find the BPM in question and disable it and then all was well. So I guess this is solved.

1 Like