Processing Electronic Invoices

Oracle Payables provides the ability to receive electronic invoices from suppliers. Oracle Fusion Collaboration Messaging Framework (CMK) provides a simplified way to set up business to business (B2B) communication with trading partners.

CMK supports two models for setting up B2B messaging with trading partners.

  • Using a service provider: In this model, a service provider acts as an intermediary between the trading partners and the Oracle Fusion Applications customers. Oracle Business Network (OBN) is a ready-to-use service provider in CMK. Once a trading partner joins OBN, the partner can exchange messages with any Oracle Fusion Applications client. Other than OBN, you can also define other service providers if needed.

  • Using CMK web service: CMK provides a web service for exchanging messages without using OBN or other service providers. This lets a supplier communicate directly with CMK.

This figure illustrates invoice processing through email using the Collaboration Messaging Framework.

This figure illustrates invoice processing through email using the Collaboration Messaging Framework.

How Collaboration Messaging Framework Is Configured

There are 2 ways in which you can configure CMK.

  • You can set up electronic invoicing using a service provider.
  • You can set up electronic invoicing directly with CMK web service.

Set Up Electronic Invoicing Using a Service Provider

CMK includes OBN as a ready-to-use service provider, making it very easy to set up and connect to trading partners on the network. You must configure any other service providers in the Collaboration Messaging work area. Here’s the procedure to follow:

  1. Navigate to the Manage Collaboration Messaging Service Providers page.

  2. Create a new Service Provider.

  3. In Delivery Methods, you can specify how the service provider receives the outgoing messages.

  4. Select Inbound Collaboration Messages tab to configure XML invoice formats for the service provider. Each XML format supported by CMK is available as a separate message definition. For example, select UBL_2.1_EN_16931_INVOICE_IN for EN 16931 invoice in UBL format.

  5. In Outbound Collaboration Messages tab, you can configure the list of outbound messages that the service provider requires.

  6. Click Save and Close.

Next, perform these steps to configure the Trading Partners using this service provider:

  1. Navigate to the Manage B2B page.

  2. Select the service provider and enter the trading partner identification.

  3. Select Inbound Collaboration Messages tab and add the XML invoice formats for this supplier.

You must associate the supplier sites used for electronic invoicing with the trading partners. Here’s how you do so:

  1. Navigate to the supplier site and select the B2B Communication method as Collaboration Messaging Framework.

  2. In Associated Collaboration Documents, click the Edit button. Add the trading partner created earlier and add PROCESS_INVOICE_IN in Collaboration Documents.

Set Up Electronic Invoicing Using CMK Web Service

If the supplier communicates directly using the CMK web service, then there's no need to set up a service provider. Follow these steps to configure electronic invoicing:

  1. Navigate to the Manage B2B Trading Partner page.

  2. Select Service Provider as None and enter the trading partner identification.

  3. In Delivery Methods, you can specify how the supplier receives the outgoing messages.

  4. Select Inbound Collaboration Messages tab to configure XML invoice formats for the supplier. Each XML format supported by CMK is available as a separate message definition. For example, select UBL_2.1_EN_16931_INVOICE_IN for EN 16931 invoice in UBL format.

  5. In Outbound Collaboration Messages tab, you can configure the list of outbound messages for the supplier.

  6. Click Save and Close.

Follow these steps to associate the supplier sites with the trading partner:

  1. Navigate to the supplier site and select the B2B Communication method as Collaboration Messaging Framework.

  2. In Associated Collaboration Documents, click the Edit button. Add the trading partner created earlier and add PROCESS_INVOICE_IN in Collaboration Documents.

Send Rejected Invoices to a Supplier

Electronic invoices received by CMK must be imported using Import Payables Invoices. Invoices that are rejected due to supplier errors, are automatically sent to the supplier by email for correction. The supplier has to resend the invoice payload after they have been corrected.

Note: An email with rejected invoice details is sent to a supplier only when the supplier email ID is provided in the XML invoice.

Follow these steps to send rejection emails automatically to a supplier when they're configured using a service provider:

  1. Navigate to the Manage Collaboration Messaging Service Providers page and edit the service provider.

  2. Add Email as the Delivery Method Type.

  3. Select Outbound Collaboration Messages tab and add the message definition OAGIS_10.1_ACKNOWLEDGE_INVOICE_COLLAB_MSG_OUT. Select the delivery method created earlier.

  4. Navigate to the supplier site.

  5. In Associated Collaboration Documents, click the Edit button and add ACK_REJECTED_INVOICE_OUT in Collaboration Documents.

When a supplier is configured without a service provider, follow these steps to complete the setup required to send rejection emails automatically:

  1. Navigate to the Manage B2B Trading Partner page.

  2. Add Email as the Delivery Method Type.

  3. Select Outbound Collaboration Messages tab and add the message definition OAGIS_10.1_ACKNOWLEDGE_INVOICE_COLLAB_MSG_OUT. Select the delivery method created earlier.

  4. Navigate to the supplier site.

  5. In Associated Collaboration Documents, click the Edit button and add ACK_REJECTED_INVOICE_OUT in Collaboration Documents.

Send Automatic Notifications for Rejected Electronic Invoices

You can also configure an automatic notification to let a supplier know about a rejected invoice. This configuration is done with an industry-standard XML format and suppliers capable of processing electronic responses can view the invoice errors in their application. They can correct the rejected invoice and send them back without needing manual status queries and actions.

Note: The rejected invoice details are sent in the UBL 2.1 Invoice Response Message format. You can also configure the response in other industry-standard formats.

This is a sample XSLT in UBL 2.1 Response Message format. You can save it as an XSL file and use it configure the automatic notification for rejected invoices.

<?xml version="1.0" encoding="UTF-8"?><?oracle-xsl-mapper <!-- SPECIFICATION OF MAP SOURCES AND TARGETS, DO NOT MODIFY. --> <mapSources> <source type="XSD"> <schema location="oramds:/apps/oracle/apps/scm/cmk/xsd/document/AcknowledgeInvoiceOutbound.xsd"/> <rootElement name="processOutboundCollaboration" namespace="http://xmlns.oracle.com/apps/scm/cmk"/> </source> </mapSources> <mapTargets> <target type="XSD"> <schema location="oramds:/apps/oracle/apps/scm/cmk/xsd/message/ApplicationResponse-UBL2.1-Outbound-CollaborationMessage.xsd"/> <rootElement name="processOutboundCollaborationMessage" namespace="http://xmlns.oracle.com/apps/scm/cmk"/> </target> </mapTargets> <substitutions> <sourceSubst substPath="/cmk:processOutboundCollaboration/cmk:OutboundCollaboration" substType="cmk:ApplicationResponseUBL2.1OutboundType"/> </substitutions> <!-- GENERATED BY ORACLE XSL MAPPER 11.1.1.7.0(build 130301.0647.0008) AT [WED JUN 15 18:22:15 EDT 2016]. -->?><xsl:stylesheet version="2.0" xmlns:ns11="http://xmlns.oracle.com/apps/scm/receiving/supplierTransactions/createASN/RcvCreateASNB2BConnectorComposite/schema" xmlns:aia="http://www.oracle.com/XSL/Transform/java/oracle.apps.aia.core.xpath.AIAFunctions" xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/" xmlns:xp20="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.Xpath20" xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns3="http://xmlns.oracle.com/soa/b2b/OAG/7.2.1/PROCESS_INVOICE_002/OAG_DEF/" xmlns:bpm="http://xmlns.oracle.com/bpmn20/extensions" xmlns:ns12="http://xmlns.oracle.com/apps/scm/receiving/receiptsInterface/receiptConfirmation/receiptConfirmationService/" xmlns:oa="http://www.openapplications.org/oagis/10" xmlns:ns2="http://xmlns.oracle.com/apps/scm/receiving/receiptsInterface/transactions/processorServiceV2/" xmlns:ora="http://schemas.oracle.com/xpath/extension" xmlns:socket="http://www.oracle.com/XSL/Transform/java/oracle.tip.adapter.socket.ProtocolTranslator" xmlns:ns9="http://xmlns.oracle.com/adf/svc/errors/" xmlns:ns1="http://xmlns.oracle.com/apps/scm/receiving/receiptsInterface/transactions/processorServiceV2/types/" xmlns:tns="http://xmlns.oracle.com/apps/financials/payables/invoices/quickInvoices/invoiceInterfaceService/" xmlns:mhdr="http://www.oracle.com/XSL/Transform/java/oracle.tip.mediator.service.common.functions.MediatorExtnFunction" xmlns:oraext="http://www.oracle.com/XSL/Transform/java/oracle.tip.pc.services.functions.ExtFunc" xmlns:dvm="http://www.oracle.com/XSL/Transform/java/oracle.tip.dvm.LookupValue" xmlns:ns7="http://xmlns.oracle.com/adf/svc/types/" xmlns:hwf="http://xmlns.oracle.com/bpel/workflow/xpath" xmlns:ns10="commonj.sdo/java" xmlns:med="http://schemas.oracle.com/mediator/xpath" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ids="http://xmlns.oracle.com/bpel/services/IdentityService/xpath" xmlns:xdk="http://schemas.oracle.com/bpel/extension/xpath/function/xdk" xmlns:xref="http://www.oracle.com/XSL/Transform/java/oracle.tip.xref.xpath.XRefXPathFunctions" xmlns:cmk="http://xmlns.oracle.com/apps/scm/cmk" xmlns:ns5="commonj.sdo" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:types="http://xmlns.oracle.com/apps/financials/payables/invoices/quickInvoices/invoiceInterfaceService/types/" xmlns:bpmn="http://schemas.oracle.com/bpm/xpath" xmlns:ldap="http://schemas.oracle.com/xpath/extension/ldap" xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" exclude-result-prefixes="xsl ns11 ns3 oa xsd ns12 ns2 ns9 ns1 ns7 ns10 ns5 aia bpws xp20 bpel bpm ora socket mhdr oraext dvm hwf med ids xdk xref bpmn ldap"> <xsl:variable name="prod" select="true()"/> <xsl:variable name="dvm" select="$prod"/> <xsl:variable name="responseListID" select="'UNCL4343OpSubset'"/> <xsl:variable name="documentTypeCodeListID" select="'UNCL1001'"/> <xsl:variable name="statusReasCodeListID" select="'OPStatusReason'"/> <xsl:variable name="AppPartnerCode" select="/cmk:processOutboundCollaboration/cmk:OutboundCollaboration/cmk:ProcessingConfiguration/cmk:ProcActionCode"/> <xsl:variable name="SupplierNumber" select="/cmk:processOutboundCollaboration/cmk:OutboundCollaboration/cmk:ProcessingConfiguration/cmk:PartnerKey4"/> <xsl:variable name="SupplierName" select="/cmk:processOutboundCollaboration/cmk:OutboundCollaboration/cmk:ProcessingConfiguration/cmk:PartnerKey3"/> <xsl:variable name="otherStatusReasonCodeList"> <value> <code>CAN MATCH TO ONLY 1 LINE</code> <desc>Can match to only one line</desc> </value> <value> <code>DUPLICATE INVOICE NUMBER</code> <desc>Duplicate invoice number</desc> </value> <value> <code>DUPLICATE LINE NUMBER</code> <desc>Duplicate Line Number</desc> </value> <value> <code>INCONSISTENT CURR</code> <desc>Inconsistent currency information</desc> </value> <value> <code>INVALID INVOICE AMOUNT</code> <desc>Invalid invoice amount</desc> </value> <value> <code>INVALID PRICE/QUANTITY/AMOUNT</code> <desc>Inconsistent price, quantity, and amount</desc> </value> </xsl:variable> <xsl:variable name="refStatusReasonCodeList"> <value> <code>INCONSISTENT PO LINE INFO</code> <desc>Inconsistent PO line information</desc> </value> <value> <code>INCONSISTENT PO SUPPLIER</code> <desc>Inconsistent PO supplier information</desc> </value> <value> <code>INVALID ITEM</code> <desc>Invalid Item</desc> </value> <value> <code>INVALID PO INFO</code> <desc>Invalid PO information</desc> </value> <value> <code>INVALID PO NUM</code> <desc>Invalid PO number</desc> </value> <value> <code>INVALID PO RELEASE INFO</code> <desc>Invalid PO release information</desc> </value> <value> <code>INVALID PO RELEASE NUM</code> <desc>Invalid PO release number</desc> </value> <value> <code>INVALID PO SHIPMENT NUM</code> <desc>Invalid PO schedule number</desc> </value> <value> <code>NO PO LINE NUM</code> <desc>No PO line number</desc> </value> <value> <code>RELEASE MISSING</code> <desc>No blanket PO release information</desc> </value> <value> <code>MISSING PO NUM</code> <desc>Missing PO Number</desc> </value> <value> <code>INVALID PO LINE NUM</code> <desc>Invalid PO line number</desc> </value> <value> <code>NO PO SHIPMENT NUM</code> <desc>No PO schedule number</desc> </value> </xsl:variable> <xsl:variable name="qtyStatusReasonCodeList"> <value> <code>NEGATIVE QUANTITY BILLED</code> <desc>Billed quantity is below zero</desc> </value> <value> <code>INVALID QUANTITY</code> <desc>Invalid quantity</desc> </value> </xsl:variable> <!-- /cmk:processOutboundCollaboration/cmk:OutboundCollaboration/types:getSupplierRejectionsResponse --> <xsl:template match="/"> <cmk:processOutboundCollaborationMessage> <cmk:OutboundCollaborationMessage> <xsl:attribute name="xsi:type"><xsl:text disable-output-escaping="no">cmk:ApplicationResponseUBL2.1OutboundType</xsl:text></xsl:attribute> <cmk:EmailContent> <cmk:Body> <cmk:EmailBodyHeader> </cmk:EmailBodyHeader> <xsl:for-each select="//types:result"> <xsl:sort select="./tns:Invoicenum"/> <xsl:sort select="./tns:Invoicenumber"/> <cmk:EmailBodyTableHeader> <cmk:ColumnName ColumnNumber="1"> <cmk:ColumnValue> <!-- 20210318 - bug: 32452823 change mapping from ProcessingConfig to mapping from the object <xsl:value-of select="$SupplierNumber"/> --> <xsl:value-of select="tns:Vendornumber"/> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="2"> <cmk:ColumnValue> <!-- 20210318 - bug: 32452823 change mapping from ProcessingConfig to mapping from the object <xsl:value-of select="$SupplierName"/> --> <xsl:value-of select="tns:VendorName"/> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="3"> <cmk:ColumnValue> <xsl:choose> <xsl:when test="tns:Invoicenum"> <xsl:value-of select="tns:Invoicenum"/> </xsl:when> <xsl:when test="tns:Invoicenumber"> <xsl:value-of select="tns:Invoicenumber"/> </xsl:when> </xsl:choose> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="4"> <cmk:ColumnValue> <xsl:value-of select="tns:InvoiceDate"/> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="5"> <cmk:ColumnValue> <xsl:value-of select="tns:InvoiceCurrencyCode"/> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="6"> <cmk:ColumnValue> <xsl:value-of select="tns:InvoiceAmount"/> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="7"> <cmk:ColumnValue> <xsl:value-of select="tns:Linenumber"/> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="8"> <cmk:ColumnValue> <xsl:value-of select="tns:DisplayedField"/> </cmk:ColumnValue> </cmk:ColumnName> <cmk:ColumnName ColumnNumber="9"> <cmk:ColumnValue> <xsl:value-of select="tns:Description"/> </cmk:ColumnValue> </cmk:ColumnName> </cmk:EmailBodyTableHeader> </xsl:for-each> </cmk:Body> </cmk:EmailContent> <xsl:call-template name="getInvoice"/> </cmk:OutboundCollaborationMessage> </cmk:processOutboundCollaborationMessage> </xsl:template> <xsl:template name="getInvoice"> <ubl:ApplicationResponse> <cbc:CustomizationID> <xsl:text>urn:fdc:peppol.eu:poacc:trns:invoice_response:3</xsl:text> </cbc:CustomizationID> <cbc:ProfileID> <xsl:text>urn:fdc:peppol.eu:poacc:bis:invoice_response:3</xsl:text> </cbc:ProfileID> <cbc:ID> <xsl:value-of select="/cmk:processOutboundCollaboration/cmk:OutboundCollaboration/cmk:MessageID"/> </cbc:ID> <cbc:IssueDate> <xsl:if test="$prod"> <xsl:value-of select="xp20:current-date()"/> </xsl:if> </cbc:IssueDate> <cac:SenderParty> <cbc:EndpointID> <xsl:attribute name="schemeID"> <xsl:text>VAT</xsl:text> </xsl:attribute> <xsl:value-of select="/cmk:processOutboundCollaboration/cmk:OutboundCollaboration/cmk:ProcessingConfiguration/cmk:GlobalSenderId"/> </cbc:EndpointID> </cac:SenderParty> <cac:ReceiverParty> <cbc:EndpointID> <xsl:attribute name="schemeID"> <xsl:text>VAT</xsl:text> </xsl:attribute> <xsl:value-of select="/cmk:processOutboundCollaboration/cmk:OutboundCollaboration/cmk:ProcessingConfiguration/cmk:ExtPartnerId"/> </cbc:EndpointID> <cac:PartyLegalEntity> <cbc:RegistrationName> <xsl:value-of select="//types:result[1]/tns:VendorName"/> </cbc:RegistrationName> </cac:PartyLegalEntity> </cac:ReceiverParty> <xsl:variable name="sortedCopy"> <xsl:for-each select="//types:result"> <xsl:sort select="tns:Invoicenum"/> <xsl:sort select="tns:Invoicenumber"/> <xsl:sort select="tns:Linenumber"/> <xsl:copy-of select="current()"/> </xsl:for-each> </xsl:variable> <xsl:for-each select="$sortedCopy/types:result"> <xsl:variable name="num"> <xsl:choose> <xsl:when test="tns:Invoicenum"> <xsl:value-of select="tns:Invoicenum"/> </xsl:when> <xsl:when test="tns:Invoicenumber"> <xsl:value-of select="tns:Invoicenumber"/> </xsl:when> </xsl:choose> </xsl:variable> <xsl:variable name="prevnum"> <xsl:choose> <xsl:when test="position() = 1"> <xsl:value-of select="''"/> </xsl:when> <xsl:when test="preceding-sibling::types:result[1]/tns:Invoicenum"> <xsl:value-of select="preceding-sibling::types:result[1]/tns:Invoicenum"/> </xsl:when> <xsl:when test="preceding-sibling::types:result[1]/tns:Invoicenumber"> <xsl:value-of select="preceding-sibling::types:result[1]/tns:Invoicenumber"/> </xsl:when> </xsl:choose> </xsl:variable> <xsl:if test="string($num) != string($prevnum)"> <cac:DocumentResponse> <cac:Response> <cbc:ResponseCode> <xsl:attribute name="listID"> <xsl:value-of select="$responseListID"/> </xsl:attribute> <xsl:text>RE</xsl:text> </cbc:ResponseCode> <cbc:EffectiveDate> <xsl:if test="$prod"> <xsl:value-of select="xp20:current-date()"/> </xsl:if> </cbc:EffectiveDate> <xsl:call-template name="getStatus"> <xsl:with-param name="num" select="$num"/> <xsl:with-param name="sortedCopy" select="$sortedCopy"/> </xsl:call-template> </cac:Response> <cac:DocumentReference> <cbc:ID> <xsl:choose> <xsl:when test="tns:Invoicenum"> <xsl:value-of select="tns:Invoicenum"/> </xsl:when> <xsl:when test="tns:Invoicenumber"> <xsl:value-of select="tns:Invoicenumber"/> </xsl:when> </xsl:choose> </cbc:ID> <cbc:DocumentTypeCode> <xsl:attribute name="listID"> <xsl:value-of select="$documentTypeCodeListID"/> </xsl:attribute> <xsl:text>380</xsl:text> <!-- 380 - Invoice --> </cbc:DocumentTypeCode> </cac:DocumentReference> </cac:DocumentResponse> </xsl:if> </xsl:for-each> </ubl:ApplicationResponse> </xsl:template> <xsl:template name="getStatus"> <xsl:param name="num"/> <xsl:param name="sortedCopy"/> <xsl:for-each select="$sortedCopy/types:result[tns:Invoicenum = $num or tns:Invoicenumber = $num]"> <xsl:variable name="rejectionCode" select="tns:DisplayedField"/> <cac:Status> <xsl:choose> <xsl:when test="$otherStatusReasonCodeList/value[desc = $rejectionCode]"> <cbc:StatusReasonCode> <xsl:attribute name="listID"> <xsl:value-of select="$statusReasCodeListID"/> </xsl:attribute> <xsl:value-of select="'OTH'"/> </cbc:StatusReasonCode> </xsl:when> <xsl:when test="$refStatusReasonCodeList/value[desc = $rejectionCode]"> <cbc:StatusReasonCode> <xsl:attribute name="listID"> <xsl:value-of select="$statusReasCodeListID"/> </xsl:attribute> <xsl:value-of select="'REF'"/> </cbc:StatusReasonCode> </xsl:when> <xsl:when test="$qtyStatusReasonCodeList/value[desc = $rejectionCode]"> <cbc:StatusReasonCode> <xsl:attribute name="listID"> <xsl:value-of select="$statusReasCodeListID"/> </xsl:attribute> <xsl:value-of select="'QTY'"/> </cbc:StatusReasonCode> </xsl:when> </xsl:choose> <xsl:variable name="conditions"> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName1"/> <xsl:with-param name="value" select="tns:TokenValue1"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName2"/> <xsl:with-param name="value" select="tns:TokenValue2"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName3"/> <xsl:with-param name="value" select="tns:TokenValue3"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName4"/> <xsl:with-param name="value" select="tns:TokenValue4"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName5"/> <xsl:with-param name="value" select="tns:TokenValue5"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName6"/> <xsl:with-param name="value" select="tns:TokenValue6"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName7"/> <xsl:with-param name="value" select="tns:TokenValue7"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName8"/> <xsl:with-param name="value" select="tns:TokenValue8"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName9"/> <xsl:with-param name="value" select="tns:TokenValue9"/> </xsl:call-template> <xsl:call-template name="getNameValue"> <xsl:with-param name="name" select="tns:TokenName10"/> <xsl:with-param name="value" select="tns:TokenValue10"/> </xsl:call-template> </xsl:variable> <cbc:StatusReason> <xsl:choose> <xsl:when test="tns:Description != ''"> <xsl:value-of select="concat(tns:Description,$conditions)"/> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat($rejectionCode,$conditions)"/> </xsl:otherwise> </xsl:choose> </cbc:StatusReason> </cac:Status> </xsl:for-each> </xsl:template> <xsl:template name="getNameValue"> <xsl:param name="name"/> <xsl:param name="value"/> <xsl:if test="$name != '' or $value != ''"> <xsl:value-of select="' :'"/> <xsl:if test="$name != ''"> <xsl:value-of select="'-'"/> <xsl:value-of select="$name"/> </xsl:if> <xsl:if test="$value != ''"> <xsl:value-of select="' -'"/> <xsl:value-of select="$value"/> </xsl:if> </xsl:if> </xsl:template> </xsl:stylesheet>

Here’s how you configure the automatic notification:

  1. From the Collaboration Messaging work area, go to the Manage Collaboration Message Definitions page.

  2. Click on the Create button.

  3. In the Create Collaboration Message Definition dialog box, enter these required details:

    Name Enter a name for the automatic notification response.
    External Message Definition Select UBL-ApplicationResponse-2.1 as the external message definition.
    Collaboration Document Select Invoice Acknowledgment – Outbound as the collaboration document.
    XSLT File Upload the XSL file created in the UBL 2.1 Response Message format. You can refer to the sample XSLT provide earlier.
  4. Click Save and Close.

  5. In the service provider setup, go to Outbound Collaboration Messages and add the external message definition created earlier.

  6. Navigate to the supplier setup. In the B2B Communication section, add the message Invoice Acknowledgment – Outbound.

Extend Electronic Invoice Configuration

CMK delivers predefined message definitions that map the XML payload fields to the Oracle Fusion application objects such as Invoices using XSLT files. Customers can change the mappings delivered ready to use, to accommodate either trading partner-specific variations, or specific requirements that aren't addressed by the ready-to-use mappings.

Follow these steps to update the mapping:

  1. From the Collaboration Messaging work area, go to the Manage Collaboration Message Definitions page.

  2. Search for the message by selecting Direction as Inbound and Document as PROCESS_INVOICE_IN. From the search results, select the message ORCL_CMK_PROCESS_INVOICE_002 for OAG 7.2.1 or OAGIS_10.1_PROCESS_INVOICE_COLLAB_MSG_IN for OAG 10.1. Download the transformation package by selecting Actions > Export Transformation Package.

  3. The Transformation package gets downloaded as a .zip file with source and target XSDs and the XSLT.

  4. You can update the mapping in the downloaded XSLT and save it to a local folder.

  5. You can’t modify the predefined message definitions. However, you can duplicate the predefined message and configure them using the modified XSLT. Select the message to be modified and select Actions > Duplicate Collaboration Message.

  6. You can edit the defaulted Message Name if required. Select the modified XSLT saved earlier.

  7. Click Save and Close.

The new message created must be associated with the B2B Trading Partner or the Service Provider.

If the trading partner sends invoices through a service provider, such as Oracle Business Network, add the new message definition to the service provider. Here’s how to create one.

  1. Navigate to the task Manage Collaboration Messaging Service Providers page and edit the service provider.

  2. Select the Inbound Collaboration Messages tab. Enter Name and select the new message definition that you created. Mark the new message Active.

  3. Mark the existing message as Inactive and duplicate the Message.

  4. Click Save and Close.

If the trading partner sends invoices directly to CMK web service, then add the new message definition to the trading partner. Follow these steps to do so:

  1. Navigate to the Manage B2B Trading Partners page and select the trading partner.

  2. Select the Inbound Collaboration Messages tab.

  3. Mark the existing message (if any) as Inactive.

  4. Add a new message by entering the name and selecting the new message definition that you created.

  5. Mark the new message as Active.

  6. Click Save and Close.