Wednesday, January 22, 2014

Script to Calculate the Price details of the Product Line in the Service Contract (oks_qp_pkg.calc_price)

DECLARE
   l_input_details                                   oks_qp_pkg.input_details;
   l_output_details                                  oks_qp_pkg.price_details;
   l_modif_details                                   qp_preq_grp.line_detail_tbl_type;
   l_pb_details                                      oks_qp_pkg.g_price_break_tbl_type;
   l_return_status                                   VARCHAR2(20);
   l_msg_count                                       NUMBER;
   l_msg_data                                        VARCHAR2(2000);
   l_status_tbl                                      oks_qp_int_pvt.pricing_status_tbl;
   l_final_status_tbl                                oks_qp_int_pvt.pricing_status_tbl;
   l_count                                           NUMBER;
   l_msg_index_out                                   NUMBER;
   l_num                                             NUMBER;
   l_error_message                                   VARCHAR2(2000);
BEGIN
   l_num                                          := 10;
   l_input_details.intent                         := 'SP';  --> Subline
   l_input_details.chr_id                         := 1549063; -->Contract Id
   l_input_details.currency                       := 'USD';
   l_input_details.line_id                        := 364326736554344799961890872824534166768;--> Service Line id
   l_input_details.subline_id                     := 364326736554364142775004706891329465584;   --> Product Line id
   l_num                                          := 20;
   oks_qp_pkg.calc_price(p_detail_rec                  => l_input_details
                       , x_price_details               => l_output_details
                       , x_modifier_details            => l_modif_details
                       , x_price_break_details         => l_pb_details
                       , x_return_status               => l_return_status
                       , x_msg_count                   => l_msg_count
                       , x_msg_data                    => l_msg_data
                        );
   l_num                                          := 30;

   IF l_return_status <> fnd_api.g_ret_sts_success
   THEN
      l_num                                          := 40;

      IF l_msg_count > 0
      THEN
         FOR i IN 1 .. l_msg_count
         LOOP
            l_num                                          := 50;
            apps.fnd_msg_pub.get(p_msg_index                   => i, p_encoded => fnd_api.g_false, p_data => l_msg_data
                               , p_msg_index_out               => l_msg_index_out);

            IF l_error_message IS NULL
            THEN
               l_error_message                                := SUBSTR(l_msg_data, 1, 250);
            ELSE
               l_error_message                                := l_error_message || ' /' || SUBSTR(l_msg_data, 1, 250);
            END IF;
         END LOOP;

         DBMS_OUTPUT.put_line('*****************************************');
         DBMS_OUTPUT.put_line('API Error : ' || l_error_message);
         DBMS_OUTPUT.put_line('*****************************************');
      ELSE
         apps.fnd_msg_pub.get(p_msg_index                   => 1, p_encoded => fnd_api.g_false, p_data => l_msg_data
                            , p_msg_index_out               => l_msg_index_out);
         DBMS_OUTPUT.put_line('*****************************************');
         DBMS_OUTPUT.put_line('API Error : ' || l_msg_data);
         DBMS_OUTPUT.put_line('*****************************************');
      END IF;
   ELSE
      l_num                                          := 60;
      DBMS_OUTPUT.put_line('API Success');
      DBMS_OUTPUT.put_line('******************************************************************************************************');
      DBMS_OUTPUT.put_line('Product Quantity : ' || l_output_details.prod_qty);
      DBMS_OUTPUT.put_line('Product Quantity UOM : ' || l_output_details.prod_qty_uom);
      DBMS_OUTPUT.put_line('Service Quantity : ' || l_output_details.serv_qty);
      DBMS_OUTPUT.put_line('Service Quantity UOM : ' || l_output_details.serv_qty_uom);
      DBMS_OUTPUT.put_line('Product Price List Id : ' || l_output_details.prod_price_list_id);
      DBMS_OUTPUT.put_line('Service Price List Id : ' || l_output_details.serv_price_list_id);
      DBMS_OUTPUT.put_line('Product Price List Line Id : ' || l_output_details.prod_price_list_line_id);
      DBMS_OUTPUT.put_line('Service Price List Line Id : ' || l_output_details.serv_price_list_line_id);
      DBMS_OUTPUT.put_line('Product List Unit Price : ' || l_output_details.prod_list_unit_price);
      DBMS_OUTPUT.put_line('Service List Unit Price : ' || l_output_details.serv_list_unit_price);
      DBMS_OUTPUT.put_line('Product Adjustment Unit Price : ' || l_output_details.prod_adj_unit_price);
      DBMS_OUTPUT.put_line('Service Adjustment Unit Price : ' || l_output_details.serv_adj_unit_price);
      DBMS_OUTPUT.put_line('Product Priced Quantity : ' || l_output_details.prod_priced_qty);
      DBMS_OUTPUT.put_line('Product Priced UOM : ' || l_output_details.prod_priced_uom);
      DBMS_OUTPUT.put_line('Product Extension Amount : ' || l_output_details.prod_ext_amount);
      DBMS_OUTPUT.put_line('Service Priced Quantity : ' || l_output_details.serv_priced_qty);
      DBMS_OUTPUT.put_line('Service Priced UOM : ' || l_output_details.serv_priced_uom);
      DBMS_OUTPUT.put_line('Service Extended Amount : ' || l_output_details.serv_ext_amount);
      DBMS_OUTPUT.put_line('Service OPerand : ' || l_output_details.serv_operand);
      DBMS_OUTPUT.put_line('Service Operator : ' || l_output_details.serv_operator);
      DBMS_OUTPUT.put_line('Status Code : ' || l_output_details.status_code);
      DBMS_OUTPUT.put_line('Status Text : ' || l_output_details.status_text);
      DBMS_OUTPUT.put_line('******************************************************************************************************');
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line(l_num || ' Unexpected Error : ' || SUBSTR(SQLERRM, 1, 250));
END;

Output For the Above Script
============================

API Success
******************************************************************************************************
Product Quantity : 1
Product Quantity UOM : Ea
Service Quantity : 1
Service Quantity UOM : QTR
Product Price List Id : 6007
Service Price List Id : 6007
Product Price List Line Id : 153122
Service Price List Line Id : 153138
Product List Unit Price : 0
Service List Unit Price : 6300
Product Adjustment Unit Price : 0
Service Adjustment Unit Price : 5500.53
Product Priced Quantity : 1
Product Priced UOM : Ea
Product Extension Amount : 0
Service Priced Quantity : .4931506849
Service Priced UOM : YR
Service Extended Amount : 2712.590136812997
Service OPerand : 6300
Service Operator : UNIT_PRICE
Status Code : OKS_S
Status Text :
******************************************************************************************************

 

Wednesday, January 15, 2014

TCA Api to Update the Party Information (HZ_PARTY_V2PUB.UPDATE_ORGANIZATION)

DECLARE
   l_init_msg_list                                   VARCHAR2(200);
   l_organization_rec                                apps.hz_party_v2pub.organization_rec_type;
   l_party_rec                                       apps.hz_party_v2pub.party_rec_type;
   l_party_object_version_number                     NUMBER;
   x_profile_id                                      NUMBER;
   l_error_message                                   VARCHAR2(2000);
   l_msg_index_out                                   NUMBER;
   x_return_status                                   VARCHAR2(200);
   x_msg_count                                       NUMBER;
   x_msg_data                                        VARCHAR2(200);
BEGIN
   l_init_msg_list                                := 1.0;
   l_party_rec.party_id                           := 4302;
   l_party_rec.attribute4                         := 'Valid';
   l_organization_rec.party_rec                   := l_party_rec;
   x_profile_id                                   := NULL;
   x_return_status                                := NULL;
   x_msg_count                                    := NULL;
   x_msg_data                                     := NULL;
   SELECT object_version_number
     INTO l_party_object_version_number
     FROM hz_parties
    WHERE party_id = l_party_rec.party_id
      AND status = 'A';
   apps.hz_party_v2pub.update_organization(p_init_msg_list               => apps.fnd_api.g_true
                                         , p_organization_rec            => l_organization_rec
                                         , p_party_object_version_number => l_party_object_version_number
                                         , x_profile_id                  => x_profile_id
                                         , x_return_status               => x_return_status
                                         , x_msg_count                   => x_msg_count
                                         , x_msg_data                    => x_msg_data
                                          );

   IF x_return_status <> fnd_api.g_ret_sts_success
   THEN
      FOR i IN 1 .. x_msg_count
      LOOP
         apps.fnd_msg_pub.get(p_msg_index                   => i, p_encoded => fnd_api.g_false, p_data => x_msg_data
                            , p_msg_index_out               => l_msg_index_out);

         IF l_error_message IS NULL
         THEN
            l_error_message                                := SUBSTR(x_msg_data, 1, 250);
         ELSE
            l_error_message                                := l_error_message || ' /' || SUBSTR(x_msg_data, 1, 250);
         END IF;
      END LOOP;

      DBMS_OUTPUT.put_line('*****************************************');
      DBMS_OUTPUT.put_line('API Error : ' || l_error_message);
      DBMS_OUTPUT.put_line('*****************************************');
      ROLLBACK;
   ELSE
      DBMS_OUTPUT.put_line('*****************************************');
      DBMS_OUTPUT.put_line('Attribute4 for Party : ' || l_party_rec.party_id || ' Updated Successfully ');
      DBMS_OUTPUT.put_line('*****************************************');
      COMMIT;
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line('Unexpected Error ' || SUBSTR(SQLERRM, 1, 250));
END;

Thursday, January 9, 2014

PLSQL Script to load the data from Flat file into Oracle Table dynamically

1. create below log table to capture the error records details .

CREATE TABLE XX_BAD_DATA_LOG_TBL
(
  FILE_NAME                      VARCHAR2(250 BYTE),
  CREATION_DATE            DATE,
  CREATED_BY                   NUMBER,
  ERROR_MESSAGE           VARCHAR2(2000 BYTE),
  FILE_DATA                        VARCHAR2(2000 BYTE)
);

2. Create the following function.

CREATE OR REPLACE FUNCTION apps.xx_upload_data_to_tbl (
   p_table                              IN   VARCHAR2
 , p_dir                                IN   VARCHAR2
 , p_filename                           IN   VARCHAR2
 , p_delimiter                          IN   VARCHAR2 DEFAULT ','
)
   RETURN NUMBER
IS
   l_utl_file                                   UTL_FILE.file_type;
   l_cursor                                     INTEGER DEFAULT DBMS_SQL.open_cursor;
   l_buffer                                     VARCHAR2 (4000);
   l_data                                   VARCHAR2 (4000);
   l_status                                     INTEGER;
   l_column_cnt                                 NUMBER DEFAULT 0;
   l_count                                      NUMBER DEFAULT 0;
   l_sep                                        CHAR (1) DEFAULT NULL;
   l_error_message                              VARCHAR2 (4000);
   l_column_names                               VARCHAR2 (4000);
   l_num                                        NUMBER;
BEGIN
   l_num                                := 10;
   l_utl_file                           := UTL_FILE.fopen (p_dir
                                                         , p_filename
                                                         , 'r'
                                                          );
   l_num                                := 20;
   l_buffer                             := 'INSERT INTO ' || p_table || ' VALUES ( ';
   l_num                                := 30;

   FOR z IN (SELECT column_name
               FROM dba_tab_columns
              WHERE table_name = p_table)
   LOOP
      IF l_column_names IS NULL
      THEN
         l_column_names                       := z.column_name;
      ELSE
         l_column_names                       := l_column_names || ',' || z.column_name;
      END IF;
   END LOOP;

   l_num                                := 40;
   DBMS_OUTPUT.put_line (l_num || ' ' || l_column_names);

   BEGIN
      l_column_cnt                         := LENGTH (l_column_names) - LENGTH (REPLACE (l_column_names
                                                                                       , ','
                                                                                       , ''
                                                                                        )) + 1;
      l_num                                := 45;
   EXCEPTION
      WHEN OTHERS
      THEN
         DBMS_OUTPUT.put_line (l_num || ' Error ' || SQLERRM);
   END;

   DBMS_OUTPUT.put_line (l_column_cnt);
   l_num                                := 50;

   FOR i IN 1 .. l_column_cnt
   LOOP
      l_buffer                             := l_buffer || l_sep || ':b' || i;
      l_sep                                := ',';
   END LOOP;

   l_num                                := 60;
   l_buffer                             := l_buffer || ')';
   l_num                                := 70;
   DBMS_SQL.parse (l_cursor
                 , l_buffer
                 , DBMS_SQL.native
                  );
   l_num                                := 80;

   LOOP
      BEGIN
         UTL_FILE.get_line (l_utl_file, l_data);
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            EXIT;
      END;

      l_num                                := 90;
      l_buffer                             := l_data || p_delimiter;
      l_num                                := 100;

      FOR i IN 1 .. l_column_cnt
      LOOP
         DBMS_SQL.bind_variable (l_cursor
                               , ':b' || i
                               , SUBSTR (l_buffer
                                       , 1
                                       , INSTR (l_buffer, p_delimiter) - 1
                                        )
                                );
         l_buffer                             := SUBSTR (l_buffer, INSTR (l_buffer, p_delimiter) + 1);
         l_num                                := 110;
      END LOOP;

      BEGIN
         l_status                             := DBMS_SQL.EXECUTE (l_cursor);
         l_count                              := l_count + 1;
         l_num                                := 120;
      EXCEPTION
         WHEN OTHERS
         THEN
            l_error_message                      := SQLERRM;

            INSERT INTO xx_bad_data_log_tbl
                 VALUES (p_filename
                       , SYSDATE
                       , fnd_global.user_id
                       , l_error_message
                       , l_data
                        );
      END;
   END LOOP;

   DBMS_SQL.close_cursor (l_cursor);
   UTL_FILE.fclose (l_utl_file);
   l_num                                := 130;
   COMMIT;
   DBMS_OUTPUT.put_line (l_num || ' ' || l_count);
   RETURN l_count;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (l_num || ' Unexpected Error ' || SUBSTR(SQLERRM,1,250));
      RETURN 0;
END xx_upload_data_to_tbl;
/

Thursday, December 19, 2013

API Script to Update Extensible Attributes for a instance in Install Base

DECLARE
   x_instance_rec                                    csi_datastructures_pub.instance_rec;
   p_ext_attrib_values                               csi_datastructures_pub.extend_attrib_values_tbl;
   p_party_tbl                                       csi_datastructures_pub.party_tbl;
   p_account_tbl                                     csi_datastructures_pub.party_account_tbl;
   p_pricing_attrib_tbl                              csi_datastructures_pub.pricing_attribs_tbl;
   p_org_assignments_tbl                             csi_datastructures_pub.organization_units_tbl;
   p_asset_assignment_tbl                            csi_datastructures_pub.instance_asset_tbl;
   p_txn_rec                                         csi_datastructures_pub.transaction_rec;
   x_instance_id_lst                                 csi_datastructures_pub.id_tbl;
   x_return_status                                   VARCHAR2(2000);
   x_msg_count                                       NUMBER;
   x_msg_data                                        VARCHAR2(2000);
   x_msg_index_out                                   NUMBER;
   t_output                                          VARCHAR2(2000);
   t_msg_dummy                                       NUMBER;
   p_validation_level                                NUMBER;
   p_commit                                          VARCHAR2(5);
   p_init_msg_lst                                    VARCHAR2(500);
BEGIN
   x_instance_rec.instance_id                     := 4004190;
   x_instance_rec.object_version_number           := 7;
   p_txn_rec.transaction_id                       := fnd_api.g_miss_num;
   p_txn_rec.transaction_date                     := SYSDATE;
   p_txn_rec.source_transaction_date              := SYSDATE;
   p_txn_rec.transaction_type_id                  := 1;
   p_ext_attrib_values(1).attribute_value         := 'TEST_1';
   p_ext_attrib_values(1).attribute_value_id      := 1747998;
   p_ext_attrib_values(1).instance_id             := 4004190;
   p_ext_attrib_values(1).object_version_number   := 2;
   csi_item_instance_pub.update_item_instance(p_api_version                 => 1.0
                                            , p_commit                      => p_commit
                                            , p_init_msg_list               => p_init_msg_lst
                                            , p_validation_level            => 1
                                            , p_instance_rec                => x_instance_rec
                                            , p_ext_attrib_values_tbl       => p_ext_attrib_values
                                            , p_party_tbl                   => p_party_tbl
                                            , p_account_tbl                 => p_account_tbl
                                            , p_pricing_attrib_tbl          => p_pricing_attrib_tbl
                                            , p_org_assignments_tbl         => p_org_assignments_tbl
                                            , p_asset_assignment_tbl        => p_asset_assignment_tbl
                                            , p_txn_rec                     => p_txn_rec
                                            , x_instance_id_lst             => x_instance_id_lst
                                            , x_return_status               => x_return_status
                                            , x_msg_count                   => x_msg_count
                                            , x_msg_data                    => x_msg_data
                                             );
   COMMIT;

-- Output the results
   IF x_msg_count > 0
   THEN
      FOR j IN 1 .. x_msg_count
      LOOP
         fnd_msg_pub.get(j
                       , fnd_api.g_false
                       , x_msg_data
                       , t_msg_dummy
                        );
         t_output                                       :=('Msg' || TO_CHAR(j) || ': ' || x_msg_data);
         DBMS_OUTPUT.put_line(SUBSTR(t_output
                                   , 1
                                   , 255
                                    ));
      END LOOP;
   END IF;

   DBMS_OUTPUT.put_line('x_return_status = ' || x_return_status);
   DBMS_OUTPUT.put_line('x_msg_count = ' || TO_CHAR(x_msg_count));
   DBMS_OUTPUT.put_line('x_msg_data = ' || x_msg_data);
   COMMIT;
END;

API Script to Create Extensible Attributes for a instance in Install Base

DECLARE
   x_instance_rec                                    csi_datastructures_pub.instance_rec;
   p_ext_attrib_values                               csi_datastructures_pub.extend_attrib_values_tbl;
   p_party_tbl                                       csi_datastructures_pub.party_tbl;
   p_account_tbl                                     csi_datastructures_pub.party_account_tbl;
   p_pricing_attrib_tbl                              csi_datastructures_pub.pricing_attribs_tbl;
   p_org_assignments_tbl                             csi_datastructures_pub.organization_units_tbl;
   p_asset_assignment_tbl                            csi_datastructures_pub.instance_asset_tbl;
   p_txn_rec                                         csi_datastructures_pub.transaction_rec;
   x_instance_id_lst                                 csi_datastructures_pub.id_tbl;
   x_return_status                                   VARCHAR2(2000);
   x_msg_count                                       NUMBER;
   x_msg_data                                        VARCHAR2(2000);
   x_msg_index_out                                   NUMBER;
   t_output                                          VARCHAR2(2000);
   t_msg_dummy                                       NUMBER;
   p_validation_level                                NUMBER;
   p_commit                                          VARCHAR2(5);
   p_init_msg_lst                                    VARCHAR2(500);
BEGIN
   x_instance_rec.instance_id                     := 4004190;
   x_instance_rec.object_version_number           := 7;
   p_txn_rec.transaction_id                       := fnd_api.g_miss_num;
   p_txn_rec.transaction_date                     := SYSDATE;
   p_txn_rec.source_transaction_date              := SYSDATE;
   p_txn_rec.transaction_type_id                  := 1;
   p_ext_attrib_values(1).instance_id             := 4004190;
   p_ext_attrib_values(1).attribute_id            := 31000;
   p_ext_attrib_values(1).attribute_value         := 'TEST_5';
   csi_item_instance_pub.update_item_instance(p_api_version                 => 1.0
                                            , p_commit                      => p_commit
                                            , p_init_msg_list               => p_init_msg_lst
                                            , p_validation_level            => 1
                                            , p_instance_rec                => x_instance_rec
                                            , p_ext_attrib_values_tbl       => p_ext_attrib_values
                                            , p_party_tbl                   => p_party_tbl
                                            , p_account_tbl                 => p_account_tbl
                                            , p_pricing_attrib_tbl          => p_pricing_attrib_tbl
                                            , p_org_assignments_tbl         => p_org_assignments_tbl
                                            , p_asset_assignment_tbl        => p_asset_assignment_tbl
                                            , p_txn_rec                     => p_txn_rec
                                            , x_instance_id_lst             => x_instance_id_lst
                                            , x_return_status               => x_return_status
                                            , x_msg_count                   => x_msg_count
                                            , x_msg_data                    => x_msg_data
                                             );
   COMMIT;

-- Output the results
   IF x_msg_count > 0
   THEN
      FOR j IN 1 .. x_msg_count
      LOOP
         fnd_msg_pub.get(j
                       , fnd_api.g_false
                       , x_msg_data
                       , t_msg_dummy
                        );
         t_output                                       :=('Msg' || TO_CHAR(j) || ': ' || x_msg_data);
         DBMS_OUTPUT.put_line(SUBSTR(t_output
                                   , 1
                                   , 255
                                    ));
      END LOOP;
   END IF;

   DBMS_OUTPUT.put_line('x_return_status = ' || x_return_status);
   DBMS_OUTPUT.put_line('x_msg_count = ' || TO_CHAR(x_msg_count));
   DBMS_OUTPUT.put_line('x_msg_data = ' || x_msg_data);
   COMMIT;
END;