How to export an invoice or current operator using the Acumatica SOAP API via PHP?

How to export an invoice or current instruction using the Acumatica SOAP API via PHP?

I can generate PHP SOAP stub classes using https://www.wsdltophp.com/

Most of the examples I found use .Net

The WSDL my client provided me with is: http://erp.triode.co.nz/pmsdb/Soap/INEXPORT.asmx?WSDL

From what I see, it seems that Acumatica has several WSDLs for different procedures. If someone could give me a point in the right direction, that would be great. I can authenticate with the Acumatica endpoint, I just get stuck on where to start this use case.

*** UPDATE ****

OK. I am now using Acumatica PHP helper files, which are very useful, but unfortunately got stuck again trying to export a list of invoices for a single client:

<?php ini_set('memory_limit','512M'); ini_set('display_errors',true); error_reporting(-1); require_once('AcumaticaGate.php'); //$wsdl = "http://erp.triode.co.nz/pmsdb/Soap/AR402000.asmx?WSDL"; // $client = new AcumaticaGate('<user_login>', '<user_password>', '<folder_name>','http://<computer>/<website>'); //Can't provide credentials for security reasons unfortunately $un = "" $pw = ""; $client = new AcumaticaGate($un, $pw, 'AR402000','http://erp.triode.co.nz/pmsdb'); $customer_id = "DAR"; $doctype = "Invoice"; $selection = $client->Schema->GetSchemaResult->Selection; $customer = $selection->Customer = $customer_id; $all_docs = $selection->ShowAllDocuments = true; $unreleased = $selection->IncludeUnreleasedDocuments = true; $type_doc = $client->Schema->GetSchemaResult->Documents->TypeDisplayDocType; // FILTERS $filters = array(); array_push($filters, $client->PrepareSimpleFilter(clone $type_doc, FilterCondition::Equals, $doctype)); $export_param = new Export(); $export_param->commands = array($customer, $all_docs, $unreleased); $export_param->filters = $filters; $export_param->breakOnError = true $export_param->includeHeaders = false; $export_param->topCount = 0; $export = $client->Client->Export($export_param); echo "<pre>"; print_r($export); echo "</pre>"; // echo $client->Client->__getLastRequest(); ?> 

Getting error:

Fatal error: SoapFault exception: [soap: Server] System.Web.Services.Protocols.SoapException: the server could not process the request. ---> System.NullReferenceException: the reference to the object is not installed in the instance of the object. in PX.Api.SyImportContext.ParseCommand (SyCommand cmd) in PX.Api.SyExportContext.a (SYMappingField A_0) in System.Linq.Enumerable.WhereSelectArrayIterator 2.MoveNext() at System.Collections.Generic.List 1..ctor IEnumerable 1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable 1 source) in PX. Api.SyExportContext..ctor (matching SYMapping, IEnumerable 1 fields, String[] providerFields, Dictionary 2 viewFilters, Boolean breakOnError, Int32 start, Int32 count, LinkedSelectorViews selectorViews, String rowFilterField) in PX.Api.ScreenUtils.ExportInternal ( Commands line 549

This is the .Net method I'm trying to reverse engineer:

Example 4.3.4: Obtaining a list of customer invoices This example, which is provided for reference only, shows how to obtain a list of invoices for a customer (by customer ID) in the form of customer information (AR402000; Finance> Accounts Receivable> Work Area> Explore).

 class CustomerDetail { //Retrieving the list of invoices for the customer //on the Customer Details form (AR402000) public static void ExportInvoices() { //Input data string customerID = "C000000003"; string docType = "Invoice"; using ( //Connect to the web services and log in to Acumatica ERP Screen context = WebServiceConnector.InitializeWebService() ) { try { //Get the schema of the Customer Details form (AR402000) AR402000Content customerDetailSchema = context.AR402000GetSchema(); //Configure the list of commands var commands = new Command[] { //Select the documents from the inquiry new Value { Value = customerID, LinkedCommand = customerDetailSchema.Selection.Customer }, new Value { Value = "True", LinkedCommand = customerDetailSchema.Selection.ShowAllDocuments }, new Value { Value = "True", LinkedCommand = customerDetailSchema.Selection.IncludeUnreleasedDocuments }, //Get the values of the elements customerDetailSchema.Documents.TypeDisplayDocType, customerDetailSchema.Documents.ReferenceNbr, customerDetailSchema.Documents.Date, customerDetailSchema.Documents.Status }; //Select for export only the orders of the needed customer var filters = new Filter[] { new Filter { Field = customerDetailSchema.Documents.TypeDisplayDocType, Condition = FilterCondition.Equals, Value = docType } }; //Export the records var custormerInvoices = context.AR402000Export(commands, filters, 0, true, false); //Save the export results to a CSV file IOHelper.SaveToCSVFile(custormerInvoices, string.Format(@"SOInvoices_Customer_{0}.csv", customerID)); } finally { //Log out from Acumatica ERP context.Logout(); } } } } 

UPDATE

The script has been updated and now receives an empty response from the API endpoint, at least it is not an error, but still remains unfortunately, therefore accepts, but returns nothing:

NEW CODE

 <?php ini_set('memory_limit','512M'); ini_set('display_errors',true); error_reporting(-1); require_once('AcumaticaGate.php'); //$wsdl = "http://erp.triode.co.nz/pmsdb/Soap/INEXPORT.asmx?WSDL"; // $client = new AcumaticaGate('<user_login>', '<user_password>', '<folder_name>','http://<computer>/<website>'); $un = ""; $pw = ""; $client = new AcumaticaGate($un, $pw, 'AR402000','http://erp.triode.co.nz/pmsdb'); $customer_id = "3678"; $doctype = "Invoice"; $selection = $client->Schema->GetSchemaResult->Selection; $customer = $selection->Customer; $all_docs = $selection->ShowAllDocuments; $unreleased = $selection->IncludeUnreleasedDocuments; $type_doc = $client->Schema->GetSchemaResult->Documents->TypeDisplayDocType; $command = array(); array_push($command, $client->PrepareValue($customer_id, $customer)); array_push($command, $client->PrepareValue('true', $all_docs)); array_push($command, $client->PrepareValue('true', $unreleased)); // FILTERS $filters = array(); array_push($filters, $client->PrepareSimpleFilter(clone $type_doc, FilterCondition::Equals, $doctype)); array_push($filters, $client->PrepareSimpleFilter(clone $customer, FilterCondition::Equals, $customer_id)); $export_param = new Export(); $export_param->commands = $command; $export_param->filters = $filters; $export_param->breakOnError = true; $export_param->includeHeaders = false; $export_param->topCount = 0; $export = $client->Client->Export($export_param); // echo "<pre>"; // print_r($export); // echo "</pre>"; echo $client->Client->__getLastRequest(); ?> 

SOAP XML REQUEST

 <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP- ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.acumatica.com/typed/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <ns1:Export> <ns1:commands> <ns1:Command xsi:type="ns1:Value"> <ns1:Value>3678</ns1:Value> <ns1:LinkedCommand xsi:type="ns1:Field"> <ns1:FieldName>CustomerID</ns1:FieldName> <ns1:ObjectName>Filter</ns1:ObjectName> <ns1:Value>Customer</ns1:Value> <ns1:Commit>true</ns1:Commit> </ns1:LinkedCommand> </ns1:Command> <ns1:Command xsi:type="ns1:Value"> <ns1:Value>true</ns1:Value> <ns1:LinkedCommand xsi:type="ns1:Field"> <ns1:FieldName>ShowAllDocs</ns1:FieldName> <ns1:ObjectName>Filter</ns1:ObjectName> <ns1:Value>ShowAllDocuments</ns1:Value> <ns1:Commit>true</ns1:Commit> </ns1:LinkedCommand> </ns1:Command> <ns1:Command xsi:type="ns1:Value"> <ns1:Value>true</ns1:Value> <ns1:LinkedCommand xsi:type="ns1:Field"> <ns1:FieldName>IncludeUnreleased</ns1:FieldName> <ns1:ObjectName>Filter</ns1:ObjectName> <ns1:Value>IncludeUnreleasedDocuments</ns1:Value> <ns1:Commit>true</ns1:Commit> </ns1:LinkedCommand> </ns1:Command> </ns1:commands> <ns1:filters> <ns1:Filter> <ns1:Field> <ns1:FieldName>DisplayDocType</ns1:FieldName> <ns1:ObjectName>Documents</ns1:ObjectName> <ns1:Value>TypeDisplayDocType</ns1:Value> </ns1:Field> <ns1:Condition>Equals</ns1:Condition> <ns1:Value xsi:type="xsd:string">Invoice</ns1:Value> <ns1:OpenBrackets>0</ns1:OpenBrackets> <ns1:CloseBrackets>0</ns1:CloseBrackets> <ns1:Operator>And</ns1:Operator> </ns1:Filter> <ns1:Filter> <ns1:Field> <ns1:FieldName>CustomerID</ns1:FieldName> <ns1:ObjectName>Filter</ns1:ObjectName> <ns1:Value>Customer</ns1:Value> <ns1:Commit>true</ns1:Commit> </ns1:Field> <ns1:Condition>Equals</ns1:Condition> <ns1:Value xsi:type="xsd:string">3678</ns1:Value> <ns1:OpenBrackets>0</ns1:OpenBrackets> <ns1:CloseBrackets>0</ns1:CloseBrackets> <ns1:Operator>And</ns1:Operator> </ns1:Filter> </ns1:filters> <ns1:topCount>0</ns1:topCount> <ns1:includeHeaders>false</ns1:includeHeaders> <ns1:breakOnError>true</ns1:breakOnError> </ns1:Export> </SOAP-ENV:Body> </SOAP-ENV:Envelope> 

END POINT RATING

 <?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Body> <ExportResponse xmlns="http://www.acumatica.com/typed/"> <ExportResult /> </ExportResponse> </soap:Body> </soap:Envelope> 
+5
source share
2 answers

As the author of wsdltophp.com, I strongly recommend that you use the new version of the generator from PackageGenerator , it should work better than with the previous version. If not, feel free to contact me by email.

+1
source

I don’t know if you will ever earn this, but the next example I can run pulls inventory items with β€œ1” in the name. Hope this will be helpful.

 //Create a Filter with which we'll see if our inventory item is already present $field = new Field(); $field->FieldName = $schema->StockItemSummary->InventoryID->FieldName; $field->ObjectName = $schema->StockItemSummary->InventoryID->ObjectName; $condition = FilterCondition::Contain; //Search String $string = "1"; $filter = $client->PrepareSimpleFilter($field,$condition,$string); //Create an Export command that will contain fields for return, various options, and our filter array $export = new Export(); $export->commands = array( $schema->StockItemSummary->InventoryID, $schema->StockItemSummary->Description ); $export->topCount = 15; $export->includeHeaders = false; $export->breakOnError = false; $export->filters = array( $filter ); 
0
source

Source: https://habr.com/ru/post/1261366/


All Articles