模拟发放销售订单界面进行发放操作
Oracle EBS发放销售订单_Oracle

PROCEDURE insert_row(x_batch_id OUT NUMBER) IS
  l_autopack_flag  VARCHAR2(1 );
  l_autopack_level NUMBER;
  l_release_method VARCHAR2(1 );
  l_release_online VARCHAR2(240 ) := fnd_profile.value('SHP_PICK_RELEASE_ONLINE' );

  --bugfix 11830201 added cursor
  CURSOR enable_prop(org_id NUMBER) IS
    SELECT nvl(MAX (project_reference_enabled), 'N')
      FROM pjm_org_parameters
     WHERE organization_id = org_id;

  l_enable_flag VARCHAR2(1 ) := 'N';
  l_return_code BOOLEAN DEFAULT TRUE;

  CURSOR cur_data(p_organization_id IN NUMBER ) IS
    SELECT wsh.picking_rule_name,
           wsh.backorders_only_flag,
           wsh.backorders,
           wsh.shipment_priority,
           wsh.shipment_priority_code,
           wsh.organization_id,
           wsh.org_id,
           wsh.warehouse_id_lov,
           wsh.warehouse,
           wsh.warehouse_code,
           wsh.reservation_star,
           wsh.existing_rsvs_only_flag,
           wsh.ship_method_code,
           wsh.from_scheduled_ship_date,
           wsh.to_scheduled_ship_date,
           wsh.from_requested_date,
           wsh.to_requested_date,
           wsh.order_type,
           wsh.order_type_id,
           wsh.order_number,
           wsh.order_header_id,
           wsh.ship_set_number,
           wsh.inventory_item_id,
           wsh.item_description,
           wsh.customer_name,
           wsh.old_customer_name,
           wsh.customer_id,
           wsh.ship_to_location,
           wsh.ship_to_location_id,
           wsh.include_planned_lines,
           wsh.autocreate_delivery_flag,
           wsh.pick_grouping_rule_name,
           wsh.pick_seq_rule_name,
           wsh.task_id,
           wsh.project_id,
           wsh.autodetail_pr_flag,
           wsh.auto_pick_confirm_flag,
           wsh.ship_set_number ship_set_id,
           wsh.ship_from_location,
           wsh.ship_from_location_id,
           wsh.document_set_id,
           wsh.doc_name,
           wsh.pick_from_subinventory,
           wsh.pick_from_locator_id,
           wsh.pick_from_locator,
           wsh.default_stage_subinventory,
           wsh.default_stage_locator_id,
           wsh.default_stage_locator,
           wsh.ship_method_meaning,
           wsh.autopack_flag,
           wsh.autopack_level,
           wsh.ship_confirm_rule_id,
           wsh.ship_confirm_rule_name,
           wsh.task_planning_flag,
           wsh.region_id,
           wsh.zone_id,
           wsh.ac_delivery_criteria,
           wsh.rel_subinventory,
           wsh.category_set_id,
           wsh.category_id,
           wsh.sch_start_days,
           wsh.sch_end_days,
           wsh.sch_start_hours,
           wsh.sch_end_hours,
           wsh.req_start_days,
           wsh.req_end_days,
           wsh.req_start_hours,
           wsh.req_end_hours,
           wsh.append_flag,
           wsh.task_priority,
           wsh.allocation_method,
           wsh.crossdock_criteria_id,
           wsh.dynamic_replenishment_flag,
           wsh.client_id,
           wsh.client_name
      FROM (SELECT wpr.name picking_rule_name,
                   wpr.backorders_only_flag,
                   decode(s2.meaning,
                          'Exclude',
                          'Unreleased',
                          'Include',
                          'All',
                          'Only',
                          'Backordered') backorders,
                   s1.meaning shipment_priority,
                   wpr.shipment_priority_code,
                   wpr.organization_id,
                   wpr.organization_id org_id,
                   wpr.organization_id warehouse_id_lov,
                   h_org_tl.name warehouse,
                   org.organization_code warehouse_code,
                   decode(wpr.existing_rsvs_only_flag, 'Y', '*' , NULL) reservation_star,
                   wpr.existing_rsvs_only_flag,
                   wpr.ship_method_code,
                   wpr.from_scheduled_ship_date,
                   wpr.to_scheduled_ship_date,
                   wpr.from_requested_date,
                   wpr.to_requested_date,
                   ott.name order_type,
                   wpr.order_type_id,
                   to_char(h.order_number) order_number,
                   wpr.order_header_id,
                   os.set_name ship_set_number,
                   wpr.inventory_item_id,
                   msi.description item_description,
                   substrb(party.party_name, 1, 50 ) customer_name,
                   substrb(party.party_name, 1, 50 ) old_customer_name,
                   wpr.customer_id,
                   whzl.ui_location_code ship_to_location,
                   wpr.ship_to_location_id,
                   wpr.include_planned_lines,
                   wpr.autocreate_delivery_flag,
                   pgr.name pick_grouping_rule_name,
                   rsqr.name pick_seq_rule_name,
                   wpr.task_id,
                   wpr.project_id,
                   wpr.autodetail_pr_flag,
                   wpr.auto_pick_confirm_flag,
                   wpr.ship_set_number ship_set_id,
                   whrl.ui_location_code ship_from_location,
                   wpr.ship_from_location_id,
                   wpr.document_set_id,
                   wrs.name doc_name,
                   wpr.pick_from_subinventory,
                   wpr.pick_from_locator_id,
                   NULL pick_from_locator,
                   wpr.default_stage_subinventory,
                   wpr.default_stage_locator_id,
                   NULL default_stage_locator,
                   sm.meaning ship_method_meaning,
                   wpr.autopack_flag,
                   wpr.autopack_level,
                   wpr.ship_confirm_rule_id,
                   wscr.name ship_confirm_rule_name,
                   wpr.task_planning_flag,
                   wpr.region_id,
                   wpr.zone_id,
                   wpr.ac_delivery_criteria,
                   wpr.rel_subinventory,
                   wpr.category_set_id,
                   wpr.category_id,
                   wpr.sch_start_days,
                   wpr.sch_end_days,
                   wpr.sch_start_hours,
                   wpr.sch_end_hours,
                   wpr.req_start_days,
                   wpr.req_end_days,
                   wpr.req_start_hours,
                   wpr.req_end_hours,
                   wpr.append_flag,
                   wpr.task_priority,
                   wpr.allocation_method,
                   wpr.crossdock_criteria_id,
                   wpr.dynamic_replenishment_flag,
                   wpr.client_id client_id,
                   mcpv.client_name client_name
              FROM wsh_picking_rules            wpr,
                   mtl_parameters               org,
                   hr_all_organization_units_tl h_org_tl,
                   hz_parties                   party,
                   hz_cust_accounts             cust_acct,
                   fnd_lookup_values            s1,
                   fnd_lookup_values            s2,
                   oe_sets                      os,
                   wsh_pick_grouping_rules      pgr,
                   wsh_pick_sequence_rules      rsqr,
                   oe_transaction_types_tl      ott,
                   oe_transaction_types_all     otb,
                   oe_order_headers_all         h,
                   wsh_locations                whrl,
                   wsh_locations                whzl,
                   wsh_report_sets              wrs,
                   wsh_ship_confirm_rules       wscr,
                   mtl_system_items_b           msi,
                   fnd_lookup_values            sm,
                   mtl_client_parameters_v      mcpv
             WHERE org.organization_id(+) = wpr.organization_id
               AND h_org_tl.organization_id(+) = wpr.organization_id
               AND cust_acct.cust_account_id(+) = wpr.customer_id
               AND cust_acct.party_id = party.party_id(+)
               AND h_org_tl.language(+) = userenv('LANG' )
               AND pgr.pick_grouping_rule_id(+) = wpr.pick_grouping_rule_id
               AND rsqr.pick_sequence_rule_id(+) = wpr.pick_sequence_rule_id
               AND wpr.ship_confirm_rule_id = wscr.ship_confirm_rule_id(+)
               AND s1.lookup_code(+) = wpr.shipment_priority_code
               AND s1.lookup_type(+) = 'SHIPMENT_PRIORITY'
               AND s1.language(+) = userenv('LANG' )
               AND s1.view_application_id(+) = 660
               AND s1.security_group_id(+) = 0
               AND s2.lookup_code = wpr.backorders_only_flag
               AND s2.lookup_type = 'PICK_RELEASE_OPTIONS'
               AND s2.language(+) = userenv('LANG' )
               AND s2.view_application_id(+) = 660
               AND s2.security_group_id(+) = 0
               AND otb.transaction_type_id(+) = nvl(wpr.order_type_id, -1)
               AND otb.transaction_type_code(+) = 'ORDER'
               AND otb.transaction_type_id = ott.transaction_type_id(+)
               AND ott.language(+) = userenv('LANG' )
               AND whzl.wsh_location_id(+) =
                   nvl(wpr.ship_to_location_id, - 1)
               AND whrl.wsh_location_id(+) =
                   nvl(wpr.ship_from_location_id, - 1)
               AND wrs.report_set_id(+) = wpr.document_set_id
               AND os.set_id(+) = nvl(wpr.ship_set_number, -1)
               AND h.header_id(+) = nvl(wpr.order_header_id, -1)
               AND msi.inventory_item_id(+) = wpr.inventory_item_id
               AND msi.organization_id(+) = p_organization_id
               AND trunc(SYSDATE ) BETWEEN
                   nvl(wpr.start_date_active, trunc( SYSDATE)) AND
                   nvl(wpr.end_date_active, trunc( SYSDATE) + 1 )
               AND sm.lookup_type(+) = 'SHIP_METHOD'
               AND sm.lookup_code(+) = wpr.ship_method_code
               AND sm.view_application_id(+) = 3
               AND sm.language(+) = userenv('LANG' )
               AND mcpv.client_id(+) = wpr.client_id) wsh
     WHERE picking_rule_name = :control.pick_rule
     ORDER BY wsh.picking_rule_name;
  l_document_set_id NUMBER;
  l_append_flag     VARCHAR2(1 );
  l_row_id          VARCHAR2(50 );
  l_order_header_id NUMBER;
  l_order_type      VARCHAR2(240 );
  l_customer_name   VARCHAR2(240 );
  l_order_type_id   NUMBER;
  l_customer_id     NUMBER;
  l_batch_name      VARCHAR2(240 );
  l_organization_id NUMBER;
  l_request_id      NUMBER;
  l_org_id          NUMBER;
BEGIN
  BEGIN
    SELECT DISTINCT otl.name,
                    substrb(party.party_name, 1, 50 ) customer_name,
                    wdd.source_header_type_id,
                    cust_acct.cust_account_id customer_id,
                    wdd.organization_id,
                    wdd.org_id
      INTO l_order_type,
           l_customer_name,
           l_order_type_id,
           l_customer_id,
           l_organization_id,
           l_org_id
      FROM wsh_delivery_details    wdd,
           hz_parties              party,
           hz_cust_accounts        cust_acct,
           oe_transaction_types_tl otl
     WHERE wdd.customer_id = cust_acct.cust_account_id /*customer id*/
       AND cust_acct.party_id = party.party_id
       AND otl.language = userenv('LANG' )
       AND otl.transaction_type_id = wdd.source_header_type_id
       AND wdd.source_header_id = :query_find.header_id
       AND wdd.source_code = 'OE'
       AND wdd.released_status IN ('B', 'R', 'X' );
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;
  FOR rec_data IN cur_data(l_organization_id) LOOP
    IF l_release_method IS NULL THEN
      -- Commit from save instead of buttons ( user chose Save from the menu )
      IF ((nvl(l_release_online, 'N' ) = 'Y') AND
         (:query_find.header_id IS NOT NULL)) THEN
        l_release_method := 'O';
      ELSE
        l_release_method := 'C';
      END IF ;
    END IF ;
 
    IF l_release_method = 'O' THEN
      NULL;
    ELSE
      IF rec_data.document_set_id IS NULL AND rec_data.doc_name IS NOT NULL THEN
        l_document_set_id := fnd_profile.value('OE_PICKING_DOCUMENT_SET_DEFAULT' );
      END IF ;
    END IF ;
 
    IF rec_data.organization_id IS NULL THEN
      l_append_flag := 'N';
    ELSE
      --bugfix 11830201 added cursor
      OPEN enable_prop(rec_data.organization_id);
      FETCH enable_prop
        INTO l_enable_flag;
      CLOSE enable_prop;
    END IF ;
    --
    IF l_enable_flag = 'Y' THEN
   
      l_return_code := pjm_project_locator.check_project_references(p_organization_id => rec_data.organization_id,
                                                                    p_locator_id      => rec_data.default_stage_locator_id,
                                                                    p_validation_mode => 'SPECIFIC' ,
                                                                    p_required_flag   => 'N' ,
                                                                    p_project_id      => rec_data.project_id,
                                                                    p_task_id         => rec_data.task_id);
      IF (l_return_code = FALSE ) THEN
        fnd_message.retrieve;
        fnd_message.error;
        RAISE form_trigger_failure;
      END IF ;
    END IF ;
    --
    IF (l_return_code = TRUE ) THEN
   
      wsh_picking_batches_pkg.insert_row(x_rowid                      => l_row_id,
                                         x_batch_id                   => x_batch_id,
                                         p_creation_date              => SYSDATE,
                                         p_created_by                 => fnd_global.user_id,
                                         p_last_update_date           => SYSDATE,
                                         p_last_updated_by            => fnd_global.user_id,
                                         p_last_update_login          => fnd_global.login_id,
                                         x_name                       => l_batch_name,
                                         p_backorders_only_flag       => rec_data.backorders_only_flag,
                                         p_document_set_id            => l_document_set_id,
                                         p_existing_rsvs_only_flag    => rec_data.existing_rsvs_only_flag,
                                         p_shipment_priority_code     => rec_data.shipment_priority_code,
                                         p_ship_method_code           => rec_data.ship_method_code,
                                         p_customer_id                => l_customer_id,
                                         p_order_header_id            => :query_find.header_id,
                                         p_ship_set_number            => rec_data.ship_set_id,
                                         p_inventory_item_id          => rec_data.inventory_item_id,
                                         p_order_type_id              => l_order_type_id,
                                         p_from_requested_date        => to_date(to_char(rec_data.from_requested_date,
                                                                                         'DD-MON-YYYY HH24:MI:SS' ),
                                                                                 'DD-MON-YYYY HH24:MI:SS' ),
                                         p_to_requested_date          => to_date(to_char(rec_data.to_requested_date,
                                                                                         'DD-MON-YYYY HH24:MI:SS' ),
                                                                                 'DD-MON-YYYY HH24:MI:SS' ),
                                         p_from_scheduled_ship_date   => to_date(to_char(rec_data.from_scheduled_ship_date,
                                                                                         'DD-MON-YYYY HH24:MI:SS' ),
                                                                                 'DD-MON-YYYY HH24:MI:SS' ),
                                         p_to_scheduled_ship_date     => to_date(to_char(rec_data.to_scheduled_ship_date,
                                                                                         'DD-MON-YYYY HH24:MI:SS' ),
                                                                                 'DD-MON-YYYY HH24:MI:SS' ),
                                         p_ship_to_location_id        => rec_data.ship_to_location_id,
                                         p_ship_from_location_id      => rec_data.ship_from_location_id,
                                         p_trip_id                    => NULL,
                                         p_delivery_id                => NULL,
                                         p_include_planned_lines      => rec_data.include_planned_lines,
                                         p_pick_grouping_rule_id      => NULL,
                                         p_pick_sequence_rule_id      => NULL,
                                         p_autocreate_delivery_flag   => rec_data.autocreate_delivery_flag,
                                         p_attribute_category         => NULL,
                                         p_attribute1                 => NULL,
                                         p_attribute2                 => NULL,
                                         p_attribute3                 => NULL,
                                         p_attribute4                 => NULL,
                                         p_attribute5                 => NULL,
                                         p_attribute6                 => NULL,
                                         p_attribute7                 => NULL,
                                         p_attribute8                 => NULL,
                                         p_attribute9                 => NULL,
                                         p_attribute10                => NULL,
                                         p_attribute11                => NULL,
                                         p_attribute12                => NULL,
                                         p_attribute13                => NULL,
                                         p_attribute14                => NULL,
                                         p_attribute15                => NULL,
                                         p_autodetail_pr_flag         => rec_data.autodetail_pr_flag,
                                         p_carrier_id                 => NULL,
                                         p_trip_stop_id               => NULL,
                                         p_default_stage_subinventory => rec_data.default_stage_subinventory,
                                         p_default_stage_locator_id   => rec_data.default_stage_locator_id,
                                         p_pick_from_subinventory     => rec_data.pick_from_subinventory,
                                         p_pick_from_locator_id       => rec_data.pick_from_locator_id,
                                         p_auto_pick_confirm_flag     => rec_data.auto_pick_confirm_flag,
                                         p_delivery_detail_id         => NULL,
                                         p_project_id                 => rec_data.project_id,
                                         p_task_id                    => rec_data.task_id,
                                         p_organization_id            => rec_data.organization_id,
                                         p_ship_confirm_rule_id       => rec_data.ship_confirm_rule_id,
                                         p_autopack_flag              => rec_data.autopack_flag,
                                         p_autopack_level             => rec_data.autopack_level,
                                         p_task_planning_flag         => rec_data.task_planning_flag,
                                         p_dynamic_replenishment_flag => rec_data.dynamic_replenishment_flag, --bug# 6689448 (replenishment project)
                                         -- rlanka : Pack J
                                         p_regionid              => rec_data.region_id,
                                         p_zoneid                => rec_data.zone_id,
                                         p_categoryid            => rec_data.category_id,
                                         p_categorysetid         => rec_data.category_set_id,
                                         p_acdelivcriteria       => rec_data.ac_delivery_criteria,
                                         p_relsubinventory       => rec_data.rel_subinventory,
                                         p_append_flag           => l_append_flag,
                                         p_task_priority         => rec_data.task_priority,
                                         p_actual_departure_date => NULL,
                                         -- X-dock
                                         p_allocation_method     => rec_data.allocation_method,
                                         p_crossdock_criteria_id => rec_data.crossdock_criteria_id,
                                         p_client_id             => rec_data.client_id --Modified R12.1.1 LSP PROJECT
                                         );
    END IF ;
  END LOOP;
  --调用请求
  l_request_id := fnd_request.submit_request(application => 'CUX',
                                             program     => 'CUXOMLPKP' ,
                                             description => NULL,
                                             start_time  => SYSDATE ,
                                             sub_request => FALSE ,
                                             argument1   => x_batch_id,
                                             argument2   => l_org_id,
                                             argument3   => :query_find.header_id);
  IF l_request_id IS NULL OR l_request_id = 0 THEN
    fnd_message.set_string( '提交挑库选择列表生成请求出错.' );
    fnd_message.error;
    RAISE form_trigger_failure;
  ELSE
    forms_ddl( 'COMMIT');
    fnd_message.debug( '挑库发放成功,请查看请求.' );
  END IF;
END insert_row;


--调用请求
CUXOMLPKP请求调用例如以下:
    l_request_id := wsh_picking_batches_pkg.submit_release_request(p_batch_id    => p_batch_id,
                                                                   p_log_level   => 0 ,
                                                                   p_num_workers => nvl(fnd_profile.value('WSH_PR_NUM_WORKERS' ),
                                                                                        1));
    IF l_request_id IS NULL OR l_request_id = 0 THEN
      errbuf  := '提交挑库选择列表生成请求出错.' ;
      retcode := '2';
      RETURN;
    END IF ;