Category: Tutorials

Reset CAE Status for Argentina Invoices (AFIP)

Reset CAE Status for Argentina Invoices (AFIP)

Scenario

During the integration of the synchronous AFIP webservice for Argentina invoices via  SAP PI / PO, I did some End-to-End tests and struggled with multiple errors on PI side. Unfortunately, sometimes it was impossible to do a new test because one invoice was no longer in a send able state.

These are the possible states:

CAE Status Description
I Sent to AFIP
A Approved
P Approved with Reservations
R Rejected
N New Document
C Contingency
E Validation Error
O Observations

Error

The following error message is shown when clicking on “Send to AFIP” button in SAP ERP transaction “J1AEXPMONITOR”:

Another document is already in process

Solution

  1. Goto transaction SE16
  2. Insert table name “J_1ACAE” and click on the “Table contents” button
  3. Insert some filters into the mask (optional) and click on the “Execute” button

    Data Browser: J_1ACAE Selection Screen
    Enter filter values and execute
  4. Select line where you would like to change the CAE status and click on the “Change” button

    Data Browser: Table J_1ACAE
    Select one table entry of table “J_1ACAE” to edit
  5. Remove the “X” in field “RFC SENT LOCK” and click on “Save” button

    Change CAE STATUS for table entry
    Change CAE STATUS for table entry
  6. Leave the data browser to unlock the table
  7. Try to resend the message in transaction “J1AEXPMONITOR”
Reset RFC Sent Lock for Argentina Invoices (AFIP)

Reset RFC Sent Lock for Argentina Invoices (AFIP)

Scenario

During the integration of the synchronous AFIP webservice for Argentina invoices via  SAP PI / PO, I did some End-to-End tests and struggled with multiple errors on PI side. Unfortunately, after every test I had to create a new invoice in ERP system, because the invoice was marked as already sent.

As creating a new invoice for every test takes time, I looked for a way to reset the send status of existing invoices.

Error

The following error message was shown when clicking on “Send to AFIP” button in SAP ERP transaction “J1AEXPMONITOR”:

Document is in process

Solution

  1. Goto transaction SE16
  2. Insert table name “J_1ACAE” and click on the “Table contents” button
  3. Insert some filters into the mask (optional) and click on the “Execute” button

    Data Browser: J_1ACAE Selection Screen
    Enter filter values and execute
  4. Select one line and click on the “Change” button

    Data Browser: Table J_1ACAE
    Select one table entry of table “J_1ACAE” to edit
  5. Remove the “X” in field “RFC SENT LOCK” and click on “Save” button

    Remove RFC SENT LOCK for table entry
    Remove RFC SENT LOCK for table entry
  6. Leave the data browser to unlock the table
  7. Try to resend the message in transaction “J1AEXPMONITOR”
Generate WSDLs and decoded URLs for webservices

Generate WSDLs and decoded URLs for webservices

When creating an Interface with SAP Process Integration or SAP Process Orchestration which provides a webservice, you need the WSDL file or at least the URL of your webservice. Otherwise, your partner doesn’t know how to connect to your webservice.

Generate WSDL file

SAP PI and PO has a great feature do generate Web Service Description Language (WSDL) files for configurations with HTTP, XI, SOAP or WS Sender Communication Channels.

To generate a WSDL file:

  1. Open an Integrated Configuration (ICO) (or a Sender Agreement) in the Integration Builder, which is in status “Active”
  2. Click on “Integrated Configuration” in the top menu
  3. Click on “Display WSDL”
Detail View of Integrated Configuration

Detail view of Integrated Configuration (ICO) in Integration Directory (DIR)

A popup should open which displays the WSDL file and an URL to the WSDL file. Now, you can either download the file, use the URL to the WSDL file or directly get the information you need.

Get webservice URL

You can provide the whole WSDL file to your partner or just the URL. If you need the URL only, scroll to the end of the WSDL file . There you can find the HTTP and the HTTPS ports with the webservice URL in the location attribute of the address element. It looks like:

https://pisystem:50001/XISOAPAdapter/MessageServlet?senderParty=&senderService=service&receiverParty=&receiverService=&interface=SI_out&interfaceNamespace=urn%3Anamepspace

Shows Display WSDL window with address section highlighted in Integration Directory (DIR)
Display WSDL window – address section highlighted

Depending on you system configuration and your network structure, you maybe have to change domain and port of your URL before you can provide it to your partner. In case there is a Web Application Firewall, a Web Dispatcher, a Reverse Proxy or something similar in place, you should ask your system administrator for the correct domain and port. If you are communicating over an unprotected network, like the internet, you should always use SSL encryption.

Decode webservice URL

Due to different implementations of URL processing it is sometimes necessary to decode the URL, provided in the WSDL file. For example for the Chrome browser extension Boomerang you need to decode the URL before you can successfully connect to your webservice. If you do not know how your application handles URLs you can test the normal and the decoded URL. For one URL you will get an error like this:

com.sap.aii.af.service.cpa.CPAObjectNotFoundException: Couldn’t retrieve inbound binding for the given P/S/A values: FP=;TP=;FS=null;TS=;AN=null;ANS=null;

To get the decoded URL, just paste your URL in the textbox below and click on the “Decode URL” button.


If you are trying to reach the webservice in a browser you should see something like this:

Message Servlet is in Status OK

Status information:

Servlet com.sap.aii.adapter.soap.web.MessageServlet (Version $Id: //tc/xpi.adapters/NW731EXT_15_REL/src/_soap_application_web_module/webm/api/com/sap/aii/adapter/soap/web/MessageServlet.java#1 $) bound to /MessageServlet
Classname ModuleProcessor: null
Lookupname for localModuleProcessorLookupName: localejbs/ModuleProcessorBean
Lookupname for remoteModuleProcessorLookupName: null
ModuleProcessorClass not instantiated
ModuleProcessorLocal is Instance of com.sun.proxy.$Proxy523
ModuleProcessorRemote not instantiated