1

顧客のロケーション レコードの 1 つを削除したいと考えています。私はこれまで何も削除したことがなく、StackOverflow や Acumatica が提供する例にもその例はありません。キー フィールドと削除コマンドを使用して送信を実行するのは理にかなっているように見えますが、これにより、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というかなり漠然としたメッセージが表示されます。エラー。ここで私が間違っていること、またはこれが間違ったアプローチであるかどうかを誰かに教えてもらえますか? 以下のコードと完全なエラーメッセージ。

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 ---
4

3 に答える 3

1

コードは正しいですが、デフォルトの住所や連絡先情報を使用しない場所を削除すると失敗します。これは、Acumatica のすべてのバージョンに影響するバグによるものです。回避策は、場所を削除する前に「デフォルトを使用」を再度チェックすることです。この問題は報告されており、現在修正中です。この問題のトラブルシューティングにご協力いただきありがとうございます。ご迷惑をおかけして申し訳ありません。

于 2015-04-03T14:42:47.493 に答える
0

以下のコードは正常に動作します

            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
            }
        );
于 2015-03-27T17:25:56.287 に答える
0

私は醜い方法を提案することができます: PXDatabase.Delete. db で直接 delete ステートメントを生成します。たとえば、C# の場合:

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

于 2015-03-26T22:25:55.003 に答える