Wednesday, June 8, 2011

How to Backorder Shipment through API


PROCEDURE xxxx_iso_shipping_bkrd (errbuf OUT VARCHAR2, retcode OUT VARCHAR2)
IS
   x_return_status          VARCHAR2 (3000);
   x_msg_count              NUMBER;
   x_msg_data               VARCHAR2 (3000);
   l_msg_count              NUMBER;
   l_msg_data               VARCHAR2 (2000);
   l_msg_index              NUMBER;
--Standard Parameters.
   p_api_version_number     NUMBER;
   init_msg_list            VARCHAR2 (30);
   x_msg_details            VARCHAR2 (3000);
   x_msg_summary            VARCHAR2 (3000);
   p_validation_level       NUMBER;
   p_commit                 VARCHAR2 (30);
--Parameters for WSH_DELIVERIES_PUB.Delivery_Action.
   p_action_code            VARCHAR2 (15);
   p_delivery_id            NUMBER;
   p_delivery_name          VARCHAR2 (30);
   p_asg_trip_id            NUMBER;
   p_asg_trip_name          VARCHAR2 (30);
   p_asg_pickup_stop_id     NUMBER;
   p_asg_pickup_loc_id      NUMBER;
   p_asg_pickup_loc_code    VARCHAR2 (30);
   p_asg_pickup_arr_date    DATE;
   p_asg_pickup_dep_date    DATE;
   p_asg_dropoff_stop_id    NUMBER;
   p_asg_dropoff_loc_id     NUMBER;
   p_asg_dropoff_loc_code   VARCHAR2 (30);
   p_asg_dropoff_arr_date   DATE;
   p_asg_dropoff_dep_date   DATE;
   p_sc_action_flag         VARCHAR2 (10);
   p_sc_close_trip_flag     VARCHAR2 (10);
   p_sc_create_bol_flag     VARCHAR2 (10);
   p_sc_stage_del_flag      VARCHAR2 (10);
   p_sc_trip_ship_method    VARCHAR2 (30);
   p_sc_actual_dep_date     VARCHAR2 (30);
   p_sc_report_set_id       NUMBER;
   p_sc_report_set_name     VARCHAR2 (60);
   p_wv_override_flag       VARCHAR2 (10);
   x_trip_id                VARCHAR2 (30);
   x_trip_name              VARCHAR2 (30);
/*Handle exceptions*/
   fail_api                 EXCEPTION;

   CURSOR lc_get_iso_ship_data
   IS
      SELECT ooh.header_id, ooh.order_number, wnd.delivery_id,
             wnd.NAME delivery_name,
             SUBSTR (wdd.source_header_type_name, 1, 3) whse
        FROM oe_order_headers_all ooh,
             wsh_delivery_details wdd,
             wsh_new_deliveries wnd,
             wsh_delivery_assignments wda
       WHERE 1 = 1
         AND ooh.header_id = wdd.source_header_id
         AND wdd.delivery_detail_id = wda.delivery_detail_id
         AND wda.delivery_id = wnd.delivery_id
         AND wdd.released_status = 'Y'
         --AND ooh.order_source_id = 10
--And    wda.delivery_id = '776213' --- if required pass delivery id as parameter in concurrent program
         AND TRUNC (SYSDATE) - TO_DATE (ooh.booked_date) = 1;

   ln_user_id               NUMBER;
   ln_resp_id               NUMBER;
   ln_resp_app_id           NUMBER;
   ln_reason_id             NUMBER;
BEGIN
   ln_user_id := apps.fnd_profile.VALUE ('USER_ID');

   IF ln_user_id IS NULL
   THEN
      ln_user_id := -1;
   END IF;

   ln_resp_id := apps.fnd_profile.VALUE ('RESP_ID');
   ln_resp_app_id := apps.fnd_profile.VALUE ('RESP_APPL_ID');

   BEGIN
      fnd_global.apps_initialize (ln_user_id, ln_resp_id, ln_resp_app_id);
   END;

   FOR lc_iso_ship_dt IN lc_get_iso_ship_data
   LOOP
      EXIT WHEN lc_get_iso_ship_data%NOTFOUND;
      p_action_code := 'CONFIRM';         -- The action code for ship confirm
      p_delivery_id := lc_iso_ship_dt.delivery_id;
                         --620600; -- The delivery that needs to be confirmed
      p_delivery_name := lc_iso_ship_dt.delivery_name;
                                            --'620600'; -- The delivery name,
      p_sc_action_flag := 'C';                      -- Ship entered quantity.
      p_sc_stage_del_flag := 'N';                                           --
      --p_sc_trip_ship_method := Null; -- The ship method code
      /*Call to WSH_DELIVERIES_PUB.Delivery_Action. */
      wsh_deliveries_pub.delivery_action
                           (p_api_version_number        => 1.0,
                            p_init_msg_list             => init_msg_list,
                            x_return_status             => x_return_status,
                            x_msg_count                 => x_msg_count,
                            x_msg_data                  => x_msg_data,
                            p_action_code               => p_action_code,
                            p_delivery_id               => p_delivery_id,
                            p_delivery_name             => p_delivery_name,
                            p_asg_trip_id               => p_asg_trip_id,
                            p_asg_trip_name             => p_asg_trip_name,
                            p_asg_pickup_stop_id        => p_asg_pickup_stop_id,
                            p_asg_pickup_loc_id         => p_asg_pickup_loc_id,
                            p_asg_pickup_loc_code       => p_asg_pickup_loc_code,
                            p_asg_pickup_arr_date       => p_asg_pickup_arr_date,
                            p_asg_pickup_dep_date       => p_asg_pickup_dep_date,
                            p_asg_dropoff_stop_id       => p_asg_dropoff_stop_id,
                            p_asg_dropoff_loc_id        => p_asg_dropoff_loc_id,
                            p_asg_dropoff_loc_code      => p_asg_dropoff_loc_code,
                            p_asg_dropoff_arr_date      => p_asg_dropoff_arr_date,
                            p_asg_dropoff_dep_date      => p_asg_dropoff_dep_date,
                            p_sc_action_flag            => p_sc_action_flag,
                            p_sc_close_trip_flag        => p_sc_close_trip_flag,
                            p_sc_create_bol_flag        => p_sc_create_bol_flag,
                            p_sc_stage_del_flag         => p_sc_stage_del_flag,
                            p_sc_trip_ship_method       => p_sc_trip_ship_method,
                            p_sc_actual_dep_date        => p_sc_actual_dep_date,
                            p_sc_report_set_id          => p_sc_report_set_id,
                            p_sc_report_set_name        => p_sc_report_set_name,
                            p_wv_override_flag          => p_wv_override_flag,
                            x_trip_id                   => x_trip_id,
                            x_trip_name                 => x_trip_name
                           );

      IF (x_return_status <> wsh_util_core.g_ret_sts_success)
      THEN
         fnd_file.put_line (fnd_file.LOG,
                               'Successfully BackOrdered for Order Number - '
                            || lc_iso_ship_dt.order_number
                           );
         COMMIT;
      ELSE
         fnd_file.put_line
            (fnd_file.LOG,
                'Could not able to Back Order Line Due to Following Reasons -'
             || x_return_status
             || ' for header id - '
             || lc_iso_ship_dt.header_id
            );
         ROLLBACK;
      /* FOR j IN 1 .. l_msg_count
         LOOP
          fnd_msg_pub.get (p_msg_index => j,
           p_encoded => fnd_api.g_false,
            p_data => l_msg_data,
             p_msg_index_out => l_msg_index);
         fnd_file.put_line(fnd_file.log,'Error Message is=> '|| l_msg_data);
         END LOOP;*/
      END IF;
   END LOOP;

   COMMIT;
END;

4 comments:

  1. Hi Srini, When i am trying this procedure, i get the below error. Please advce. Successfully Back-Ordered for Order Number - E
    Successfully Back-Ordered for Order Number - 11120
    Could not able to Back Order Line Due to Following ReasonsE for header id - 93672 ORA-0000: normal, successful completion

    ReplyDelete
  2. How can this API Backorder when the Action is to Ship Confirm??

    ReplyDelete
  3. Partial Shipments will cause the API to Back Order what hasn't been shipped. Shipping Zero Quantity will Back Order all of it.

    ReplyDelete