Before You Install the Recipe

You must perform the following configuration tasks on your Oracle Autonomous Transaction Processing and Oracle ERP Cloud instances to successfully connect to these external systems using Oracle Integration and import the supplier records asynchronously.

Configure Oracle ERP Cloud

To access the Oracle ERP Cloud instance from Oracle Integration, you’ll require a separate user account on Oracle ERP Cloud.

Log in to your Oracle ERP Cloud instance as an Administrator and perform the following tasks.
  1. Create a user account for Oracle Integration. Make a note of the user name and password you set for the account. You’ll use the credentials of this user account to connect to Oracle ERP Cloud from Oracle Integration.
  2. Assign the following roles to the user account. For more information on these roles, see Assign Required Roles to an Integration User in Using the Oracle ERP Cloud Adapter with Oracle Integration 3.
    • Integration Specialist
    • Oracle ERP Cloud-specific data access to the integration user

Configure Oracle Autonomous Transaction Processing

Log in to your Oracle Autonomous Transaction Processing database instance as an Administrator and perform the following tasks.
  1. Perform general configuration tasks. See Prerequisites for Creating a Connection in Using the Oracle Autonomous Transaction Processing Adapter with Oracle Integration 3.
  2. Create necessary objects.

    To create necessary objects, run the following script:

    CREATE OR REPLACE EDITIONABLE TYPE SUPPLIER_RECORD AS OBJECT (
    Supplier VARCHAR2(200),
    SupplierNumber VARCHAR2(200),
    TaxOrganizationTypeCode VARCHAR2(200),
    TaxOrganizationType VARCHAR2(200),
    SupplierTypeCode VARCHAR2(200),
    SupplierStatus VARCHAR2(200),
    BusinessRelationshipCode VARCHAR2(200),
    BusinessRelationship VARCHAR2(200),
    TaxRegistrationCountry VARCHAR2(200),
    TaxpayerCountryCode VARCHAR2(200),
    TaxpayerCountry VARCHAR2(200),
    TaxpayerId VARCHAR2(200)
    );
    /
    CREATE OR REPLACE EDITIONABLE TYPE SUPPLIER_TABLE IS TABLE OF supplier_record;
    /
    CREATE SEQUENCE SUPPLIERS_SEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT
    BY 1 START WITH 6537 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL ;
    CREATE TABLE XX_SUPPLIERS
    ( "ID" NUMBER,
    "INSTANCE_ID" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "STATUS" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "SUPPLIER" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "SUPPLIER_NUMBER" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "TAX_ORGANIZATION_TYPE_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "TAX_ORGANIZATION_TYPE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "SUPPLIER_TYPE_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "SUPPLIER_STATUS" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "BUSINESS_RELATIONSHIP_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "BUSINESS_RELATIONSHIP" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "TAX_REGISTRATION_COUNTRY" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "TAXPAYER_COUNTRY_CODE" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "TAXPAYER_COUNTRY" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "TAXPAYER_ID" VARCHAR2(200 BYTE) COLLATE "USING_NLS_COMP",
    "CREATION_DATE" TIMESTAMP (6) DEFAULT SYSDATE,
    "UPDATION_DATE" TIMESTAMP (6) DEFAULT SYSDATE
    ) DEFAULT COLLATION "USING_NLS_COMP" ;
    CREATE UNIQUE INDEX XX_SUPPLIERS_PK ON XX_SUPPLIERS ("ID")
    ;
    ALTER TABLE XX_SUPPLIERS ADD CONSTRAINT "XX_SUPPLIERS_PK" PRIMARY KEY ("ID")
    USING INDEX XX_SUPPLIERS_PK ENABLE;
    CREATE OR REPLACE EDITIONABLE TRIGGER XX_SUPPLIERS_TRIGGER
    BEFORE INSERT ON XX_SUPPLIERS
    FOR EACH ROW
    WHEN (new.ID IS NULL) BEGIN
    :new.ID := SUPPLIERS_SEQ.NEXTVAL;
    END;
    /
    ALTER TRIGGER XX_SUPPLIERS_TRIGGER ENABLE;
    CREATE OR REPLACE EDITIONABLE TRIGGER XX_SUPPLIERS_UPDATE_DATE BEFORE UPDATE ON
    XX_SUPPLIERS
    FOR EACH ROW
    BEGIN
    :NEW.UPDATION_DATE := SYSDATE;
    END;
    /
    ALTER TRIGGER XX_SUPPLIERS_UPDATE_DATE ENABLE;
    /
    CREATE OR REPLACE EDITIONABLE PACKAGE "ADMIN"."XX_WRAPPER_SUPPLIERS_PKG" AS
    PROCEDURE RUN_SCHEDULER_JOB (
    P_SUPPLIER_RECORD IN SUPPLIER_TABLE,
    P_INSTANCEID IN VARCHAR2
    );
    PROCEDURE PROCESS_SUPPLIERS (
    P_INSTANCEID IN VARCHAR2
    );
    PROCEDURE GET_SUPPLIERS_PAGINATION_PROC (
    I_PAGE IN NUMBER,
    I_LIMIT IN NUMBER,
    I_PAGE_SIZE OUT NUMBER,
    P_DATA OUT SYS_REFCURSOR
    );
    END XX_WRAPPER_SUPPLIERS_PKG;
    /
    CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ADMIN"."XX_WRAPPER_SUPPLIERS_PKG" AS
    PROCEDURE RUN_SCHEDULER_JOB (
    P_SUPPLIER_RECORD IN SUPPLIER_TABLE,
    P_INSTANCEID IN VARCHAR2
    ) IS
    L_JOB_ACTION VARCHAR2(1000);
    BEGIN
    -- DBMS_SESSION.sleep(360);
    FOR I IN 1..P_SUPPLIER_RECORD.COUNT LOOP
    INSERT INTO XX_SUPPLIERS (
    INSTANCE_ID,
    STATUS,
    SUPPLIER,
    SUPPLIER_NUMBER,
    TAX_ORGANIZATION_TYPE_CODE,
    TAX_ORGANIZATION_TYPE,
    SUPPLIER_TYPE_CODE,
    SUPPLIER_STATUS,
    BUSINESS_RELATIONSHIP_CODE,
    BUSINESS_RELATIONSHIP,
    TAX_REGISTRATION_COUNTRY,
    TAXPAYER_COUNTRY_CODE,
    TAXPAYER_COUNTRY,
    TAXPAYER_ID
    ) VALUES ( P_INSTANCEID,
    'IN-PROGRESS',
    P_SUPPLIER_RECORD(I).SUPPLIER,
    P_SUPPLIER_RECORD(I).SUPPLIERNUMBER,
    P_SUPPLIER_RECORD(I).TAXORGANIZATIONTYPECODE,
    P_SUPPLIER_RECORD(I).TAXORGANIZATIONTYPE,
    P_SUPPLIER_RECORD(I).SUPPLIERTYPECODE,
    P_SUPPLIER_RECORD(I).SUPPLIERSTATUS,
    P_SUPPLIER_RECORD(I).BUSINESSRELATIONSHIPCODE,
    P_SUPPLIER_RECORD(I).BUSINESSRELATIONSHIP,
    P_SUPPLIER_RECORD(I).TAXREGISTRATIONCOUNTRY,
    P_SUPPLIER_RECORD(I).TAXPAYERCOUNTRYCODE,
    P_SUPPLIER_RECORD(I).TAXPAYERCOUNTRY,
    P_SUPPLIER_RECORD(I).TAXPAYERID );
    END LOOP;
    L_JOB_ACTION := 'DECLARE
    BEGIN
    XX_WRAPPER_SUPPLIERS_PKG.PROCESS_SUPPLIERS('''
    || P_INSTANCEID
    || ''');
    END;';
    DBMS_OUTPUT.PUT_LINE('JOB Action ' || L_JOB_ACTION);
    DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'supplier_job', JOB_TYPE => 'PLSQL_BLOCK',
    JOB_ACTION => L_JOB_ACTION, START_DATE => SYSTIMESTAMP
    , AUTO_DROP => TRUE,
    ENABLED => TRUE);
    END;
    PROCEDURE PROCESS_SUPPLIERS (
    P_INSTANCEID IN VARCHAR2
    ) IS
    BEGIN
    -- write your logic here, get all data based on Instance Id and do the
    validation and mark data as VALID OR INVALID
    UPDATE XX_SUPPLIERS
    SET
    STATUS = 'VALID'
    WHERE
    INSTANCE_ID = P_INSTANCEID;
    END;
    PROCEDURE GET_SUPPLIERS_PAGINATION_PROC (
    I_PAGE IN NUMBER,
    I_LIMIT IN NUMBER,
    I_PAGE_SIZE OUT NUMBER,
    P_DATA OUT SYS_REFCURSOR
    ) AS
    COUNT1 NUMBER;
    BEGIN
    SELECT
    COUNT(*)
    INTO COUNT1
    FROM
    SUPPLIERS;
    I_PAGE_SIZE := CEIL(COUNT1 / I_LIMIT);
    OPEN P_DATA FOR SELECT
    *
    FROM
    SUPPLIERS
    ORDER BY
    ID
    OFFSET NVL((I_PAGE - 1), 0) * I_LIMIT ROWS FETCH NEXT I_LIMIT ROWS
    ONLY;
    END;
    END XX_WRAPPER_SUPPLIERS_PKG;
    /