Added Custom Field To Table - Disabled by Internal Methods

Nope. That’s the business logic rules built in to the BO.

If you want to update that field, you’ll have to do it either with the Db context, or you’ll have to unquote, mark, quote.

My suggestion would be to use a SysTag linked to QuoteDtl instead.

3 Likes

To do this I would add the SysTag table to the BAQ and set the ForeignTableName to “QuoteDtl” with table criteria, right?

1 Like

I can’t quite remember, but there are some threads on it.
If you can’t figure it out, I’ve got code here in a few dashboards I could pull out later.

1 Like

So, I would need a custom action to add new rows to the SysTag table. Is there any other way besides custom BPM?
Hmmmm… When the users click the checkbox, I need to add a field to the SysTag table, linked to QuoteDtl and the right SysRowID. Maybe a better way would be to add a new record to SysTag for every single new quote, then I would have a row in SysTag to edit if the user changes the status of the checkbox.

With all of that, it is starting to look easier to just unquote, mark the custom field, and then requote. At least I can easily do that from BPM widgets. Good ideas! Thanks!

1 Like

Heading down the road of a custom BPM to unquote and requote it. The BPM is pretty straightforward, but I am getting this long error. Anyone seen this before? It is mad about using QuoteDtlRow from two methods. I attached the BAQ with embedded BPM (disabled) for review. Of course, you won’t be able to use this unless you can add the custom field to QuoteDtl and regen your data model. but maybe something the BPM will stand out. I thought it would be simple, but this error is weird!

WinQuotes.baq (90.4 KB)

System Information

==================

AppServer Connection: pilot
Form Name: Business Activity Query Designer
Customization Name:
Menu ID: XABA3040
Software Version: 4.2.400.0

============

Server Side Exception

There is at least one compilation error.
RunCustomAction.Base.test.cs(360,132): error CS0433: The type ‘QuoteDtlRow’ exists in both ‘Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’ and ‘Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’
RunCustomAction.Base.test.cs(366,141): error CS0433: The type ‘QuoteDtlRow’ exists in both ‘Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’ and ‘Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’
RunCustomAction.Base.test.cs(354,88): error CS1503: Argument 2: cannot convert from ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’ to ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’
RunCustomAction.Base.test.cs(355,107): error CS1503: Argument 2: cannot convert from ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’ to ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’

Exception caught in: Epicor.ServiceModel

Error Detail

============

##!Correlation ID:##! 883d4b34-cb24-44b5-bae8-2345cf4a6aef
##!Description:##! There is at least one compilation error.
##!Details:##!
RunCustomAction.Base.test.cs(360,132): error CS0433: The type ‘QuoteDtlRow’ exists in both ‘Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’ and ‘Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’
RunCustomAction.Base.test.cs(366,141): error CS0433: The type ‘QuoteDtlRow’ exists in both ‘Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’ and ‘Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992’
RunCustomAction.Base.test.cs(354,88): error CS1503: Argument 2: cannot convert from ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’ to ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’
RunCustomAction.Base.test.cs(355,107): error CS1503: Argument 2: cannot convert from ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.QuoteDtlSearch, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’ to ‘Erp.Tablesets.QuoteDtlRow [Erp.Contracts.BO.Quote, Version=11.2.400.0, Culture=neutral, PublicKeyToken=5d3fa3c7105d7992]’
##!Program:##! Epicor.Customization.dll
##!Method:##! EmitAssembly
##!Line Number:##! 75
##!Column Number:##! 17
##!Server Trace Stack:##! at Epicor.Customization.Standard.EcfInMemoryCompiler.EmitAssembly(CustomizationProject project, Compilation compilation, ImmutableArray1 analyzerDiagnostics) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\EcfInMemoryCompiler.cs:line 75 at Epicor.Customization.Standard.EcfInMemoryCompiler.CompileAsync(CustomizationProject project) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\EcfInMemoryCompiler.cs:line 56 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) at Epicor.Customization.Standard.EcfInMemoryCompiler.CompileAsync(CustomizationProject project) at Epicor.Customization.Standard.EcfInMemoryCompiler.<>c__DisplayClass5_0.<Compile>b__0() in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\EcfInMemoryCompiler.cs:line 47 at Epicor.Utilities.AsyncHelper.RunSync[TResult](Func1 method) in C:_releases\ICE\ICE4.2.400.3\Source\Shared\Framework\Epicor.ServiceModel\Utilities\AsyncHelper.cs:line 16
at Epicor.Customization.Standard.EcfInMemoryCompiler.Compile(CustomizationProject project) in C:_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\EcfInMemoryCompiler.cs:line 47
at Epicor.Customization.Standard.CustomizationBuilder.Compile(CustomizationProject project) in C:_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\CustomizationBuilder.cs:line 152
at Epicor.Customization.Standard.CustomizationBuilder.UpdateCustomizationWithDiagnostics(CustomizationProject project, IEnumerable1 customizations, String assemblyId) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\CustomizationBuilder.cs:line 133 at Epicor.Customization.Standard.CustomizationBuilder.UpdateAndCompile(CustomizationProject project) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\CustomizationBuilder.cs:line 225 at Epicor.Customization.Standard.CustomizationBuilder.ProcessWithDiagnostics(CustomizationProject project) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Framework\Epicor.Customization\Standard\CustomizationBuilder.cs:line 58 at Ice.Blaq.Maintenance.CustomizationToolBase1.Ice.Blaq.Maintenance.ICustomizationTool.RegenerateWithDiagnostics(IBpmMethodId methodId) in C:_releases\ICE\ICE4.2.400.0FW\Source\Server\Internal\Lib\Ice.Lib.Blaq.Bpm\Maintenance\CustomizationToolBase.cs:line 58
at Ice.Services.BO.BpMethodSvc.AfterUpdate() in C:_releases\ICE\ICE4.2.400.0FW\Source\Server\Services\BO\BpMethod\BpMethod.Events.cs:line 170
at Ice.Services.Trace.TablesetProfilingCollector.DoTablesetEventTrace(String tablesetName, String methodName, Action action) in C:_releases\ICE\ICE4.2.400.3\Source\Server\Framework\Epicor.Ice\Services\TablesetProfilingCollector.cs:line 192
at Ice.TablesetBound3.InnerUpdate[TUpdater](IceDataContext dataContext, TFullTableset tableset) in C:\_releases\ICE\ICE4.2.400.3\Source\Server\Framework\Epicor.Ice\Services\TablesetBound.cs:line 902 at Ice.Services.BO.BpMethodSvc.Update(BpMethodTableset& ds) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Services\BO\BpMethod\BpMethod.Designer.cs:line 847 at Ice.Services.BO.BpMethodSvcFacade.Update(BpMethodTableset& ds) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Services\BO\BpMethod\BpMethodSvcFacade.cs:line 1546 at Ice.Controllers.BO.BpMethodController.Update(Update_InputModel model) in C:\_releases\ICE\ICE4.2.400.0FW\Source\Server\Services\BO\BpMethod\Generated\BpMethodController.cs:line 613 at lambda_method9280(Closure , Object , Object[] ) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAwaitedAsync() at Ice.Hosting.AspNetCore.Filters.ApiMetricsActionFilter.OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) in C:\_releases\ICE\ICE4.2.400.3\Source\Server\Hosting\AspNetCore\Ice.Hosting.AspNetCore\Filters\ApiMetricsActionFilter.cs:line 32 at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine) at Ice.Hosting.AspNetCore.Filters.ApiMetricsActionFilter.OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining) at System.Threading.Tasks.Task.RunContinuations(Object continuationObject) at Microsoft.AspNetCore.Mvc.Controllers.ControllerBinderDelegateProvider.<>c__DisplayClass0_0.<<CreateBinderDelegate>g__Bind|0>d.MoveNext() at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining) at System.Threading.Tasks.Task.RunContinuations(Object continuationObject) at Microsoft.AspNetCore.Mvc.ModelBinding.ParameterBinder.BindModelAsync(ActionContext actionContext, IModelBinder modelBinder, IValueProvider valueProvider, ParameterDescriptor parameter, ModelMetadata metadata, Object value, Object container) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining) at System.Threading.Tasks.Task.RunContinuations(Object continuationObject) at Microsoft.AspNetCore.Mvc.ModelBinding.Binders.BodyModelBinder.BindModelAsync(ModelBindingContext bindingContext) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining) at System.Threading.Tasks.Task.RunContinuations(Object continuationObject) at System.Threading.Tasks.Task1.TrySetResult(TResult result)
at Ice.Hosting.AspNetCore.Rpc.RpcAsyncInputFormatter.ReadRequestBodyAsync(InputFormatterContext context) in C:_releases\ICE\ICE4.2.400.3\Source\Server\Hosting\AspNetCore\Ice.Hosting.AspNetCore\Rpc\RpcAsyncInputFormatter.cs:line 35
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext()
at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetExistingTaskResult(Task1 task, TResult result)
at Ice.Hosting.AspNetCore.Rpc.AsyncRpcSerializer.DeserializeAsync(Type dataType, RpcReader rpcReader, CancellationToken cancellationToken) in C:_releases\ICE\ICE4.2.400.3\Source\Server\Hosting\AspNetCore\Ice.Hosting.AspNetCore\Rpc\AsyncRpcSerializer.cs:line 146
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext()
at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
at System.Threading.Tasks.Task1.TrySetResult(TResult result) at Ice.Hosting.AspNetCore.Rpc.AsyncRpcSerializer.DeserializeTablesetAsync(Type dataType, RpcReader rpcReader, CancellationToken cancellationToken) in C:\_releases\ICE\ICE4.2.400.3\Source\Server\Hosting\AspNetCore\Ice.Hosting.AspNetCore\Rpc\AsyncRpcSerializer.cs:line 160 at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining) at System.Threading.Tasks.Task.RunContinuations(Object continuationObject) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetExistingTaskResult(Task1 task, TResult result) at Ice.Hosting.AspNetCore.Rpc.RpcReader.DeserializeBooleanAsync(CancellationToken cancellationToken) in C:\_releases\ICE\ICE4.2.400.3\Source\Server\Hosting\AspNetCore\Ice.Hosting.AspNetCore\Rpc\RpcReader.cs:line 79 at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext() at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining) at System.Threading.Tasks.Task.RunContinuations(Object continuationObject) at System.Threading.Tasks.Task1.TrySetResult(TResult result)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetExistingTaskResult(Task1 task, TResult result)
at Ice.Hosting.AspNetCore.Rpc.RpcReader.DeserializeByteAsync(CancellationToken cancellationToken) in C:_releases\ICE\ICE4.2.400.3\Source\Server\Hosting\AspNetCore\Ice.Hosting.AspNetCore\Rpc\RpcReader.cs:line 120
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext()
at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
at System.IO.Pipelines.StreamPipeReader.g__Core|36_0(StreamPipeReader reader, CancellationTokenSource tokenSource, CancellationToken cancellationToken)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread)
at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
at System.Threading.Tasks.Task1.TrySetResult(TResult result) at System.IO.Compression.DeflateStream.<ReadAsyncMemory>g__Core|50_0(Memory1 buffer, CancellationToken cancellationToken)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.ExecutionContextCallback(Object s)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext()
at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
at System.Threading.Tasks.Task1.TrySetResult(TResult result) at Microsoft.AspNetCore.Server.IIS.Core.HttpRequestStream.ReadAsyncInternal(Memory1 buffer, CancellationToken cancellationToken)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox1.MoveNext(Thread threadPoolThread)
at System.Threading.Tasks.AwaitTaskContinuation.RunOrScheduleAction(IAsyncStateMachineBox box, Boolean allowInlining)
at System.Threading.Tasks.Task.RunContinuations(Object continuationObject)
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.SetExistingTaskResult(Task1 task, TResult result)
at Microsoft.AspNetCore.Server.IIS.Core.IISHttpContext.ReadAsync(Memory1 memory, CancellationToken cancellationToken) at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state) at System.Runtime.CompilerServices.AsyncTaskMethodBuilder1.AsyncStateMachineBox`1.MoveNext(Thread threadPoolThread)
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()

Client Stack Trace

==================
at Ice.Cloud.ProxyBase1.CallWithCommunicationFailureRetry(String methodName, ProxyValuesIn valuesIn, ProxyValuesOut valuesOut, RestRpcValueSerializer serializer) at Ice.Cloud.ProxyBase1.CallWithMultistepBpmHandling(String methodName, ProxyValuesIn valuesIn, ProxyValuesOut valuesOut, Boolean useSparseCopy)
at Ice.Cloud.ProxyBase`1.Call(String methodName, ProxyValuesIn valuesIn, ProxyValuesOut valuesOut, Boolean useSparseCopy)
at Ice.Proxy.BO.BpMethodImpl.Update(BpMethodDataSet ds)
at Ice.Adapters.BpMethodAdapter.OnUpdate()
at Ice.Lib.Framework.EpiBaseAdapter.Update()
at Ice.UI.App.BpMethodEntry.Transactions.MainTransactionBase.adapterUpdate()

If you are using the classic client, I believe you can unlock fields in the data view as shown on this thread ```

1 Like

It may work, depends on if update will let you do it vs updatext

1 Like

Something like

private void edvQuoteDtl_EpiViewNotification(EpiDataView view, EpiNotifyArgs args)
{
	// ** Argument Properties and Uses **
	// view.dataView[args.Row]["FieldName"]
	// args.Row, args.Column, args.Sender, args.NotifyType
	// NotifyType.Initialize, NotifyType.AddRow, NotifyType.DeleteRow, NotifyType.InitLastView, NotifyType.InitAndResetTreeNodes
	if ((args.NotifyType == EpiTransaction.NotifyType.Initialize))
	{
		if ((args.Row > -1))
		{
			ControlSettings cs = new ControlSettings();
			cs.IsEnabled = true;
			cs.IsReadOnly = false;
			view.SetCurrentRowPropertyManually("WonQuoteLine_c", cs);

Is there a custom assembly to include that enables ControlSettings?
Edit: Never mind. I had somehow set my customization to VB instead of C#.

Well this code didn’t throw any errors. But it also didn’t enable my field. Since my field is in a control and not in a grid, do I also have to update the control?

Did you run the Form Event wizard to wire in the event handler?

image

Yes I did.

Did you try using EpiTransaction.NotifyType.Initialize instead of AddRow?

Gah! I didn’t notice that! Thank you!

Dang! Still no joy. The code compiles fine, and a messagebox shows it triggers fine, but the custom control only gets enabled when I uncheck the quoted checkbox. Since I use Initialize, I get the messagebox like 5 or 6 times when opening a quote. But if that quote has been “quoted” then my custom control remains disabled.

You could also try tieing the setting to the EpiViewNotification on QuoteHed. If that doesn’t work, sorry for pulling this in a different direction :grimacing:

Yea I couldn’t get it to enable my custom control. It really seems like this should have worked. I guess the Epimagic is just too strong!

Not sure if you have a business rule to leave it on, but there is a setting in Company Configuration that you can set/unset to Prevent Changes to “Quoted” quotes. Maybe that’s turned on?
image

Yes, unfortunately for now I have to leave that on. Thanks for digging for me!

Ok sorry I’m out of ideas from this end, good luck!

1 Like