Skip to main content

Bill Creation using SOAP fails


Creating a Bill document with all fields populated using SOAP results in error “System.InvalidOperationException: Cant find method for action \"http://www.acumatica.com/entity/3/DefaultRLSFT/17.200.001/Put\"\n   at System.Monads.ArgumentCheck.CheckNull[TSource](TSource source, Func`1 exceptionSource)\n   at PX.Api.ContractBased.Soap.WebApiSoapController.<Login>d__6.MoveNext()\n--- End of stack trace from previous location where exception was thrown ---\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n   at System.Threading.Tasks.TaskHelpersExtensions.<CastToObject>d__1`1.MoveNext()\n--- End of stack trace from previous location where exception was thrown ---\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n   at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__1.MoveNext()\n--- End of stack trace from previous lo
cation where exception was thrown ---\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n   at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__5.MoveNext()\n--- End of stack trace from previous location where exception was thrown ---\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n   at System.Web.Http.Controllers.ExceptionFilterResult.<ExecuteAsync>d__6.MoveNext()”

This error happens on both default EndPoint and extended Endpoint, which includes item InventoryID

 

Any help will be appreciated.

 

Did this topic help you find an answer to your question?

2 replies

Ali Jani
Community Manager
Forum|alt.badge.img
  • Acumatica Chief Product Officer
  • 52 replies
  • October 7, 2020

Please post your sample code using default end point that is failing.


Here is the code:

            string lcSQL, lcErrMsg, lcStage = "Start";

 

clsGlobals.gcAcmtURL="http://localhost/AcumaticaERP/";
clsGlobals.gcAcmtEndPoint="Default";
clsGlobals.gcAcmtVersion="17.200.001";

 

 

            AcmtIntegrator.AcumaticaWSDL.DefaultSoapClient soapClient = null;
            soapClient = new AcmtIntegrator.AcumaticaWSDL.DefaultSoapClient(clsACMT.CreateBinding(clsGlobals.gcAcmtURL),
            clsACMT.CreateEndpoint(clsGlobals.gcAcmtURL, clsGlobals.gcAcmtEndPoint, clsGlobals.gcAcmtVersion));

            string lcBranch, lcLocationID;
 

            // Bill Level:
            lcBranch = "SOFT";
            lcLocationID = "";
            string docType = "Bill";
            string lcVendorCd = "EP00000001";
            string lcVendorRef = "VendorRef - 2";
            decimal lnBillAmt = 1000;
            string lcDocTxnDate = "20201005", lcDocDueDate = "20201104";
            string lcCashAccount = "102000SOFT";
            string lcBillDesc = "bill Desc 2";
            string lcRefNo = "RefNo";
            string lcTerms = "30D";
            string lcPostPeriod = "102020";


            int lnLineCount = 0;
            lnLineCount = 1;

            // Bill Line
            decimal lnLineExtAmt = 1000, lnUnitCost = 0, lnLineQty = 0;
            string lcLinePOOrderNbr = "", lcLinePOOrderType = "", lcLineDesc = "Line Desc", lcLineTranDesc = "Tran Desc";
            string lcLineAccount, lcLineSubAccount, lcUoM, lcLineItemInvID, lcLineProject = "Prj", lcLineProjectTask = "PTask";
            string lcItemAcmtGuid = "61594ca1-0d6b-e411-a445-e06995c86014";

            //

            BillDetail[] loBillDetails;
            loBillDetails = new BillDetail[lnLineCount];

 

            lcLineItemInvID = "ADVERT";
            lcLineDesc = "Advertising";
            lcLineAccount = "610000";
            lcLineSubAccount = "0000000";
            lcUoM = "HOUR";


            loBillDetails[0] = new BillDetail
            {
                Branch = new StringValue { Value = lcBranch },
                Amount = new DecimalValue { Value = lnLineExtAmt },
                ExtendedCost = new DecimalValue { Value = lnLineExtAmt },
                UnitCost = new DecimalValue { Value = lnUnitCost },
                Qty = new DecimalValue { Value = lnLineQty },
                TransactionDescription = new StringValue { Value = lcLineTranDesc },
                Description = new StringValue { Value = lcLineDesc },
                POOrderNbr = new StringValue { Value = lcLinePOOrderNbr },
                POOrderType = new StringValue { Value = lcLinePOOrderType },
                Account = new StringValue { Value = lcLineAccount },
                Subaccount = new StringValue { Value = lcLineSubAccount },
                // InventoryID = new StringValue { Value = lcLineItemInvID },
                UOM = new StringValue { Value = lcUoM },
                Project = new StringValue { Value = lcLineProject },
                ProjectTask = new StringValue { Value = lcLineProjectTask }
        };

 

            Bill loBill = new Bill
            {
                ReturnBehavior = ReturnBehavior.OnlySpecified,
                // ReturnBehavior = ReturnBehavior.All,
                Amount = new DecimalValue { Value = lnBillAmt },
                Applications = new AcmtIntegrator.AcumaticaWSDL.BillApplicationDetail[0],
                ApprovedForPayment = new BooleanValue { Value = true },
                Balance = new DecimalValue { Value = lnBillAmt },
                BranchID = new StringValue { Value = lcBranch },
                CashAccount = new StringValue { Value = lcCashAccount },    
                CurrencyID = new StringValue { Value = "USD" },
                CustomFields = new AcmtIntegrator.AcumaticaWSDL.CustomField[0],
                Description = new StringValue { Value = lcBillDesc },
                Hold = new BooleanValue { Value = false },
                Note = "",  
                Type = new StringValue { Value = docType },
                ReferenceNbr = new StringReturn { Value = lcRefNo },
                // ReferenceNbr = new StringReturn(),
                TaxDetails = new AcmtIntegrator.AcumaticaWSDL.BillTaxDetail[0],
                // Type = new StringValue (),  
                // Status = new StringReturn(),
                Status = new StringReturn { Value = "Balanced" },
                Vendor = new StringValue { Value = lcVendorCd },
                VendorRef = new StringValue { Value = lcVendorRef },
                PostPeriod = new StringValue { Value = lcPostPeriod },
                TaxTotal = new DecimalValue { Value = 0 },  
                Terms = new StringValue { Value = lcTerms },
                Details = loBillDetails,
            };

            // LocationID is optional
            if (lcLocationID != "")
            {
                loBill.LocationID = new StringValue { Value = lcLocationID };
            }

            if (lcDocTxnDate != "")
            {
                loBill.Date = new DateTimeValue
                {
                    Value = new DateTime(Convert.ToInt32(mdlGU.MyLeft(lcDocTxnDate, 4)),
                    Convert.ToInt32(lcDocTxnDate.Substring(4, 2)),
                    Convert.ToInt32(lcDocTxnDate.Substring(6, 2)))
                };

                loBill.DueDate = new DateTimeValue
                {
                    Value = new DateTime(Convert.ToInt32(mdlGU.MyLeft(lcDocDueDate, 4)),
                    Convert.ToInt32(lcDocDueDate.Substring(4, 2)),
                    Convert.ToInt32(lcDocDueDate.Substring(6, 2)))
                };

            };

            //Create a Bill
            Bill newBill = new Bill();
            try
            {
                newBill = (Bill)soapClient.Put(loBill);
            }
            catch (Exception ex)
            {
                lcErrMsg = ex.Message.Replace("'", "").Substring(0, 900);
            }

 

 

            soapClient.Logout();

Thank you!

I checked that a copy of an existing Bill can be saved by Put, so there is no issue with permissions to save.

The only Nulls that I could find in loBill were ID and RowNumber.


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings