Nous essayons de créer un document de réception de bon de commande lié à un document de bon de commande. Ci-dessous le code, mais après avoir soumis la sélection de lignes de commande, le webservice ne renvoie aucun résultat. Plus tard, il donne une exception de délai d'exécution.

        apitest.Screen context = BuisnessLogicACU.context;
        PO302000Content PORcptSchema;
        try
        {
            PORcptSchema = context.PO302000GetSchema();
        }
        catch
        {
            BuisnessLogicACU.contextLogin();
            PORcptSchema = context.PO302000GetSchema();
        }
        PORcptSchema.Actions.AddPOOrderLine2.Commit = true;
       //header            
            AcumaticaInterface.apitest.Command[] Document = new AcumaticaInterface.apitest.Command[]
            {                    
                PORcptSchema.Actions.Insert,
                 new Value
                {
                    Value = BPCode,
                    LinkedCommand = PORcptSchema.DocumentSummary.Vendor,
                    Commit = true
                },
                 new Value
                {
                    Value = BPRefNbr ,
                    LinkedCommand = PORcptSchema.DocumentSummary.VendorRef
                },
                 new Value
                {
                    Value = PostDate.HasValue ? ((DateTime)PostDate.Value).ToLongDateString() : "",
                    LinkedCommand = PORcptSchema.DocumentSummary.Date
                },                   
                 new Value
                {
                    Value = DocDate.HasValue ? ((DateTime)DocDate.Value).ToLongDateString() : "",
                    LinkedCommand = PORcptSchema.DocumentSummary.Date
                },
                 new Value
                {
                    Value = Description,
                    LinkedCommand = PORcptSchema.DocumentSummary.NoteText
                },
                new Value
                {
                    Value = "POS Doc " + DocNum,
                    LinkedCommand = PORcptSchema.DocumentSummary.VendorRef
                },

            };



//set the dialog answer
            var dgAnswer = new Command[]
                        { new Value 
                            {
                                Value = "OK", 
                                LinkedCommand = PORcptSchema.AddPurchaseOrderLine.ServiceCommands.DialogAnswer, 
                                Commit = true 
                            }
                        };
            Document = Document.Concat(dgAnswer).ToArray();


 //select lines
            foreach (POReceiptLine line in POReceiptlines.OrderBy(x => x.LineNum))
            {
                AcumaticaInterface.apitest.Command[] Docline = new AcumaticaInterface.apitest.Command[]
                {                   
                    new Key
                    {
                        ObjectName = PORcptSchema.AddPurchaseOrderLine.OrderNbr.ObjectName,
                        FieldName = PORcptSchema.AddPurchaseOrderLine.OrderNbr.FieldName,
                        Value = "='" + line.BaseDocNum + "'"
                    },
                    new Key
                    {
                        ObjectName = PORcptSchema.AddPurchaseOrderLine.LineNbr.ObjectName,
                        FieldName = PORcptSchema.AddPurchaseOrderLine.LineNbr.FieldName,
                        Value = "='" + line.BaseLineNum + "'"
                    },              
                    new Value 
                    {
                        Value = "True", 
                        LinkedCommand = PORcptSchema.AddPurchaseOrderLine.Selected, 
                        Commit = true 
                    }  
                };
                Document = Document.Concat(Docline).ToArray();
            }

  //Add PO line. 
            var addPOLine = new Command[]
                        { 
                            PORcptSchema.Actions.AddPOOrderLine2,

                            ////get back the added lines in the grid
                            PORcptSchema.DocumentDetails.POOrderNbr,
                            PORcptSchema.DocumentDetails.POLineNbr
                        };
            Document = Document.Concat(addPOLine).ToArray();

            var receiptLines = context.PO302000Submit(Document);
//update quantity..
            //check CreateShipment() in webservice demo
            List<Command> commandList = new List<Command>();
            for (int index = 0; index < receiptLines.Length; index++)
            {
                commandList.Add(new Value
                {
                    Value = index.ToString(),
                    LinkedCommand = PORcptSchema.DocumentDetails.ServiceCommands.RowNumber
                });

                POReceiptLine line = POReceiptlines.Where(x => x.BaseDocNum == receiptLines[index].DocumentDetails.POOrderNbr.Value && x.BaseLineNum.ToString() == receiptLines[index].DocumentDetails.POLineNbr.Value).FirstOrDefault();
                if (line != null)
                {
                    commandList.Add(new Value
                    {
                        Value = line.Qty.ToString(),
                        LinkedCommand = PORcptSchema.DocumentDetails.ReceiptQty,
                        Commit = index < receiptLines.Length - 1
                    });
                }
                else
                    throw new Exception("Matching POS Rcpt line not found.");
            }


            //save
            AcumaticaInterface.apitest.Command[] save = new AcumaticaInterface.apitest.Command[] {
                        PORcptSchema.Actions.Save
                    };
            Document = Document.Concat(save).ToArray();

            //SAVING And get the document nbr
            AcumaticaInterface.apitest.Command[] Output = new AcumaticaInterface.apitest.Command[] {                 
                PORcptSchema.DocumentSummary.Type,
                PORcptSchema.DocumentSummary.ReceiptNbr               
            };
            Document = Document.Concat(Output).ToArray();

           var POReceipt = context.PO302000Submit(Document)[0];

Après cette ligne particulière, le service Web ne renvoie aucun résultat. Quelqu'un peut-il vous aider?

var receptionLines = context.PO302000Submit (Document);

0
Sin 16 janv. 2017 à 14:05

2 réponses

Meilleure réponse

L'échantillon de @ samol518 m'a aidé à résoudre. Je poste le code complet, si quelqu'un en a besoin plus tard

Le code ci-dessous ajoutera des lignes à partir du bon de commande, modifiera la quantité et enregistrera le reçu du bon de commande.

public void createAcuPR()
    {

        apitest.Screen context = BuisnessLogicACU.context;
        PO302000Content PORcptSchema;
        try
        {
            PORcptSchema = context.PO302000GetSchema();
        }
        catch
        {
            BuisnessLogicACU.contextLogin();
            PORcptSchema = context.PO302000GetSchema();
        }
        var addPOLineWithCommit = PORcptSchema.Actions.AddPOOrderLine;
        addPOLineWithCommit.Commit = true;

        //somehow if there is a second document then it goes to update mode
        context.PO302000Submit(new Command[] { PORcptSchema.Actions.Insert });

        //header            
        AcumaticaInterface.apitest.Command[] Document = new AcumaticaInterface.apitest.Command[]
        {                
            PORcptSchema.Actions.Insert,
             new Value
            {
                Value = BPCode,
                LinkedCommand = PORcptSchema.DocumentSummary.Vendor,
                Commit = true
            },
             new Value
            {
                Value = BPRefNbr ,
                LinkedCommand = PORcptSchema.DocumentSummary.VendorRef
            },
             new Value
            {
                Value = PostDate.HasValue ? ((DateTime)PostDate.Value).ToLongDateString() : "",
                LinkedCommand = PORcptSchema.DocumentSummary.Date
            },               
             new Value
            {
                Value = "POS Doc " + DocNum + "-" + Description,
                LinkedCommand = PORcptSchema.DocumentSummary.NoteText
            }                               
        };

        //set the dialog answer
        var dgAnswer = new Command[]
                    { new Value 
                        {
                            Value = "OK", 
                            LinkedCommand = PORcptSchema.AddPurchaseOrderLine.ServiceCommands.DialogAnswer, 
                            Commit = true 
                        }
                    };
        Document = Document.Concat(dgAnswer).ToArray();

        //select lines from smart panel
        foreach (POReceiptLine line in POReceiptlines.OrderBy(x => x.LineNum))
        {
            AcumaticaInterface.apitest.Command[] Docline = new AcumaticaInterface.apitest.Command[]
            {                   
                new Key
                {
                    ObjectName = PORcptSchema.AddPurchaseOrderLine.OrderNbr.ObjectName,
                    FieldName = PORcptSchema.AddPurchaseOrderLine.OrderNbr.FieldName,
                    Value = "='" + line.BaseDocNum + "'"
                },
                new Key
                {
                    ObjectName = PORcptSchema.AddPurchaseOrderLine.LineNbr.ObjectName,
                    FieldName = PORcptSchema.AddPurchaseOrderLine.LineNbr.FieldName,
                    Value = "='" + line.BaseLineNum + "'"
                },              
                new Value 
                {
                    Value = "True", 
                    LinkedCommand = PORcptSchema.AddPurchaseOrderLine.Selected, 
                    Commit = true 
                }  
            };
            Document = Document.Concat(Docline).ToArray();
        }


        //Add PO line and retrive back the added lines.
        var addPOLine = new Command[]
                    {                             
                        addPOLineWithCommit,
                        ////get back the added lines in the grid
                        PORcptSchema.DocumentDetails.POOrderNbr,
                        PORcptSchema.DocumentDetails.POLineNbr
                    };
        Document = Document.Concat(addPOLine).ToArray();

        var receiptLines = context.PO302000Submit(Document);

        //update quantity..           
        List<Command> commandList = new List<Command>();
        for (int index = 0; index < receiptLines.Length; index++)
        {
            commandList.Add(new Value
            {
                Value = index.ToString(),
                LinkedCommand = PORcptSchema.DocumentDetails.ServiceCommands.RowNumber
            });

            POReceiptLine line = POReceiptlines.Where(x => x.BaseDocNum == receiptLines[index].DocumentDetails.POOrderNbr.Value && x.BaseLineNum.ToString() == receiptLines[index].DocumentDetails.POLineNbr.Value).FirstOrDefault();
            if (line != null)
            {
                commandList.Add(new Value
                {
                    Value = line.Qty.ToString(),
                    LinkedCommand = PORcptSchema.DocumentDetails.ReceiptQty,
                    Commit = index < receiptLines.Length - 1
                });
            }
            else
                throw new Exception("Matching POS Rcpt line not found.");
        }

        //save
        commandList.AddRange(
                    //SAVING And get the document nbr
                   new AcumaticaInterface.apitest.Command[] {   
                        PORcptSchema.Actions.Save,
                        PORcptSchema.DocumentSummary.Type,
                        PORcptSchema.DocumentSummary.ReceiptNbr               
        });


        var POReceipt = context.PO302000Submit(commandList.ToArray())[0];           
    }
0
Sin 18 janv. 2017 à 03:24

Cette solution a été testée avec Acumatica version 6.00.1596.

J'ai constaté que pour renvoyer la valeur des lignes de commande d'achat, vous n'avez pas besoin de faire un foreach.

Après avoir défini la valeur du résumé et supprimé le double, voici ce que j'utilise pour récupérer les POLines.

var selectPOLine = new Command[]
{
    new Value
    {
        Value = "OK",
        LinkedCommand = PORcptSchema.AddPurchaseOrderLine.ServiceCommands.DialogAnswer,
        Commit = true
    },
    addPOLineWithCommit,
    new Value
    {
        LinkedCommand = PORcptSchema.AddPurchaseOrderLinePOSelection.OrderNbr,
        Value = "PO000451"
    },
    new Value
    {
        Value = "True",
        LinkedCommand = PORcptSchema.AddPurchaseOrderLine.Selected,
    },
    PORcptSchema.AddPurchaseOrderLine.InventoryID,
    PORcptSchema.AddPurchaseOrderLine.LineDescription,
    PORcptSchema.AddPurchaseOrderLine.LineType,
};

Avec "addPOLineWithCommit" définir comme

var addPOLineWithCommit = PORcptSchema.Actions.AddPOOrderLine;
addPOLineWithCommit.Commit = true;

En utilisant ces la ligne: var receptionLines = context.PO302000Submit (Document); me renvoyait quelques informations sur les lignes disponibles.

1
samol518 16 janv. 2017 à 16:56