Importa Importo Pagato in schermo Fattura e Aggiustamento utilizzando l’API webservices nel sistema acumatica

Devo importare il valore di Amount Paid utilizzando i servizi web per il sistema ERP di Acumatica. Si prega di fare riferimento a questo screenshot qui sotto.

inserisci la descrizione dell'immagine qui

Ho già creato alcuni codici utilizzando il numero di riferimento = “1700000016”, DocType = “Bill”, VendorRef = “SV-889-JKT-2”, VendorID = “V000000030” e Importo pagato = “1,250,000”. Si prega di fare riferimento a questo codice qui sotto.

sCon.getLogin(username, password, url, context); AP301000Content konten = context.AP301000GetSchema(); //context.AP301000Clear(); List oCmds = new List(); //oCmds.Add(konten.Actions.Insert); //--------------- adding header transaction -----------------// konten.DocumentSummary.Type.Commit = false; konten.DocumentSummary.Type.LinkedCommand = null; oCmds.Add(new Value { LinkedCommand = konten.DocumentSummary.Type, Value = "Bill" }); oCmds.Add(new Value { LinkedCommand = konten.DocumentSummary.ReferenceNbr, Value = "0000" }); oCmds.Add(new Value { LinkedCommand = konten.DocumentSummary.Date, Value = dtDateSV.Text }); oCmds.Add(new Value { LinkedCommand = konten.DocumentSummary.VendorRef, Value = "SV-889-JKT-2" }); oCmds.Add(new Value { LinkedCommand = konten.DocumentSummary.Vendor, Value = "V000000030" }); //-------------- adding detail transaction (Based on values in Data Grid )------------- int a = dgvDocDetailSV.Rows.Count; for (int x = 0; x < a; x++) { oCmds.Add(konten.DocumentDetails.ServiceCommands.NewRow); oCmds.Add(new Value { LinkedCommand = konten.DocumentDetails.Branch, Value = dgvDocDetailSV.Rows[x].Cells[1].Value.ToString() }); oCmds.Add(new Value { LinkedCommand = konten.DocumentDetails.InventoryID, Value = dgvDocDetailSV.Rows[x].Cells[2].Value.ToString() }); oCmds.Add(new Value { LinkedCommand = konten.DocumentDetails.JobOrderNbr, Value = dgvDocDetailSV.Rows[x].Cells[3].Value.ToString() }); oCmds.Add(new Value { LinkedCommand = konten.DocumentDetails.Quantity, Value = dgvDocDetailSV.Rows[x].Cells[4].Value.ToString() }); oCmds.Add(new Value { LinkedCommand = konten.DocumentDetails.UOM, Value = dgvDocDetailSV.Rows[x].Cells[5].Value.ToString() }); oCmds.Add(new Value { LinkedCommand = konten.DocumentDetails.UnitCost, Value = dgvDocDetailSV.Rows[x].Cells[6].Value.ToString() }); } //------ add document in Applications Tab Menu -------// string DocTypePrepayment = "Prepayment"; string RefNbrPrepayment = "1700000015"; oCmds.Add(new Key { ObjectName = konten.Applications.DocTypeDisplayDocType.ObjectName, FieldName = konten.Applications.DocTypeDisplayDocType.FieldName, Value = DocTypePrepayment }); oCmds.Add(new Key { ObjectName = konten.Applications.ReferenceNbrDisplayRefNbr.ObjectName, FieldName = konten.Applications.ReferenceNbrDisplayRefNbr.FieldName, Value = RefNbrPrepayment }); oCmds.Add(new Value { LinkedCommand = konten.Applications.AmountPaid, Value = "1250000" }); //------ save transaction in acumatica -------// oCmds.Add(konten.Actions.Save); var result = context.AP301000Submit(oCmds.ToArray()); 

Ho un messaggio di errore dopo aver provato ad importare questi dati. Il messaggio di errore è “System.Web.Services.Protocols.SoapException: il server non è stato in grado di elaborare la richiesta. —> PX.Data.PXException: Errore # 111: si è verificato un errore durante l’elaborazione del campo CuryAdjdAmt: riferimento object non impostato su un’istanza di un object .. —> System.NullReferenceException: Riferimento dell’object non impostato su un’istanza di un object. “. Sembra che il campo CuryAdjdAmt sia nullo e questo campo sia mappato al campo AmountPaid nella scheda del menu Applicazione del sistema Acumatica.

Per favore dammi un riferimento per risolvere questo problema. Grazie

Sembra che ci sia un problema con il delegato della visualizzazione dati Regolazioni causato dai miglioramenti delle prestazioni apportati alla schermata Fatture e regolazioni circa un anno fa. Ho inoltrato tutti i dettagli al team di ingegneri di Acumatica per ulteriori indagini.

Come soluzione temporanea, è ansible implementare un’estensione per il BLC APInvoiceEntry e modificare leggermente il delegato della vista Dati rettifiche:

 public class APInvoiceEntryExt : PXGraphExtension { [PXCopyPasteHiddenView] public PXSelectJoin, And>>>> Adjustments; public IEnumerable adjustments() { IEnumerable result; bool origIsImport = Base.IsImport; Base.IsImport = false; try { result = Base.Adjustments.Select(); } finally { Base.IsImport = origIsImport; } return result; } } 

Con la soluzione temporanea applicata, sono stato in grado di aggiornare il campo AmountPaid con il seguente set di comandi. Dato il livello di complessità inserito nella vista Dati rettifiche (poiché deve funzionare con entrambi i record recuperati dal database e creati in fase di runtime), è necessario utilizzare il comando di servizio RowNumber quando ci sono più di 1 documento nella scheda Applicazioni (Schermata- I comandi API basati sul tipo di chiave purtroppo non funzioneranno per individuare il record nella scheda Applicazioni).

Nell’esempio seguente verranno inviate 2 richieste all’API di Acumatica: – 1a chiamata per esportare tutti i record dalla scheda Applicazioni – eseguendo il loop tramite l’array restituito, è ansible determinare quali sono RowNumbers di record, che richiedono il nuovo set di valori per AmountPaid – con la seconda chiamata , si passa il RowNumber e si assegna un nuovo valore al campo AmountPaid

 Screen context = new Screen(); context.CookieContainer = new System.Net.CookieContainer(); context.Url = "http://localhost/AP301000/Soap/AP301000.asmx"; context.Login("admin", "123"); Content billSchema = context.GetSchema(); // 1st call to export all records from the Applications tab billSchema.DocumentSummary.Type.Commit = false; billSchema.DocumentSummary.Type.LinkedCommand = null; var commands = new Command[] { new Value { Value = "Bill", LinkedCommand = billSchema.DocumentSummary.Type }, new Value { Value = "000927", LinkedCommand = billSchema.DocumentSummary.ReferenceNbr }, billSchema.Applications.DocTypeDisplayDocType, billSchema.Applications.ReferenceNbrDisplayRefNbr, billSchema.Applications.Balance }; var applications = context.Submit(commands).ToList(); // end of 1st call to export all records from the Applications tab // 2nd call to set AmountPaid in the Applications tab var cmds = new List(); foreach (var application in applications) { cmds.Add( new Value { Value = applications.IndexOf(application).ToString(), LinkedCommand = billSchema.Applications.ServiceCommands.RowNumber }); cmds.Add( new Value { Value = application.Applications.Balance.Value, LinkedCommand = billSchema.Applications.AmountPaid }); } cmds.Add(billSchema.Actions.Save); context.Submit(cmds.ToArray()); // end of 2nd call to set AmountPaid in the Applications tab