CREATE OR REPLACE PACKAGE BODY cux_fa_do_pkg IS

--一、资产新增
  PROCEDURE do_addition IS
 
    l_trans_rec           fa_api_types.trans_rec_type;
    l_dist_trans_rec      fa_api_types.trans_rec_type;
    l_asset_hdr_rec       fa_api_types.asset_hdr_rec_type;
    l_asset_desc_rec      fa_api_types.asset_desc_rec_type;
    l_asset_cat_rec       fa_api_types.asset_cat_rec_type;
    l_asset_type_rec      fa_api_types.asset_type_rec_type;
    l_asset_hierarchy_rec fa_api_types.asset_hierarchy_rec_type;
    l_asset_fin_rec       fa_api_types.asset_fin_rec_type;
    l_asset_deprn_rec     fa_api_types.asset_deprn_rec_type;
    l_asset_dist_rec      fa_api_types.asset_dist_rec_type;
    l_asset_dist_tbl      fa_api_types.asset_dist_tbl_type;
    l_inv_tbl             fa_api_types.inv_tbl_type;
    l_inv_rate_tbl        fa_api_types.inv_rate_tbl_type;
    l_inv_rec             fa_api_types.inv_rec_type;
    l_return_status       VARCHAR2(1);
    l_mesg_count          NUMBER := 0;
    l_mesg_len            NUMBER;
    l_mesg                VARCHAR2(4000);
 
  BEGIN
 
    --初始化
    fnd_profile.put('PRINT_DEBUG', 'Y');
    dbms_output.enable(10000000);
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.initialize;
 
    --资产描述信息
    l_asset_desc_rec.description    := '电脑';
    l_asset_desc_rec.tag_number     := 'BZ20120223003';
    l_asset_desc_rec.asset_key_ccid := 1001; --2;
    l_asset_cat_rec.category_id     := 1001;
    l_asset_type_rec.asset_type     := 'CAPITALIZED';
    --l_asset_desc_rec.asset_number :=
    --l_asset_desc_rec.property_type_code :=
    --l_asset_desc_rec.property_1245_1250_code :=
    --l_asset_desc_rec.in_use_flag :=
    --l_asset_desc_rec.owned_leased :=
    --l_asset_desc_rec.new_used :=
 
    --l_asset_desc_rec.inventorial :=
    --l_asset_desc_rec.manufacturer_name :=
    --l_asset_desc_rec.serial_number :=
    --l_asset_desc_rec.model_number :=
    --l_asset_desc_rec.tag_number :=
    --l_asset_desc_rec.parent_asset_id :=
    --l_asset_desc_rec.warranty_id :=
    --l_asset_desc_rec.lease_id :=
 
    --资产发票信息
    /*
    -- invoice info
    -- l_inv_rec.fixed_assets_cost            := 2500;
    -- l_inv_rec.deleted_flag                 := 'NO';
    l_inv_rec.description                  := l_asset_desc_rec.description;
    -- l_inv_rec.unrevalued_cost              := 5555;
    -- l_inv_rec.create_batch_id              := 1000;
    --l_inv_rec.payables_code_combination_id := 13528;
    l_inv_rec.feeder_system_name           := 'BZ';
    -- l_inv_rec.payables_cost                := 5555;
    l_inv_rec.payables_units               := 1;
    l_inv_rec.po_vendor_id                 := 1;
    --l_inv_rec.inv_indicator                := 1;
    */
 
    l_inv_tbl(1) := l_inv_rec;
 
    --发票汇率信息
    /*  
    l_inv_rate_tbl(1).set_of_books_id := 658; -- first reporting book
    l_inv_rate_tbl(1).exchange_rate := .532;
    
    l_inv_rate_tbl(2).inv_indicator := 1;
    l_inv_rate_tbl(2).set_of_books_id := 659; -- second reporting book
    l_inv_rate_tbl(2).exchange_rate := .233;
    */
 
    --资产财务信息
    l_asset_fin_rec.date_placed_in_service := to_date('2012-01-31',
                                                      'yyyy-mm-dd'); --'DPIS';
    l_asset_fin_rec.depreciate_flag        := 'YES';
    l_asset_fin_rec.cost                   := 6000;
 
    --资产折旧信息
    l_asset_deprn_rec.ytd_deprn           := 0;
    l_asset_deprn_rec.deprn_reserve       := 0;
    l_asset_deprn_rec.bonus_ytd_deprn     := 0;
    l_asset_deprn_rec.bonus_deprn_reserve := 0;
 
    --资产转移信息
    l_asset_hdr_rec.book_type_code       := 'ZZ_FA_BOOK'; --'book';
    l_trans_rec.transaction_date_entered := l_asset_fin_rec.date_placed_in_service;
    l_trans_rec.who_info.last_updated_by := 1130; --FND_GLOBAL.USER_ID;
 
    /* distribution info */
    -- l_asset_dist_tbl := fa_API_TYPES.asset_dist_tbl_type (null);
 
    l_asset_dist_rec.units_assigned := 1;
    l_asset_dist_rec.expense_ccid := 20005; --12975;
    l_asset_dist_rec.location_ccid := 6001; --2;
    l_asset_dist_rec.assigned_to := NULL; --81
    l_asset_dist_rec.transaction_units := l_asset_dist_rec.units_assigned;
    l_asset_dist_tbl(1) := l_asset_dist_rec;
 
    --调用API
    fa_addition_pub .do_addition(1.0,
                                 fnd_api.g_false,
                                 fnd_api.g_false,
                                 fnd_api.g_valid_level_full,
                                 l_return_status,
                                 l_mesg_count,
                                 l_mesg,
                                 NULL,
                                 --
                                 l_trans_rec,
                                 l_dist_trans_rec,
                                 --
                                 l_asset_hdr_rec,
                                 l_asset_desc_rec,
                                 l_asset_type_rec,
                                 l_asset_cat_rec,
                                 l_asset_hierarchy_rec,
                                 l_asset_fin_rec,
                                 l_asset_deprn_rec,
                                 l_asset_dist_tbl,
                                 l_inv_tbl);
    dbms_output.put_line(l_return_status);
 
    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
      dbms_output.put_line('FAILED');
      -- dbms_output.put_line(to_char(sqlerr));
      dbms_output.put_line(SQLERRM);
      l_mesg_count := fnd_msg_pub.count_msg;
      IF l_mesg_count > 0 THEN
        l_mesg := chr(10) || substr(fnd_msg_pub.get(fnd_msg_pub.g_first,
                                                    fnd_api.g_false),
                                    1,
                                    512);
        FOR i IN 1 .. 2 LOOP
          -- (l_mesg_count - 1) loop
          l_mesg := l_mesg || chr(10) || substr(fnd_msg_pub.get(fnd_msg_pub.g_next,
                                                                fnd_api.g_false),
                                                1,
                                                512);
        END LOOP;
        fnd_msg_pub.delete_msg();
        l_mesg_len := length(l_mesg);
        FOR i IN 1 .. ceil(l_mesg_len / 255) LOOP
          dbms_output.put_line(substr(l_mesg, ((i * 255) - 254), 255));
        END LOOP;
      END IF;
    ELSE
      dbms_output.put_line('SUCCESS');
      dbms_output.put_line('THID' ||
                           to_char(l_trans_rec.transaction_header_id));
      dbms_output.put_line('ASSET_ID' || to_char(l_asset_hdr_rec.asset_id));
      dbms_output.put_line('ASSET_NUMBER' || l_asset_desc_rec.asset_number);
    END IF;
  END;

--二、资产描述信息调整
  PROCEDURE update_desc IS
 
    l_count         NUMBER;
    l_return_status VARCHAR2(100);
    l_msg_count     NUMBER := 0;
    l_msg_data      VARCHAR2(4000);
    l_request_id    NUMBER;
    reclass_err EXCEPTION;
    i NUMBER := 0;
    l_api_version CONSTANT NUMBER := 1.0;
    l_msg_list                 VARCHAR2(5) := fnd_api.g_false;
    l_commit_flag              VARCHAR2(5) := fnd_api.g_false;
    l_validation_level         VARCHAR2(5) := fnd_api.g_valid_level_full;
    l_debug_flag               VARCHAR2(5) := fnd_api.g_false;
    l_calling_fn               VARCHAR2(50) := 'Update Asset Desc Script';
    l_trans_rec                fa_api_types.trans_rec_type;
    l_asset_hdr_rec            fa_api_types.asset_hdr_rec_type;
    l_asset_desc_rec           fa_api_types.asset_desc_rec_type;
    l_asset_type_rec           fa_api_types.asset_type_rec_type;
    l_asset_cat_rec            fa_api_types.asset_cat_rec_type;
    l_asset_id                 NUMBER(15) := 64;
    l_description              VARCHAR2(30) := substr('Description', 1, 30);
    l_serial_number            VARCHAR2(10) := substr('Serial_number',
                                                      1,
                                                      10);
    l_category_id              NUMBER(15);
    l_transaction_type_code    VARCHAR2(20) := NULL;
    l_transaction_date_entered DATE := NULL;
    l_temp_str                 VARCHAR2(640);
 
  BEGIN
 
    --初始化
    fnd_profile.put('PRINT_DEBUG', 'Y');
    dbms_output.enable(10000000);
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.initialize;
 
    l_trans_rec.who_info.last_updated_by   := 1001;
    l_trans_rec.who_info.last_update_login := 1001;
    l_trans_rec.who_info.last_update_date  := SYSDATE;
    l_trans_rec.who_info.creation_date     := l_trans_rec.who_info.last_update_date;
    l_trans_rec.who_info.created_by        := l_trans_rec.who_info.last_updated_by;
 
    l_asset_hdr_rec.asset_id := 64;
 
    l_asset_desc_rec.description   := l_description;
    l_asset_desc_rec.serial_number := l_serial_number;
 
    l_asset_cat_rec.desc_flex.attribute1 := 'Test Thru API';
    l_asset_cat_rec.desc_flex.attribute2 := 'Test2 Thru API';
 
    l_return_status := NULL;
    dbms_output.put_line('calling FA_ASSET_DESC_PUB.update_desc');
    fa_asset_desc_pub.update_desc(
                                  -- std parameters
                                  p_api_version         => l_api_version,
                                  p_init_msg_list       => l_msg_list,
                                  p_commit              => l_commit_flag,
                                  p_validation_level    => l_validation_level,
                                  x_return_status       => l_return_status,
                                  x_msg_count           => l_msg_count,
                                  x_msg_data            => l_msg_data,
                                  p_calling_fn          => l_calling_fn,
                                  px_trans_rec          => l_trans_rec,
                                  px_asset_hdr_rec      => l_asset_hdr_rec,
                                  px_asset_desc_rec_new => l_asset_desc_rec,
                                  px_asset_cat_rec_new  => l_asset_cat_rec);
 
    -- rollback;
    dbms_output.put_line('l_return_status ' || l_return_status);
    IF l_return_status = 'E' THEN
      l_msg_count := fnd_msg_pub.count_msg;
    
      IF (l_msg_count > 0) THEN
        dbms_output.put_line('l_msg_count ' || to_char(l_msg_count));
        l_temp_str := substr(fnd_msg_pub.get(fnd_msg_pub.g_first,
                                             fnd_api.g_false),
                             1,
                             230);
        dbms_output.put_line(l_temp_str);
      
        l_temp_str := NULL;
        FOR i IN 1 .. (l_msg_count - 1) LOOP
          l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
          dbms_output.put_line(l_temp_str);
        END LOOP;
      ELSE
        dbms_output.put_line('dump: NO MESSAGE !');
      END IF;
      RETURN;
    END IF;
 
    fa_srvr_msg.add_message(calling_fn => 'reclass.sql',
                            NAME       => 'FA_SHARED_END_SUCCESS',
                            token1     => 'PROGRAM',
                            value1     => 'FA_ASSET_DESC_PUB.update_desc');
 
  EXCEPTION
    WHEN reclass_err THEN
      ROLLBACK WORK;
      fa_srvr_msg.add_message(calling_fn => 'reclass.sql',
                              NAME       => 'FA_SHARED_PROGRAM_FAILED',
                              token1     => 'PROGRAM',
                              value1     => 'FA_ASSET_DESC_PUB.update_desc');
    
      l_msg_count := fnd_msg_pub.count_msg;
      IF (l_msg_count > 0) THEN
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      
        FOR i IN 1 .. (l_msg_count - 1) LOOP
          l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
          dbms_output.put_line('dump: ' || l_temp_str);
        END LOOP;
      ELSE
        dbms_output.put_line('dump: NO MESSAGE !');
      END IF;
    WHEN OTHERS THEN
      ROLLBACK WORK;
      fa_srvr_msg.add_sql_error(calling_fn => 'fa_asset_desc_pub..update_desc');
      RAISE fnd_api.g_exc_unexpected_error;
  END;

--三、资产交易信息及财务信息调整
  PROCEDURE do_adjustment IS
 
    l_trans_rec                 fa_api_types.trans_rec_type;
    l_asset_hdr_rec             fa_api_types.asset_hdr_rec_type;
    l_asset_fin_rec_adj         fa_api_types.asset_fin_rec_type;
    l_asset_fin_rec_new         fa_api_types.asset_fin_rec_type;
    l_asset_fin_mrc_tbl_new     fa_api_types.asset_fin_tbl_type;
    l_inv_trans_rec             fa_api_types.inv_trans_rec_type;
    l_inv_tbl                   fa_api_types.inv_tbl_type;
    l_inv_rate_tbl              fa_api_types.inv_rate_tbl_type;
    l_asset_deprn_rec_adj       fa_api_types.asset_deprn_rec_type;
    l_asset_deprn_rec_new       fa_api_types.asset_deprn_rec_type;
    l_asset_deprn_mrc_tbl_new   fa_api_types.asset_deprn_tbl_type;
    l_inv_rec                   fa_api_types.inv_rec_type;
    l_group_reclass_options_rec fa_api_types.group_reclass_options_rec_type;
    l_return_status             VARCHAR2(1);
    l_mesg_count                NUMBER := 0;
    l_mesg_len                  NUMBER;
    l_mesg                      VARCHAR2(512);
 
  BEGIN
 
    --初始化
    fnd_profile.put('PRINT_DEBUG', 'Y');
    dbms_output.enable(10000000);
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.initialize;
 
    l_asset_hdr_rec.asset_id       := 64; --asset_id;
    l_asset_hdr_rec.book_type_code := 'ZZ_FA_BOOK';
    -- invoice trans
    l_inv_trans_rec.transaction_type := 'INVOICE ADDITION';
    -- invoice info
    l_inv_rec.fixed_assets_cost := 3000;
    l_inv_rec.deleted_flag      := 'NO';
    l_inv_rec.description       := 'TEST NIV';
    l_inv_rec.unrevalued_cost   := 0;
    l_inv_rec.create_batch_id   := 1000;
    --l_inv_rec.payables_code_combination_id := 13528;
    l_inv_rec.payables_cost  := 2500;
    l_inv_rec.payables_units := 1;
    l_inv_rec.inv_indicator  := 1;
    -- rate info for mrc
    /*  
    l_inv_rate_tbl(1).inv_indicator := 1;
    l_inv_rate_tbl(1).set_of_books_id := 425;
    l_inv_rate_tbl(1).exchange_rate := 50;
    */
    -- set up the invoice table
    l_inv_tbl(1) := l_inv_rec;
 
    fa_adjustment_pub.do_adjustment(1.0,
                                    fnd_api.g_false,
                                    fnd_api.g_false,
                                    fnd_api.g_valid_level_full,
                                    NULL,
                                    l_return_status,
                                    l_mesg_count,
                                    l_mesg,
                                    l_trans_rec,
                                    l_asset_hdr_rec,
                                    l_asset_fin_rec_adj,
                                    l_asset_fin_rec_new,
                                    l_asset_fin_mrc_tbl_new,
                                    l_inv_trans_rec,
                                    l_inv_tbl,
                                    l_asset_deprn_rec_adj,
                                    l_asset_deprn_rec_new,
                                    l_asset_deprn_mrc_tbl_new,
                                    l_group_reclass_options_rec);
    dbms_output.put_line(l_return_status);
    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
      fa_debug_pkg.dump_debug_messages(max_mesgs => 0);
      l_mesg_count := fnd_msg_pub.count_msg;
      IF l_mesg_count > 0 THEN
        l_mesg := substr(fnd_msg_pub.get(fnd_msg_pub.g_first,
                                         fnd_api.g_false),
                         1,
                         512);
        dbms_output.put_line(substr(l_mesg, 1, 255));
        FOR i IN 1 .. l_mesg_count - 1 LOOP
          l_mesg := substr(fnd_msg_pub.get(fnd_msg_pub.g_next,
                                           fnd_api.g_false),
                           1,
                           512);
          dbms_output.put_line(substr(l_mesg, 1, 255));
        END LOOP;
        fnd_msg_pub.delete_msg();
      END IF;
    ELSE
      dbms_output.put_line('SUCCESS');
      dbms_output.put_line('THID' ||
                           to_char(l_trans_rec.transaction_header_id));
    END IF;
  END;

--四、资产删除(限刚创建,无折旧,无报废等资产)
  PROCEDURE do_delete IS
 
    l_asset_hdr_rec fa_api_types.asset_hdr_rec_type;
 
    l_return_status VARCHAR2(1);
    l_mesg_count    NUMBER := 0;
    l_mesg_len      NUMBER;
    l_mesg          VARCHAR2(4000);
 
  BEGIN
 
    dbms_output.enable(1000000);
 
    fa_srvr_msg.init_server_message;
 
    -- asset header info
    l_asset_hdr_rec.asset_id       := 64;
    l_asset_hdr_rec.book_type_code := 'ZZ_FA_BOOK';
 
    fa_deletion_pub.do_delete(p_api_version      => 1.0,
                              p_init_msg_list    => fnd_api.g_false,
                              p_commit           => fnd_api.g_false,
                              p_validation_level => fnd_api.g_valid_level_full,
                              x_return_status    => l_return_status,
                              x_msg_count        => l_mesg_count,
                              x_msg_data         => l_mesg,
                              p_calling_fn       => NULL,
                              px_asset_hdr_rec   => l_asset_hdr_rec);
 
    l_mesg_count := fnd_msg_pub.count_msg;
 
    IF l_mesg_count > 0 THEN
    
      l_mesg := chr(10) ||
                substr(fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false),
                       1,
                       250);
      dbms_output.put_line(l_mesg);
    
      FOR i IN 1 .. (l_mesg_count - 1) LOOP
        l_mesg := substr(fnd_msg_pub.get(fnd_msg_pub.g_next,
                                         fnd_api.g_false),
                         1,
                         250);
      
        dbms_output.put_line(l_mesg);
      END LOOP;
    
      fnd_msg_pub.delete_msg();
    
    END IF;
 
    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
      dbms_output.put_line('FAILURE');
    ELSE
      dbms_output.put_line('SUCCESS');
      dbms_output.put_line('ASSET_ID' || to_char(l_asset_hdr_rec.asset_id));
      dbms_output.put_line('BOOK: ' || l_asset_hdr_rec.book_type_code);
    END IF;
 
  END;

--五、资产分配(转移)
  PROCEDURE do_transfer IS
 
    l_return_status  VARCHAR2(1);
    l_msg_count      NUMBER := 0;
    l_msg_data       VARCHAR2(4000);
    l_trans_rec      fa_api_types.trans_rec_type;
    l_asset_hdr_rec  fa_api_types.asset_hdr_rec_type;
    l_asset_dist_tbl fa_api_types.asset_dist_tbl_type;
    l_temp_str       VARCHAR2(512);
 
  BEGIN
 
    fnd_profile.put('PRINT_DEBUG', 'Y');
    dbms_output.enable(1000000);
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.initialize;
    -- fill in asset information
    l_asset_hdr_rec.asset_id       := 49;
    l_asset_hdr_rec.book_type_code := 'ZZ_FA_BOOK';
 
    -- transaction date must be filled in if performing
    -- prior period transfer
    --l_trans_rec.transaction_date_entered := to_date('01-JAN-1999 10:54:22', 'dd-mon-yyyy hh24:mi:ss');
 
    l_asset_dist_tbl.delete;
    /*
    fill in distribution data for existing distribution lines
    affected by this transfer txn. Note: You need to fill in
    only affected distribution lines.
    For source distribution, you must fill in either existing
    distribution id or 2 columns(expense_ccid,location_ccid) or
    3-tuple columns(assigned_to,expense_ccid,and location_ccid)
    depending on the makeup of the particular distribution
    of the asset.
    */
    l_asset_dist_tbl(1).distribution_id := 2007;
    l_asset_dist_tbl(1).transaction_units := -1;
    /*
    either above 2 lines or below 4 lines must be provided
    for source distribution:
    l_asset_dist_tbl(1).transaction_units := -2;
    l_asset_dist_tbl(1).assigned_to := 11;
    l_asset_dist_tbl(1).expense_ccid :=15338;
    l_asset_dist_tbl(1).location_ccid := 3;
    */
    -- fill in dist info for destination distribution
    l_asset_dist_tbl(2).transaction_units := 1;
    l_asset_dist_tbl(2).assigned_to := 81;
    l_asset_dist_tbl(2).expense_ccid := 1013; --15338;
    l_asset_dist_tbl(2).location_ccid := 1; --3;
 
    l_trans_rec.who_info.last_updated_by   := 1130; --FND_GLOBAL.USER_ID;
    l_trans_rec.who_info.last_update_login := 10001; --FND_GLOBAL.LOGIN_ID;
 
    fa_transfer_pub .do_transfer(1.0,
                                 fnd_api.g_false,
                                 fnd_api.g_false,
                                 fnd_api.g_valid_level_full,
                                 NULL,
                                 l_return_status,
                                 l_msg_count,
                                 l_msg_data,
                                 l_trans_rec,
                                 l_asset_hdr_rec,
                                 l_asset_dist_tbl);
    IF (l_return_status != fnd_api.g_ret_sts_success) THEN
    
      dbms_output.put_line('TRANSFER failed!.');
      l_msg_count := fnd_msg_pub.count_msg;
    
      IF (l_msg_count > 0) THEN
        l_temp_str := substr(fnd_msg_pub.get(fnd_msg_pub.g_first,
                                             fnd_api.g_false),
                             1,
                             512);
        dbms_output.put_line('Error: ' || l_temp_str);
        FOR i IN 1 .. (l_msg_count - 1) LOOP
          l_temp_str := substr(fnd_msg_pub.get(fnd_msg_pub.g_next,
                                               fnd_api.g_false),
                               1,
                               512);
          dbms_output.put_line('Error: ' || l_temp_str);
        END LOOP;
      END IF;
    ELSE
      dbms_output.put_line('TRANSFER completed successfully!');
      dbms_output.put_line('THID = ' ||
                           to_char(l_trans_rec.transaction_header_id));
    END IF;
    fnd_msg_pub.delete_msg();
  END;

--六、资产报废
  PROCEDURE do_retirement IS
 
    api_error EXCEPTION;
    /* Test asset info */
    l_asset_id       NUMBER;
    l_book_type_code VARCHAR2(15) := 'ZZ_FA_BOOK';
    l_user_id        NUMBER := 1130; -- USER_ID must properly be set to run calc gain/loss
 
    --/ define local record types /
    l_trans_rec        fa_api_types.trans_rec_type;
    l_dist_trans_rec   fa_api_types.trans_rec_type;
    l_asset_hdr_rec    fa_api_types.asset_hdr_rec_type;
    l_asset_retire_rec fa_api_types.asset_retire_rec_type;
    l_asset_dist_tbl   fa_api_types.asset_dist_tbl_type;
    l_subcomp_tbl      fa_api_types.subcomp_tbl_type;
    l_inv_tbl          fa_api_types.inv_tbl_type;
 
    --/ misc info /
    l_api_version      NUMBER := 1;
    l_init_msg_list    VARCHAR2(1) := fnd_api.g_false;
    l_commit           VARCHAR2(1) := fnd_api.g_false;
    l_validation_level NUMBER := fnd_api.g_valid_level_full;
    l_calling_fn       VARCHAR2(80) := 'Retirement test wrapper';
    l_return_status    VARCHAR2(1) := fnd_api.g_false;
    l_msg_count        NUMBER := 0;
    l_msg_data         VARCHAR2(512);
 
    l_count      NUMBER;
    l_request_id NUMBER;
 
    i NUMBER := 0;
 
    l_temp_str   VARCHAR2(512);
    l_mesg_count NUMBER;
 
  BEGIN
 
    dbms_output.disable;
    dbms_output.enable(1000000);
    dbms_output.put_line('begin');
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.set_debug_flag(debug_flag => 'YES');
 
    -- Get standard who info
    l_request_id := fnd_global.conc_request_id;
    l_asset_id   := 100014573;
    --A530000000104
 
    l_trans_rec.who_info.last_updated_by   := 1130;
    l_trans_rec.who_info.last_update_login := -1;
 
    l_trans_rec.who_info.last_update_date := SYSDATE;
    l_trans_rec.who_info.creation_date    := l_trans_rec.who_info.last_update_date;
    l_trans_rec.who_info.created_by       := l_trans_rec.who_info.last_updated_by;
 
    l_trans_rec.transaction_type_code    := NULL; -- this will be determined inside API
    l_trans_rec.transaction_date_entered := NULL;
 
    l_asset_hdr_rec.asset_id           := l_asset_id;
    l_asset_hdr_rec.book_type_code     := l_book_type_code;
    l_asset_hdr_rec.period_of_addition := NULL;
 
    l_asset_retire_rec.retirement_prorate_convention := NULL; --'STL';
    l_asset_retire_rec.date_retired                  := NULL; -- will be current period by default
    l_asset_retire_rec.units_retired                 := 1;
    l_asset_retire_rec.cost_retired                  := 6266806.97;
    --  l_asset_retire_rec.proceeds_of_sale              := 0;
    -- l_asset_retire_rec.cost_of_removal               := 0;
    -- l_asset_retire_rec.retirement_type_code          := 'SALE';
    l_asset_retire_rec.trade_in_asset_id   := NULL;
    l_asset_retire_rec.calculate_gain_loss := fnd_api.g_true; --特别注意,如果此处为TRUE,则资产只能进行重建,如果FALSE,则报废可以进行UNDO操作
 
    fnd_profile.put('USER_ID', l_user_id);
 
    l_asset_dist_tbl.delete;
    --l_asset_dist_tbl(1).distribution_id := 4003;
 
    fa_retirement_pub.do_retirement(p_api_version       => l_api_version,
                                    p_init_msg_list     => l_init_msg_list,
                                    p_commit            => l_commit,
                                    p_validation_level  => l_validation_level,
                                    p_calling_fn        => l_calling_fn,
                                    x_return_status     => l_return_status,
                                    x_msg_count         => l_msg_count,
                                    x_msg_data          => l_msg_data,
                                    px_trans_rec        => l_trans_rec,
                                    px_dist_trans_rec   => l_dist_trans_rec,
                                    px_asset_hdr_rec    => l_asset_hdr_rec,
                                    px_asset_retire_rec => l_asset_retire_rec,
                                    p_asset_dist_tbl    => l_asset_dist_tbl,
                                    p_subcomp_tbl       => l_subcomp_tbl,
                                    p_inv_tbl           => l_inv_tbl);
 
    IF l_return_status = fnd_api.g_false THEN
      RAISE api_error;
    END IF;
 
    dbms_output.put_line('test wrapper: retirement_id: ' ||
                         l_asset_retire_rec.retirement_id);
    --commit;
 
    -- Dump Debug messages when run in debug mode to log file
    IF (fa_debug_pkg.print_debug) THEN
      fa_debug_pkg.write_debug_log;
    END IF;
 
    fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                            NAME       => 'FA_SHARED_END_SUCCESS',
                            token1     => 'PROGRAM',
                            value1     => 'RETIREMENT_API');
 
    l_mesg_count := fnd_msg_pub.count_msg;
 
    IF (l_mesg_count > 0) THEN
      l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
      dbms_output.put_line('dump: ' || l_temp_str);
    
      FOR i IN 1 .. (l_mesg_count - 1) LOOP
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      END LOOP;
    ELSE
      dbms_output.put_line('dump: NO MESSAGE !');
    END IF;
 
  EXCEPTION
    WHEN api_error THEN
      ROLLBACK WORK;
    
      fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                              NAME       => 'FA_SHARED_PROGRAM_FAILED',
                              token1     => 'PROGRAM',
                              value1     => l_calling_fn);
    
      l_mesg_count := fnd_msg_pub.count_msg;
      IF (l_mesg_count > 0) THEN
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      
        FOR i IN 1 .. (l_mesg_count - 1) LOOP
          l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
          dbms_output.put_line('dump: ' || l_temp_str);
        END LOOP;
      ELSE
        dbms_output.put_line('dump: NO MESSAGE !');
      END IF;
    
  END;

--七、撤消资产报废(只能撤消未进行“计算损益”的报废)
  PROCEDURE undo_retirement IS
 
    api_error EXCEPTION;
    l_retirement_id NUMBER := 2013;
    --l_asset_id number := 101027;
    --l_book_type_code varchar2(15) := 'ZBOOK';
    l_user_id NUMBER := 1130; -- USER_ID must properly be set to run calc gain/loss
 
    --/ define local record types /
    l_trans_rec        fa_api_types.trans_rec_type;
    l_asset_hdr_rec    fa_api_types.asset_hdr_rec_type;
    l_asset_retire_rec fa_api_types.asset_retire_rec_type;
    l_asset_dist_tbl   fa_api_types.asset_dist_tbl_type;
    l_subcomp_tbl      fa_api_types.subcomp_tbl_type;
    l_inv_tbl          fa_api_types.inv_tbl_type;
 
    -- / misc info /
    l_api_version      NUMBER := 1;
    l_init_msg_list    VARCHAR2(1) := fnd_api.g_false;
    l_commit           VARCHAR2(1) := fnd_api.g_true;
    l_validation_level NUMBER := fnd_api.g_valid_level_full;
    l_calling_fn       VARCHAR2(80) := 'Retirement test wrapper';
    l_return_status    VARCHAR2(1) := fnd_api.g_false;
    l_msg_count        NUMBER := 0;
    l_msg_data         VARCHAR2(512);
 
    l_count      NUMBER;
    l_request_id NUMBER;
 
    i NUMBER := 0;
 
    l_temp_str   VARCHAR2(512);
    l_mesg_count NUMBER;
 
  BEGIN
 
    dbms_output.disable;
    dbms_output.enable(1000000);
    dbms_output.put_line('begin');
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.set_debug_flag(debug_flag => 'YES');
 
    -- Get standard who info
    l_request_id                           := fnd_global.conc_request_id;
    l_trans_rec.who_info.last_updated_by   := -1;
    l_trans_rec.who_info.last_update_login := -1;
    l_trans_rec.who_info.last_update_date  := SYSDATE;
    l_trans_rec.who_info.creation_date     := l_trans_rec.who_info.last_update_date;
    l_trans_rec.who_info.created_by        := l_trans_rec.who_info.last_updated_by;
 
    l_trans_rec.transaction_type_code    := NULL; -- this will be determined inside API
    l_trans_rec.transaction_date_entered := NULL;
 
    -- l_asset_hdr_rec.asset_id := l_asset_id;
    -- l_asset_hdr_rec.book_type_code := l_book_type_code;
    -- l_asset_hdr_rec.period_of_addition := NULL;
 
    l_asset_retire_rec.retirement_id := l_retirement_id;
 
    fnd_profile.put('USER_ID', l_user_id);
 
    fa_retirement_pub.undo_retirement(p_api_version      => l_api_version,
                                      p_init_msg_list    => l_init_msg_list,
                                      p_commit           => l_commit,
                                      p_validation_level => l_validation_level,
                                      p_calling_fn       => l_calling_fn,
                                      x_return_status    => l_return_status,
                                      x_msg_count        => l_msg_count,
                                      x_msg_data         => l_msg_data
                                      
                                     ,
                                      px_trans_rec        => l_trans_rec,
                                      px_asset_hdr_rec    => l_asset_hdr_rec,
                                      px_asset_retire_rec => l_asset_retire_rec);
 
    IF l_return_status = fnd_api.g_false THEN
      RAISE api_error;
    END IF;
 
    COMMIT;
 
    -- Dump Debug messages when run in debug mode to log file
    IF (fa_debug_pkg.print_debug) THEN
      fa_debug_pkg.write_debug_log;
    END IF;
 
    fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                            NAME       => 'FA_SHARED_END_SUCCESS',
                            token1     => 'PROGRAM',
                            value1     => 'RETIREMENT_API');
 
    l_mesg_count := fnd_msg_pub.count_msg;
 
    IF (l_mesg_count > 0) THEN
      l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
      dbms_output.put_line('dump: ' || l_temp_str);
    
      FOR i IN 1 .. (l_mesg_count - 1) LOOP
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      END LOOP;
    ELSE
      dbms_output.put_line('dump: NO MESSAGE !');
    END IF;
 
  EXCEPTION
    WHEN api_error THEN
      ROLLBACK WORK;
    
      fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                              NAME       => 'FA_SHARED_PROGRAM_FAILED',
                              token1     => 'PROGRAM',
                              value1     => l_calling_fn);
    
      l_mesg_count := fnd_msg_pub.count_msg;
      IF (l_mesg_count > 0) THEN
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      
        FOR i IN 1 .. (l_mesg_count - 1) LOOP
          l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
          dbms_output.put_line('dump: ' || l_temp_str);
        END LOOP;
      ELSE
        dbms_output.put_line('dump: NO MESSAGE !');
      END IF;
  END;

--八、报废资产重建
  PROCEDURE do_reinstatement IS
 
    api_error EXCEPTION;
    --/ Test asset info /
    l_retirement_id NUMBER := 2012;
    --l_asset_id number := 100837;
    --l_book_type_code varchar2(15) := 'ZBOOK1';
    l_user_id NUMBER := 1130; -- USER_ID must properly be set to run calc gain/loss
    --/ define local record types /
    l_trans_rec        fa_api_types.trans_rec_type;
    l_asset_hdr_rec    fa_api_types.asset_hdr_rec_type;
    l_asset_retire_rec fa_api_types.asset_retire_rec_type;
    l_asset_dist_tbl   fa_api_types.asset_dist_tbl_type;
    l_subcomp_tbl      fa_api_types.subcomp_tbl_type;
    l_inv_tbl          fa_api_types.inv_tbl_type;
 
    --/ misc info /
    l_api_version      NUMBER := 1;
    l_init_msg_list    VARCHAR2(1) := fnd_api.g_false;
    l_commit           VARCHAR2(1) := fnd_api.g_false;
    l_validation_level NUMBER := fnd_api.g_valid_level_full;
    l_calling_fn       VARCHAR2(80) := 'Retirement test wrapper';
    l_return_status    VARCHAR2(1) := fnd_api.g_false;
    l_msg_count        NUMBER := 0;
    l_msg_data         VARCHAR2(512);
 
    l_count      NUMBER;
    l_request_id NUMBER;
 
    i NUMBER := 0;
 
    l_temp_str   VARCHAR2(512);
    l_mesg_count NUMBER;
 
  BEGIN
 
    dbms_output.disable;
    dbms_output.enable(1000000);
    dbms_output.put_line('begin');
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.set_debug_flag(debug_flag => 'YES');
 
    -- Get standard who info
    l_request_id                           := fnd_global.conc_request_id;
    l_trans_rec.who_info.last_updated_by   := -1;
    l_trans_rec.who_info.last_update_login := -1;
 
    l_trans_rec.who_info.last_update_date := SYSDATE;
    l_trans_rec.who_info.creation_date    := l_trans_rec.who_info.last_update_date;
    l_trans_rec.who_info.created_by       := l_trans_rec.who_info.last_updated_by;
 
    l_trans_rec.transaction_type_code    := NULL; -- this will be determined inside API
    l_trans_rec.transaction_date_entered := NULL;
 
    --l_asset_hdr_rec.asset_id := l_asset_id;
    --l_asset_hdr_rec.book_type_code := l_book_type_code;
    --l_asset_hdr_rec.period_of_addition := NULL;
 
    --l_asset_retire_rec.date_retired := NULL; -- will be current period by default
    --l_asset_retire_rec.units_retired := NULL;
    l_asset_retire_rec.calculate_gain_loss := fnd_api.g_true; --特别注意,如果此处为TRUE,则资产只能进行重新报废,如果FALSE,则重建可以进行UNDO操作
    l_asset_retire_rec.retirement_id       := l_retirement_id;
 
    fnd_profile.put('USER_ID', l_user_id);
 
    l_asset_dist_tbl.delete;
 
    --l_asset_dist_tbl(1).distribution_id := 975;
    --l_asset_dist_tbl(1).transaction_units := -1;
    --l_asset_dist_tbl(1).units_assigned := null;
    --l_asset_dist_tbl(1).assigned_to := null;
    --l_asset_dist_tbl(1).expense_ccid := null;
    --l_asset_dist_tbl(1).location_ccid := null;
 
    fa_retirement_pub.do_reinstatement(p_api_version      => l_api_version,
                                       p_init_msg_list    => l_init_msg_list,
                                       p_commit           => l_commit,
                                       p_validation_level => l_validation_level,
                                       p_calling_fn       => l_calling_fn,
                                       x_return_status    => l_return_status,
                                       x_msg_count        => l_msg_count,
                                       x_msg_data         => l_msg_data
                                       
                                      ,
                                       px_trans_rec        => l_trans_rec,
                                       px_asset_hdr_rec    => l_asset_hdr_rec,
                                       px_asset_retire_rec => l_asset_retire_rec,
                                       p_asset_dist_tbl    => l_asset_dist_tbl,
                                       p_subcomp_tbl       => l_subcomp_tbl,
                                       p_inv_tbl           => l_inv_tbl);
 
    IF l_return_status = fnd_api.g_false THEN
      RAISE api_error;
    END IF;
 
    COMMIT;
 
    -- Dump Debug messages when run in debug mode to log file
    IF (fa_debug_pkg.print_debug) THEN
      fa_debug_pkg.write_debug_log;
    END IF;
 
    fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                            NAME       => 'FA_SHARED_END_SUCCESS',
                            token1     => 'PROGRAM',
                            value1     => 'RETIREMENT_API');
 
    l_mesg_count := fnd_msg_pub.count_msg;
 
    IF (l_mesg_count > 0) THEN
      l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
      dbms_output.put_line('dump: ' || l_temp_str);
    
      FOR i IN 1 .. (l_mesg_count - 1) LOOP
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      END LOOP;
    ELSE
      dbms_output.put_line('dump: NO MESSAGE !');
    END IF;
 
  EXCEPTION
    WHEN api_error THEN
      ROLLBACK WORK;
    
      fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                              NAME       => 'FA_SHARED_PROGRAM_FAILED',
                              token1     => 'PROGRAM',
                              value1     => l_calling_fn);
    
      l_mesg_count := fnd_msg_pub.count_msg;
      IF (l_mesg_count > 0) THEN
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      
        FOR i IN 1 .. (l_mesg_count - 1) LOOP
          l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
          dbms_output.put_line('dump: ' || l_temp_str);
        END LOOP;
      ELSE
        dbms_output.put_line('dump: NO MESSAGE !');
      END IF;
    
  END;

--九、撤消资产重建(限于未进行“计算损益”的重建资产)
  PROCEDURE undo_reinstatement IS
 
    api_error EXCEPTION;
    /* Test asset info */
    l_retirement_id NUMBER := 2011;
    --l_asset_id number := 100837;
    --l_book_type_code varchar2(15) := 'ZBOOK1';
    l_user_id NUMBER := 1001; -- USER_ID must properly be set to run calc gain/loss
    /* define local record types */
    l_trans_rec        fa_api_types.trans_rec_type;
    l_asset_hdr_rec    fa_api_types.asset_hdr_rec_type;
    l_asset_retire_rec fa_api_types.asset_retire_rec_type;
    l_asset_dist_tbl   fa_api_types.asset_dist_tbl_type;
    l_subcomp_tbl      fa_api_types.subcomp_tbl_type;
    l_inv_tbl          fa_api_types.inv_tbl_type;
    /* misc info */
    l_api_version      NUMBER := 1;
    l_init_msg_list    VARCHAR2(1) := fnd_api.g_false;
    l_commit           VARCHAR2(1) := fnd_api.g_true;
    l_validation_level NUMBER := fnd_api.g_valid_level_full;
    l_calling_fn       VARCHAR2(80) := 'Retirement test wrapper';
    l_return_status    VARCHAR2(1) := fnd_api.g_false;
    l_msg_count        NUMBER := 0;
    l_msg_data         VARCHAR2(512);
    l_count            NUMBER;
    l_request_id       NUMBER;
    i                  NUMBER := 0;
    l_temp_str         VARCHAR2(512);
    l_mesg_count       NUMBER;
 
  BEGIN
 
    dbms_output.disable;
    dbms_output.enable(1000000);
    dbms_output.put_line('begin');
    fa_srvr_msg.init_server_message;
    fa_debug_pkg.set_debug_flag(debug_flag => 'YES');
    -- Set rollback segment if profile option is set
    /*
    fnd_profile.get('FA_LARGE_ROLLBACK_SEGMENT', rbs_name);
    IF (rbs_name is not NULL) THEN
    sql_stmt := 'SET TRANSACTION USE ROLLBACK SEGMENT ' || rbs_name;
    execute immediate sql_stmt;
    END IF;
    */
    -- Get standard who info
    l_request_id                           := fnd_global.conc_request_id;
    l_trans_rec.who_info.last_updated_by   := -1;
    l_trans_rec.who_info.last_update_login := -1;
    l_trans_rec.who_info.last_update_date  := SYSDATE;
    l_trans_rec.who_info.creation_date     := l_trans_rec.who_info.last_update_date;
    l_trans_rec.who_info.created_by        := l_trans_rec.who_info.last_updated_by;
    l_trans_rec.transaction_type_code      := NULL; -- this will be determined inside API
    l_trans_rec.transaction_date_entered   := NULL;
    -- l_asset_hdr_rec.asset_id := l_asset_id;
    -- l_asset_hdr_rec.book_type_code := l_book_type_code;
    -- l_asset_hdr_rec.period_of_addition := NULL;
    l_asset_retire_rec.retirement_id := l_retirement_id;
    fnd_profile.put('USER_ID', l_user_id);
 
    fa_retirement_pub.undo_reinstatement(p_api_version       => l_api_version,
                                         p_init_msg_list     => l_init_msg_list,
                                         p_commit            => l_commit,
                                         p_validation_level  => l_validation_level,
                                         p_calling_fn        => l_calling_fn,
                                         x_return_status     => l_return_status,
                                         x_msg_count         => l_msg_count,
                                         x_msg_data          => l_msg_data,
                                         px_trans_rec        => l_trans_rec,
                                         px_asset_hdr_rec    => l_asset_hdr_rec,
                                         px_asset_retire_rec => l_asset_retire_rec);
    IF l_return_status = fnd_api.g_false THEN
      RAISE api_error;
    END IF;
    COMMIT;
    -- Dump Debug messages when run in debug mode to log file
    IF (fa_debug_pkg.print_debug) THEN
      fa_debug_pkg.write_debug_log;
    END IF;
    fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                            NAME       => 'FA_SHARED_END_SUCCESS',
                            token1     => 'PROGRAM',
                            value1     => 'RETIREMENT_API');
    l_mesg_count := fnd_msg_pub.count_msg;
    IF (l_mesg_count > 0) THEN
      l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
      dbms_output.put_line('dump: ' || l_temp_str);
      FOR i IN 1 .. (l_mesg_count - 1) LOOP
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
      END LOOP;
    ELSE
      dbms_output.put_line('dump: NO MESSAGE !');
    END IF;
  EXCEPTION
    WHEN api_error THEN
      ROLLBACK WORK;
      fa_srvr_msg.add_message(calling_fn => l_calling_fn,
                              NAME       => 'FA_SHARED_PROGRAM_FAILED',
                              token1     => 'PROGRAM',
                              value1     => l_calling_fn);
      l_mesg_count := fnd_msg_pub.count_msg;
      IF (l_mesg_count > 0) THEN
        l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false);
        dbms_output.put_line('dump: ' || l_temp_str);
        FOR i IN 1 .. (l_mesg_count - 1) LOOP
          l_temp_str := fnd_msg_pub.get(fnd_msg_pub.g_next, fnd_api.g_false);
          dbms_output.put_line('dump: ' || l_temp_str);
        END LOOP;
      ELSE
        dbms_output.put_line('dump: NO MESSAGE !');
      END IF;
  END;

--十、资产重分类
  PROCEDURE do_reclass IS
 
    l_trans_rec         fa_api_types.trans_rec_type;
    l_asset_hdr_rec     fa_api_types.asset_hdr_rec_type;
    l_asset_cat_rec_new fa_api_types.asset_cat_rec_type;
    l_recl_opt_rec      fa_api_types.reclass_options_rec_type;
 
    l_return_status VARCHAR2(1);
    l_mesg_count    NUMBER;
    l_mesg          VARCHAR2(512);
 
  BEGIN
 
    dbms_output.enable(1000000);
 
    fa_srvr_msg.init_server_message;
 
    l_asset_hdr_rec.asset_id          := 1;
    l_asset_cat_rec_new.category_id   := 1;
    l_recl_opt_rec.copy_cat_desc_flag := upper(substr('&copy_category_desc_YES_NO',
                                                      1,
                                                      3));
    l_recl_opt_rec.redefault_flag     := upper(substr('&redefault_deprn_rules_YES_NO',
                                                      1,
                                                      3));
 
    fa_reclass_pub.do_reclass(
                              -- std parameters
                              p_api_version      => 1.0,
                              p_init_msg_list    => fnd_api.g_false,
                              p_commit           => fnd_api.g_false,
                              p_validation_level => fnd_api.g_valid_level_full,
                              p_calling_fn       => NULL,
                              x_return_status    => l_return_status,
                              x_msg_count        => l_mesg_count,
                              x_msg_data         => l_mesg,
                              -- api parameters
                              px_trans_rec         => l_trans_rec,
                              px_asset_hdr_rec     => l_asset_hdr_rec,
                              px_asset_cat_rec_new => l_asset_cat_rec_new,
                              p_recl_opt_rec       => l_recl_opt_rec);
 
    --dump messages
    l_mesg_count := fnd_msg_pub.count_msg;
 
    IF l_mesg_count > 0 THEN
    
      l_mesg := chr(10) ||
                substr(fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_false),
                       1,
                       250);
      dbms_output.put_line(l_mesg);
    
      FOR i IN 1 .. (l_mesg_count - 1) LOOP
        l_mesg := substr(fnd_msg_pub.get(fnd_msg_pub.g_next,
                                         fnd_api.g_false),
                         1,
                         250);
      
        dbms_output.put_line(l_mesg);
      END LOOP;
    
      fnd_msg_pub.delete_msg();
    
    END IF;
 
    IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
      dbms_output.put_line('FAILURE');
    ELSE
      dbms_output.put_line('SUCCESS');
      dbms_output.put_line('THID' ||
                           to_char(l_trans_rec.transaction_header_id));
    END IF;
 
  END;

END cux_fa_do_pkg;

FA模块的10个API范例的更多相关文章

  1. 10分钟API Hook MessageBox

    10分钟API Hook MessageBox 分类: C++2012-04-12 22:52 877人阅读 评论(4) 收藏 举报 hookwinapidllthreadpython编程 转载注明出 ...

  2. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...

  3. Python之paramiko模块和SQL连接API

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: i ...

  4. nodejs模块fs——文件操作api

    // fs模块常用api // 读取文件 .写入文件 .追加文件. 拷贝文件 .删除文件 // 读取文件 // fs.readFile(path[, options], callback) // fs ...

  5. Web应用程序系统的多用户权限控制设计及实现-权限模块【10】

    前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的权限配置模块.页面模块涉及到的数据表为权限表.权限配置模块是按照用户组和页面,栏目结合组成的.通过配置一个用 ...

  6. [Laravel] 10 - WEB API : wrapper

    前言 一.常用的解决方案 React 前端 + PHP (Laravel) 后端 Such as "some exposure to WEB API’s and/or RESTful“. 使 ...

  7. ios网络学习------10 原生API文件上传

    使用原生态的api上传文件的实现: #import "MainViewController.h" @interface MainViewController () @propert ...

  8. 编写 Node.js Rest API 的 10 个最佳实践

    Node.js 除了用来编写 WEB 应用之外,还可以用来编写 API 服务,我们在本文中会介绍编写 Node.js Rest API 的最佳实践,包括如何命名路由.进行认证和测试等话题,内容摘要如下 ...

  9. jQuery1.11源码分析(10)-----Callbacks模块

    Callbacks模块实质上就是一个回调函数队列(当然吹得很牛逼..比如“提供了一种强大的方法来管理回调函数队列”),之所以介绍它是因为后面的Derferred模块基于它. Callbacks生成时接 ...

随机推荐

  1. HDOJ 1051. Wooden Sticks 贪心 结构体排序

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  2. OpenStack 企业私有云的若干需求(4):混合云支持 (Hybrid Cloud Support)

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

  3. Intellij IDEA调试功能使用总结

    Intellij IDEA调试功能使用总结 这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的 ...

  4. LAMP和LNMP

    编译安装和yum安装 centos 7 可以使用10年 ubuntu可以使用5年 VirtualBox也是一个虚拟机 下载centos 安装centos exit   退出登陆 ping www.ba ...

  5. sql

    http://www.cnblogs.com/ASPNET2008/archive/2012/06/30/2570737.html

  6. [LeetCode] Ones and Zeroes 一和零

    In the computer world, use restricted resource you have to generate maximum benefit is what we alway ...

  7. go 常用包

    标准的 Go 代码库中包含了大量的包,并且在安装 Go 的时候多数会伴随一起安 装.浏览 $GOROOT/src/pkg 目录并且查看那些包会非常有启发. fmt:包 fmt 实现了格式化的 I/O ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. 如何从Exchange邮箱数据库批量删除特定邮件

  10. 好用的wget命令从下载添加环境变量到各参数详解

    本文是因为(笔者使用的windows系统)使用过好几次wget后,始终存在各种细节问题,于是下定决定细致的研究一下,并记录下其中细节. 下载与安装 第一步:下载wget,网络地址:http://dow ...