Sunday, 12 September 2021

FRM-30187: Size of CHAR column in record group must be between 1 and 2000

 

FRM-30187: Size of CHAR column in record group must be between 1 and 2000. Record Group LOV154



Error:

FRM-30187: Size of CHAR column in record group must be between 1 and 2000.
Record Group LOV154.

Solution:

Go to the property of RECORDGROUP named LOV154 and there is one property called Column Specification there has any one of the column will be having length greater then 2000 there set it to 2000 which is maximum value. Then it will work.

Tuesday, 11 August 2020

SQL to find PO,PR and their Delivery details

 


select   po.segment1 po_num,

         po.creation_date po_date,

         po.approved_date,

         decode (po.segment1,

                 null, '',

                 nvl (po.authorization_status, 'INCOMPLETE'))

            po_status,

         poven.vendor_name,

         pol.line_num po_line_num,

         xxmb_get_item_code (pol.item_id, poloc.ship_to_organization_id)

            po_productid,

         pol.item_description po_item_description,

         podis.quantity_ordered po_quantity_ordered,

         pol.unit_price po_unit_price,

         (pol.unit_price * podis.quantity_ordered) po_amt,

         po.currency_code po_currency_code,

         podis.rate po_rate,

         decode (po.currency_code,

                 'USD', pol.unit_price * podis.quantity_ordered,

                 pol.unit_price * podis.rate * podis.quantity_ordered)

            po_amt_usd,

         poloc.quantity_received qty_rec,

         poloc.quantity_billed qty_billed,

         poloc.need_by_date,

         poloc.promised_date,

         (select   max (transaction_date)

            from   rcv_transactions

           where   transaction_type = 'RECEIVE'

                   and po_distribution_id = podis.po_distribution_id)

            receiving_date,

         (poloc.promised_date

          - (select   max (transaction_date)

               from   rcv_transactions

              where   transaction_type = 'RECEIVE'

                      and po_distribution_id = podis.po_distribution_id))

            promised_to_rec_days,

         (select   max (transaction_date)

            from   rcv_transactions

           where   transaction_type = 'DELIVER'

                   and po_distribution_id = podis.po_distribution_id)

            deliver_date,

         buyer.full_name buyer_name,

         (select   full_name

            from   per_all_people_f rec_per

           where   1 = 1

                   and rec_per.person_id =

                         (select   employee_id

                            from   rcv_transactions

                           where   transaction_type = 'RECEIVE'

                                   and po_distribution_id =

                                         podis.po_distribution_id

                                   and rownum = 1)

                   and sysdate between rec_per.effective_start_date

                                   and  rec_per.effective_end_date

                   and rownum = 1)

            receiver_name,

         pol.closed_code po_closed_status,

         req_details.requisition_num,

         decode (

            gcc.segment4,

            null,

            '',

            substr (

               apps.gl_flexfields_pkg.get_description_sql (

                  gcc.chart_of_accounts_id,

                  4,

                  gcc.segment4

               ),

               1,

               40

            )

         )

            segment4_desc,

         decode (

            gcc.segment5,

            null,

            '',

            substr (

               apps.gl_flexfields_pkg.get_description_sql (

                  gcc.chart_of_accounts_id,

                  5,

                  gcc.segment5

               ),

               1,

               40

            )

         )

            segment5_desc,

         req_details.requestor

  from   po_headers_all po,

         po_vendors poven,

         po_lines_all pol,

         po_line_locations_all poloc,

         po_distributions_all podis,

         gl_code_combinations gcc,

         (select   *

            from   per_all_people_f

           where   sysdate between effective_start_date

                               and  effective_end_date) buyer,

         (select   porh.segment1 requisition_num,

                   requestor.full_name requestor,

                   pord.distribution_id

            from   po_requisition_headers_all porh,

                   po_requisition_lines_all porl,

                   po_req_distributions_all pord,

                   (select   *

                      from   per_all_people_f

                     where   sysdate between effective_start_date

                                         and  effective_end_date) requestor

           where   porh.requisition_header_id = porl.requisition_header_id

                   and porl.requisition_line_id = pord.requisition_line_id

                   and requestor.person_id(+) = to_person_id) req_details

 where       po.po_header_id = pol.po_header_id

         and po.po_header_id = poloc.po_header_id

         and poven.vendor_id = po.vendor_id

         and po.po_header_id = podis.po_header_id

         and pol.po_line_id = poloc.po_line_id

         and pol.po_line_id = podis.po_line_id

         and buyer.person_id = po.agent_id

         and gcc.code_combination_id = podis.code_combination_id

         and req_details.distribution_id(+) = podis.req_distribution_id

Requisition to PO details Query

SELECT   PORH.SEGMENT1 REQUISITION_NUM,

         PORH.CREATION_DATE REQUISITION_DATE,

         PORH.APPROVED_DATE REQUISITION_APPROVED_DATE,

         DECODE (PORH.SEGMENT1,

                 NULL, '',

                 NVL (PORH.AUTHORIZATION_STATUS, 'INCOMPLETE'))

            REQUISITION_STATUS,

         PORL.LINE_NUM REQUISITION_LINE_NUM,

         XXMB_GET_ITEM_CODE (PORL.ITEM_ID, PORL.ORG_ID) REQUISITION_PRODUCTID,

         PORL.ITEM_DESCRIPTION REQUISITION_ITEM_DESCRIPTION,

         PORD.REQ_LINE_QUANTITY REQUISITION_QUANTITY_ORDERED,

         PORL.UNIT_PRICE REQUISITION_UNIT_PRICE,

         (PORL.UNIT_PRICE * PORD.REQ_LINE_QUANTITY) REQUISITION_AMOUNT,

         PORL.CURRENCY_CODE REQUISITION_CURRENCY_CODE,

         PORL.RATE REQUISITION_RATE,

         DECODE (PORL.CURRENCY_CODE,

                 'USD', PORL.UNIT_PRICE * PORD.REQ_LINE_QUANTITY,

                 PORL.UNIT_PRICE * PORL.RATE * PORD.REQ_LINE_QUANTITY)

            REQ_AMT_USD,

         PORL.NEED_BY_DATE,

         DECODE (

            GCC.SEGMENT4,

            NULL,

            '',

            SUBSTR (

               APPS.GL_FLEXFIELDS_PKG.GET_DESCRIPTION_SQL (

                  GCC.CHART_OF_ACCOUNTS_ID,

                  4,

                  GCC.SEGMENT4

               ),

               1,

               40

            )

         )

            SEGMENT4_DESC,

         DECODE (

            GCC.SEGMENT5,

            NULL,

            '',

            SUBSTR (

               APPS.GL_FLEXFIELDS_PKG.GET_DESCRIPTION_SQL (

                  GCC.CHART_OF_ACCOUNTS_ID,

                  5,

                  GCC.SEGMENT5

               ),

               1,

               40

            )

         )

            SEGMENT5_DESC,

         REQUESTOR.FULL_NAME REQUESTOR,

         PO_DETAILS.PO_NUM,

         PO_DETAILS.PO_DATE,

         PO_DETAILS.APPROVED_DATE,

         PO_DETAILS.PO_STATUS,

         PO_DETAILS.VENDOR_NAME,

         PO_DETAILS.PO_LINE_NUM,

         PO_DETAILS.PO_PRODUCTID,

         PO_DETAILS.PO_ITEM_DESCRIPTION,

         PO_DETAILS.PO_QUANTITY_ORDERED,

         PO_DETAILS.PO_UNIT_PRICE,

         PO_DETAILS.PO_AMT,

         PO_DETAILS.PO_CURRENCY_CODE,

         PO_DETAILS.PO_RATE,

         PO_DETAILS.PO_AMT_USD,

         PO_DETAILS.BUYER_NAME,

         PO_DETAILS.PROMISED_DATE,

         PO_DETAILS.PO_CLOSED_STATUS,

         (PO_DETAILS.APPROVED_DATE - PORH.APPROVED_DATE) PR_TO_PO_DAYS

  FROM   PO_REQUISITION_HEADERS_ALL PORH,

         PO_REQUISITION_LINES_ALL PORL,

         PO_REQ_DISTRIBUTIONS_ALL PORD,

         GL_CODE_COMBINATIONS GCC,

         (SELECT   *

            FROM   PER_ALL_PEOPLE_F

           WHERE   SYSDATE BETWEEN EFFECTIVE_START_DATE

                               AND  EFFECTIVE_END_DATE) REQUESTOR,

         (SELECT   PO.SEGMENT1 PO_NUM,

                   PO.CREATION_DATE PO_DATE,

                   PO.APPROVED_DATE,

                   DECODE (PO.SEGMENT1,

                           NULL, '',

                           NVL (PO.AUTHORIZATION_STATUS, 'INCOMPLETE'))

                      PO_STATUS,

                   POVEN.VENDOR_NAME,

                   POL.LINE_NUM PO_LINE_NUM,

                   XXMB_GET_ITEM_CODE (POL.ITEM_ID,

                                       POLOC.SHIP_TO_ORGANIZATION_ID)

                      PO_PRODUCTID,

                   POL.ITEM_DESCRIPTION PO_ITEM_DESCRIPTION,

                   PODIS.QUANTITY_ORDERED PO_QUANTITY_ORDERED,

                   POL.UNIT_PRICE PO_UNIT_PRICE,

                   (POL.UNIT_PRICE * PODIS.QUANTITY_ORDERED) PO_AMT,

                   PO.CURRENCY_CODE PO_CURRENCY_CODE,

                   PODIS.RATE PO_RATE,

                   DECODE (

                      PO.CURRENCY_CODE,

                      'USD',

                      POL.UNIT_PRICE * PODIS.QUANTITY_ORDERED,

                      POL.UNIT_PRICE * PODIS.RATE * PODIS.QUANTITY_ORDERED

                   )

                      PO_AMT_USD,

                   BUYER.FULL_NAME BUYER_NAME,

                     POLOC.PROMISED_DATE

                   - TRUNC (PO.CREATION_DATE)

                   + NVL (TRUNC (PO.APPROVED_DATE), SYSDATE)

                      PROMISED_DATE,

                   POL.CLOSED_CODE PO_CLOSED_STATUS,

                   PODIS.REQ_DISTRIBUTION_ID

            FROM   PO_HEADERS_ALL PO,

                   PO_VENDORS POVEN,

                   PO_LINES_ALL POL,

                   PO_LINE_LOCATIONS_ALL POLOC,

                   PO_DISTRIBUTIONS_ALL PODIS,

                   (SELECT   *

                      FROM   PER_ALL_PEOPLE_F

                     WHERE   SYSDATE BETWEEN EFFECTIVE_START_DATE

                                         AND  EFFECTIVE_END_DATE) BUYER

           WHERE       PO.PO_HEADER_ID = POL.PO_HEADER_ID

                   AND PO.PO_HEADER_ID = POLOC.PO_HEADER_ID

                   AND POVEN.VENDOR_ID = PO.VENDOR_ID

                   AND PO.PO_HEADER_ID = PODIS.PO_HEADER_ID

                   AND POL.PO_LINE_ID = POLOC.PO_LINE_ID

                   AND POL.PO_LINE_ID = PODIS.PO_LINE_ID

                   AND BUYER.PERSON_ID = PO.AGENT_ID) PO_DETAILS

 WHERE       PORH.REQUISITION_HEADER_ID = PORL.REQUISITION_HEADER_ID

         AND PORL.REQUISITION_LINE_ID = PORD.REQUISITION_LINE_ID

         AND GCC.CODE_COMBINATION_ID = PORD.CODE_COMBINATION_ID

         AND PORD.DISTRIBUTION_ID = PO_DETAILS.REQ_DISTRIBUTION_ID(+)

         AND REQUESTOR.PERSON_ID(+) = TO_PERSON_ID

Tuesday, 28 April 2020

Running Periodic Alert Scheduler Manually

Please use the below steps navigation to run the Periodic Alert Scheduler Manually which  is used to reschedule the updated periodic Alerts.

1.You need to Navigate to Alert Manager Responsibility
2.You Navigate to alert ->Define ;Go to Request->Schedule
3.There we can see periodic Alert Scheduler =>Active it (Click on Activate button)

Sunday, 29 December 2019

API to update AUTO_TAX_CALC_FLAG in Supplier Sites

SET serveroutput ON size 1000000;

DECLARE
   CURSOR CUR_SITES
   IS
        SELECT   asa.vendor_site_id, asa.org_id
          FROM   ap_suppliers aps, ap_supplier_sites_all asa
         WHERE   aps.VENDOR_ID = asa.VENDOR_ID
                 AND asa.vendor_site_id IN
                          (1427732, 107040, 648640, 1408728, 109163, 387011)
                 AND aps.END_DATE_ACTIVE IS NULL
                 AND asa.INACTIVE_DATE IS NULL
      ORDER BY   asa.auto_tax_calc_flag,
                 aps.VENDOR_NAME,
                 asa.vendor_site_code;

   L_VENDOR_SITE_ID        NUMBER;
   l_SITES_msg_count       NUMBER;
   l_SITES_msg_data        VARCHAR2 (4000);
   l_SITES_return_status   VARCHAR2 (10);
   l_vendor_site_rec       AP_VENDOR_PUB_PKG.r_vendor_site_rec_type;
   l_resp_id               number;
BEGIN
   FOR SITES_REC IN CUR_SITES
   LOOP
        SELECT   frv.responsibility_ID
          INTO   l_resp_id
          FROM   apps.fnd_profile_options_vl fpo,
                 apps.fnd_responsibility_Vl frv,
                 apps.fnd_profile_option_values fpov,
                 apps.hr_organization_units hou
         WHERE       1 = 1
                 AND hou.ORGANIZATION_ID = SITES_REC.org_id
                 AND fpov.profile_option_value = TO_CHAR (hou.organization_id)
                 AND fpo.profile_option_id = fpov.profile_option_id
                 AND fpo.user_profile_option_name = 'MO: Operating Unit'
                 AND frv.responsibility_id = fpov.level_value
                 AND frv.APPLICATION_ID = 200
                 AND UPPER (frv.responsibility_name) LIKE 'AP%%SUPER%USER'
      ORDER BY   frv.responsibility_name;

      FND_GLOBAL.apps_initialize (0, l_resp_id, 200);

      l_vendor_site_id := SITES_REC.VENDOR_SITE_ID;
      l_vendor_site_rec.AUTO_TAX_CALC_FLAG := 'Y';
      AP_VENDOR_PUB_PKG.UPDATE_VENDOR_SITE (
         p_api_version        => '1.0',
         p_init_msg_list      => FND_API.G_TRUE,
         p_commit             => FND_API.G_TRUE,
         p_validation_level   => FND_API.G_VALID_LEVEL_FULL,
         p_vendor_site_id     => l_vendor_site_id,
         p_vendor_site_rec    => l_vendor_site_rec,
         x_return_status      => l_SITES_return_status,
         x_msg_count          => l_SITES_msg_count,
         x_msg_data           => l_SITES_msg_data
      );

      IF l_SITES_return_status = 'S'
      THEN
         COMMIT;
         DBMS_OUTPUT.put_line(   'vendor Site ID : '
                              || l_vendor_site_id
                              || ' Status is : '
                              || l_SITES_return_status);
      ELSE
         ROLLBACK;
         DBMS_OUTPUT.put_line(   'vendor Site ID : '
                              || l_vendor_site_id
                              || ' Error Status is : '
                              || l_SITES_return_status);
      END IF;

      FOR I IN 1 .. l_SITES_msg_count
      LOOP
         l_SITES_msg_data :=
            SUBSTR (FND_MSG_PUB.GET (p_encoded => 'T'), 1, 255);
         DBMS_OUTPUT.put_line (l_SITES_msg_data);
      END LOOP;

      L_RESP_ID := NULL;
   END LOOP;
END;

Wednesday, 4 September 2019

API to Inactivate Supplier Sites which is not used for last two years


Table Script is used to capture the Vendor site and their  API updated return status

CREATE TABLE XX_TMP_VENDOR_SITES
(
   vendor_site_id      NUMBER,
   return_status       VARCHAR2 (10),
   msg_count           NUMBER,
   msg_data            VARCHAR2 (1000),
   LAST_UPDATE_DATE    DATE NOT NULL ENABLE,
   LAST_UPDATED_BY     NUMBER (15, 0) NOT NULL ENABLE,
   CREATION_DATE       DATE NOT NULL ENABLE,
   CREATED_BY          NUMBER (15, 0) NOT NULL ENABLE,
   LAST_UPDATE_LOGIN   NUMBER (15, 0)
)


--------------------------------------------------------------------------------*/

set serveroutput on size 100000000;

DECLARE
   l_vendor_site_rec   AP_VENDOR_PUB_PKG.r_vendor_site_rec_type;
   l_vendor_rec        AP_VENDOR_PUB_PKG.r_vendor_rec_type;
   x_vendor_site_id    NUMBER;
   x_vendor_id         NUMBER;
   x_msg_data          VARCHAR2 (1000);
   x_msg_count         NUMBER;
   p_count             NUMBER;
   x_return_status     VARCHAR2 (10);
   V_MSG_INDEX_OUT     NUMBER;
   L_RESP_ID           NUMBER;
   L_CNT               NUMBER;
   Lf_CNT              NUMBER;
   P_DATE              VARCHAR2 (30) := '01-MAR-17';                 --:P_DATE

   CURSOR lcu_rec
   IS
        SELECT assa1.vendor_id,
               assa1.vendor_site_id,
               aps1.SEGMENT1,
               aps1.vendor_name,
               assa1.VENDOR_SITE_CODE,
               aps1.vendor_type_lookup_code,
               assa1.inactive_date,
               org_id
          FROM ap_suppliers aps1, ap_supplier_sites_all assa1
         WHERE     1 = 1
               --and aps1.segment1 = 216
               AND aps1.VENDOR_ID = assa1.VENDOR_ID
               AND aps1.END_DATE_ACTIVE IS NULL
               AND assa1.INACTIVE_DATE IS NULL
               AND aps1.vendor_type_lookup_code NOT IN
                        ('ACCEPTANCESLC',
                         'EL_DIVISION',
                         'EMPLOYEE',
                         'GOVT_DUES',
                         'GROUP_COMPANY',
                         'HUNDI',
                         'INDIA CUSTOMS AUTHORITY ',
                         'INDIA TAX AUTHORITY',
                         'INDIA TCS AUTHORITY',
                         'INDIA TDS AUTHORITY',
                         'INDIA EXCISE AUTHORITY',
                         'INSURANCE',
                         'SALARY',
                         'STATUTORY',
                         'SUBSCRIPTION')
               AND NOT EXISTS
                     (  SELECT RCT.VENDOR_ID, RCT.VENDOR_SITE_ID
                          FROM RCV_SHIPMENT_HEADERS RCT,
                               ap_suppliers aps,
                               ap_supplier_sites_all assa
                         WHERE              --RCT.TRANSACTION_TYPE = 'RECEIVE'
                               --AND TRUNC(RCT.TRANSACTION_DATE) >='01-APR-2017'
                               RCT.CREATION_DATE >=
                                  TO_DATE ('01-MAR-2017'              --P_DATE     --- Which is not used after 01-Mar-17   --Hard coded reason
                                                        || ' 00:00:00',
                                           'DD-MM-YYYY hh24:mi:ss')
                               --                                  TO_DATE (
                               --                                     TO_CHAR ('01-MAR-2017'--P_DATE
                               --                                     , 'DD-MON-YYYY')
                               --                                     || ' 00:00:00',
                               --                                     'dd-mm-yyyy hh24:mi:ss')
                               AND RCT.VENDOR_ID = ASSA.VENDOR_ID
                               AND RCT.VENDOR_SITE_ID = ASSA.VENDOR_SITE_ID
                               AND aps.VENDOR_ID = assa.VENDOR_ID
                               --and aps.segment1 = 216
                               AND aps.vendor_id = aps1.vendor_id
                               AND ASSA.VENDOR_SITE_ID = ASSA1.VENDOR_SITE_ID
                      GROUP BY RCT.VENDOR_ID, RCT.VENDOR_SITE_ID)
      ORDER BY 1, 2;
BEGIN
   L_CNT := 0;
   Lf_CNT := 0;

   FOR i IN lcu_rec
   LOOP
 
   /*---------------------------------------------------------------------------------------
   MO Profile option was enabled. So Responsibility Id has been hard coded using this below query
 
    SELECT frv.responsibility_ID,
         frv.responsibility_name,
         fpov.profile_option_value org_id,
         hou.NAME
    FROM apps.fnd_profile_options_vl fpo,
         apps.fnd_responsibility_Vl frv,
         apps.fnd_profile_option_values fpov,
         apps.hr_organization_units hou
   WHERE     1 = 1      --AND hou.ORGANIZATION_ID =84
         AND fpov.profile_option_value = TO_CHAR (hou.organization_id)
         AND fpo.profile_option_id = fpov.profile_option_id
         AND fpo.user_profile_option_name = 'MO: Operating Unit'
         AND frv.responsibility_id = fpov.level_value
         AND frv.APPLICATION_ID = 200
         AND UPPER (frv.responsibility_name) LIKE '%PAYABLES%SUPER%USER'
ORDER BY frv.responsibility_name
 
 
   ----------------------------------------------------------------------------------------*/
 
 
      IF (i.ORG_ID = 83)
      THEN
         L_RESP_ID := 50653;
      ELSIF (i.ORG_ID = 84)
      THEN
         L_RESP_ID := 50654;
      ELSIF (i.ORG_ID = 86)
      THEN
         L_RESP_ID := 50656;
      ELSIF (i.ORG_ID = 85)
      THEN
         L_RESP_ID := 50655;
      ELSIF (i.ORG_ID = 82)
      THEN
         L_RESP_ID := 50657;
      ELSE
         L_RESP_ID := 55460;
      END IF;

      --      DBMS_OUTPUT.put_line ('L_RESP_ID = ' || L_RESP_ID);

      fnd_global.apps_initialize (12590, L_RESP_ID, 200);

      l_vendor_site_rec.vendor_id := i.vendor_id;               -- Supplier Id
      l_vendor_site_rec.org_id := i.org_id;               -- Operating Unit id
      x_vendor_site_id := i.vendor_site_id;           -- Site Id to be updated
      l_vendor_site_rec.last_update_date := SYSDATE;
      l_vendor_site_rec.last_updated_by := 12590;
      l_vendor_site_rec.inactive_date := SYSDATE;

      AP_VENDOR_PUB_PKG.Update_Vendor_Site (
         p_api_version       => 1,
         x_return_status     => x_return_status,
         x_msg_count         => x_msg_count,
         x_msg_data          => x_msg_data,
         p_vendor_site_rec   => l_vendor_site_rec,
         p_vendor_site_id    => x_vendor_site_id);
      COMMIT;

      --      DBMS_OUTPUT.put_line ('X_RETURN_STATUS = ' || x_return_status);
      --      DBMS_OUTPUT.put_line ('X_MSG_COUNT = ' || x_msg_count);
      --      DBMS_OUTPUT.put_line ('X_MSG_DATA = ' || x_msg_data);

      INSERT INTO XX_TMP_VENDOR_SITES
          VALUES (i.vendor_site_id,
                  x_return_status,
                  x_msg_count,
                  x_msg_data,
                  SYSDATE,
                  12590,
                  SYSDATE,
                  12590,
                  -1);

      COMMIT;

      IF (x_return_status = 'S')
      THEN
         L_CNT := L_CNT + 1;
      ELSE
         Lf_CNT := Lf_CNT + 1;
      --         DBMS_OUTPUT.put_line ('vendor_site_id = ' || i.vendor_site_id);
      END IF;


      L_RESP_ID := NULL;
   END LOOP;
END;
/

show error;

Thursday, 20 June 2019

Script to find JDR_UTILS for the OAF page from Back end

--------------------------------------------JDR_UTILS----------------------------------

/******************* JDR_UTILS.LISTDOCUMENTS *******************/       

Use this API to list of all OA Framework documents in the given path/module.
It provides list of all the pages/extensions/personalizations.

Parameters:
1. Full/Partial path of MDS repository
2. TRUE will direct the API to list all Child Documents underneath that tree path

Example:

BEGIN
   jdr_utils.listdocuments ('/oracle/apps/eam/workorder/', TRUE);
END;
/

/******************* JDR_UTILS.LISTCUSTOMIZATIONS  *******************/   
Use this API to list all personalizations/Extensions/COntents of a specific Object.

Example:

BEGIN
   jdr_utils.listcustomizations (
      p_document => '/xxprod/oracle/apps/eam/workorder/webui/CreateUpdateWOPG');
END;
/

 /*******************   JDR_UTILS.PRINTDOCUMENT    *******************/   

This procedure lists the contents of a specific object.
For example, using below code, we can get all the components(items and page properties) of the page -> TrackPG

BEGIN
   jdr_utils.printDocument (
      '/xxprod/oracle/apps/eam/workorder/webui/CreateUpdateWOPG');
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;
/

/******************* JDR_UTILS.DELETEDOCUMENT   *******************/

You can delete a page/personalization/extension by using command below.
For example to delete the Application Module substitution, use command

BEGIN
   jdr_utils.deletedocument (
      p_document => '/oracle/apps/eam/workorder/server/WOCreateUpdateAM');
END;
/