BOM API

Embed Size (px)

DESCRIPTION

BOM API

Citation preview

Set serveroutput onDeclarev_FileHandle UTL_FILE.FILE_TYPE;v_NewLine varchar2(100); -- Input linev_FirstComma number;v_SecondComma number;v_ThirdComma number;v_EntityType varchar2(30);v_ItemName varchar2(30);v_AssemblyName varchar2(30);v_OrganizationCode varchar2(30);v_NumberOfComps number;v_QtyPerAssy number;l_bom_header_rec Bom_Bo_Pub.Bom_Head_Rec_Type := Bom_Bo_Pub.G_MISS_BOM_HEADER_REC;l_bom_revision_tbl Bom_Bo_Pub.Bom_Revision_Tbl_Type := Bom_Bo_Pub.G_MISS_BOM_REVISION_TBL;l_bom_component_tbl Bom_Bo_Pub.Bom_Comps_Tbl_Type := Bom_Bo_Pub.G_MISS_BOM_COMPONENT_TBL;l_bom_ref_designator_tbl Bom_Bo_Pub.Bom_Ref_Designator_Tbl_type := Bom_Bo_Pub.G_MISS_BOM_REF_DESIGNATOR_TBL;l_bom_sub_component_tbl Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type := Bom_Bo_Pub.G_MISS_BOM_SUB_COMPONENT_TBL;l_error_message_list Error_handler.error_tbl_type;l_x_bom_header_rec Bom_Bo_Pub.bom_Head_Rec_Type;l_x_bom_revision_tbl Bom_Bo_Pub.Bom_Revision_Tbl_Type;l_x_bom_component_tbl Bom_Bo_pub.Bom_Comps_Tbl_Type;l_x_bom_ref_designator_tbl Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type;l_x_bom_sub_component_tbl Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type;l_x_return_status VARCHAR2(2000);l_x_msg_count NUMBER;i NUMBER;Begin-- Open the specified file for reading.-- UTL_FILE.FOPEN has three parameters-- Location - In this case this should be the same the environment variable $APPLPTMP-- Filename - Any valid filename-- Open mode - We are opening the file in read mode.v_FileHandle := UTL_FILE.FOPEN('/sqlcom/out','bomlist.txt','r');-- Need to initialize for calling BOM API-- Each database table that the program writes to requires system information, such as who is-- trying to update the current record. User must provide this information to the import program-- initializing certain variables. To initialize the varables the user must call the following-- procedure.FND_GLOBAL.apps_initialize (1001255, 50326, 700, 0);-- Loop over the file, reading in each line. GET_LINE will raise-- NO_DATA_FOUND when it is done, so we use that as the exit condition-- for the looploopbeginUTL_FILE.GET_LINE(v_FileHandle,v_NewLine);EXCEPTIONWHEN NO_DATA_FOUND THENEXIT;end;-- Each field in the input the record is delimited by commas. We need-- to find the location of the three commas (in this case) in the line,-- and use these locations to get the fields from the v_Newline.-- Use INSTR to find the locations of the commas.v_FirstComma := INSTR(v_NewLine,',',1,1);v_SecondComma := INSTR(v_NewLine,',',1,2);v_ThirdComma := INSTR(v_NewLine,',',1,3);v_EntityType := SUBSTR(v_NewLine,1,(v_FirstComma - 1));v_ItemName := SUBSTR(v_NewLine, (v_FirstComma + 1), (v_SecondComma - v_FirstComma - 1));v_OrganizationCode := SUBSTR(v_NewLine, (v_SecondComma + 1), (v_ThirdComma - v_SecondComma - 1));v_NumberOfComps := TO_NUMBER(SUBSTR(v_NewLine, (v_ThirdComma + 1)));-- Set the Values for the Bill.if v_EntityType = 'BO' THENv_AssemblyName := v_ItemName;l_bom_header_rec.Assembly_item_name := v_ItemName;l_bom_header_rec.Organization_code := v_OrganizationCode;l_bom_header_rec.Assembly_type := 1;l_bom_header_rec.Transaction_Type := 'CREATE';l_Bom_Header_Rec.Return_Status := NULL;-- Loop over the file, reading the in each line. We loop v_NumberOfComps times.-- v_NumberOfComps has the values for number of components for the bill.for i in 1..v_NumberOfComps loopbeginUTL_FILE.GET_LINE(v_FileHandle,v_NewLine);EXCEPTIONWHEN NO_DATA_FOUND THENEXIT;end;v_FirstComma := INSTR(v_NewLine,',',1,1);v_SecondComma := INSTR(v_NewLine,',',1,2);v_ThirdComma := INSTR(v_NewLine,',',1,3);v_EntityType := SUBSTR(v_NewLine,1,(v_FirstComma - 1));v_ItemName := SUBSTR(v_NewLine, (v_FirstComma + 1), (v_SecondComma - v_FirstComma - 1));v_OrganizationCode := SUBSTR(v_NewLine, (v_SecondComma + 1), (v_ThirdComma - v_SecondComma - 1));v_QtyPerAssy := TO_NUMBER(SUBSTR(v_NewLine, (v_ThirdComma + 1)));-- Set the Values for the Components.l_bom_component_tbl(i).Organization_CODE := v_OrganizationCode;l_bom_component_tbl(i).Assembly_Item_name := v_AssemblyName;l_bom_component_tbl(i).Start_effective_date := sysdate;l_bom_component_tbl(i).Component_Item_Name := v_ItemName;l_bom_component_tbl(i).Alternate_bom_code := NULL;l_bom_component_tbl(i).projected_yield := NULL;l_bom_component_tbl(i).planning_percent := NULL;l_bom_component_tbl(i).quantity_related := NULL;l_bom_component_tbl(i).check_atp := NULL;l_bom_component_tbl(i).Include_In_Cost_Rollup := NULL;l_bom_component_tbl(i).Wip_Supply_Type := NULL;l_bom_component_tbl(i).So_Basis := NULL;l_bom_component_tbl(i).Optional := NULL;l_bom_component_tbl(i).Mutually_Exclusive := NULL;l_bom_component_tbl(i).Shipping_Allowed := NULL;l_bom_component_tbl(i).Required_To_Ship := NULL;l_bom_component_tbl(i).Required_For_Revenue := NULL;l_bom_component_tbl(i).Include_On_Ship_Docs := NULL;l_bom_component_tbl(i).Supply_Subinventory := NULL;l_bom_component_tbl(i).Location_Name := NULL;l_bom_component_tbl(i).Minimum_Allowed_Quantity := NULL;l_bom_component_tbl(i).Maximum_Allowed_Quantity := NULL;l_bom_component_tbl(i).Comments := NULL;l_bom_component_tbl(i).from_end_item_unit_number := NULL;l_bom_component_tbl(i).to_end_item_unit_number := NULL;l_bom_component_tbl(i).Item_Sequence_Number := (i*10);l_bom_component_tbl(i).operation_Sequence_Number := 1;l_bom_component_tbl(i).Transaction_Type := 'CREATE';l_bom_component_tbl(i).Quantity_Per_Assembly := v_QtyPerAssy;l_bom_component_tbl(i).return_status := NULL;end loop;Error_Handler.Initialize;-- Call the Public API-- The public API is the user's interface to the import program. The user must call it-- programatically, while sending in one business object at a time. The public API returns-- the processed business object, the business object status, and a count of all-- associated error and warning messages.bom_bo_pub.Process_Bom( p_bo_identifier => 'BOM', p_api_version_number => 1.0 -- This parameter is required. It is used by the-- API to compare the version number of incoming-- calls to its current version number., p_init_msg_list => TRUE -- This parameter is set to TRUE, allows callers to-- to request that the API do the initialization-- of message list on their behalf., p_bom_header_rec => l_bom_header_rec -- This is a set of data structures that represent-- the incoming business objects. This is a record-- that holds the Bill of Materials header for the-- BOM, p_bom_revision_tbl => l_bom_revision_tbl -- All the p*_tbl parameters are data structure-- that represent incoming business objects They-- are PL/SQL tables of records that hold records-- for each of the other entities., p_bom_component_tbl => l_bom_component_tbl, p_bom_ref_designator_tbl => l_bom_ref_designator_tbl, p_bom_sub_component_tbl => l_bom_sub_component_tbl, x_bom_header_rec => l_x_bom_header_rec -- All the x*_tbl parameters are data structure-- that represent outgoing business objects They-- are PL/SQL tables of records that hold records-- for each of the other entities except now they-- have all the changes that the import program-- made to it through all the steps., x_bom_revision_tbl => l_x_bom_revision_tbl, x_bom_component_tbl => l_x_bom_component_tbl, x_bom_ref_designator_tbl => l_x_bom_ref_designator_tbl, x_bom_sub_component_tbl => l_x_bom_sub_component_tbl, x_return_status => l_x_return_status -- This is a flag that indicates the state of the-- whole business object after the import.-- 'S' - Success-- 'E' - Error-- 'F' - Fatal Error-- 'U' - Unexpected Error, x_msg_count => l_x_msg_count -- This holds the number of messages in the API-- message stack after the import., p_debug => 'N', p_output_dir => '', p_debug_filename => '');dbms_output.put_line('Return Status = '||l_x_return_status);dbms_output.put_line('Message Count = '||l_x_msg_count);/**** Error messages ****/Error_Handler.Get_message_list(l_error_message_list);if l_x_return_status 'S'then-- Error Processingfor i in 1..l_x_msg_count loopdbms_output.put_line(TO_CHAR(i)||' MESSAGE TEXT '||SUBSTR(l_error_message_list(i).message_text,1,250));dbms_output.put_line(TO_CHAR(i)||' MESSAGE TYPE '||l_error_message_list(i).message_type);end loop;-- The business object APIs do not issue commits or rollbacks. It is the responsibility of-- the calling code to issue them. This ensures that parts of the transactions are not left-- in the database. If an error occurs, the whole transaction is rolled back.rollback;elsecommit;end if;end if;end loop;UTL_FILE.FCLOSE(v_FileHandle);-- Handle the UTL_FILE exceptions meaningfully, and make sure that the file is-- properly closed.EXCEPTIONWHEN UTL_FILE.INVALID_PATH THENRAISE_APPLICATION_ERROR(-20100,' File Error : Invalid Path ');WHEN UTL_FILE.INVALID_MODE THENRAISE_APPLICATION_ERROR(-20101,' File Error : Invalid Mode ');WHEN UTL_FILE.INVALID_OPERATION THENRAISE_APPLICATION_ERROR(-20101,' File Error : Invalid Operation');WHEN UTL_FILE.INVALID_FILEHANDLE THENUTL_FILE.FCLOSE(v_FileHandle);RAISE_APPLICATION_ERROR(-20152,' File Error : Invalid File Handle ');WHEN UTL_FILE.READ_ERROR THENUTL_FILE.FCLOSE(v_FileHandle);RAISE_APPLICATION_ERROR(-20053,' File Error : Read Error ');WHEN OTHERS THENUTL_FILE.FCLOSE(v_FileHandle);RAISE;end;