【问题标题】:Deleting a Location with Acumatica API使用 Acumatica API 删除位置
【发布时间】:2015-04-03 22:42:47
【问题描述】:

我想删除一个客户的位置记录。我以前从未删除过任何内容,并且在 StackOverflow 或 Acumatica 提供的示例中也没有看到任何示例。似乎使用关键字段和 Delete 命令进行提交是有意义的,但这给了我一个非常模糊的“对象引用未设置为对象的实例”。错误。谁能告诉我我在这里做错了什么,或者这是否是错误的方法?代码和完整的错误信息如下。

Public Function DeleteLocation(ByVal customerID As String, ByVal locID As String) As Boolean
    Dim address As CR303010Content = m_context.CR303010GetSchema()
    m_context.CR303010Clear()

    Dim customerVal As New Value() With {.LinkedCommand = address.LocationSummary.Customer, .Value = customerID}
    Dim idVal As New Value() With {.LinkedCommand = address.LocationSummary.LocationID, .Value = locID}

    ' execute delete
    Dim deleteCommands As Command() = {customerVal, idVal, address.Actions.Delete}
    Dim deleteResult As CR303010Content() = m_context.CR303010Submit(deleteCommands)

    Return True

End Function

抛出此异常:

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> 
System.NullReferenceException: Object reference not set to an instance of an object.
at PX.Objects.CR.LocationMaintBase`3.Location_RowDeleted(PXCache cache, PXRowDeletedEventArgs e)
at PX.Data.PXCache.OnRowDeleted(Object item, Boolean externalCall)
at PX.Data.PXCache`1.Delete(Object data, Boolean bypassinterceptor)
at PX.Data.PXCache`1.Delete(Object data, Boolean bypassinterceptor)
at PX.Data.PXCache`1.Delete(Object data)
at PX.Data.PXDelete`1.<Handler>d__0.MoveNext()
at PX.Data.PXAction`1.<Press>d__c.MoveNext()
at PX.Data.PXAction`1.<Press>d__c.MoveNext()
at PX.Api.SyImportProcessor.SyStep.CommitChanges(Object itemToBypass, PXFilterRow[] targetConditions)
at PX.Api.SyImportProcessor.ExportTableHelper.ExportTable()
at PX.Api.ScreenUtils.Submit(String screenId, Command[] commands, SchemaMode schemaMode, PXGraph graph)
at PX.Api.Services.ScreenService.Submit(String id, IEnumerable`1 commands, SchemaMode schemaMode)
at PX.Api.Soap.Screen.ScreenGate.Submit(Command[] commands)
--- End of inner exception stack trace ---

【问题讨论】:

  • 这看起来像是应用程序中的一个错误,您的代码是干净的。您尝试删除的位置是否有有效的地址和联系方式?我检查了 Location_RowDeleted 的代码,我发现我们可以在这里有 NullReferenceException...
  • @Gabriel 对于我要删除的地址,联系人设置为“与主要地址相同”,地址设置为有效地址,除地址行 2 外,所有字段均已填写。谢谢检查您的 Location_RowDeleted,如果您发现这是问题,请告诉我。

标签: acumatica


【解决方案1】:

您的代码是正确的,但在删除不使用默认地址或联系信息的位置时会失败。这是由于影响所有 Acumatica 版本的错误造成的。解决方法是在删除位置之前重新检查“使用默认值”。该问题已报告,目前正在修复中。感谢您帮助 Eric 解决此问题,对于给您带来的不便,我们深表歉意。

【讨论】:

    【解决方案2】:

    我可以建议你丑陋的方式:PXDatabase.Delete。它将直接在db中生成删除语句。例如在 C# 中:

    PXDatabase.Delete(new PXDataFieldRestrict("RefNbr", row.APRefNbr), new PXDataFieldRestrict("DocType", "INV")); PXDatabase.Delete(new PXDataFieldRestrict("RefNbr", row.APRefNbr), new PXDataFieldRestrict("DocType", "INV"));

    【讨论】:

    • 使用 Web 服务 API,我不相信我可以访问 PXDatabase 对象和命令。我只能访问生成的 WSDL 文件中的屏幕/对象。但是,如果我错了,请告诉我,如果可以的话,我很乐意使用 PXDatabase.Delete。
    • 我建议尝试制作执行此操作的按钮,并调用该按钮
    • 我认为这是一个非常糟糕的主意 - 你绕过所有业务逻辑。
    • 这就是我写丑的原因
    【解决方案3】:

    下面的代码可以正常工作

                Content CR303010 = context.GetSchema();
            context.Clear();
    
            context.Submit(
                new Command[]
                {
                    new Value { Value = "ABARTENDE", LinkedCommand = CR303010.LocationSummary.BusinessAccount, Commit = true },
                    new Value { Value = "TEST2", LinkedCommand = CR303010.LocationSummary.LocationID, Commit = true },
                    CR303010.Actions.Delete
                }
            );
    

    【讨论】:

    • 对于您的第一个值,您的 LinkedCommand 是 CR303010.LocationSummary.BusinessAccount 。我的 CR303010.LocationSummary 没有 BusinessAccount 属性,这就是我使用 CR303010.LocationSummary.Cusotmer 的原因。那和 Commit=true 属性是我在您的代码和我的代码之间看到的唯一区别。我尝试为每个值添加 Commit=true 但仍然收到相同的错误。
    • 我使用的是 5.00.2718 版本
    • 这很有趣。我们使用的是版本 4.20.2063。我会考虑升级的可能性。如果我们能够做到,可能需要一段时间,但如果这能解决问题,我们会通知您
    • @EricBarr 你解决了这个问题吗?如果需要,我们可以进一步研究
    • @Gabriel 不,我没有。我们可能需要很长时间才能在新版本上试用它。如果您有时间进一步研究,那就太好了,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    相关资源
    最近更新 更多