DBA Data[Home] [Help]

PACKAGE BODY: APPS.EGO_ITEM_ORG_BULKLOAD_PVT

Source


1 PACKAGE BODY EGO_ITEM_ORG_BULKLOAD_PVT AS
2 /* $Header: EGOIOBKB.pls 120.2 2006/09/20 23:21:17 dphilip noship $ */
3 
4 -- =================================================================
5 -- Global constants that need to be used.
6 -- =================================================================
7 
8   --
9   -- Package Name
10   --
11   G_PACKAGE_NAME               CONSTANT VARCHAR2(30) := 'EGO_ITEM_ORG_BULKLOAD_PVT';
12   --
13   --  Return values for RETCODE parameter (standard for concurrent programs)
14   --
15   RETCODE_SUCCESS              NUMBER    := 0;
16   RETCODE_WARNING              NUMBER    := 1;
17   RETCODE_ERROR                NUMBER    := 2;
18 
19   -- The user language (to display the error messages in appropriate language)
20   -- This is Database Session Language.
21   G_SESSION_LANG           CONSTANT VARCHAR2(99) := USERENV('LANG');
22 
23   --This is the UI language.
24   G_LANGUAGE_CODE          VARCHAR2(3);
25 
26   G_ERROR_TABLE_NAME      VARCHAR2(99) := 'EGO_BULKLOAD_INTF';
27   G_ERROR_ENTITY_CODE     VARCHAR2(99) := 'EGO_ITEM';
28   G_ERROR_FILE_NAME       VARCHAR2(99);
29   G_BO_IDENTIFIER         VARCHAR2(99) := 'EGO_ITEM';
30 
31    ----------------------------------------------------------------------------
32    -- The Date Format is chosen to be as close as possible to Timestamp format,
33    -- except that we support dates before zero A.D. (the "S" in the year part).
34    ----------------------------------------------------------------------------
35   G_DATE_FORMAT                            CONSTANT VARCHAR2(30) := 'SYYYY-MM-DD HH24:MI:SS';
36 
37 
38   G_CONCREQ_VALID_FLAG     BOOLEAN;
39 
40   G_STATUS_SUCCESS    CONSTANT VARCHAR2(1)    := 'S';
41   G_STATUS_ERROR      CONSTANT VARCHAR2(1)    := 'E';
42 
43   G_INTF_STATUS_TOBE_PROCESS   CONSTANT NUMBER := 1;
44   G_INTF_STATUS_SUCCESS        CONSTANT NUMBER := 7;
45   G_INTF_STATUS_ERROR          CONSTANT NUMBER := 3;
46 
47   G_CREATE             CONSTANT VARCHAR2(10) := 'CREATE';
48   G_UPDATE             CONSTANT VARCHAR2(10) := 'UPDATE';
49   G_SYNC               CONSTANT VARCHAR2(10) := 'SYNC';
50 
51 
52   --Define the Base Attribute Names that require Value-to-ID Conversion.
53   G_ITEM_NUMBER        VARCHAR2(50) := 'ITEM_NUMBER';
54   G_ORG_CODE               VARCHAR2(50) := 'ORGANIZATION_CODE';
55 
56   --Chosing Err Status for MSII that dont conflict with other status.
57   G_PRIMARY_UOM_ERR_STS            NUMBER := 1000002;
58 
59 -- =================================================================
60 -- Global variables used in Concurrent Program.
61 -- =================================================================
62 
63   G_USER_ID         NUMBER  :=  -1;
64   G_LOGIN_ID        NUMBER  :=  -1;
65   G_PROG_APPID      NUMBER  :=  -1;
66   G_PROG_ID         NUMBER  :=  -1;
67   G_REQUEST_ID      NUMBER  :=  -1;
68 
69   --Define Exceptions
70   G_SEGMENT_SEQ_INVALID    EXCEPTION;
71   G_DATA_TYPE_INVALID      EXCEPTION;
72 
73   --error_number is a negative integer in the range -20000 .. -20999
74   PRAGMA EXCEPTION_INIT(G_SEGMENT_SEQ_INVALID, -20000);
75   PRAGMA EXCEPTION_INIT(G_DATA_TYPE_INVALID, -20001);
76 
77   -- Used for Developer debugging
78   G_MSG_LINE_NUM            NUMBER := 1;
79 
80   --Debug Profile option used to write Error_Handler.Write_Debug
81   --Profile option name = INV_DEBUG_TRACE ; User Profile Option Name = INV: Debug Trace
82   --Value: 1 (True) ; 0 (False)
83   G_DEBUG CONSTANT VARCHAR2(10) := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
84 
85 PROCEDURE Write_Debug (p_msg  IN  VARCHAR2) IS
86 BEGIN
87 
88   --If Profile set to TRUE
89   IF (G_DEBUG = 1) THEN
90      Error_Handler.Write_Debug(p_msg);
91   END IF;
92 
93 END;
94 
95 PROCEDURE Write_Conc_Log_Debug (p_msg  IN  VARCHAR2) IS
96  l_err_msg VARCHAR2(240);
97 BEGIN
98 
99   --If Profile set to TRUE
100   IF (G_DEBUG = 1) THEN
101     FND_FILE.put_line(FND_FILE.LOG, p_msg);
102   END IF;
103 
104 END;
105 
106 PROCEDURE open_debug_session IS
107 
108   CURSOR c_get_utl_file_dir IS
109      SELECT VALUE
110       FROM V$PARAMETER
111       WHERE NAME = 'utl_file_dir';
112 
113   --local variables
114   l_log_output_dir       VARCHAR2(512);
115   l_log_return_status    VARCHAR2(99);
116   l_errbuff              VARCHAR2(999);
117 BEGIN
118 
119    -------------------------------------------------------------------------
120    -- Obtaining the Debug file output Directory                           --
121    -------------------------------------------------------------------------
122     OPEN c_get_utl_file_dir;
123     FETCH c_get_utl_file_dir INTO l_log_output_dir;
124     --Write_Conc_Log_Debug('UTL_FILE_DIR : '||l_log_output_dir);
125     IF c_get_utl_file_dir%FOUND THEN
126 
127     ------------------------------------------------------
128     -- Trim to get only the first directory in the list --
129     ------------------------------------------------------
130     IF INSTR(l_log_output_dir,',') <> 0 THEN
131       l_log_output_dir := SUBSTR(l_log_output_dir, 1, INSTR(l_log_output_dir, ',') - 1);
132       --Write_Conc_Log_Debug('Log Output Dir : '||l_log_output_dir);
133     END IF;
134 
135    -------------------------------------------------------------------------
136    -- Prepare the Debug file name based on the current timestamp          --
137    -------------------------------------------------------------------------
138     G_ERROR_FILE_NAME := G_ERROR_TABLE_NAME||'_'||to_char(sysdate, 'DDMONYYYY_HH24MISS')||'.err';
139     --Write_Conc_Log_Debug('Trying to open the Error File => '||G_ERROR_FILE_NAME);
140 
141    -------------------------------------------------------------------------
142    -- Opening the Debug file, to write log information                    --
143    -------------------------------------------------------------------------
144     Error_Handler.Open_Debug_Session(
145       p_debug_filename   => G_ERROR_FILE_NAME
146      ,p_output_dir       => l_log_output_dir
147      ,x_return_status    => l_log_return_status
148      ,x_error_mesg       => l_errbuff
149      );
150 
151     Write_Conc_Log_Debug(' Log file location --> '||l_log_output_dir||'/'||G_ERROR_FILE_NAME ||' created with status '|| l_log_return_status);
152 
153     IF (l_log_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
154        Write_Conc_Log_Debug('Unable to open error log file. Error => '||l_errbuff);
155     END IF;
156 
157   END IF;--IF c_get_utl_file_dir%FOUND THEN
158 
159 END open_debug_session;
160 
161 
162 --Setup Item Interface Lines
163 PROCEDURE Preprocess_Item_Orgs
164                (
165                  p_set_process_id        IN         NUMBER
166                 ) IS
167 
168     -- Start OF comments
169     -- API name  : Setup MSII Item Interface Lines for processing
170     -- TYPE      : Private
171     -- Pre-reqs  : None
172     -- FUNCTION  : Populate and Prepare Item interfance lines.
173     --             Eliminates any redundancy / errors in MSII
174 
175 
176   --Long Dynamic SQL String
177   l_dyn_sql                VARCHAR2(20000);
178 
179   --Error messages.
180   l_item_catalog_err_msg      VARCHAR2(1000);
181   l_uom_err_msg               VARCHAR2(1000);
182   l_lifecycle_err_msg         VARCHAR2(1000);
183   l_lifecycle_ph_err_msg      VARCHAR2(1000);
184   l_useritemtype_err_msg      VARCHAR2(1000);
185   l_bomitemtype_err_msg       VARCHAR2(1000);
186   l_engitemflag_err_msg       VARCHAR2(1000);
187 
188 BEGIN
189 
190    Write_Debug('Getting the Error messages.');
191 
192    --Preparation for Inserting error messages for all pre-processing
193    --Validation errors.
194    FND_MESSAGE.SET_NAME('EGO','EGO_PRIMARYUOM_INVALID');
195    l_uom_err_msg := FND_MESSAGE.GET;
196 
197    --Insert the Pre-processed error messages.
198    l_dyn_sql := '';
199    l_dyn_sql := l_dyn_sql || 'INSERT INTO MTL_INTERFACE_ERRORS ';
200    l_dyn_sql := l_dyn_sql || '( ';
201    l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID	 ';
202    l_dyn_sql := l_dyn_sql || ', UNIQUE_ID		 ';
203    l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_DATE	 ';
204    l_dyn_sql := l_dyn_sql || ', LAST_UPDATED_BY	 ';
205    l_dyn_sql := l_dyn_sql || ', CREATION_DATE		 ';
206    l_dyn_sql := l_dyn_sql || ', CREATED_BY		 ';
207    l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_LOGIN	 ';
208    l_dyn_sql := l_dyn_sql || ', TABLE_NAME		 ';
209    l_dyn_sql := l_dyn_sql || ', MESSAGE_NAME		 ';
210    l_dyn_sql := l_dyn_sql || ', COLUMN_NAME		 ';
211    l_dyn_sql := l_dyn_sql || ', REQUEST_ID		 ';
212    l_dyn_sql := l_dyn_sql || ', PROGRAM_APPLICATION_ID  ';
213    l_dyn_sql := l_dyn_sql || ', PROGRAM_ID		 ';
214    l_dyn_sql := l_dyn_sql || ', PROGRAM_UPDATE_DATE	 ';
215    l_dyn_sql := l_dyn_sql || ', ERROR_MESSAGE		 ';
216    l_dyn_sql := l_dyn_sql || ', TRANSACTION_ID 	 ';
217    l_dyn_sql := l_dyn_sql || ', ENTITY_IDENTIFIER	 ';
218    l_dyn_sql := l_dyn_sql || ', BO_IDENTIFIER		 ';
219    l_dyn_sql := l_dyn_sql || ') ';
220    l_dyn_sql := l_dyn_sql || 'SELECT ';
221    l_dyn_sql := l_dyn_sql || ' -1 ';
222    l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID '; --Change to -1 if prob
223    l_dyn_sql := l_dyn_sql || ', SYSDATE ';
224    l_dyn_sql := l_dyn_sql || ', '||G_USER_ID ;
225    l_dyn_sql := l_dyn_sql || ', SYSDATE ';
226    l_dyn_sql := l_dyn_sql || ', '||G_USER_ID;
227    l_dyn_sql := l_dyn_sql || ', '||G_LOGIN_ID;
228    l_dyn_sql := l_dyn_sql || ', ''MTL_SYSTEM_ITEMS_INTERFACE'' ';
229    l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
230    l_dyn_sql := l_dyn_sql || 	  G_PRIMARY_UOM_ERR_STS||', ''EGO_PRIMARYUOM_INVALID'' ';
231    l_dyn_sql := l_dyn_sql || '	  ) ';
232    l_dyn_sql := l_dyn_sql || ', NULL ';
233    l_dyn_sql := l_dyn_sql || ', '||G_REQUEST_ID ;
234    l_dyn_sql := l_dyn_sql || ', '||G_PROG_APPID ;
235    l_dyn_sql := l_dyn_sql || ', '||G_PROG_ID ;
236    l_dyn_sql := l_dyn_sql || ', SYSDATE ';
237    l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG,  ';
238    l_dyn_sql := l_dyn_sql ||      G_PRIMARY_UOM_ERR_STS||', MSII.PRIMARY_UNIT_OF_MEASURE '||' || '' : '||l_uom_err_msg||'''';
239    l_dyn_sql := l_dyn_sql || '         )     ';
240    l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
241    l_dyn_sql := l_dyn_sql || ', NULL ';
242    l_dyn_sql := l_dyn_sql || ', NULL ';
243    l_dyn_sql := l_dyn_sql || 'FROM  MTL_SYSTEM_ITEMS_INTERFACE MSII ';
244    l_dyn_sql := l_dyn_sql || ' AND  MSII.PROCESS_FLAG IN  ';
245    l_dyn_sql := l_dyn_sql ||  ' ( ';
246    l_dyn_sql := l_dyn_sql || 	  G_PRIMARY_UOM_ERR_STS;
247    l_dyn_sql := l_dyn_sql ||  ' ) ';
248    l_dyn_sql := l_dyn_sql || ' AND  MSII.PROCESS_FLAG = 1 ';
249    l_dyn_sql := l_dyn_sql || ' AND  MSII.SET_PROCESS_ID = :SET_PROCESS_ID ';
250 
251    Write_Debug('l_dyn_sql');
252    --There is a limit of 1024 characters through Write_Debug (it uses
253    --UTL_FILE)
254    Write_Debug(SUBSTR(l_dyn_sql, 1, 1000));
255    Write_Debug(SUBSTR(l_dyn_sql, 1001, 2000));
256    EXECUTE IMMEDIATE l_dyn_sql USING p_set_process_id;
257    Write_Debug('MIERR: Inserted Pre-processed error messages in MTL_INTERFACE_ERRORS');
258 
259    --Now that the error messages are inserted, update MSII lines to
260    --Process status ERROR.
261    UPDATE MTL_SYSTEM_ITEMS_INTERFACE
262     SET   PROCESS_FLAG = G_INTF_STATUS_ERROR
263    WHERE  PROCESS_FLAG IN
264 	  (
265 	     G_PRIMARY_UOM_ERR_STS
266 	   )
267      AND  SET_PROCESS_ID = p_set_process_id;
268 
269    Write_Debug('MSII: Updated all the line statuses to Error for Pre-processing validation errors');
270 
271    Write_Debug('Preprocess_Item_Interface : Done.');
272 END Preprocess_Item_Orgs;
273 
274 
275 PROCEDURE Process_item_org_assignments  (
276   ERRBUF                OUT     NOCOPY VARCHAR2
277  ,RETCODE               OUT     NOCOPY NUMBER
278  ,p_Set_Process_ID      IN             NUMBER
279  ,p_commit              IN             VARCHAR2 DEFAULT FND_API.G_TRUE
280 					 ) IS
281 -- Start OF comments
282 -- API name  : Process Item Org Assignments
283 -- TYPE      : Concurrent Program
284 -- Pre-reqs  : None
285 -- FUNCTION  : Process and Load Item Org Assignments
286 --
287 -- Parameters:
288 --     IN    :
289 --             p_resultfmt_usage_id        IN      NUMBER
290 --               Similar to job number. Maps one-to-one with Data_Set_Id,
291 --               i.e. job number.
292 --
293 
294   --API return parameters
295   l_retcode               VARCHAR2(10);
296   l_errbuff               VARCHAR2(2000);
297   l_msii_set_process_id    NUMBER;
298   l_item_ioi_commit        NUMBER;
299   l_return_code            VARCHAR2(10);
300   l_err_text               VARCHAR2(2000);
301 
302 BEGIN
303 
304     Write_Conc_Log_Debug('Begin: Process_item_org_assignments');
305 
306     IF (NVL(fnd_profile.value('CONC_REQUEST_ID'), 0) <> 0) THEN
307       g_concReq_valid_flag  := TRUE;
308     END IF;
309 
310    -------------------------------------------------------------------------
311    -- Set Global variables for future usage                               --
312    -- The values are chosen from the FND_GLOBALS                          --
313    -------------------------------------------------------------------------
314    G_USER_ID    := FND_GLOBAL.user_id         ;
315    G_LOGIN_ID   := FND_GLOBAL.login_id        ;
316    G_PROG_APPID := FND_GLOBAL.prog_appl_id    ;
317    G_PROG_ID    := FND_GLOBAL.conc_program_id ;
318    G_REQUEST_ID := FND_GLOBAL.conc_request_id ;
319    --G_LANGUAGE_CODE := G_SESSION_LANG;
320 
321    --Write to Concurrent Log
322    Write_Conc_Log_Debug('G_USER_ID : '||To_char(G_USER_ID));
323    Write_Conc_Log_Debug('G_PROG_ID : '||To_char(G_PROG_ID));
324    Write_Conc_Log_Debug('G_REQUEST_ID : '||To_char(G_REQUEST_ID));
325 
326    -------------------------------------------------------------------------
327    -- Opening the Debug file, to write log information                    --
328    -------------------------------------------------------------------------
329    Write_Conc_Log_Debug('Before Error_Handler.initialize');
330    Error_Handler.initialize();
331    Error_Handler.set_bo_identifier(G_BO_IDENTIFIER);
332    --Commented on 12/17/2003 (PPEDDAMA). Open_Debug_Session should set the value
333    --appropriately, so that when the Debug Session is successfully opened :
334    --will return Error_Handler.Get_Debug = 'Y', else Error_Handler.Get_Debug = 'N'
335    --Error_Handler.Set_Debug('Y');
336 
337    --Opens Error_Handler debug session
338    Open_Debug_Session;
339    Write_Conc_Log_Debug('After Open_Debug_Session');
340 
341    --After Open_Debug_Session, can log using Write_Debug()
342    Write_Debug('G_USER_ID : '||To_char(G_USER_ID));
343    Write_Debug('G_PROG_ID : '||To_char(G_PROG_ID));
344    Write_Debug('G_REQUEST_ID : '||To_char(G_REQUEST_ID));
345 
346    -------------------------------------------------------------------------
347    -- Set the commit flag required to call to the IOI API                 --
348    -------------------------------------------------------------------------
349    IF (p_commit = FND_API.G_TRUE) THEN
350       l_item_ioi_commit := 1;
351     ELSE
352       l_item_ioi_commit := 2;
353    END IF;
354 
355    -------------------------------------------------------------------------
356    -- Preoprocessing to filter out error rows                             --
357    -------------------------------------------------------------------------
358    --Preprocess_Item_Orgs(p_Set_Process_ID);
359 
360    -------------------------------------------------------------------------
361    -- Calling IOI API to perform Item Org Assignments                     --
362    -------------------------------------------------------------------------
363 
364    FND_FILE.put_line(FND_FILE.LOG, '*Importing Item Org Assignments*. SET_PROCESS_ID : '||p_Set_Process_ID);
365 
366    --5259908
367    INV_EGO_REVISION_VALIDATE.set_Process_Control('EGO_ITEM_BULKLOAD');
368 
369    -- Using Wrapper API for INV IOI to support data security.
370    EGO_ITEM_OPEN_INTERFACE_PVT.item_open_interface_process
371    (
372       ERRBUF           =>  l_err_text
373    ,  RETCODE          =>  l_return_code
374    ,  p_org_id         =>  204 --Dummy value, all_org below carries precedence
375    ,  p_all_org        =>  1   --All Orgs
376    ,  p_val_item_flag  =>  1   -- validate item
377    ,  p_pro_item_flag  =>  1   -- process validated items
378    ,  p_del_rec_flag   =>  2   -- do not delete processed records
379    ,  p_prog_appid     =>  G_PROG_APPID
380    ,  p_prog_id        =>  G_PROG_ID
381    ,  p_request_id     =>  G_REQUEST_ID
382    ,  p_user_id        =>  G_USER_ID
383    ,  p_login_id       =>  G_LOGIN_ID
384    ,  p_xset_id        =>  p_Set_Process_ID  -- run for all the IOI  records
385    ,  p_commit_flag    =>  l_item_ioi_commit -- NOTE: 1 = Commit 2 = Donot Commit
386    ,  p_run_mode       =>  3 --NOTE: 1 = CREATE; 2 = UPDATE; 3 = SYNC
387    );
388 
389     Write_Debug('IOI_Process : SYNC : done INVPOPIF.inopinp_open_interface_process: l_return_code = ' || l_return_code);
390     Write_Debug('IOI_Process : SYNC : l_err_text = ' || l_err_text);
391 
392     FND_FILE.put_line(FND_FILE.LOG, '*Import Item Org Assignments Completed* ');
393 
394     IF (p_commit = FND_API.G_TRUE) THEN
395       COMMIT;
396     END IF;
397 
398    -------------------------------------------------------------------------
399    -- Calling Error Handler API to report errors encountered              --
400    -------------------------------------------------------------------------
401 
402     --Log Errors to MTL_INTERFACE_ERRORS table and Debug file.
403     Error_Handler.Log_Error(
404 			    p_write_err_to_inttable  => 'Y',
405 			    p_write_err_to_debugfile => 'Y'
406 			    );
407 
408     Error_Handler.Close_Debug_Session;
409 
410     --5259908
411     INV_EGO_REVISION_VALIDATE.set_Process_Control(NULL);
412 
413    -------------------------------------------------------------------------
414    -- Catch exception and report to the Debug file                        --
415    -------------------------------------------------------------------------
416    EXCEPTION
417     WHEN OTHERS THEN
418       --5259908
419       INV_EGO_REVISION_VALIDATE.set_Process_Control(NULL);
420       Write_Debug('WHEN OTHERS Exception.');
421       Write_Debug('error code : '|| to_char(SQLCODE));
422       Write_Debug('error text : '|| SQLERRM);
423       ERRBUF := 'Error : '||to_char(SQLCODE)||'---'||SQLERRM;
424       RETCODE := Error_Handler.G_STATUS_ERROR;
425       Error_Handler.Close_Debug_Session;
426       ----------------Exception block ends.
427 
428 END process_item_org_assignments;
429 
430 
431 END EGO_ITEM_ORG_BULKLOAD_PVT;