[Home] [Help]
PACKAGE BODY: APPS.EGO_ITEM_BULKLOAD_PKG
Source
1 PACKAGE BODY EGO_ITEM_BULKLOAD_PKG AS
2 /* $Header: EGOIBLKB.pls 120.102.12020000.5 2013/01/17 04:22:44 lanhuang ship $ */
3
4
5 ------------------------------
6 -- Private Global Variables --
7 ------------------------------
8
9 --------------------------------------------
10 -- This is Database Session Language. --
11 --------------------------------------------
12 G_SESSION_LANG CONSTANT VARCHAR2(99) := USERENV('LANG');
13
14 --------------------------------------------
15 -- This is the UI language. --
16 --------------------------------------------
17 G_LANGUAGE_CODE VARCHAR2(3);
18
19 --------------------------------------------------------------------------
20 -- Debug Profile option used to write Error_Handler.Write_Debug --
21 -- Profile option name = INV_DEBUG_TRACE ; --
22 -- User Profile Option Name = INV: Debug Trace --
23 -- Values: 1 (True) ; 0 (False) --
24 -- NOTE: This better than MRP_DEBUG which is used at many places. --
25 --------------------------------------------------------------------------
26 G_DEBUG CONSTANT VARCHAR2(10) := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
27
28 -----------------------------------------------------------------------
29 -- These are the Constants to generate a New Line Character. --
30 -----------------------------------------------------------------------
31 G_CARRIAGE_RETURN VARCHAR2(1) := FND_GLOBAL.LOCAL_CHR(13);
32 G_LINE_FEED VARCHAR2(1) := FND_GLOBAL.LOCAL_CHR(10);
33 -- Following prints ^M characters in the log file.
34 -- G_NEWLINE VARCHAR2(2) := G_CARRIAGE_RETURN || G_LINE_FEED; --(carriage-return/line-feed)
35 G_NEWLINE VARCHAR2(2) := G_LINE_FEED;
36
37 -----------------------------------------------------------------------
38 -- This is the Result Format Usage ID for the Current Upload. --
39 -----------------------------------------------------------------------
40 G_RESULTFMT_USAGE_ID NUMBER;
41
42 -------------------------------------------------------
43 -- The following two variables are for Error_Handler --
44 -------------------------------------------------------
45 G_ENTITY_ID NUMBER := NULL;
46 G_ENTITY_CODE CONSTANT VARCHAR2(30) := 'ITEM_OPER_ATTRS_ENTITY_CODE';
47
48
49 -------------------------------------------------------
50 -- Used for Item Operational Attribute bulkload SQLs --
51 -------------------------------------------------------
52 G_APPLICATION_ID NUMBER(3) := 431;
53 G_EGO_ITEM_OBJ_NAME VARCHAR2(30) := 'EGO_ITEM';
54
55 ---------------------------------------------------------------------------
56 -- User-Defined Attr Group Types currently handled by this Bulkload code --
57 ---------------------------------------------------------------------------
58 G_IUD_ATTR_GROUP_TYPE VARCHAR2(30) := 'EGO_ITEMMGMT_GROUP'; -- Item User-Defined Attrs
59 G_GTN_SNG_ATTR_GROUP_TYPE VARCHAR2(30) := 'EGO_ITEM_GTIN_ATTRS'; -- GTIN Single Row Attrs
60 G_GTN_MUL_ATTR_GROUP_TYPE VARCHAR2(30) := 'EGO_ITEM_GTIN_MULTI_ATTRS'; -- GTIN Multi Row Attrs
61 G_ERP_ATTR_GROUP_TYPE VARCHAR2(30) := 'EGO_MASTER_ITEMS'; -- Item Master Operational Attrs
62
63 ----------------------------------------------------------------------------
64 -- The Date Format is chosen to be as close as possible to Timestamp format,
65 -- except that we support dates before zero A.D. (the "S" in the year part).
66 ----------------------------------------------------------------------------
67 G_DATE_FORMAT CONSTANT VARCHAR2(30) := 'SYYYY-MM-DD HH24:MI:SS';
68 G_EXCEL_NULL_DATE DATE := TO_DATE('9999-12-31','YYYY-MM-DD');
69
70 G_CONCREQ_VALID_FLAG BOOLEAN;
71
72 ---------------------------------------------------------------
73 -- Same dimension as classification1 in EGO_RESULTS_FORMAT_V --
74 ---------------------------------------------------------------
75 G_CATALOG_GROUP_ID VARCHAR2(50);
76
77 ---------------------------------------------------------------
78 -- To be used by Item and Item Rev interfaces. --
79 ---------------------------------------------------------------
80 G_MSII_SET_PROCESS_ID NUMBER;
81
82
83 ---------------------------------------------------------------
84 -- This flag will be set to TRUE for pdh batch and --
85 -- FALSE for all non PDH batches --
86 ---------------------------------------------------------------
87 G_PDH_BATCH BOOLEAN;
88
89 ---------------------------------------------------------------
90 -- The process status to be set to the interface table is --
91 -- 1 by default. But for non PDH batch, set status to 0 --
92 ---------------------------------------------------------------
93
94 G_PROCESS_STATUS NUMBER := 1;
95
96 ---------------------------------------------------------------
97 -- Used for Error Reporting. --
98 ---------------------------------------------------------------
99 G_ERROR_TABLE_NAME VARCHAR2(99) := 'EGO_BULKLOAD_INTF';
100 G_ERROR_ENTITY_CODE VARCHAR2(99) := 'EGO_ITEM';
101 G_ERROR_FILE_NAME VARCHAR2(99);
102 G_BO_IDENTIFIER VARCHAR2(99) := 'EGO_ITEM';
103 G_INV_STATUS_CODE_NAME VARCHAR2(99) := 'INVENTORY_ITEM_STATUS_CODE';
104
105 ---------------------------------------------------------------
106 -- Introduced for 11.5.10, so that Java Conc Program can --
107 -- continue writing to the same Error Log File. --
108 ---------------------------------------------------------------
109 G_ERRFILE_PATH_AND_NAME VARCHAR2(10000);
110
111 ---------------------------------------------------------------
112 -- API Return statuses. --
113 ---------------------------------------------------------------
114 G_STATUS_SUCCESS CONSTANT VARCHAR2(1) := 'S';
115 G_STATUS_ERROR CONSTANT VARCHAR2(1) := 'E';
116
117 ---------------------------------------------------------------
118 -- Interface line processing statuses. --
119 ---------------------------------------------------------------
120 G_INTF_STATUS_TOBE_PROCESS CONSTANT NUMBER := 1;
121 G_INTF_STATUS_SUCCESS CONSTANT NUMBER := 7;
122 G_INTF_STATUS_ERROR CONSTANT NUMBER := 3;
123
124 ---------------------------------------------------------------
125 -- Interface line Transaction Types. --
126 ---------------------------------------------------------------
127 G_CREATE CONSTANT VARCHAR2(10) := 'CREATE';
128 G_UPDATE CONSTANT VARCHAR2(10) := 'UPDATE';
129 G_SYNC CONSTANT VARCHAR2(10) := 'SYNC';
130
131
132 ------------------------------------------------------------------------------
133 -- Generic Bulkload interface table: EGO_BULKLOAD_INTF segment number range --
134 -- as per data type. --
135 ------------------------------------------------------------------------------
136 G_VARCHAR_SEQ_MIN NUMBER := 1;
137 G_VARCHAR_SEQ_MAX NUMBER := 200;
138 G_NUMBER_SEQ_MIN NUMBER := 201;
139 G_NUMBER_SEQ_MAX NUMBER := 350;
140 G_DATE_SEQ_MIN NUMBER := 351;
141 G_DATE_SEQ_MAX NUMBER := 360;
142
143 ---------------------------------------------------------------------------
144 -- Define the Base Attribute Names that require Value-to-ID Conversion. --
145 ---------------------------------------------------------------------------
146 G_ITEM_NUMBER VARCHAR2(50) := 'ITEM_NUMBER';
147 G_ITEM_TEMPLATE_NAME VARCHAR2(50) := 'TEMPLATE_NAME';
148 G_ORG_CODE VARCHAR2(50) := 'ORGANIZATION_CODE';
149 -- Following column values are Editable --
150 G_ITEM_CATALOG_GROUP1 VARCHAR2(50) := 'CATALOG_GROUP';
151 G_ITEM_CATALOG_GROUP VARCHAR2(50) := 'ITEM_CATALOG_GROUP_NAME';
152 G_PRIMARY_UOM VARCHAR2(50) := 'PRIMARY_UOM_CODE';
153 G_LIFECYCLE VARCHAR2(50) := 'LIFECYCLE_ID'; --LIFECYCLE
154 G_LIFECYCLE_PHASE VARCHAR2(50) := 'CURRENT_PHASE_ID'; -- LIFECYCLE_PHASE
155 G_USER_ITEM_TYPE VARCHAR2(50) := 'ITEM_TYPE';
156 G_BOM_ITEM_TYPE VARCHAR2(50) := 'BOM_ITEM_TYPE';
157 G_ENG_ITEM_FLAG VARCHAR2(50) := 'ENG_ITEM_FLAG';
158 G_DESCRIPTION VARCHAR2(50) := 'DESCRIPTION'; -- Bug: 3778006
159 G_CREATED_BY VARCHAR2(50) := 'CREATED_BY'; -- Bug: 5439746
160 G_CREATION_DATE VARCHAR2(50) := 'CREATION_DATE';
161 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
162 G_CONVERSIONS VARCHAR2(50) := 'ALLOWED_UNITS_LOOKUP_CODE';
163 G_SECONDARY_DEF_IND VARCHAR2(50) := 'SECONDARY_DEFAULT_IND';
164 G_DUAL_UOM_DEV_LOW VARCHAR2(50) := 'DUAL_UOM_DEVIATION_LOW';
165 G_DUAL_UOM_DEV_HIGH VARCHAR2(50) := 'DUAL_UOM_DEVIATION_HIGH';
166 G_ONT_PRICING_QTY_SRC VARCHAR2(50) := 'ONT_PRICING_QTY_SOURCE';
167 G_SECONDARY_UOM_CODE VARCHAR2(50) := 'SECONDARY_UOM_CODE';
168 G_TRACKING_QTY_IND VARCHAR2(50) := 'TRACKING_QUANTITY_IND';
169 --Bug: 3969593 End
170 G_INVENTORY_ITEM_STATUS VARCHAR2(50) := 'INVENTORY_ITEM_STATUS_CODE';--Rathna MLS STatus
171 -- Trade Item Descriptor for Import Pack Hierarchies
172 G_TRADE_ITEM_DESCRIPTOR VARCHAR2(50) := 'TRADE_ITEM_DESCRIPTOR';
173 ---------------------------------------------------------------
174 -- Item Result Format Data Levels. --
175 ---------------------------------------------------------------
176 G_ITEM_DATA_LEVEL VARCHAR2(50) := 'ITEM_LEVEL';
177 G_ITEM_REV_DATA_LEVEL VARCHAR2(50) := 'ITEM_REVISION_LEVEL';
178
179 -----------------------------------------------------------------
180 -- Item Revision Attribute Codes and Corresponding DB Columns. --
181 -----------------------------------------------------------------
182
183 ------------------------------------
184 -- Item Revision Attribute Codes --
185 ------------------------------------
186 G_REV_ID_ATTR_CODE VARCHAR2(50) := 'REVISION_ID';
187 G_REV_CODE_ATTR_CODE VARCHAR2(50) := 'REVISION';
188 G_REV_LABEL_ATTR_CODE VARCHAR2(50) := 'REVISION_LABEL';
189 G_REV_DESCRIPTION_ATTR_CODE VARCHAR2(50) := 'REVISION_DESCRIPTION';
190 G_REV_REASON_ATTR_CODE VARCHAR2(50) := 'REVISION_REASON';
191 G_REV_LC_ID_ATTR_CODE VARCHAR2(50) := 'REVISION_LIFECYCLE_ID';
192 G_REV_LC_PHASE_ID_ATTR_CODE VARCHAR2(50) := 'REVISION_CURRENT_PHASE_ID';
193 G_REV_IMPL_DATE_ATTR_CODE VARCHAR2(50) := 'REVISION_IMPLEMENTATION_DATE';
194
195 -- Revisions Import Format uses following Attribute Code. --
196 G_REV_EFF_DATE_ATTR_CODE VARCHAR2(50) := 'REVISION_EFFECTIVE_DATE';
197 -- Item Result Format uses following Attribute Code. --
198 G_REV_EFF_DATE_ATTR_CODE_2 VARCHAR2(50) := 'REVISION_EFFECTIVITY_DATE';
199
200 -------------------------------------
201 -- Item Revision Database Columns --
202 -------------------------------------
203 G_REV_ID_DB_COL VARCHAR2(50) := 'REVISION_ID';
204 G_REV_CODE_DB_COL VARCHAR2(50) := 'REVISION';
205 G_REV_LABEL_DB_COL VARCHAR2(50) := 'REVISION_LABEL';
206 G_REV_DESCRIPTION_DB_COL VARCHAR2(50) := 'DESCRIPTION';
207 G_REV_REASON_DB_COL VARCHAR2(50) := 'REVISION_REASON';
208 G_REV_LC_ID_DB_COL VARCHAR2(50) := 'LIFECYCLE_ID';
209 G_REV_LC_PHASE_ID_DB_COL VARCHAR2(50) := 'CURRENT_PHASE_ID';
210 G_REV_IMPL_DATE_DB_COL VARCHAR2(50) := 'IMPLEMENTATION_DATE';
211 G_REV_EFF_DATE_DB_COL VARCHAR2(50) := 'EFFECTIVITY_DATE';
212
213 -----------------------------------------------------------------------
214 -- Using following Columns in EGO_BULKLOAD_INTF as buffer columns to --
215 -- store item attributes information, to be retrieved later : --
216 -- 1. While inserting in MTL_SYSTEM_ITEMS_INTERFACE. --
217 -- 2. While querying the errors page. --
218 -----------------------------------------------------------------------
219 -- used for all value set conversions as the user enters the display
220 -- value which will be converted into internal value.
221 G_VAL_SET_CONV_ERR_COL VARCHAR2(50) := 'C_INTF_ATTR231';
222 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
223 G_CONVERSIONS_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR232';
224 G_SECONDARY_DEF_IND_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR233';
225 G_ONT_PRICING_QTY_SRC_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR236';
226 G_SECONDARY_UOM_CODE_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR237';
227 G_TRACKING_QTY_IND_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR238';
228 --Bug: 3969593 End
229 G_ITEM_NUMBER_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR240';
230 G_ORG_CODE_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR241';
231 G_REVISION_CODE_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR242';
232 G_ITEM_CATALOG_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR243';
233 G_ITEM_CATALOG_NAME_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR244';
234 G_PRIMARY_UOM_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR245';
235 G_LIFECYCLE_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR246';
236 G_LIFECYCLE_PHASE_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR247';
237 G_USER_ITEM_TYPE_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR248';
238 G_BOM_ITEM_TYPE_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR249';
239 G_ENG_ITEM_FLAG_EBI_COL VARCHAR2(50) := 'C_INTF_ATTR250';
240 G_DESCRIPTION_EBI_COL VARCHAR2(50) := 'DESCRIPTION1'; -- Bug: 3778006
241 ----------------------------
242 -- Introduced for 11.5.10 --
243 ----------------------------
244 G_ERR_LOGFILE_COL VARCHAR2(50) := 'C_INTF_ATTR239';
245 l_inventory_item_status_col VARCHAR2(50) := NULL; --Rathna MLS Status
246 l_trade_item_descriptor_col VARCHAR2(50) := NULL; --R12C Pack Changes
247
248 -----------------------------------------
249 -- R12 - GTIN needs to be populated
250 -- in MTL_SYSTEM_ITEMS_INTERFACE table
251 -----------------------------------------
252 G_GTIN_NUM_ATTR_CODE VARCHAR2(50) := 'GTIN_NUM';
253 G_GTIN_DESC_ATTR_CODE VARCHAR2(50) := 'GTIN_DESC';
254 G_GTIN_NUM_DB_COL VARCHAR2(50) := 'GLOBAL_TRADE_ITEM_NUMBER';
255 G_GTIN_DESC_DB_COL VARCHAR2(50) := 'GTIN_DESCRIPTION';
256
257 --------------------------------------------------------------------------
258 -- Choosing Err Status for MSII that dont conflict with other statuses. --
259 -- These are intermediate error statuses, later on will be changed to --
260 -- status '3' (Error status in MSII) --
261 --------------------------------------------------------------------------
262 G_ITEM_CATALOG_NAME_ERR_STS NUMBER := 1000001;
263 G_PRIMARY_UOM_ERR_STS NUMBER := 1000002;
264 G_LIFECYCLE_ERR_STS NUMBER := 1000003;
265 G_LIFECYCLE_PHASE_ERR_STS NUMBER := 1000004;
266 G_USER_ITEM_TYPE_ERR_STS NUMBER := 1000005;
267 G_BOM_ITEM_TYPE_ERR_STS NUMBER := 1000006;
268 G_ENG_ITEM_FLAG_ERR_STS NUMBER := 1000007;
269 G_DESCRIPTION_ERR_STS NUMBER := 1000008; -- Bug: 3778006
270 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: bEGIN
271 G_CONVERSIONS_ERR_STS NUMBER := 1000009;
272 G_SECONDARY_DEF_IND_ERR_STS NUMBER := 1000010;
273 G_ONT_PRICING_QTY_SRC_ERR_STS NUMBER := 1000011;
274 G_SECONDARY_UOM_CODE_ERR_STS NUMBER := 1000012;
275 G_TRACKING_QTY_IND_ERR_STS NUMBER := 1000013;
276 G_INV_ITEM_STATUS_ERR_STS NUMBER := 1000014;--Rathna MLS STatus
277 --Bug: 3969593 End
278 G_VS_INVALID_ERR_STS NUMBER := 1000015;
279 --R12C Packs changes for Trade Item Descriptor
280 G_TRADE_ITEM_DESC_ERR_STS NUMBER := 1000016;
281
282 -----------------------------------------------------
283 -- Global variables used in Concurrent Program. --
284 -----------------------------------------------------
285 G_USER_ID NUMBER := -1;
286 G_LOGIN_ID NUMBER := -1;
287 G_PROG_APPID NUMBER := -1;
288 G_PROG_ID NUMBER := -1;
289 G_REQUEST_ID NUMBER := -1;
290
291 ----------------------------------------------------------
292 -- Define Exceptions. Error numbers are in the range --
293 -- of negative integers -20000 to -20999 --
294 ----------------------------------------------------------
295 G_SEGMENT_SEQ_INVALID EXCEPTION;
296 G_DATA_TYPE_INVALID EXCEPTION;
297
298 PRAGMA EXCEPTION_INIT(G_SEGMENT_SEQ_INVALID, -20000);
299 PRAGMA EXCEPTION_INIT(G_DATA_TYPE_INVALID, -20001);
300 -----------------------------------------------------------------
301 -- Write Debug statements to Log using Error Handler procedure --
302 -----------------------------------------------------------------
303 PROCEDURE Write_Debug (p_msg IN VARCHAR2) IS
304
305 BEGIN
306 IF FND_LOG.LEVEL_EXCEPTION >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
307 FND_FILE.put_line(which => FND_FILE.LOG
308 ,buff => 'EGO_ITEM_BULKLOAD_PKG: '||p_msg);
309
310 END IF;
311 -- NOTE: No need to check for profile now, as Error_Handler checks
312 -- for Error_Handler.Get_Debug = 'Y' before writing to Debug Log.
313 -- If Profile set to TRUE --
314 -- IF (G_DEBUG = 1) THEN
315 -- Error_Handler.Write_Debug('['||TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS')||'] '|| p_msg);
316 -- END IF;
317 EXCEPTION
318 WHEN OTHERS THEN
319 NULL;
320 END Write_Debug;
321
322 ----------------------------------------------------------
323 -- Write to Concurrent Log --
324 ----------------------------------------------------------
325
326 PROCEDURE Developer_Debug (p_msg IN VARCHAR2) IS
327 l_err_msg VARCHAR2(240);
328 BEGIN
329
330 IF FND_LOG.LEVEL_STATEMENT >= FND_LOG.G_CURRENT_RUNTIME_LEVEL THEN
331 FND_FILE.put_line(which => FND_FILE.LOG
332 ,buff => 'EGO_ITEM_BULKLOAD_PKG: '||p_msg);
333 END IF;
334
335 EXCEPTION
336 WHEN OTHERS THEN
337 NULL;
338 END Developer_Debug;
339
340 PROCEDURE SetGobals IS
341 BEGIN
342 -----------------------------------------------------------------------
343 -- the values are chosen from the FND_GLOBALS
344 -----------------------------------------------------------------------
345 G_USER_ID := NVL(FND_GLOBAL.user_id,-1);
346 G_LOGIN_ID := NVL(FND_GLOBAL.login_id,-1);
347 G_PROG_APPID := NVL(FND_GLOBAL.prog_appl_id,-1);
348 G_PROG_ID := NVL(FND_GLOBAL.conc_program_id,-1);
349 G_REQUEST_ID := NVL(FND_GLOBAL.conc_request_id,-1);
350 END;
351
352 ----------------------------------------------------------
353 -- Internal procedure to open Debug Session. --
354 ----------------------------------------------------------
355 PROCEDURE open_debug_session_internal IS
356
357 CURSOR c_get_utl_file_dir IS
358 SELECT VALUE
359 FROM V$PARAMETER
360 WHERE NAME = 'utl_file_dir';
361
362 --local variables
363 --bug 12868802 UTL_FILE_DIR length defined in ORA.init can be longer than 512 in 10g or later,
364 --so it may cause ORA-06502, replace with v$parameter.value%TYPE; which work in all cases.
365
366 l_log_output_dir v$parameter.value%TYPE;
367 l_log_return_status VARCHAR2(99);
368 l_errbuff VARCHAR2(999);
369 BEGIN
370
371 Error_Handler.initialize();
372 Error_Handler.set_bo_identifier(G_BO_IDENTIFIER);
373
374 ---------------------------------------------------------------------------------
375 -- Commented on 12/17/2003 (PPEDDAMA). Open_Debug_Session should set the value
376 -- appropriately, so that when the Debug Session is successfully opened :
377 -- will return Error_Handler.Get_Debug = 'Y', else Error_Handler.Get_Debug = 'N'
378 ---------------------------------------------------------------------------------
379 -- Error_Handler.Set_Debug('Y');
380
381 OPEN c_get_utl_file_dir;
382 FETCH c_get_utl_file_dir INTO l_log_output_dir;
383 --developer_debug('UTL_FILE_DIR : '||l_log_output_dir);
384 IF c_get_utl_file_dir%FOUND THEN
385 ------------------------------------------------------
386 -- Trim to get only the first directory in the list --
387 ------------------------------------------------------
388 IF INSTR(l_log_output_dir,',') <> 0 THEN
389 l_log_output_dir := SUBSTR(l_log_output_dir, 1, INSTR(l_log_output_dir, ',') - 1);
390 --developer_debug('Log Output Dir : '||l_log_output_dir);
391 END IF;
392
393 G_ERROR_FILE_NAME := G_ERROR_TABLE_NAME||'_'||to_char(SYSDATE, 'DDMONYYYY_HH24MISS')||'.err';
394 --developer_debug('Trying to open the Error File => '||G_ERROR_FILE_NAME);
395
396 -----------------------------------------------------------------------
397 -- To open the Debug Session to write the Debug Log. --
398 -- This sets Debug value so that Error_Handler.Get_Debug returns 'Y' --
399 -----------------------------------------------------------------------
400 Error_Handler.Open_Debug_Session(
401 p_debug_filename => G_ERROR_FILE_NAME
402 ,p_output_dir => l_log_output_dir
403 ,x_return_status => l_log_return_status
404 ,x_error_mesg => l_errbuff
405 );
406
407 ---------------------------------------------------------------
408 -- Introduced for 11.5.10, so that Java Conc Program can --
409 -- continue writing to the same Error Log File. --
410 ---------------------------------------------------------------
411 G_ERRFILE_PATH_AND_NAME := l_log_output_dir||'/'||G_ERROR_FILE_NAME;
412
413 developer_debug(' Log file location --> '||l_log_output_dir||'/'||G_ERROR_FILE_NAME ||' created with status '|| l_log_return_status);
414
415 IF (l_log_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
416 developer_debug('Unable to open error log file. Error => '||l_errbuff);
417 END IF;
418
419 END IF;--IF c_get_utl_file_dir%FOUND THEN
420 -- Bug : 4099546
421 CLOSE c_get_utl_file_dir;
422 END open_debug_session_internal;
423
424
425 -----------------------------------------------------------
426 -- Open the Debug Session, conditionally if the profile: --
427 -- INV Debug Trace is set to TRUE --
428 -----------------------------------------------------------
429 PROCEDURE Open_Debug_Session IS
430
431 BEGIN
432 ----------------------------------------------------------------
433 -- Open the Debug Log Session, only if Profile is set to TRUE --
434 ----------------------------------------------------------------
435 IF (G_DEBUG = 1) THEN
436
437 ----------------------------------------------------------------------------------
438 -- Opens Error_Handler debug session, only if Debug session is not already open.
439 -- Suggested by RFAROOK, so that multiple debug sessions are not open PER
440 -- Concurrent Request.
441 ----------------------------------------------------------------------------------
442 IF (Error_Handler.Get_Debug <> 'Y') THEN
443 Open_Debug_Session_Internal;
444 END IF;
445
446 END IF;
447
448 END Open_Debug_Session;
449
450 -----------------------------------------------------------------
451 -- Close the Debug Session, only if Debug is already Turned ON --
452 -----------------------------------------------------------------
453 PROCEDURE Close_Debug_Session IS
454
455 BEGIN
456 -----------------------------------------------------------------------------
457 -- Close Error_Handler debug session, only if Debug session is already open.
458 -----------------------------------------------------------------------------
459 IF (Error_Handler.Get_Debug = 'Y') THEN
460 Error_Handler.Close_Debug_Session;
461 END IF;
462
463 END Close_Debug_Session;
464
465 -----------------------------------------------------------------
466 -- Replace all Single Quote to TWO Single Quotes, for Escaping --
467 -- NOTE: Used while inserting Strings using Dynamic SQL. --
468 -----------------------------------------------------------------
469 FUNCTION Escape_Single_Quote (p_String IN VARCHAR2)
470 RETURN VARCHAR2 IS
471
472 BEGIN
473
474 IF (p_String IS NOT NULL) THEN
475 ---------------------------------------------------
476 -- Replace all Single Quotes to 2 Single Quotes --
477 ---------------------------------------------------
478 RETURN REPLACE(p_String, '''', '''''');
479 ELSE
480 ----------------------------------------------
481 -- Return NULL, if the String is NULL or '' --
482 ----------------------------------------------
483 RETURN NULL;
484 END IF;
485
486 END Escape_Single_Quote;
487
488 PROCEDURE delete_records_from_MSII (p_set_process_id IN NUMBER) IS
489
490 TYPE char_tbl_type IS TABLE OF VARCHAR2(240);
491
492 l_dyn_sql VARCHAR2(32767) := '';
493 l_column_name char_tbl_type;
494 l_rows_processed NUMBER;
495 l_column_list VARCHAR2(32767) := '';
496
497 BEGIN
498 -----------------------------------------------------------------------
499 --Only in case of Import, and while importing Multi-Row attr group
500 --values : Item, Org, Catalog are NOT NULL, and rest of the base
501 --attributes are NULL. Hence can delete these rows off from MSII.
502 -----------------------------------------------------------------------
503 /***
504 -- fix for 12.2 OLP compatible
505
506 SELECT COLUMN_NAME
507 BULK COLLECT INTO l_column_name
508 FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME = 'MTL_SYSTEM_ITEMS_INTERFACE'
509 AND COLUMN_NAME NOT IN ('SET_PROCESS_ID',
510 'TRANSACTION_ID',
511 'REQUEST_ID',
512 'PROGRAM_APPLICATION_ID',
513 'PROGRAM_ID',
514 'TRANSACTION_TYPE',
515 'ITEM_NUMBER',
516 'ORGANIZATION_CODE',
517 'PROCESS_FLAG',
518 'SOURCE_SYSTEM_ID',
519 'SOURCE_SYSTEM_REFERENCE',
520 'ITEM_CATALOG_GROUP_ID',
521 'INTERFACE_TABLE_UNIQUE_ID',
522 'INVENTORY_ITEM_ID',
523 'ORGANIZATION_ID',
524 'LAST_UPDATE_DATE',
525 'LAST_UPDATED_BY',
526 'CREATION_DATE',
527 'CREATED_BY',
528 'LAST_UPDATE_LOGIN')
529 AND COLUMN_NAME NOT LIKE 'SEGMENT%'
530 AND COLUMN_NAME NOT LIKE 'GLOBAL_ATTRIBUTE%'
531 AND COLUMN_NAME NOT LIKE 'ATTRIBUTE%';
532 ***/
533
534 -- bug#15835530 fix for 12.2 OLP compatible
535 SELECT col.column_name
536 BULK COLLECT INTO l_column_name
537 from user_synonyms syn, dba_tab_columns col
538 where syn.synonym_name = 'MTL_SYSTEM_ITEMS_INTERFACE'
539 and col.owner = syn.table_owner
540 and col.table_name = syn.table_name
541 AND COLUMN_NAME NOT IN ('SET_PROCESS_ID',
542 'TRANSACTION_ID',
543 'REQUEST_ID',
544 'PROGRAM_APPLICATION_ID',
545 'PROGRAM_ID',
546 'TRANSACTION_TYPE',
547 'ITEM_NUMBER',
548 'ORGANIZATION_CODE',
549 'PROCESS_FLAG',
550 'SOURCE_SYSTEM_ID',
551 'SOURCE_SYSTEM_REFERENCE',
552 'ITEM_CATALOG_GROUP_ID',
553 'INTERFACE_TABLE_UNIQUE_ID',
554 'INVENTORY_ITEM_ID',
555 'ORGANIZATION_ID',
556 'LAST_UPDATE_DATE',
557 'LAST_UPDATED_BY',
558 'CREATION_DATE',
559 'CREATED_BY',
560 'LAST_UPDATE_LOGIN')
561 AND COLUMN_NAME NOT LIKE 'SEGMENT%'
562 AND COLUMN_NAME NOT LIKE 'GLOBAL_ATTRIBUTE%'
563 AND COLUMN_NAME NOT LIKE 'ATTRIBUTE%';
564
565 l_rows_processed := SQL%ROWCOUNT;
566
567 IF l_rows_processed > 0 THEN
568 FOR l_row_index IN 1..l_rows_processed LOOP
569 l_column_list := l_column_list || l_column_name(l_row_index) || ' IS NULL AND ';
570 END LOOP;
571 l_column_list := SUBSTR(l_column_list,1,length(l_column_list)-4);
572 END IF;
573
574 l_dyn_sql := '';
575 l_dyn_sql := l_dyn_sql || ' DELETE MTL_SYSTEM_ITEMS_INTERFACE MSII ' ;
576 l_dyn_sql := l_dyn_sql || ' WHERE ';
577 l_dyn_sql := l_dyn_sql || ' ( ';
578 l_dyn_sql := l_dyn_sql || ' (ITEM_NUMBER IS NOT NULL AND ORGANIZATION_CODE IS NOT NULL ) ';
579 l_dyn_sql := l_dyn_sql || ' OR ';
580 l_dyn_sql := l_dyn_sql || ' ( SOURCE_SYSTEM_REFERENCE IS NOT NULL AND SOURCE_SYSTEM_ID IS NOT NULL ) '; --for non-PDH Batch
581 l_dyn_sql := l_dyn_sql || ' OR ';
582 l_dyn_sql := l_dyn_sql || ' (DESCRIPTION IS NULL AND SOURCE_SYSTEM_REFERENCE IS NULL AND SOURCE_SYSTEM_REFERENCE_DESC IS NULL ) ';
583 l_dyn_sql := l_dyn_sql || ' ) ';
584 l_dyn_sql := l_dyn_sql || ' AND ';
585 l_dyn_sql := l_dyn_sql || ' ( ' || l_column_list || ' ) ';
586 l_dyn_sql := l_dyn_sql || ' AND SET_PROCESS_ID = :SET_PROCESS_ID_1 ';
587
588 ------------------------------------------------------------------------------------------------
589 -- Fix for 11.5.10: Including PROCESS_FLAG status during this DELETE operation.
590 --
591 -- When ERROR happens during PRIMARY_UOM_CODE processing (NOTE: This is the first
592 -- significant Value-to-ID conversion) then MSII.PROCESS_FLAG is set to something
593 -- other than 1. Because of this, the subsequent transfer of the Data from EBI to MSII
594 -- doesnot happen (as all SQLs check for EBI, MSII Process St atus to be 1 for transfer).
595 -- So, this DELETE will go through successfully, as all the columns are NULL (other than
596 -- ITEM_NUMBER, ORGANIZATION_CODE.)
597 -- Then EBI stays in PROCESS_STATUS = 1, which is later converted to 7 in Item_intf_completion.
598 --
599 -- Because of this User-Defined attrs for those rows are ERRONEOUSLY picked and processed.
600 ------------------------------------------------------------------------------------------------
601 l_dyn_sql := l_dyn_sql || ' AND PROCESS_FLAG = :PROCESS_STATUS_1 '; --Bug 3763665
602 l_dyn_sql := l_dyn_sql || ' AND ( ';
603 l_dyn_sql := l_dyn_sql || ' EXISTS ( '; -- there exists a row where item is being Created or updated in the same request
604 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
605 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_INTERFACE MSI ';
606 l_dyn_sql := l_dyn_sql || ' WHERE MSI.DESCRIPTION IS NOT NULL ';
607 l_dyn_sql := l_dyn_sql || ' AND ((MSI.ITEM_NUMBER IS NULL AND MSII.ITEM_NUMBER IS NULL) OR (MSI.ITEM_NUMBER = MSII.ITEM_NUMBER))';
608 l_dyn_sql := l_dyn_sql || ' AND SET_PROCESS_ID = :SET_PROCESS_ID_2 ';
609 l_dyn_sql := l_dyn_sql || ' AND PROCESS_FLAG = :PROCESS_STATUS_2 ';
610 l_dyn_sql := l_dyn_sql || ' ) ';
611 l_dyn_sql := l_dyn_sql || ' OR EXISTS( ';
612 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
613 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_B MSI ';
614 l_dyn_sql := l_dyn_sql || ' WHERE MSII.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID ';
615 l_dyn_sql := l_dyn_sql || ' AND MSII.ORGANIZATION_ID = MSI.ORGANIZATION_ID ';
616 l_dyn_sql := l_dyn_sql || ' ) ';-- End Bug 3763665
617 l_dyn_sql := l_dyn_sql || ' ) ';
618 Write_Debug(' DELETE MSII sql: '||l_dyn_sql);
619 IF (l_column_list IS NOT NULL) THEN
620 EXECUTE IMMEDIATE l_dyn_sql USING p_set_process_id,G_PROCESS_STATUS,p_set_process_id,G_PROCESS_STATUS;
621 END IF;
622 Write_Debug('delete_records_from_MSII : NEW Deleted redundant / unnecessary rows from MSII');
623 EXCEPTION
624 WHEN OTHERS THEN
625 RAISE;
626 END delete_records_from_MSII;
627 -----------------------------------------------------------------------
628 -- Fix for Bug# 3970069.
629 -- Insert into MTL_INTERFACE_ERRORS through autonomous transaction
630 -- commit. Earlier for any exception during Java Conc Program's
631 -- AM.commit(), the errors wouldnot get logged. By following Autonomous
632 -- Transaction block, that issue gets resolved.
633 -----------------------------------------------------------------------
634 PROCEDURE Insert_Mtl_Intf_Err( p_transaction_id IN VARCHAR2
635 , p_bo_identifier IN VARCHAR2
636 , p_error_entity_code IN VARCHAR2
637 , p_error_table_name IN VARCHAR2
638 , p_error_msg IN VARCHAR2
639 ) IS
640
641 PRAGMA AUTONOMOUS_TRANSACTION;
642
643 BEGIN
644 SetGobals();
645
646 INSERT INTO MTL_INTERFACE_ERRORS
647 ( ORGANIZATION_ID
648 , UNIQUE_ID
649 , LAST_UPDATE_DATE
650 , LAST_UPDATED_BY
651 , CREATION_DATE
652 , CREATED_BY
653 , LAST_UPDATE_LOGIN
654 , TABLE_NAME
655 , MESSAGE_NAME
656 , COLUMN_NAME
657 , REQUEST_ID
658 , PROGRAM_APPLICATION_ID
659 , PROGRAM_ID
660 , PROGRAM_UPDATE_DATE
661 , ERROR_MESSAGE
662 , TRANSACTION_ID
663 , ENTITY_IDENTIFIER
664 , BO_IDENTIFIER)
665 VALUES
666 ( NULL
667 , NULL
668 , SYSDATE
669 , G_USER_ID
670 , SYSDATE
671 , G_USER_ID
672 , G_LOGIN_ID
673 , p_error_table_name
674 , NULL
675 , NULL
676 , G_REQUEST_ID
677 , G_PROG_APPID
678 , G_PROG_ID
679 , SYSDATE
680 , p_error_msg
681 , p_transaction_id
682 , p_error_entity_code
683 , p_bo_identifier
684 );
685
686 COMMIT;
687
688 END Insert_Mtl_Intf_Err;
689
690 -----------------------------------------------------------------------
691 -- Fix for Bug# 3945885.
692 -- Generate Seq Item Numbers, for all Rows per ResultFmt_Usage_ID
693 -- where Item Number column are NULL.
694 -----------------------------------------------------------------------
695 PROCEDURE Log_ItemNums_ToBe_Processed(p_resultfmt_usage_id IN NUMBER,
696 p_item_num_colname IN VARCHAR2) IS
697
698 l_item_num_sql VARCHAR2(10000) :=
699 ' SELECT '|| p_item_num_colname
700 || ' FROM EGO_BULKLOAD_INTF '
701 || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
702 --|| ' AND PROCESS_STATUS = 1';
703
704 -----------------------------------------------------------------------
705 -- Variables used to query Item Number Generation Method
706 -----------------------------------------------------------------------
707 l_item_num_table DBMS_SQL.VARCHAR2_TABLE;
708 l_item_num_cursor INTEGER;
709 l_item_num_exec INTEGER;
710 l_item_num_rows_cnt NUMBER;
711
712 l_msg fnd_new_messages.message_text%TYPE;
713 -----------------------------------------------------------------------
714
715 BEGIN
716
717 l_item_num_cursor := DBMS_SQL.OPEN_CURSOR;
718 --Developer_Debug('l_item_num_sql => '||l_item_num_sql);
719
720 DBMS_SQL.PARSE(l_item_num_cursor, l_item_num_sql, DBMS_SQL.NATIVE);
721
722 DBMS_SQL.DEFINE_ARRAY(
723 c => l_item_num_cursor -- cursor --
724 , position => 1 -- select position --
725 , c_tab => l_item_num_table -- table of chars --
726 , cnt => 10000 -- rows requested --
727 , lower_bound => 1 -- start at --
728 );
729
730 DBMS_SQL.BIND_VARIABLE(l_item_num_cursor, ':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
731
732 l_item_num_exec := DBMS_SQL.EXECUTE(l_item_num_cursor);
733 l_item_num_rows_cnt := DBMS_SQL.FETCH_ROWS(l_item_num_cursor);
734
735 DBMS_SQL.COLUMN_VALUE(l_item_num_cursor, 1, l_item_num_table);
736 -- Bug : 4099546
737 DBMS_SQL.CLOSE_CURSOR(l_item_num_cursor);
738 FND_MESSAGE.SET_NAME('EGO','EGO_NUM_OF_ITEMS_PROCD');
739 l_msg := FND_MESSAGE.GET;
740
741 Developer_Debug(l_msg||' '||To_char(l_item_num_rows_cnt));
742
743 FND_MESSAGE.SET_NAME('EGO','EGO_ROW');
744 l_msg := FND_MESSAGE.GET;
745
746 IF (l_item_num_rows_cnt > 0) THEN
747 FOR i IN 1..l_item_num_rows_cnt LOOP
748 Developer_Debug(l_msg||' ['||i||'] = '||l_item_num_table(i));
749 END LOOP; --end: FOR i IN 1..l_item_num_rows_cnt LOOP
750 END IF; --end: IF (l_item_num_rows_cnt > 0) THEN
751
752 END Log_ItemNums_ToBe_Processed;
753
754 -- 5653266 commenting out the code
755 -- this procedure must be shifted to fag end of item_open_interface_process
756 -- in the package EGO_ITEM_OPEN_INTERFACE_PVT and the logging to be changed
757 -- to concurrent log and message must have tokens for item number and org
758 -- discuss with PM before implenenting the above change
759 /***
760 -----------------------------------------------------------------------
761 -- API FOR BUG 4101754 --
762 -- THIS API WOULD LOG A MESSAGE IN FOR EVERY SUCCESSFUL ITEM --
763 -- CREATED --
764 -----------------------------------------------------------------------
765 PROCEDURE Log_created_Items (REQUEST_ID IN NUMBER)
766 IS
767 l_item_num_sql VARCHAR2(10000);
768 l_item_num_table DBMS_SQL.VARCHAR2_TABLE;
769 l_transaction_id_table DBMS_SQL.NUMBER_TABLE;
770 l_item_num_cursor INTEGER;
771 l_item_num_exec INTEGER;
772 l_item_num_rows_cnt NUMBER;
773 l_msg fnd_new_messages.message_text%TYPE;
774 l_token_tbl Error_Handler.Token_Tbl_Type;
775
776 BEGIN
777
778 l_item_num_sql :=
779 ' SELECT SEGMENT1 , TRANSACTION_ID '
780 || ' FROM MTL_SYSTEM_ITEMS_INTERFACE '
781 || ' WHERE REQUEST_ID = '||REQUEST_ID
782 || ' AND PROCESS_FLAG = '||G_INTF_STATUS_SUCCESS
783 || ' AND TRANSACTION_TYPE = '''||G_CREATE||'''';
784
785 l_item_num_cursor := DBMS_SQL.OPEN_CURSOR;
786 DBMS_SQL.PARSE(l_item_num_cursor, l_item_num_sql, DBMS_SQL.NATIVE);
787 DBMS_SQL.DEFINE_ARRAY(
788 c => l_item_num_cursor
789 , position => 1
790 , c_tab => l_item_num_table
791 , cnt => 10000
792 , lower_bound => 1
793 );
794
795 DBMS_SQL.DEFINE_ARRAY(
796 c => l_item_num_cursor
797 , position => 2
798 , n_tab => l_transaction_id_table
799 , cnt => 10000
800 , lower_bound => 1
801 );
802
803 l_item_num_exec := DBMS_SQL.EXECUTE(l_item_num_cursor);
804 l_item_num_rows_cnt := DBMS_SQL.FETCH_ROWS(l_item_num_cursor);
805 DBMS_SQL.COLUMN_VALUE(l_item_num_cursor, 1, l_item_num_table);
806 DBMS_SQL.COLUMN_VALUE(l_item_num_cursor, 2, l_transaction_id_table);
807 DBMS_SQL.CLOSE_CURSOR(l_item_num_cursor);
808 IF (l_item_num_rows_cnt > 0) THEN
809 FOR i IN 1..l_item_num_rows_cnt LOOP
810 Developer_Debug(l_msg||' ['||i||'] = '||l_item_num_table(i));
811 Error_Handler.Add_Error_Message
812 ( p_message_name => 'EGO_ITEM_CREATION_SUCC'
813 , p_application_id => 'EGO'
814 , p_message_text => NULL
815 , p_token_tbl => l_token_tbl
816 , p_message_type => 'E'
817 , p_row_identifier => l_transaction_id_table(i)
818 , p_table_name => 'MTL_SYSTEM_ITEMS_INTERFACE'
819 , p_entity_id => NULL
820 , p_entity_index => NULL
821 , p_entity_code => G_ERROR_ENTITY_CODE
822 );
823 END LOOP;
824 END IF;
825
826 END Log_created_Items;
827 ***/
828
829 ------------------------------------------------------------------------------
830 -- Fix for Bug# 3945885.
831 --
832 -- API Name: Get_Seq_Gen_Item_Nums
833 --
834 -- Description:
835 -- API to return a Sequence of Item Numbers, given the ResultFmt_Usage_ID
836 -- and Item Catalog Group ID. Row count returned will be number of Rows per
837 -- ResultFmt_Usage_ID where Item Number column are NULL.
838 ------------------------------------------------------------------------------
839 PROCEDURE Get_Seq_Gen_Item_Nums(p_resultfmt_usage_id IN NUMBER,
840 p_item_catalog_group_id IN NUMBER,
841 p_item_num_colname IN VARCHAR2,
842 x_item_num_tbl IN OUT NOCOPY EGO_VARCHAR_TBL_TYPE) IS
843
844
845 --------------------------------------------------------------------
846 --Fetch the Org IDs in EBI, for which Item Number column is NULL
847 --------------------------------------------------------------------
848 l_org_id_sql VARCHAR2(10000) :=
849 ' SELECT '
850 || ' INSTANCE_PK2_VALUE '
851 || ' FROM EGO_BULKLOAD_INTF '
852 || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID'
853 || ' AND '|| p_item_num_colname ||' IS NULL '
854 || ' AND PROCESS_STATUS = 1';
855
856
857 -----------------------------------------------------------------------
858 -- Variables used to query Item Number Generation Method
859 -----------------------------------------------------------------------
860 l_org_id_table DBMS_SQL.VARCHAR2_TABLE;
861 l_org_id_cursor INTEGER;
862 l_org_id_exec INTEGER;
863 l_org_id_rows_cnt NUMBER;
864
865 l_item_num_tbl EGO_VARCHAR_TBL_TYPE;
866 l_exists VARCHAR2(1);
867 l_can_itemnum_gen BOOLEAN;
868 l_itemgen_rownum NUMBER;
869 l_new_itemgen_sql VARCHAR2(1000);
870 -----------------------------------------------------------------------
871
872 BEGIN
873
874 l_org_id_cursor := DBMS_SQL.OPEN_CURSOR;
875 --Write_Debug('l_org_id_sql => '||l_org_id_sql);
876
877 DBMS_SQL.PARSE(l_org_id_cursor, l_org_id_sql, DBMS_SQL.NATIVE);
878
879 DBMS_SQL.DEFINE_ARRAY(
880 c => l_org_id_cursor -- cursor --
881 , position => 1 -- select position --
882 , c_tab => l_org_id_table -- table of chars --
883 , cnt => 10000 -- rows requested --
884 , lower_bound => 1 -- start at --
885 );
886
887 DBMS_SQL.BIND_VARIABLE(l_org_id_cursor, ':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
888
889 l_org_id_exec := DBMS_SQL.EXECUTE(l_org_id_cursor);
890 l_org_id_rows_cnt := DBMS_SQL.FETCH_ROWS(l_org_id_cursor);
891
892 DBMS_SQL.COLUMN_VALUE(l_org_id_cursor, 1, l_org_id_table);
893
894 Write_Debug('Number of rows where ITEM_NUMBER is NULL => '||To_char(l_org_id_rows_cnt));
895
896 IF (l_org_id_rows_cnt > 0) THEN
897
898 EGO_ITEM_PVT.Get_Seq_Gen_Item_Nums
899 (
900 p_item_catalog_group_id => p_item_catalog_group_id
901 ,p_org_id_tbl => l_org_id_table
902 ,x_item_num_tbl => x_item_num_tbl
903 );
904 ELSE
905 x_item_num_tbl := NULL;
906 END IF; --end: IF (l_org_id_rows_cnt > 0) THEN
907 -- Bug : 4099546
908 DBMS_SQL.CLOSE_CURSOR(l_org_id_cursor);
909 END Get_Seq_Gen_Item_Nums;
910
911
912 ---------------------------------------------------------------------------
913 -- To return the Display value of Attribute, given the Attribute Code. --
914 ---------------------------------------------------------------------------
915 FUNCTION get_attr_display_name
916 (
917 p_attribute_code IN EGO_RESULTS_FORMAT_COLUMNS_V.ATTRIBUTE_CODE%TYPE
918 )
919 RETURN VARCHAR2 IS
920
921 l_attr_group_id NUMBER;
922 l_attr_id NUMBER;
923 l_temp_str VARCHAR2(30); --R12C UOM Changes
924 l_attr_group_disp_name EGO_ATTR_GROUPS_V.ATTR_GROUP_DISP_NAME%TYPE;
925 l_attr_disp_name EGO_ATTRS_V.ATTR_DISPLAY_NAME%TYPE;
926
927 CURSOR c_attr_group_disp_name(p_attr_group_id IN NUMBER) IS
928 SELECT attr_group_disp_name
929 FROM ego_attr_groups_v
930 WHERE attr_group_id = p_attr_group_id;
931
932 CURSOR c_attr_disp_name(p_attr_id IN NUMBER) IS
933 SELECT attr_display_name
934 FROM ego_attrs_v
935 WHERE attr_id = p_attr_id;
936
937 BEGIN
938
939 l_attr_group_id := To_Number(SUBSTR(p_attribute_code, 1, INSTR(p_attribute_code, '$$') - 1));
940 l_temp_str := SUBSTR(p_attribute_code, INSTR(p_attribute_code, '$$')+2);
941
942 IF (INSTR(l_temp_str, '$$UOM') > 0) THEN
943 l_temp_str:= SUBSTR(l_temp_str, 1, INSTR(l_temp_str, '$$')-1); --R12C UOM Changes
944 END IF;
945
946 l_attr_id := To_Number(l_temp_str);
947
948 OPEN c_attr_group_disp_name(l_attr_group_id);
949 FETCH c_attr_group_disp_name INTO l_attr_group_disp_name;
950 IF c_attr_group_disp_name%NOTFOUND THEN
951 l_attr_group_disp_name := NULL;
952 END IF;
953 CLOSE c_attr_group_disp_name;
954
955 OPEN c_attr_disp_name(l_attr_id);
956 FETCH c_attr_disp_name INTO l_attr_disp_name;
957 IF c_attr_disp_name%NOTFOUND THEN
958 l_attr_disp_name := NULL;
959 END IF;
960 CLOSE c_attr_disp_name;
961
962 IF (l_attr_group_disp_name IS NULL OR
963 l_attr_disp_name IS NULL) THEN
964 RETURN NULL;
965 ELSE
966 RETURN l_attr_group_disp_name||'.'||l_attr_disp_name;
967 END IF;
968
969 END;
970
971
972 -------------------------------------------------------------
973 -- Delete all the earlier loads from the same spreadsheet. --
974 -------------------------------------------------------------
975
976 PROCEDURE setup_buffer_intf_table(
977 p_resultfmt_usage_id IN NUMBER
978 ) IS
979
980 --------------------------------------------
981 -- Long Dynamic SQL String
982 --------------------------------------------
983 l_dyn_sql VARCHAR2(10000);
984
985 BEGIN
986
987 --Delete all the earlier loads from the same spreadsheet.
988 DELETE EGO_BULKLOAD_INTF
989 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
990 AND PROCESS_STATUS <> 1;
991
992
993 Write_Debug('Setting up the Error Debug File, so that Java Conc Program can use it.');
994 ---------------------------------------------------------------
995 -- Introduced for 11.5.10, so that Java Conc Program can --
996 -- continue writing to the same Error Log File. --
997 ---------------------------------------------------------------
998 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI';
999 l_dyn_sql := l_dyn_sql || ' SET '||G_ERR_LOGFILE_COL ||' = ''' || G_ERRFILE_PATH_AND_NAME ||'''';
1000 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1001 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1002 --------------------------------------------------------------
1003 -- Updates only 1 row that matches the criterion, for --
1004 -- performance reasons. --
1005 --------------------------------------------------------------
1006 l_dyn_sql := l_dyn_sql || ' AND ROWNUM < 2 ';
1007
1008
1009 Write_Debug(l_dyn_sql);
1010
1011 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1012
1013 END setup_buffer_intf_table;
1014
1015
1016 -------------------------------------------------------------
1017 -- Sets if the Batch that is being processed in PDH or Not --
1018 -------------------------------------------------------------
1019
1020 PROCEDURE setup_batch_info IS
1021 l_source_system_id NUMBER;
1022 BEGIN
1023
1024 Write_Debug('Setting up the batch info for : ' || G_MSII_SET_PROCESS_ID);
1025
1026 ---------------------------------------------------------------
1027 -- Introduced for R12, so that the rest of the api call can --
1028 -- set the process status/flag accordingly. --
1029 ---------------------------------------------------------------
1030 SELECT source_system_id into l_source_system_id
1031 FROM EGO_IMPORT_BATCHES_B
1032 WHERE batch_id = G_MSII_SET_PROCESS_ID;
1033
1034 IF l_source_system_id = EGO_IMPORT_PVT.Get_PDH_Source_System_Id THEN
1035 G_PDH_BATCH := TRUE;
1036 G_PROCESS_STATUS := 1;
1037 ELSE
1038 G_PDH_BATCH := FALSE;
1039 G_PROCESS_STATUS := 0;
1040 END IF;
1041
1042 Write_Debug('Setting process status to ' || G_PROCESS_STATUS);
1043
1044 EXCEPTION
1045 WHEN NO_DATA_FOUND THEN
1046 G_PDH_BATCH := TRUE;
1047 G_PROCESS_STATUS := 1;
1048
1049 END setup_batch_info;
1050
1051
1052 -- Bug: 3778006
1053 -------------------------------------------------------------------------
1054 -- Function to get description generation method for catalog category --
1055 -------------------------------------------------------------------------
1056 FUNCTION get_desc_gen_method(p_catalog_group_id NUMBER) RETURN VARCHAR2
1057 IS
1058 CURSOR c_cat_grp(c_catalog_group_id NUMBER) IS
1059 SELECT ITEM_DESC_GEN_METHOD, ITEM_CATALOG_GROUP_ID, LEVEL
1060 FROM MTL_ITEM_CATALOG_GROUPS_B
1061 WHERE LEVEL > 1
1062 CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID
1063 START WITH ITEM_CATALOG_GROUP_ID = c_catalog_group_id
1064 ORDER BY LEVEL;
1065
1066 l_desc_gen_method VARCHAR2(10) := 'U';
1067 BEGIN
1068 IF p_catalog_group_id IS NOT NULL THEN
1069 -----------------------------------------------------------------------
1070 -- Get the description generation method for catalog category itself --
1071 -----------------------------------------------------------------------
1072 SELECT ITEM_DESC_GEN_METHOD into l_desc_gen_method
1073 FROM MTL_ITEM_CATALOG_GROUPS_B
1074 WHERE ITEM_CATALOG_GROUP_ID = p_catalog_group_id;
1075
1076 ------------------------------------------------------------------------
1077 -- If the generation method is I i.e. inherit from parent, then check --
1078 -- parents till we get something other than I --
1079 ------------------------------------------------------------------------
1080 IF NVL(l_desc_gen_method, 'U') = 'I' THEN
1081 FOR i IN c_cat_grp(p_catalog_group_id) LOOP
1082 l_desc_gen_method := i.ITEM_DESC_GEN_METHOD;
1083 IF NVL(l_desc_gen_method, 'U') <> 'I' THEN
1084 EXIT;
1085 END IF;
1086 END LOOP;
1087 END IF;
1088
1089 ------------------------------------------------------------------------
1090 -- If the generation method is I even for the topmost parent, then --
1091 -- treat it as U (user entered) --
1092 ------------------------------------------------------------------------
1093 IF NVL(l_desc_gen_method, 'U') = 'I' THEN
1094 l_desc_gen_method := 'U';
1095 END IF;
1096
1097 END IF; -- end if p_catalog_group_id is not null
1098
1099 RETURN l_desc_gen_method;
1100
1101 EXCEPTION WHEN OTHERS THEN
1102 RETURN 'U';
1103 END get_desc_gen_method;
1104
1105 ----------------------------------------------------------
1106 -- Populate Item Interface Lines --
1107 ----------------------------------------------------------
1108
1109 PROCEDURE load_item_interface
1110 (
1111 p_resultfmt_usage_id IN NUMBER,
1112 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
1113 p_set_process_id IN NUMBER,
1114 x_set_process_id OUT NOCOPY NUMBER,
1115 x_errbuff OUT NOCOPY VARCHAR2,
1116 x_retcode OUT NOCOPY VARCHAR2
1117 ) IS
1118
1119 -- Start OF comments
1120 -- API name : Populate MSII Item Interface Lines
1121 -- TYPE : Public (called by Concurrent Program Wrapper API)
1122 -- Pre-reqs : None
1123 -- FUNCTION : Populate and Load Item interfance lines in MSII
1124 --
1125
1126
1127 ---------------------------------------------------------------
1128 -- To get the Item Base attr columns in the Result Format.
1129 ---------------------------------------------------------------
1130 CURSOR c_item_base_attr_intf_cols (c_resultfmt_usage_id IN NUMBER) IS
1131 SELECT attribute_code, intf_column_name
1132 FROM ego_results_fmt_usages
1133 WHERE resultfmt_usage_id = c_resultfmt_usage_id
1134 AND attribute_code NOT LIKE '%$$%'
1135 AND attribute_code <> 'APPROVAL_STATUS' -- bug: 3433942
1136 AND attribute_code <> 'MASTER_ORGANIZATION_ID' -- bug: 8347241
1137 AND attribute_code NOT IN ('SUPPLIER_NAME','SUPPLIER_SITE','SUPPLIER_PRIMARY','SUPPLIER_STATUS','SUPPLIERSITE_STATUS'
1138 ,'SUPPLIERSITE_PRIMARY','SUPPLIERSITE_STORE_STATUS','SUPPLIER_NUMBER')
1139 AND attribute_code NOT IN --Segregating Item Base Attributes using this clause
1140 (
1141 select LOOKUP_CODE CODE
1142 from FND_LOOKUP_VALUES
1143 where LOOKUP_TYPE = 'EGO_ITEM_REV_HDR_ATTR_GRP'
1144 AND LANGUAGE = USERENV('LANG')
1145 AND ENABLED_FLAG = 'Y'
1146 )
1147 AND attribute_code <> G_REV_EFF_DATE_ATTR_CODE --Bug 6139409
1148 ORDER BY intf_column_name;-- Bug: 3340808
1149
1150 --------------------------------------------------------------------------
1151 -- To check if the given attribute code is a valid BOM Component Column.
1152 --------------------------------------------------------------------------
1153 CURSOR c_bom_comp_col_exists(c_attribute_code IN VARCHAR2) IS
1154 SELECT 'x'
1155 FROM bom_component_columns
1156 WHERE attribute_code = c_attribute_code
1157 AND parent_entity = 'ITEM';
1158 -- AND whereclause IS NOT NULL;
1159
1160 --------------------------------------------------------------------------
1161 -- To check if the given Set Process ID already exists in MSII.
1162 --------------------------------------------------------------------------
1163 CURSOR c_msii_set_id_exists(c_set_process_id IN NUMBER) IS
1164 SELECT 'x'
1165 FROM mtl_system_items_interface
1166 WHERE set_process_id = c_set_process_id;
1167
1168
1169 ---------------------------------------------------------------------
1170 -- Type Declarations
1171 ---------------------------------------------------------------------
1172 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
1173 INDEX BY BINARY_INTEGER;
1174
1175 -------------------------
1176 -- local variables --
1177 -------------------------
1178 l_prod_col_name_tbl VARCHAR_TBL_TYPE;
1179 l_intf_col_name_tbl VARCHAR_TBL_TYPE;
1180
1181 l_prod_col_name VARCHAR2(256);
1182 l_intf_col_name VARCHAR2(256);
1183
1184 ---------------------------------------------------------------------
1185 -- Assuming that the column name will not be more than 30 chars.
1186 ---------------------------------------------------------------------
1187 l_item_number_col VARCHAR2(50);
1188 l_org_code_col VARCHAR2(50);
1189 l_item_catalog_name_col VARCHAR2(50);
1190 l_primary_uom_col VARCHAR2(50);
1191 l_lifecycle_col VARCHAR2(50);
1192 l_lifecycle_phase_col VARCHAR2(50);
1193 l_user_item_type_col VARCHAR2(50);
1194 l_bom_item_type_col VARCHAR2(50);
1195 l_eng_item_flag_col VARCHAR2(50);
1196 l_lifecycle_col_val VARCHAR2(50);
1197 l_lifecycle_phase_col_val VARCHAR2(50);
1198 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
1199 l_conversions_col VARCHAR2(50);
1200 l_secondary_def_col VARCHAR2(50);
1201 l_dual_uom_dev_low_col VARCHAR2(50);
1202 l_dual_uom_dev_high_col VARCHAR2(50);
1203 l_ont_pricing_qty_src_col VARCHAR2(50);
1204 l_secondary_uom_code_col VARCHAR2(50);
1205 l_tracking_qty_ind_col VARCHAR2(50);
1206 --Bug: 3969593 End
1207
1208 l_catalog_group_id VARCHAR2(50);
1209 l_inventory_item_id MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE;
1210
1211 l_msii_set_process_id NUMBER;
1212 i NUMBER;
1213 l_cursor_select INTEGER;
1214 l_cursor_execute INTEGER;
1215
1216 l_item_number_table DBMS_SQL.VARCHAR2_TABLE;
1217 l_org_id_table DBMS_SQL.NUMBER_TABLE;
1218 l_trans_type_table DBMS_SQL.VARCHAR2_TABLE;
1219 l_trans_id_table DBMS_SQL.NUMBER_TABLE;
1220
1221 ---------------------------------------------------------------------
1222 -- This is to store the Sequence Generated Item Numbers.
1223 ---------------------------------------------------------------------
1224 -- l_gen_item_num_tbl EGO_VARCHAR_TBL_TYPE;
1225 -- l_gen_itemnum_indx NUMBER;
1226
1227 l_temp NUMBER(10) := 1;
1228 l_count NUMBER := 0;
1229 l_exists VARCHAR2(2);
1230 l_itemgen_count NUMBER;
1231
1232 l_value_to_id_col_exists BOOLEAN := FALSE;
1233 l_bom_col_exists BOOLEAN := FALSE;
1234 l_bom_prod_col_name VARCHAR2(50);
1235
1236 --------------------------------------------
1237 -- Long Dynamic SQL String
1238 --------------------------------------------
1239 l_dyn_sql VARCHAR2(10000);
1240 l_desc_gen_method VARCHAR2(10) := 'U'; -- Bug: 3778006
1241 --Bug 4713312
1242 l_col_name VARCHAR2(40);
1243
1244 -- fix bug: 14307504
1245 l_executed_item DBMS_SQL.VARCHAR2_TABLE;
1246 l_executed_item_flag boolean := false;
1247
1248 BEGIN
1249
1250 Write_Debug('About to populate the EBI with Trans IDs');
1251 --------------------------------------------------------------------
1252 --Populate the Transaction IDs for current Result fmt usage ID
1253 --------------------------------------------------------------------
1254 UPDATE ego_bulkload_intf
1255 --The Transaction ID sequence that is used in INVPOPIF package to
1256 --auto-populate Transaction ID in MSII.
1257 SET transaction_id = MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL
1258 WHERE resultfmt_usage_id = p_resultfmt_usage_id;
1259
1260 Write_Debug('Retrieving the Display and INTF cols');
1261 i := 0;
1262 --------------------------------------------------------------------
1263 -- Saving the column names in local table for easy retrieval later.
1264 -- Also save important columns such as Item ID, Org ID etc.,
1265 --------------------------------------------------------------------
1266 FOR c_item_base_attr_intf_rec IN c_item_base_attr_intf_cols
1267 (
1268 p_resultfmt_usage_id
1269 )
1270 LOOP
1271
1272 l_prod_col_name := c_item_base_attr_intf_rec.attribute_code;
1273 l_intf_col_name := c_item_base_attr_intf_rec.intf_column_name;
1274
1275 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM) THEN
1276 OPEN c_bom_comp_col_exists(l_prod_col_name);
1277 FETCH c_bom_comp_col_exists INTO l_exists;
1278 IF c_bom_comp_col_exists%FOUND THEN
1279 l_bom_col_exists := TRUE;
1280 ELSE
1281 l_bom_col_exists := FALSE;
1282 END IF;
1283 CLOSE c_bom_comp_col_exists;
1284 END IF;
1285
1286
1287 IF (l_bom_col_exists = TRUE) THEN
1288 Write_Debug('The column: ' || l_prod_col_name || ' and BOM_COL_EXISTS value IS TRUE');
1289 ELSE
1290 Write_Debug('The column: ' || l_prod_col_name || ' and BOM_COL_EXISTS value IS FALSE');
1291 END IF;
1292
1293 Write_Debug('The caller identity is : '|| p_caller_identifier);
1294
1295 --------------------------------------------------------------------
1296 -- If the Caller Identifer is G_BOM and the column exists in
1297 -- BOM_COMPONENT_COLUMNS then fetch the Correct prod column
1298 -- name from BOM_COMPONENT_COLUMNS.
1299 --------------------------------------------------------------------
1300 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM AND
1301 l_bom_col_exists = TRUE AND l_prod_col_name <> G_ITEM_NUMBER)
1302 THEN
1303 SELECT BOM_INTF_COLUMN_NAME INTO l_bom_prod_col_name
1304 FROM BOM_COMPONENT_COLUMNS
1305 WHERE Attribute_Code = l_prod_col_name AND Parent_Entity = 'ITEM';
1306 Write_Debug('The column value from BCC: ' || l_bom_prod_col_name);
1307 IF l_bom_prod_col_name IS NOT NULL THEN
1308 l_prod_col_name := l_bom_prod_col_name;
1309 END IF;
1310 Write_Debug('The column value after getting from BCC: ' || l_prod_col_name);
1311 END IF;
1312
1313 --------------------------------------------------------------------
1314 -- If the Caller Identifer is G_ITEM, then save the column info.
1315 -- If the Caller Identifer is G_BOM, and the column exists in
1316 -- BOM_COMPONENT_COLUMNS, then save the column info.
1317 --------------------------------------------------------------------
1318 IF (
1319 (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM) OR
1320 (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM AND
1321 l_bom_col_exists = TRUE
1322 )
1323 ) THEN
1324 --------------------------------------------------------------------
1325 --Store the Item Number column name in the Generic Interface
1326 --------------------------------------------------------------------
1327 IF (l_prod_col_name = G_ITEM_NUMBER) THEN
1328 l_item_number_col := l_intf_col_name;
1329 Write_Debug('Item Number : '||l_item_number_col);
1330 --------------------------------------------------------------------
1331 --Store the Organization Code column name in the Generic Interface
1332 --------------------------------------------------------------------
1333 ELSIF (l_prod_col_name = G_ORG_CODE) THEN
1334 l_org_code_col := l_intf_col_name;
1335 Write_Debug('Organization Code : '||l_org_code_col);
1336 ELSE
1337 --------------------------------------------------------------------
1338 --Saving the Rest of column names.
1339 --------------------------------------------------------------------
1340 IF (l_prod_col_name = G_ITEM_CATALOG_GROUP) THEN
1341 l_item_catalog_name_col := l_intf_col_name;
1342 ELSIF (l_prod_col_name = G_PRIMARY_UOM) THEN
1343 l_primary_uom_col := l_intf_col_name;
1344 ELSIF (l_prod_col_name = G_LIFECYCLE) THEN
1345 l_lifecycle_col := l_intf_col_name;
1346 ELSIF (l_prod_col_name = G_LIFECYCLE_PHASE) THEN
1347 l_lifecycle_phase_col := l_intf_col_name;
1348 ELSIF (l_prod_col_name = G_USER_ITEM_TYPE) THEN
1349 l_user_item_type_col := l_intf_col_name;
1350 ELSIF (l_prod_col_name = G_BOM_ITEM_TYPE) THEN
1351 l_bom_item_type_col := l_intf_col_name;
1352 ELSIF (l_prod_col_name = G_ENG_ITEM_FLAG) THEN
1353 l_eng_item_flag_col := l_intf_col_name;
1354 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
1355 ELSIF (l_prod_col_name = G_CONVERSIONS) THEN
1356 l_conversions_col := l_intf_col_name;
1357 ELSIF (l_prod_col_name = G_SECONDARY_DEF_IND) THEN
1358 l_secondary_def_col := l_intf_col_name;
1359 ELSIF (l_prod_col_name = G_DUAL_UOM_DEV_LOW) THEN
1360 l_dual_uom_dev_low_col := l_intf_col_name;
1361 ELSIF (l_prod_col_name = G_DUAL_UOM_DEV_HIGH) THEN
1362 l_dual_uom_dev_high_col := l_intf_col_name;
1363 ELSIF (l_prod_col_name = G_ONT_PRICING_QTY_SRC) THEN
1364 l_ont_pricing_qty_src_col := l_intf_col_name;
1365 ELSIF (l_prod_col_name = G_SECONDARY_UOM_CODE) THEN
1366 l_secondary_uom_code_col := l_intf_col_name;
1367 ELSIF (l_prod_col_name = G_TRACKING_QTY_IND) THEN
1368 l_tracking_qty_ind_col := l_intf_col_name;
1369 --Bug: 3969593 End
1370 ELSIF (l_prod_col_name = G_INVENTORY_ITEM_STATUS) THEN-- required in error handler
1371 l_inventory_item_status_col := l_intf_col_name;
1372 ELSIF (l_prod_col_name = G_TRADE_ITEM_DESCRIPTOR) THEN
1373 -- R12C Pack Hierarchy Changes for Trade Item Descriptor --
1374 l_trade_item_descriptor_col := l_intf_col_name;
1375 END IF;
1376
1377 -- R12 - to update GTIN and GTIN description in MTL_SYSTEM_ITEMS_INTERFACE table
1378 IF (l_prod_col_name = G_GTIN_NUM_ATTR_CODE) THEN
1379 l_prod_col_name_tbl(i) := G_GTIN_NUM_DB_COL;
1380 ELSIF (l_prod_col_name = G_GTIN_DESC_ATTR_CODE) THEN
1381 l_prod_col_name_tbl(i) := G_GTIN_DESC_DB_COL;
1382 ELSE
1383 l_prod_col_name_tbl(i) := l_prod_col_name;
1384 END IF;
1385
1386 l_intf_col_name_tbl(i) := l_intf_col_name;
1387
1388 Write_Debug('l_prod_col_name_tbl('||i||') : '||l_prod_col_name_tbl(i));
1389 Write_Debug('l_intf_col_name_tbl('||i||') : '||l_intf_col_name_tbl(i));
1390 i := i+1;
1391 END IF; --end: IF (l_prod_col_name = G_ITEM_NUMBER) THEN
1392 END IF; --end: IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM)...
1393 END LOOP;--end: FOR c_item_base_attr_intf_rec..
1394
1395
1396 l_value_to_id_col_exists := FALSE;
1397
1398 -----------------------------------------------------------------------
1399 -- Save all Value-to-ID conversion columns in designated places in EBI.
1400 -----------------------------------------------------------------------
1401 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1402 l_dyn_sql := l_dyn_sql || ' SET ';
1403 IF l_item_catalog_name_col IS NOT NULL THEN
1404 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_EBI_COL||' = '||l_item_catalog_name_col|| ' ,';
1405 l_value_to_id_col_exists := TRUE;
1406 END IF;
1407 IF l_primary_uom_col IS NOT NULL THEN
1408 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_EBI_COL||' = '||l_primary_uom_col|| ' ,';
1409 l_value_to_id_col_exists := TRUE;
1410 END IF;
1411 IF l_lifecycle_col IS NOT NULL THEN
1412 l_dyn_sql := l_dyn_sql ||G_LIFECYCLE_EBI_COL||' = '||l_lifecycle_col|| ' ,';
1413 l_value_to_id_col_exists := TRUE;
1414 END IF;
1415 IF l_lifecycle_phase_col IS NOT NULL THEN
1416 l_dyn_sql := l_dyn_sql ||G_LIFECYCLE_PHASE_EBI_COL||' = '||l_lifecycle_phase_col|| ' ,';
1417 l_value_to_id_col_exists := TRUE;
1418 END IF;
1419 IF l_user_item_type_col IS NOT NULL THEN
1420 l_dyn_sql := l_dyn_sql ||G_USER_ITEM_TYPE_EBI_COL||' = '||l_user_item_type_col|| ' ,';
1421 l_value_to_id_col_exists := TRUE;
1422 END IF;
1423 IF l_bom_item_type_col IS NOT NULL THEN
1424 l_dyn_sql := l_dyn_sql ||G_BOM_ITEM_TYPE_EBI_COL||' = '||l_bom_item_type_col|| ' ,';
1425 l_value_to_id_col_exists := TRUE;
1426 END IF;
1427 IF l_eng_item_flag_col IS NOT NULL THEN
1428 l_dyn_sql := l_dyn_sql ||G_ENG_ITEM_FLAG_EBI_COL||' = '||l_eng_item_flag_col|| ' ,';
1429 l_value_to_id_col_exists := TRUE;
1430 END IF;
1431 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
1432 IF l_conversions_col IS NOT NULL THEN
1433 l_dyn_sql := l_dyn_sql ||G_CONVERSIONS_EBI_COL||' = '||l_conversions_col|| ' ,';
1434 l_value_to_id_col_exists := TRUE;
1435 END IF;
1436 IF l_secondary_def_col IS NOT NULL THEN
1437 l_dyn_sql := l_dyn_sql ||G_SECONDARY_DEF_IND_EBI_COL||' = '||l_secondary_def_col|| ' ,';
1438 l_value_to_id_col_exists := TRUE;
1439 END IF;
1440 IF l_ont_pricing_qty_src_col IS NOT NULL THEN
1441 l_dyn_sql := l_dyn_sql ||G_ONT_PRICING_QTY_SRC_EBI_COL||' = '||l_ont_pricing_qty_src_col|| ' ,';
1442 l_value_to_id_col_exists := TRUE;
1443 END IF;
1444 IF l_secondary_uom_code_col IS NOT NULL THEN
1445 l_dyn_sql := l_dyn_sql ||G_SECONDARY_UOM_CODE_EBI_COL||' = '||l_secondary_uom_code_col|| ' ,';
1446 l_value_to_id_col_exists := TRUE;
1447 END IF;
1448 IF l_tracking_qty_ind_col IS NOT NULL THEN
1449 l_dyn_sql := l_dyn_sql ||G_TRACKING_QTY_IND_EBI_COL||' = '||l_tracking_qty_ind_col|| ' ,';
1450 l_value_to_id_col_exists := TRUE;
1451 END IF;
1452 --Bug: 3969593 End
1453 --------------------------------
1454 --Remove the comma at the end.
1455 --------------------------------
1456 l_dyn_sql := Substr(l_dyn_sql, 1, Length(l_dyn_sql)-1);
1457 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1458 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1459 Write_Debug(l_dyn_sql);
1460
1461 IF l_value_to_id_col_exists = TRUE THEN
1462 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1463 Write_Debug('Updated EBI with Value-to-ID Conversion Cols');
1464 END IF;
1465
1466 Write_Debug('Updating EBI with Org IDs');
1467 -----------------------------------------------------
1468 -- Update Instance PK2 Value with ORG ID.
1469 -----------------------------------------------------
1470 l_dyn_sql := 'UPDATE EGO_BULKLOAD_INTF EBI';
1471 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK2_VALUE = ';
1472 l_dyn_sql := l_dyn_sql || ' ( ';
1473 l_dyn_sql := l_dyn_sql || ' SELECT ORGANIZATION_ID ';
1474 l_dyn_sql := l_dyn_sql || ' FROM MTL_PARAMETERS ';
1475 l_dyn_sql := l_dyn_sql || ' WHERE ORGANIZATION_CODE =EBI.'||l_org_code_col;
1476 l_dyn_sql := l_dyn_sql || ' ) ';
1477 l_dyn_sql := l_dyn_sql || 'WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1478 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1479
1480 Write_Debug(l_dyn_sql);
1481
1482 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1483 --------------------------------------------------------------------
1484 -- Fix for Bug# 3945885.
1485 -- Fetch Item Numbers for rows where Item Number is NULL
1486 --------------------------------------------------------------------
1487 -- commenting as a part of 6118945
1488 --
1489 -- IF(G_PDH_BATCH) THEN
1490 -- Get_Seq_Gen_Item_Nums(
1491 -- p_resultfmt_usage_id => p_resultfmt_usage_id
1492 -- ,p_item_catalog_group_id => G_CATALOG_GROUP_ID
1493 -- ,p_item_num_colname => l_item_number_col
1494 -- ,x_item_num_tbl => l_gen_item_num_tbl
1495 -- );
1496 -- END IF;
1497 --
1498 -- IF (l_gen_item_num_tbl IS NULL) THEN
1499 -- Write_Debug('Item Number *could not* be Generated !!!');
1500 -- ELSE
1501 ---- Write_Debug('Item Numbers *were* be Generated !!! Count => '||l_gen_item_num_tbl.LAST);
1502 -- Write_Debug('Item Numbers *were* be Generated !!! Count => '||l_gen_item_num_tbl.COUNT);
1503 -- --FOR i IN 1..l_gen_item_num_tbl.LAST LOOP
1504 -- -- Write_Debug('Item Number ['||i||'] => '||l_gen_item_num_tbl(i));
1505 -- --END LOOP;
1506 -- END IF;
1507 --
1508 -- Write_Debug('Selecting Org IDs, Item Numbers');
1509 --
1510 -------------------------------------------------------------
1511 --Fetch Organization ID, Item Number in Temp PLSQL tables.
1512 -------------------------------------------------------------
1513 l_dyn_sql := 'SELECT ';
1514 l_dyn_sql := l_dyn_sql || ' INSTANCE_PK2_VALUE , ';
1515 l_dyn_sql := l_dyn_sql || l_item_number_col ||' , ';
1516 ----------------------------------------------------------------------
1517 -- Upcasing the Transaction Type, for fixing Trans Type related bugs
1518 ----------------------------------------------------------------------
1519 l_dyn_sql := l_dyn_sql || ' UPPER(TRANSACTION_TYPE) , ';
1520 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID ';
1521 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF ';
1522 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1523 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1';
1524 -- l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col ||' IS NOT NULL';
1525
1526 Write_Debug(l_dyn_sql);
1527
1528 l_cursor_select := DBMS_SQL.OPEN_CURSOR;
1529 DBMS_SQL.PARSE(l_cursor_select, l_dyn_sql, DBMS_SQL.NATIVE);
1530 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 1,l_org_id_table,2500, l_temp);
1531 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 2,l_item_number_table,2500, l_temp);
1532 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 3,l_trans_type_table,2500, l_temp);
1533 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 4,l_trans_id_table,2500, l_temp);
1534
1535 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
1536 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_select);
1537 Write_Debug('About to start the Loop to fetch Rows');
1538
1539 -------------------------------------------------------------
1540 -- Separate Index to keep track of Generated Item Numbers.
1541 -------------------------------------------------------------
1542 -- commenting as a part of 6118945
1543 -- IF (l_gen_item_num_tbl IS NOT NULL AND
1544 -- l_gen_item_num_tbl.LAST > 0
1545 -- ) THEN
1546 -- l_gen_itemnum_indx := l_gen_item_num_tbl.FIRST;
1547 -- END IF;
1548
1549 LOOP
1550 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
1551 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 1, l_org_id_table);
1552 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 2, l_item_number_table);
1553 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 3, l_trans_type_table);
1554 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 4, l_trans_id_table);
1555
1556 Write_Debug('Retrieved rows => '||To_char(l_count));
1557
1558 -------------------------------------------------------------
1559 -- Loop to Update the Inventory Item IDs.
1560 -------------------------------------------------------------
1561 FOR i IN l_temp..l_org_id_table.COUNT LOOP --Bug: 4211498 Modified initialize cnter
1562
1563 Write_Debug('Org ID : '||To_char(l_org_id_table(i)));
1564 Write_Debug('Inv Item Num : '||l_item_number_table(i));
1565 Write_Debug('Transaction Type : '||l_trans_type_table(i));
1566 l_temp := l_org_id_table.COUNT; --Bug:4211498
1567 -------------------------------------------------------------
1568 -- If Inventory Item ID found, then update in EBI.
1569 -------------------------------------------------------------
1570 IF FND_FLEX_KEYVAL.Validate_Segs
1571 ( operation => 'FIND_COMBINATION'
1572 , appl_short_name => 'INV'
1573 , key_flex_code => 'MSTK'
1574 , structure_number => 101
1575 , concat_segments => l_item_number_table(i)
1576 , data_set => l_org_id_table(i)
1577 )
1578 THEN
1579 l_inventory_item_id := FND_FLEX_KEYVAL.combination_id;
1580
1581 --Start bug:15930715
1582 Select ITEM_CATALOG_GROUP_ID into l_catalog_group_id
1583 FROM MTL_SYSTEM_ITEMS_B
1584 WHERE INVENTORY_ITEM_ID=l_inventory_item_id
1585 AND ORGANIZATION_ID=l_org_id_table(i);
1586
1587 -- fix bug: 14307504
1588 l_executed_item_flag := false;
1589 for j in 1..l_executed_item.count loop
1590 IF l_executed_item(j) = l_inventory_item_id||'|'||l_org_id_table(i)||'|'||l_item_number_table(i)||'|' ||l_trans_type_table(i) then
1591 l_executed_item_flag := true;
1592 end if;
1593 end loop; --end loop of l_executed_item
1594 if l_executed_item_flag = false then
1595 l_executed_item(l_executed_item.count+1) := l_inventory_item_id||'|'||l_org_id_table(i)||'|'||l_item_number_table(i)||'|' ||l_trans_type_table(i);
1596
1597 Write_Debug('Inv Item ID : '||To_char(l_inventory_item_id));
1598
1599 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1600 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK1_VALUE = '||l_inventory_item_id;
1601 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = '||l_org_id_table(i);
1602 l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col|| ' = :ITEM_NUMBER';
1603 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1604 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1605
1606 Write_Debug(l_dyn_sql);
1607 EXECUTE IMMEDIATE l_dyn_sql USING l_item_number_table(i), p_resultfmt_usage_id;
1608 end if;
1609 END IF;
1610
1611
1612 --l_inventory_item_id := FND_FLEX_KEYVAL.combination_id;
1613
1614 -------------------------------------------------------------
1615 --Determining if Item Creation.
1616 -------------------------------------------------------------
1617 /**IF (
1618 (l_trans_type_table(i) = G_CREATE) OR
1619 (l_trans_type_table(i) = G_SYNC)
1620 ) THEN**/
1621
1622 Write_Debug('G_CATALOG_GROUP_ID => '||G_CATALOG_GROUP_ID);
1623 -----------------------------------------------------------------
1624 -- Setting Category ID in case where User enters the Catalog Name
1625 -- from Excel
1626 -- Bug #4652582(RSOUNDAR)
1627 -----------------------------------------------------------------
1628 IF l_catalog_group_id IS NULL THEN
1629 Write_Debug('l_catalog_group_id is NULL ');
1630 l_catalog_group_id :=G_CATALOG_GROUP_ID;
1631 END IF;
1632
1633 IF l_catalog_group_id IS NULL THEN
1634 IF l_item_catalog_name_col IS NOT NULL THEN
1635 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI';
1636 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = ';
1637 l_dyn_sql := l_dyn_sql || '( ';
1638 l_dyn_sql := l_dyn_sql || ' SELECT TO_CHAR(MICG.ITEM_CATALOG_GROUP_ID) ';
1639 l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG ';
1640 l_dyn_sql := l_dyn_sql || ' WHERE MICG.CONCATENATED_SEGMENTS = EBI.'||l_item_catalog_name_col;
1641 l_dyn_sql := l_dyn_sql || ') ';
1642 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1643 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_item_catalog_name_col||' IS NOT NULL';
1644 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1645 Write_Debug(l_dyn_sql);
1646 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1647 ELSE -- l_item_catalog_name_col IS NULL
1648 -- no need to do anything here
1649 NULL;
1650 END IF; -- l_item_catalog_name_col IS NOT NULL
1651 ELSE -- G_CATALOG_GROUP_ID IS NOT NULL
1652 /* Since Item Number can be NULL, removing its reference from the WHERE Clause.
1653
1654 l_dyn_sql := '';
1655 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1656 -------------------------------------------------------------
1657 --Storing Catalog Group ID and other imp data in buffer cols
1658 -------------------------------------------------------------
1659 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = '||G_CATALOG_GROUP_ID;
1660 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = '||l_org_id_table(i);
1661 l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col|| ' = :ITEM_NUMBER';
1662 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1663 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1664
1665 EXECUTE IMMEDIATE l_dyn_sql USING l_item_number_table(i), p_resultfmt_usage_id;
1666 */
1667 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1668 -------------------------------------------------------------
1669 --Storing Catalog Group ID and other imp data in buffer cols
1670 -------------------------------------------------------------
1671 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = '||l_catalog_group_id;
1672 --End:15930715
1673 -----------------------------------------------------------------
1674 -- Fix for Bug# 3945885.
1675 -- When Item Number in EXCEL is NULL, populate with the Sequence
1676 -- generated Item Number.
1677 -----------------------------------------------------------------
1678 -- commenting as a part of 6118945
1679 -- IF (l_item_number_table(i) IS NULL AND
1680 -- (l_gen_item_num_tbl IS NOT NULL AND
1681 -- l_gen_item_num_tbl(l_gen_itemnum_indx) IS NOT NULL)
1682 -- ) THEN
1683 --
1684 -- l_dyn_sql := l_dyn_sql || ' , '||l_item_number_col||' = '''||Escape_Single_Quote(l_gen_item_num_tbl(l_gen_itemnum_indx))||'''';
1685 -- ---------------------------------------------------------------------------
1686 -- -- Increment only if Item Number is used.
1687 -- -- NOTE: If l_gen_itemnum_indx = l_gen_item_num_tbl.LAST and still the loop
1688 -- -- is continuing, then need to fetch few more Seq Gen Item Numbers.
1689 -- ---------------------------------------------------------------------------
1690 -- l_gen_itemnum_indx := l_gen_itemnum_indx + 1;
1691 --
1692 -- END IF;
1693 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = :ORGANIZATION_ID ';
1694 l_dyn_sql := l_dyn_sql || ' AND TRANSACTION_ID = :TRANSACTION_ID ';
1695 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1696 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1697
1698 Write_Debug(l_dyn_sql);
1699 EXECUTE IMMEDIATE l_dyn_sql USING l_org_id_table(i), l_trans_id_table(i), p_resultfmt_usage_id;
1700
1701 END IF;--end: IF (l_catalog_group_id IS NOT NULL)
1702
1703 --END IF; --end: IF (l_trans_type_table(i) = G_CREATE) ..
1704
1705 --end: IF FND_FLEX_KEVAL..
1706
1707 END LOOP; --FOR i IN 1..l_org_id_table.COUNT LOOP
1708
1709 -----------------------------------------------------------------
1710 -- Clear all the tables after use.
1711 -----------------------------------------------------------------
1712 /*Bug:4211498
1713 l_org_id_table.DELETE;
1714 l_item_number_table.DELETE;
1715 l_trans_type_table.DELETE;
1716 l_trans_id_table.DELETE;
1717 */
1718 -----------------------------------------------------------------
1719 -- For the final batch of records, either it will be 0 or < 2500
1720 -----------------------------------------------------------------
1721 EXIT WHEN l_count <> 2500;
1722
1723 END LOOP;
1724
1725 DBMS_SQL.CLOSE_CURSOR(l_cursor_select);
1726
1727 Write_Debug('Done with Item IDs population.');
1728
1729 Write_Debug('Populating item number into ego_bulkload_intf for function generated items');
1730 IF G_PDH_BATCH THEN
1731 /***
1732 l_dyn_sql := ' UPDATE ego_bulkload_intf ebi' ||
1733 ' SET '||l_item_number_col||' = ''$$FG-''||TO_CHAR(transaction_id)'||
1734 ' ,c_fix_column12 = TO_CHAR(transaction_id)'||
1735 ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID'||
1736 ' AND '||G_ITEM_CATALOG_EBI_COL||' IS NOT NULL'||
1737 ' AND process_status = 1'||
1738 ' AND 10 < '||
1739 ' ( SELECT LENGTH ( MIN ('||
1740 ' CASE WHEN ITEM_NUM_GEN_METHOD = ''F'' '||
1741 ' AND (PRIOR ITEM_NUM_GEN_METHOD IS NULL OR PRIOR ITEM_NUM_GEN_METHOD = ''I'') ' ||
1742 ' THEN LPAD(LEVEL, 8, ''0'')||''XX''||TO_CHAR(item_num_action_id) '||
1743 ' WHEN item_num_gen_method IN (''U'', ''S'') '||
1744 ' THEN LPAD(LEVEL, 8, ''0'')||''XX'' '||
1745 ' ELSE NULL ' ||
1746 ' END )'||
1747 ' )'||
1748 ' FROM MTL_ITEM_CATALOG_GROUPS_B '||
1749 ' CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID ';
1750 ***/
1751 --
1752 -- R12C changes Tag_Function_Gen_Item_Nums with item_num as $$FG-transaction_id
1753 -- populate item number col if null but always set the source system reference
1754 --
1755 l_dyn_sql := ' UPDATE ego_bulkload_intf ebi' ||
1756 ' SET '||l_item_number_col||' = NVL( '||l_item_number_col||', ''$$FG-''||TO_CHAR(transaction_id) )'||
1757 ' ,c_fix_column12 = TO_CHAR(transaction_id)'||
1758 ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID'||
1759 ' AND '||G_ITEM_CATALOG_EBI_COL||' IS NOT NULL'||
1760 ' AND UPPER(ebi.transaction_type) IN (''CREATE'',''SYNC'') '||
1761 ' AND process_status = 1'||
1762 ' AND ''F'' = '||
1763 ' ( SELECT item_num_gen_method'||
1764 ' FROM mtl_item_catalog_groups_b '||
1765 ' WHERE NVL(item_num_gen_method,''I'') IN (''U'',''S'', ''F'') '||
1766 ' AND ROWNUM = 1 '||
1767 ' CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID';
1768 IF G_CATALOG_GROUP_ID IS NULL THEN
1769 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = ebi.'||G_ITEM_CATALOG_EBI_COL;
1770 ELSE
1771 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = :CATALOG_GROUP_ID';
1772 END IF;
1773 l_dyn_sql := l_dyn_sql ||' )';
1774 Write_Debug(' SQL to generate function generated item numbers: '||l_dyn_sql);
1775 IF G_CATALOG_GROUP_ID IS NULL THEN
1776 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1777 ELSE
1778 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, G_CATALOG_GROUP_ID;
1779 END IF;
1780 Write_Debug(' SQL to generate function generated item numbers DONE ');
1781
1782 --
1783 -- R12C changes Tag_Sequence_Gen_Item_Nums with item_num as $$SG-transaction_id
1784 -- populate item number col if null but always set the source system reference
1785 --
1786 l_dyn_sql := ' UPDATE ego_bulkload_intf ebi' ||
1787 ' SET '||l_item_number_col||' = NVL( '||l_item_number_col||', ''$$SG-''||TO_CHAR(transaction_id) )'||
1788 ' ,c_fix_column12 = TO_CHAR(transaction_id)'||
1789 ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID'||
1790 ' AND '||G_ITEM_CATALOG_EBI_COL||' IS NOT NULL'||
1791 ' AND UPPER(ebi.transaction_type) IN (''CREATE'',''SYNC'') '||
1792 ' AND process_status = 1'||
1793 ' AND ''S'' = '||
1794 ' ( SELECT item_num_gen_method'||
1795 ' FROM mtl_item_catalog_groups_b '||
1796 ' WHERE NVL(item_num_gen_method,''I'') IN (''U'',''S'', ''F'') '||
1797 ' AND ROWNUM = 1 '||
1798 ' CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID';
1799 IF G_CATALOG_GROUP_ID IS NULL THEN
1800 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = ebi.'||G_ITEM_CATALOG_EBI_COL;
1801 ELSE
1802 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = :CATALOG_GROUP_ID';
1803 END IF;
1804 l_dyn_sql := l_dyn_sql ||' )';
1805 Write_Debug(' SQL to generate sequence generated item numbers: '||l_dyn_sql);
1806 IF G_CATALOG_GROUP_ID IS NULL THEN
1807 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1808 ELSE
1809 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, G_CATALOG_GROUP_ID;
1810 END IF;
1811 Write_Debug(' SQL to generate sequence generated item numbers DONE ');
1812 END IF;
1813
1814 -----------------------------------------------------------------
1815 -- Determine the Set Process ID, that is unique for MSII
1816 -----------------------------------------------------------------
1817 IF p_set_process_id IS NULL THEN
1818 SELECT mtl_system_items_intf_sets_s.NEXTVAL
1819 INTO l_msii_set_process_id
1820 FROM dual;
1821 ELSE
1822 l_msii_set_process_id := p_set_process_id;
1823 END IF;
1824
1825 Write_Debug('l_msii_set_process_id : '||To_char(l_msii_set_process_id));
1826 Write_Debug('PROCESS_FLAG : '||To_char(G_PROCESS_STATUS));
1827
1828 -----------------------------------------------------------------
1829 -- Insert rows from EBI into MSII
1830 -----------------------------------------------------------------
1831 l_dyn_sql := 'INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE MSII';
1832 l_dyn_sql := l_dyn_sql || ' ( ';
1833 l_dyn_sql := l_dyn_sql || ' SET_PROCESS_ID , ';
1834 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
1835 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
1836 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID, ';
1837 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
1838 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
1839 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
1840 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
1841 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
1842 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
1843 l_dyn_sql := l_dyn_sql || ' ITEM_CATALOG_GROUP_ID, ';
1844 l_dyn_sql := l_dyn_sql || ' ITEM_CATALOG_GROUP_NAME, ';
1845 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG, ';
1846 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID, ';
1847 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE, ';
1848 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE_DESC ';
1849 l_dyn_sql := l_dyn_sql || ') ';
1850 l_dyn_sql := l_dyn_sql || ' SELECT ';
1851 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
1852 l_dyn_sql := l_dyn_sql || ' EBI.TRANSACTION_ID , ';
1853 l_dyn_sql := l_dyn_sql || G_REQUEST_ID||' , ';
1854 l_dyn_sql := l_dyn_sql || G_PROG_APPID||' , ';
1855 l_dyn_sql := l_dyn_sql || G_PROG_ID||' , ';
1856 l_dyn_sql := l_dyn_sql || ' UPPER(EBI.TRANSACTION_TYPE) , ';
1857 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
1858 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
1859 /* FP base bug 7047035: Replace user entered single '\' to '\\', as in excel we don't use escape character '\' to do escape, this can cause validation problem later in import flow */
1860 l_dyn_sql := l_dyn_sql || ' REPLACE( EBI.'||l_item_number_col ||', ''\'', ''\\'') , ';
1861 -- l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
1862 l_dyn_sql := l_dyn_sql || ' EBI.'||l_org_code_col ||' , ';
1863 l_dyn_sql := l_dyn_sql || ' EBI.'||G_ITEM_CATALOG_EBI_COL||' , ';
1864 --------------------------------------------------------------------
1865 --Bug 4652582 (RSOUNDAR) Catalog Group Name is also required in MSII
1866 --------------------------------------------------------------------
1867 l_dyn_sql := l_dyn_sql || ' EBI.'||G_ITEM_CATALOG_NAME_EBI_COL||' , ';
1868 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
1869 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
1870 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
1871 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN13 ';
1872 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1873 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1874 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1';
1875
1876 Write_Debug(l_dyn_sql);
1877 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1878 Write_Debug('MSII: Populated the Inv Item IDs, Org IDs.');
1879
1880 ----------------------------------------------------------------------------------
1881 --Save Item Num, Org Code in designated columns in EBI for Error Reporting later
1882 ----------------------------------------------------------------------------------
1883 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1884 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_NUMBER_EBI_COL||' = '||l_item_number_col||' , ';
1885 l_dyn_sql := l_dyn_sql || G_ORG_CODE_EBI_COL||' = '||l_org_code_col ;
1886 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1887 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1888
1889 Write_Debug(l_dyn_sql);
1890 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1891 Write_Debug('Items Interface: Done saving Item Num, Org Code in EBI for error retrieval later.');
1892
1893 ---------------------------------------
1894 -- Reset i back to 0, for re-use.
1895 ---------------------------------------
1896 i := 0;
1897 IF ( l_prod_col_name_tbl.count > 0) THEN
1898 FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
1899 Write_Debug('$l_prod_col_name_tbl(i)'||l_prod_col_name_tbl(i));
1900 Write_Debug('$l_intf_col_name_tbl(i)'||l_intf_col_name_tbl(i));
1901
1902 ----------------------------------------------------------------------------------
1903 -- Transfer the Item Catalog Group information from EBI to MSII
1904 -- by doing Value-to-ID Conversion.
1905 ----------------------------------------------------------------------------------
1906 ---------------------------------------------------------------------
1907 --Bug#4652582 (RSOUNDAR)
1908 --(Catalog Name validation will be done by IOI)
1909 ---------------------------------------------------------------------
1910 -- IF (l_prod_col_name_tbl(i) = G_ITEM_CATALOG_GROUP) THEN
1911 -- l_dyn_sql := '';
1912 -- l_dyn_sql := l_dyn_sql || 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1913 -- l_dyn_sql := l_dyn_sql || ' SET (MSII.ITEM_CATALOG_GROUP_ID, MSII.PROCESS_FLAG)=';
1914 -- l_dyn_sql := l_dyn_sql || '( ';
1915 -- l_dyn_sql := l_dyn_sql || ' SELECT MICG.ITEM_CATALOG_GROUP_ID ';
1916 -- l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(MICG.ITEM_CATALOG_GROUP_ID, -1), -1,'||G_ITEM_CATALOG_NAME_ERR_STS||', ' || G_PROCESS_STATUS || ' ) ';
1917 -- l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG, EGO_BULKLOAD_INTF EBI ';
1918 -- l_dyn_sql := l_dyn_sql || ' WHERE MICG.CONCATENATED_SEGMENTS(+) = EBI.'||l_intf_col_name_tbl(i);
1919 -- l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1920 -- l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1921 -- ----------------------------------------------------------------------------------
1922 -- -- WHERE EXISTS takes care of filtering lines. Hence this join not needed.
1923 -- -- l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1924 -- ----------------------------------------------------------------------------------
1925 -- l_dyn_sql := l_dyn_sql || ') ';
1926 -- l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
1927 -- l_dyn_sql := l_dyn_sql || '( ';
1928 -- l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1929 -- l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1930 -- l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1931 -- l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1932 -- ----------------------------------------------------------------------------------
1933 -- -- Validate only for the NOT NULL values, and update MSII.
1934 -- -- NULL values dont need to go in.
1935 -- ----------------------------------------------------------------------------------
1936 -- l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
1937 -- l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1938 -- l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS ;
1939 -- l_dyn_sql := l_dyn_sql || ') ';
1940 --
1941 -- Write_Debug(l_dyn_sql);
1942 -- EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
1943 -- Write_Debug('MSII: Updated the Catalog Group IDs.');
1944
1945 ----------------------------------------------------------------------------------
1946 -- Transfer the Primary Unit of Measure information from EBI to MSII
1947 -- by doing Value-to-ID Conversion.
1948 ----------------------------------------------------------------------------------
1949
1950 IF (l_prod_col_name_tbl(i) = G_PRIMARY_UOM) THEN
1951
1952 -- populating MSII with PRIMARY_UOM_CODE if exists
1953 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1954 l_dyn_sql := l_dyn_sql || ' SET (MSII.PRIMARY_UOM_CODE ';
1955 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
1956 l_dyn_sql := l_dyn_sql || '( ';
1957 l_dyn_sql := l_dyn_sql || ' SELECT MUOM.UOM_CODE ';
1958 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(MUOM.UOM_CODE, ''NULL''),''NULL'','||G_PRIMARY_UOM_ERR_STS||', ' || G_PROCESS_STATUS || ' ) ';
1959 l_dyn_sql := l_dyn_sql || ' FROM MTL_UNITS_OF_MEASURE_TL MUOM, EGO_BULKLOAD_INTF EBI ';
1960 l_dyn_sql := l_dyn_sql || ' WHERE MUOM.UNIT_OF_MEASURE_TL (+) = EBI.'||l_intf_col_name_tbl(i);
1961 l_dyn_sql := l_dyn_sql || ' AND MUOM.LANGUAGE (+) = Userenv(''LANG'') ';
1962 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1963 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1964 l_dyn_sql := l_dyn_sql || ') ';
1965 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
1966 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
1967 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
1968 l_dyn_sql := l_dyn_sql || '( ';
1969 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1970 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1971 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1972 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1973 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
1974 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1975 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1976 l_dyn_sql := l_dyn_sql || ') ';
1977
1978 Write_Debug(l_dyn_sql);
1979 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
1980
1981 -- populating MSII with PRIMARY_UOM_CODE if special char for null out exists
1982 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1983 l_dyn_sql := l_dyn_sql || ' SET MSII.PRIMARY_UOM_CODE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1984 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
1985 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
1986 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
1987 l_dyn_sql := l_dyn_sql || '( ';
1988 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1989 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1990 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1991 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1992 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1993 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1994 l_dyn_sql := l_dyn_sql || ') ';
1995
1996 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1997 Write_Debug('MSII: Updated the Primary UOMs.');
1998
1999 ----------------------------------------------------------------------------------
2000 -- Bug# 3421497 fix.
2001 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
2002 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
2003 -- dependant upon the Lifecycle ID value.
2004 ----------------------------------------------------------------------------------
2005 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE) THEN
2006
2007 l_lifecycle_col_val := l_intf_col_name_tbl(i);
2008
2009 ----------------------------------------------------------------------------------
2010 -- Bug# 3421497 fix.
2011 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
2012 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
2013 -- dependant upon the Lifecycle ID value.
2014 ----------------------------------------------------------------------------------
2015 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE_PHASE) THEN
2016
2017 l_lifecycle_phase_col_val := l_intf_col_name_tbl(i);
2018
2019 ----------------------------------------------------------------------------------
2020 -- Transfer the User Item Type information from EBI to MSII
2021 -- by doing Value-to-ID Conversion.
2022 ----------------------------------------------------------------------------------
2023 ELSIF (l_prod_col_name_tbl(i) = G_USER_ITEM_TYPE) THEN
2024
2025 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2026 l_dyn_sql := l_dyn_sql || ' SET (MSII.ITEM_TYPE ';
2027 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2028 l_dyn_sql := l_dyn_sql || '( ';
2029 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2030 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_USER_ITEM_TYPE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2031 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2032 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''ITEM_TYPE'' ';
2033 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2034 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2035 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2036 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2037 l_dyn_sql := l_dyn_sql || ') ';
2038 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2039 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2040 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2041 l_dyn_sql := l_dyn_sql || '( ';
2042 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2043 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2044 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2045 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2046 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2047 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2048 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2049 l_dyn_sql := l_dyn_sql || ') ';
2050
2051 Write_Debug(l_dyn_sql);
2052 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2053
2054 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2055 l_dyn_sql := l_dyn_sql || ' SET MSII.ITEM_TYPE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2056 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2057 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2058 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2059 l_dyn_sql := l_dyn_sql || '( ';
2060 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2061 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2062 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2063 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2064 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2065 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2066 l_dyn_sql := l_dyn_sql || ') ';
2067
2068 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2069 Write_Debug('MSII: Updated the User Item Types.');
2070
2071 ----------------------------------------------------------------------------------
2072 -- Transfer the BOM Item Type information from EBI to MSII
2073 -- by doing Value-to-ID Conversion.
2074 ----------------------------------------------------------------------------------
2075 ELSIF (l_prod_col_name_tbl(i) = G_BOM_ITEM_TYPE) THEN
2076
2077 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2078 l_dyn_sql := l_dyn_sql || ' SET (MSII.BOM_ITEM_TYPE ';
2079 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2080 l_dyn_sql := l_dyn_sql || '( ';
2081 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2082 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_BOM_ITEM_TYPE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2083 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2084 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''BOM_ITEM_TYPE'' ';
2085 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2086 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2087 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2088 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2089 l_dyn_sql := l_dyn_sql || ') ';
2090 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2091 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2092 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2093 l_dyn_sql := l_dyn_sql || '( ';
2094 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2095 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2096 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2097 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2098 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2099 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2100 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2101 l_dyn_sql := l_dyn_sql || ') ';
2102
2103 Write_Debug(l_dyn_sql);
2104 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2105
2106 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2107 l_dyn_sql := l_dyn_sql || ' SET MSII.BOM_ITEM_TYPE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2108 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2109 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2110 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2111 l_dyn_sql := l_dyn_sql || '( ';
2112 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2113 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2114 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2115 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2116 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2117 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2118 l_dyn_sql := l_dyn_sql || ') ';
2119
2120 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2121 Write_Debug('MSII: Updated the BOM Item Types.');
2122
2123 ELSIF (l_prod_col_name_tbl(i) = G_TRADE_ITEM_DESCRIPTOR) THEN
2124 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2125 l_dyn_sql := l_dyn_sql || ' SET (MSII.TRADE_ITEM_DESCRIPTOR ';
2126 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2127 l_dyn_sql := l_dyn_sql || '( ';
2128 l_dyn_sql := l_dyn_sql || ' SELECT IT.INTERNAL_NAME ';
2129 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.INTERNAL_NAME, ''NULL''),''NULL'','||G_TRADE_ITEM_DESC_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2130 l_dyn_sql := l_dyn_sql || ' FROM EGO_VALUE_SET_VALUES_V IT, EGO_BULKLOAD_INTF EBI ';
2131 l_dyn_sql := l_dyn_sql || ' WHERE IT.VALUE_SET_NAME = ''TradeItemDescVS'' ';
2132 l_dyn_sql := l_dyn_sql || ' AND IT.DISPLAY_NAME = EBI.'||l_intf_col_name_tbl(i);
2133 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2134 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2135 l_dyn_sql := l_dyn_sql || ') ';
2136 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2137 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2138 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2139 l_dyn_sql := l_dyn_sql || '( ';
2140 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2141 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2142 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2143 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2144 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2145 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2146 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2147 l_dyn_sql := l_dyn_sql || ') ';
2148
2149 Write_Debug(l_dyn_sql);
2150 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2151
2152 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2153 l_dyn_sql := l_dyn_sql || ' SET MSII.TRADE_ITEM_DESCRIPTOR = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2154 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2155 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2156 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2157 l_dyn_sql := l_dyn_sql || '( ';
2158 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2159 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2160 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2161 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2162 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2163 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2164 l_dyn_sql := l_dyn_sql || ') ';
2165
2166 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2167 Write_Debug('MSII: Updated the Trade Item Descriptor.');
2168
2169 ----------------------------------------------------------------------------------
2170 -- Transfer the Engineering Item Flag information from EBI to MSII
2171 -- by doing Value-to-ID Conversion.
2172 ----------------------------------------------------------------------------------
2173 ELSIF (l_prod_col_name_tbl(i) = G_ENG_ITEM_FLAG) THEN
2174
2175 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2176 l_dyn_sql := l_dyn_sql || ' SET (MSII.ENG_ITEM_FLAG ';
2177 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2178 l_dyn_sql := l_dyn_sql || '( ';
2179 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2180 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_ENG_ITEM_FLAG_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2181 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2182 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''EGO_YES_NO'' ';
2183 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2184 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2185 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2186 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2187 l_dyn_sql := l_dyn_sql || ') ';
2188 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2189 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2190 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2191 l_dyn_sql := l_dyn_sql || '( ';
2192 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2193 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2194 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2195 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2196 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2197 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2198 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2199 l_dyn_sql := l_dyn_sql || ') ';
2200
2201 Write_Debug(l_dyn_sql);
2202 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2203
2204 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2205 l_dyn_sql := l_dyn_sql || ' SET MSII.ENG_ITEM_FLAG = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2206 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2207 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2208 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2209 l_dyn_sql := l_dyn_sql || '( ';
2210 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2211 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2212 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2213 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2214 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2215 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2216 l_dyn_sql := l_dyn_sql || ') ';
2217
2218 Write_Debug(l_dyn_sql);
2219 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2220 Write_Debug('MSII: Updated the Eng Item Flags.');
2221
2222 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
2223 ----------------------------------------------------------------------------------
2224 -- Transfer the Conversions attribute information from EBI to MSII
2225 -- by doing Value-to-ID Conversion.
2226 ----------------------------------------------------------------------------------
2227 ELSIF (l_prod_col_name_tbl(i) = G_CONVERSIONS) THEN
2228
2229 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2230 l_dyn_sql := l_dyn_sql || ' SET (MSII.ALLOWED_UNITS_LOOKUP_CODE ';
2231 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2232 l_dyn_sql := l_dyn_sql || '( ';
2233 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2234 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_CONVERSIONS_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2235 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2236 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''MTL_CONVERSION_TYPE'' ';
2237 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2238 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2239 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2240 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2241 l_dyn_sql := l_dyn_sql || ') ';
2242 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2243 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2244 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2245 l_dyn_sql := l_dyn_sql || '( ';
2246 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2247 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2248 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2249 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2250 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2251 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2252 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2253 l_dyn_sql := l_dyn_sql || ') ';
2254
2255 Write_Debug(l_dyn_sql);
2256 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2257
2258 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2259 l_dyn_sql := l_dyn_sql || ' SET MSII.ALLOWED_UNITS_LOOKUP_CODE = :NULL_NUM ';
2260 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2261 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2262 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2263 l_dyn_sql := l_dyn_sql || '( ';
2264 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2265 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2266 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2267 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2268 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2269 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2270 l_dyn_sql := l_dyn_sql || ') ';
2271
2272 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2273 Write_Debug('MSII: Updated the Conversions.');
2274
2275 ----------------------------------------------------------------------------------
2276 -- Transfer the Conversions attribute information from EBI to MSII
2277 -- by doing Value-to-ID Conversion.
2278 ----------------------------------------------------------------------------------
2279 ELSIF (l_prod_col_name_tbl(i) = G_SECONDARY_DEF_IND) THEN
2280
2281 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2282 l_dyn_sql := l_dyn_sql || ' SET (MSII.SECONDARY_DEFAULT_IND ';
2283 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2284 l_dyn_sql := l_dyn_sql || '( ';
2285 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2286 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_SECONDARY_DEF_IND_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2287 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2288 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''INV_DEFAULTING_UOM_TYPE'' ';
2289 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2290 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2291 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2292 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2293 l_dyn_sql := l_dyn_sql || ') ';
2294 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2295 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2296 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2297 l_dyn_sql := l_dyn_sql || '( ';
2298 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2299 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2300 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2301 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2302 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2303 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2304 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2305 l_dyn_sql := l_dyn_sql || ') ';
2306
2307 Write_Debug(l_dyn_sql);
2308 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2309
2310 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2311 l_dyn_sql := l_dyn_sql || ' SET MSII.SECONDARY_DEFAULT_IND = :NULL_NUM';
2312 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2313 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2314 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2315 l_dyn_sql := l_dyn_sql || '( ';
2316 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2317 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2318 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2319 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2320 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2321 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2322 l_dyn_sql := l_dyn_sql || ') ';
2323
2324 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2325 Write_Debug('MSII: Updated the Conversions.');
2326
2327 ----------------------------------------------------------------------------------
2328 -- Transfer the Conversions attribute information from EBI to MSII
2329 -- by doing Value-to-ID Conversion.
2330 ----------------------------------------------------------------------------------
2331 ELSIF (l_prod_col_name_tbl(i) = G_ONT_PRICING_QTY_SRC) THEN
2332
2333 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2334 l_dyn_sql := l_dyn_sql || ' SET (MSII.ONT_PRICING_QTY_SOURCE ';
2335 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2336 l_dyn_sql := l_dyn_sql || '( ';
2337 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2338 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_ONT_PRICING_QTY_SRC_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2339 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2340 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''INV_PRICING_UOM_TYPE'' ';
2341 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2342 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2343 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2344 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2345 l_dyn_sql := l_dyn_sql || ') ';
2346 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2347 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2348 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2349 l_dyn_sql := l_dyn_sql || '( ';
2350 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2351 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2352 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2353 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2354 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2355 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2356 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2357 l_dyn_sql := l_dyn_sql || ') ';
2358
2359 Write_Debug(l_dyn_sql);
2360 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2361
2362 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2363 l_dyn_sql := l_dyn_sql || ' SET MSII.ONT_PRICING_QTY_SOURCE = :NULL_NUM';
2364 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2365 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2366 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2367 l_dyn_sql := l_dyn_sql || '( ';
2368 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2369 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2370 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2371 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2372 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2373 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2374 l_dyn_sql := l_dyn_sql || ') ';
2375
2376 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2377 Write_Debug('MSII: Updated the Conversions.');
2378
2379 ----------------------------------------------------------------------------------
2380 -- Transfer the Conversions attribute information from EBI to MSII
2381 -- by doing Value-to-ID Conversion.
2382 ----------------------------------------------------------------------------------
2383 ELSIF (l_prod_col_name_tbl(i) = G_SECONDARY_UOM_CODE) THEN
2384
2385 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2386 l_dyn_sql := l_dyn_sql || ' SET (MSII.SECONDARY_UOM_CODE ';
2387 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2388 l_dyn_sql := l_dyn_sql || '( ';
2389 l_dyn_sql := l_dyn_sql || ' SELECT MUOM.UOM_CODE ';
2390 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(MUOM.UOM_CODE, ''NULL''),''NULL'','||G_SECONDARY_UOM_CODE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2391 l_dyn_sql := l_dyn_sql || ' FROM MTL_UNITS_OF_MEASURE_TL MUOM, EGO_BULKLOAD_INTF EBI ';
2392 l_dyn_sql := l_dyn_sql || ' WHERE MUOM.UNIT_OF_MEASURE_TL (+) = EBI.'||l_intf_col_name_tbl(i);
2393 l_dyn_sql := l_dyn_sql || ' AND MUOM.LANGUAGE (+) = Userenv(''LANG'') ';
2394 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2395 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2396 l_dyn_sql := l_dyn_sql || ') ';
2397 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2398 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2399 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2400 l_dyn_sql := l_dyn_sql || '( ';
2401 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2402 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2403 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2404 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2405 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2406 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2407 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2408 l_dyn_sql := l_dyn_sql || ') ';
2409
2410 Write_Debug(l_dyn_sql);
2411 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2412
2413 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2414 l_dyn_sql := l_dyn_sql || ' SET MSII.SECONDARY_UOM_CODE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2415 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2416 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2417 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2418 l_dyn_sql := l_dyn_sql || '( ';
2419 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2420 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2421 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2422 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2423 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2424 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2425 l_dyn_sql := l_dyn_sql || ') ';
2426
2427 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2428 Write_Debug('MSII: Updated the Conversions.');
2429
2430 ----------------------------------------------------------------------------------
2431 -- Transfer the Conversions attribute information from EBI to MSII
2432 -- by doing Value-to-ID Conversion.
2433 ----------------------------------------------------------------------------------
2434 ELSIF (l_prod_col_name_tbl(i) = G_TRACKING_QTY_IND) THEN
2435
2436 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2437 l_dyn_sql := l_dyn_sql || ' SET (MSII.TRACKING_QUANTITY_IND ';
2438 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2439 l_dyn_sql := l_dyn_sql || '( ';
2440 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2441 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_TRACKING_QTY_IND_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2442 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2443 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''INV_TRACKING_UOM_TYPE'' ';
2444 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2445 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2446 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2447 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2448 l_dyn_sql := l_dyn_sql || ') ';
2449 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2450 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2451 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2452 l_dyn_sql := l_dyn_sql || '( ';
2453 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2454 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2455 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2456 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2457 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2458 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2459 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2460 l_dyn_sql := l_dyn_sql || ') ';
2461
2462 Write_Debug(l_dyn_sql);
2463 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2464
2465 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2466 l_dyn_sql := l_dyn_sql || ' SET MSII.TRACKING_QUANTITY_IND = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2467 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2468 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2469 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2470 l_dyn_sql := l_dyn_sql || '( ';
2471 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2472 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2473 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2474 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2475 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2476 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2477 l_dyn_sql := l_dyn_sql || ') ';
2478
2479 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2480 Write_Debug('MSII: Updated the Conversions.');
2481 --Bug: 3969593 End
2482
2483 ----------------------------------------------------------------------------------
2484 -- Transfer the Item Status Code attribute information from EBI to MSII
2485 -- by doing Value-to-ID Conversion. Rathna
2486 ----------------------------------------------------------------------------------
2487 ELSIF (l_prod_col_name_tbl(i) = G_INVENTORY_ITEM_STATUS) THEN
2488
2489 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2490 l_dyn_sql := l_dyn_sql || ' SET (MSII.INVENTORY_ITEM_STATUS_CODE ';
2491 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2492 l_dyn_sql := l_dyn_sql || '( ';
2493 l_dyn_sql := l_dyn_sql || ' SELECT IT.INVENTORY_ITEM_STATUS_CODE ';
2494 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.INVENTORY_ITEM_STATUS_CODE, ''NULL''),''NULL'','||G_INV_ITEM_STATUS_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2495 l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_STATUS IT, EGO_BULKLOAD_INTF EBI ';
2496 l_dyn_sql := l_dyn_sql || ' WHERE IT.INVENTORY_ITEM_STATUS_CODE_TL (+) = EBI.'||l_intf_col_name_tbl(i);
2497 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2498 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2499 l_dyn_sql := l_dyn_sql || ') ';
2500 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2501 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2502 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2503 l_dyn_sql := l_dyn_sql || '( ';
2504 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2505 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2506 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2507 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2508 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2509 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2510 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2511 l_dyn_sql := l_dyn_sql || ') ';
2512
2513 Write_Debug(l_dyn_sql);
2514 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2515
2516 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2517 l_dyn_sql := l_dyn_sql || ' SET MSII.TRACKING_QUANTITY_IND = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2518 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2519 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2520 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2521 l_dyn_sql := l_dyn_sql || '( ';
2522 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2523 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2524 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2525 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2526 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2527 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2528 l_dyn_sql := l_dyn_sql || ') ';
2529
2530 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2531 Write_Debug('MSII: Updated the Item Status.*');
2532
2533 ----------------------------------------------------------------------------------
2534 -- Transfer the Column information from EBI to MSII
2535 -- which *DONOT NEED* Value-to-ID Conversion.
2536 ----------------------------------------------------------------------------------
2537 ELSIF (l_prod_col_name_tbl(i) <> G_CREATION_DATE AND l_prod_col_name_tbl(i) <> G_CREATED_BY
2538 AND l_prod_col_name_tbl(i) <> 'CATEGORY_SET_NAME' -- Bug 12838284
2539 AND l_prod_col_name_tbl(i) <> 'CATEGORY_NAME' -- Bug 12833284
2540 ) THEN
2541 --Bug Fix 4713312:START
2542 IF (l_prod_col_name_tbl(i) = G_ITEM_CATALOG_GROUP1) THEN
2543 l_col_name := G_ITEM_CATALOG_GROUP;
2544 ELSE
2545 l_col_name := l_prod_col_name_tbl(i);
2546 END IF;
2547 Write_Debug('Updating MSII: l_col_name = ' || l_col_name);
2548 --Bug Fix 4713312:END
2549 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2550 l_dyn_sql := l_dyn_sql || ' SET MSII.'||l_col_name||' = ';
2551 l_dyn_sql := l_dyn_sql || '( ';
2552 -- MLS Status
2553 -- IF (l_prod_col_name_tbl(i) = G_INV_STATUS_CODE_NAME) THEN
2554 -- ----------------------------------------------------------------------------------
2555 -- -- MSII INVENTORY_ITEM_STATUS_CODE is only 10 char long
2556 -- ----------------------------------------------------------------------------------
2557 -- l_dyn_sql := l_dyn_sql || ' SELECT SUBSTRB(EBI.'||l_intf_col_name_tbl(i) || ', 1, 10)';
2558 --
2559 -- ELSE
2560 IF (l_prod_col_name_tbl(i) = G_ITEM_TEMPLATE_NAME) THEN
2561 ----------------------------------------------------------------------------------
2562 -- MSII TEMPLATE_NAME is only 30 chars long
2563 ----------------------------------------------------------------------------------
2564 l_dyn_sql := l_dyn_sql || ' SELECT SUBSTR(EBI.'||l_intf_col_name_tbl(i)|| ',1,30)';
2565
2566 ELSIF (l_prod_col_name_tbl(i) IN ('STYLE_ITEM_FLAG', 'GDSN_OUTBOUND_ENABLED_FLAG' )) THEN
2567 l_dyn_sql := l_dyn_sql || ' SELECT LOOKUP_CODE ';
2568 ELSE
2569 ----------------------------------------------------------------------------------
2570 -- All other columns, which *DONOT NEED* any special treatment.
2571 ----------------------------------------------------------------------------------
2572 l_dyn_sql := l_dyn_sql || ' SELECT EBI.'||l_intf_col_name_tbl(i);
2573 END IF; --end: IF (l_prod_col_name_tbl(i) = G_ITEM_TEMPLATE_NAME)
2574
2575 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2576
2577 IF (l_prod_col_name_tbl(i) IN ('STYLE_ITEM_FLAG', 'GDSN_OUTBOUND_ENABLED_FLAG' )) THEN
2578 l_dyn_sql := l_dyn_sql || ' , FND_LOOKUP_VALUES_VL LKUP ';
2579 END IF;
2580
2581 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2582 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2583
2584 IF (l_prod_col_name_tbl(i) IN ('STYLE_ITEM_FLAG', 'GDSN_OUTBOUND_ENABLED_FLAG' )) THEN
2585 l_dyn_sql := l_dyn_sql || ' AND LOOKUP_TYPE = ''EGO_YES_NO'' ';
2586 l_dyn_sql := l_dyn_sql || ' AND LKUP.MEANING = EBI.'||l_intf_col_name_tbl(i)||' ';
2587 END IF;
2588
2589 l_dyn_sql := l_dyn_sql || ') ';
2590
2591 /* Fix for bug 8530157- if column name is icc_name then set the icc_id too */
2592 IF ( l_col_name = G_ITEM_CATALOG_GROUP ) THEN
2593
2594 /* option 1 -set the icc_id to null and check if IOI will populate it based on icc_name */
2595 l_dyn_sql := l_dyn_sql || ' , MSII.ITEM_CATALOG_GROUP_ID = NULL ';
2596
2597 /* option 2 (commented for now) : use if option 1 does not work. fetch the icc_id and set it
2598 l_dyn_sql := l_dyn_sql || ' , MSII.ITEM_CATALOG_GROUP_ID = ';
2599 l_dyn_sql := l_dyn_sql || ' ( ';
2600 l_dyn_sql := l_dyn_sql || ' SELECT MICG.ITEM_CATALOG_GROUP_ID ';
2601 l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG, EGO_BULKLOAD_INTF EBI ';
2602 l_dyn_sql := l_dyn_sql || ' WHERE MICG.CONCATENATED_SEGMENTS(+) = EBI.'||l_intf_col_name_tbl(i);
2603 l_dyn_sql := l_dyn_sql || ' ) ';
2604 */
2605 END IF;
2606
2607 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2608 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2609 l_dyn_sql := l_dyn_sql || ' AND MSII.TRANSACTION_ID IN ';
2610 l_dyn_sql := l_dyn_sql || ' ( ';
2611 l_dyn_sql := l_dyn_sql || ' SELECT EBI.TRANSACTION_ID ';
2612 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2613 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2614 -- l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2615 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2616 l_dyn_sql := l_dyn_sql || ' ) ';
2617
2618 Write_Debug(l_dyn_sql);
2619 Write_Debug('Updating : RSOUNDAR: MSII: l_dyn_sql = ' || l_dyn_sql);
2620 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2621 Write_Debug('MSII: Updated the '||l_prod_col_name_tbl(i)||' column values.');
2622
2623 END IF;--end: IF (l_prod_col_name_tbl(i) = G_ITEM_CATALOG_GROUP) THEN
2624
2625 -- Bug: 3778006
2626 ----------------------------------------------------------------------------------
2627 -- Checking if transaction_type is update and Description generation method is
2628 -- Function Generated, then Description updation should not be allowed.
2629 ----------------------------------------------------------------------------------
2630 IF (l_prod_col_name_tbl(i) = G_DESCRIPTION) THEN
2631 --DPHILIP: we need to check what is the impact of this check
2632 Write_Debug('DPHILIP :updating description setting the error status to: ' || G_DESCRIPTION_ERR_STS);
2633
2634 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2635 l_dyn_sql := l_dyn_sql || ' SET MSII.PROCESS_FLAG = '||G_DESCRIPTION_ERR_STS||' ';
2636 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2637 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2638 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2639 l_dyn_sql := l_dyn_sql || '( ';
2640 l_dyn_sql := l_dyn_sql || ' SELECT NULL ';
2641 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI, MTL_SYSTEM_ITEMS_VL MSIV ';
2642 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2643 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2644 l_dyn_sql := l_dyn_sql || ' AND EBI.INSTANCE_PK1_VALUE = MSIV.INVENTORY_ITEM_ID ';
2645 l_dyn_sql := l_dyn_sql || ' AND EBI.INSTANCE_PK2_VALUE = MSIV.ORGANIZATION_ID ';
2646 l_dyn_sql := l_dyn_sql || ' AND EGO_ITEM_BULKLOAD_PKG.get_desc_gen_method(MSIV.ITEM_CATALOG_GROUP_ID) = :FUNCTION_GEN ';
2647 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2648 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> MSIV.DESCRIPTION';
2649 l_dyn_sql := l_dyn_sql || ' AND EBI.INSTANCE_PK1_VALUE IS NOT NULL';
2650 l_dyn_sql := l_dyn_sql || ' AND UPPER(EBI.TRANSACTION_TYPE) IN (:UPD, :SYNC)';
2651 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2652 l_dyn_sql := l_dyn_sql || ') ';
2653
2654 Write_Debug(l_dyn_sql);
2655 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, 'F', 'UPDATE', 'SYNC';
2656 Write_Debug('MSII: Logged Error (if any) in updating description');
2657
2658 END IF;
2659
2660 END LOOP;--end: FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
2661
2662 ----------------------------------------------------------------------------------
2663 -- Bug# 3421497 fix.
2664 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
2665 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
2666 -- dependant upon the Lifecycle ID value.
2667 -- Hence the are processed outside the above LOOP.
2668 ----------------------------------------------------------------------------------
2669
2670 IF (l_lifecycle_col_val IS NOT NULL) THEN
2671
2672 ----------------------------------------------------------------------------------
2673 -- First Transfer the Lifecycle information from EBI to MSII
2674 -- by doing Value-to-ID Conversion.
2675 ----------------------------------------------------------------------------------
2676 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2677 l_dyn_sql := l_dyn_sql || ' SET (MSII.LIFECYCLE_ID ';
2678 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2679 l_dyn_sql := l_dyn_sql || '( ';
2680 l_dyn_sql := l_dyn_sql || ' SELECT LC.PROJ_ELEMENT_ID ';
2681 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(LC.PROJ_ELEMENT_ID, -1), -1,'||G_LIFECYCLE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2682 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_LIFECYCLES_V LC, EGO_BULKLOAD_INTF EBI ';
2683 l_dyn_sql := l_dyn_sql || ' WHERE LC.NAME (+) = EBI.'||l_lifecycle_col_val;
2684 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2685 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2686 l_dyn_sql := l_dyn_sql || ') ';
2687 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2688 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2689 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2690 l_dyn_sql := l_dyn_sql || '( ';
2691 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2692 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2693 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2694 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2695 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_col_val||' IS NOT NULL';
2696 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_col_val||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2697 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2698 l_dyn_sql := l_dyn_sql || ') ';
2699
2700 Write_Debug(l_dyn_sql);
2701 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2702
2703 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2704 l_dyn_sql := l_dyn_sql || ' SET MSII.LIFECYCLE_ID = :NULL_NUM';
2705 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2706 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2707 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2708 l_dyn_sql := l_dyn_sql || '( ';
2709 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2710 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2711 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2712 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2713 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_col_val||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2714 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2715 l_dyn_sql := l_dyn_sql || ') ';
2716
2717 Write_Debug(l_dyn_sql);
2718 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2719
2720 Write_Debug('MSII: Updated the Lifecycle IDs.');
2721
2722 END IF; --end: IF (l_lifecycle_col_val IS NOT NULL ...
2723
2724 IF (l_lifecycle_phase_col_val IS NOT NULL) THEN
2725 ----------------------------------------------------------------------------------
2726 -- Next Transfer the Lifecycle Phase information from EBI to MSII
2727 -- by doing Value-to-ID Conversion, and by joining Lifecycle ID information.
2728 ----------------------------------------------------------------------------------
2729 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2730 l_dyn_sql := l_dyn_sql || ' SET (MSII.CURRENT_PHASE_ID ';
2731 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2732 l_dyn_sql := l_dyn_sql || '( ';
2733 l_dyn_sql := l_dyn_sql || ' SELECT LCP.PROJ_ELEMENT_ID ';
2734 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(LCP.PROJ_ELEMENT_ID, -1), -1,'||G_LIFECYCLE_PHASE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2735 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_PHASES_V LCP, EGO_BULKLOAD_INTF EBI ';
2736 l_dyn_sql := l_dyn_sql || ' WHERE LCP.PARENT_STRUCTURE_ID (+) = MSII.LIFECYCLE_ID ';
2737 l_dyn_sql := l_dyn_sql || ' AND LCP.NAME (+) = EBI.'||l_lifecycle_phase_col_val;
2738 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2739 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2740 l_dyn_sql := l_dyn_sql || ') ';
2741 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2742 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2743 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2744 l_dyn_sql := l_dyn_sql || '( ';
2745 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2746 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2747 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2748 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2749 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' IS NOT NULL';
2750 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2751 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2752 l_dyn_sql := l_dyn_sql || ') ';
2753
2754 Write_Debug(l_dyn_sql);
2755 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2756
2757 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2758 l_dyn_sql := l_dyn_sql || ' SET MSII.CURRENT_PHASE_ID = :NULL_NUM';
2759 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2760 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2761 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2762 l_dyn_sql := l_dyn_sql || '( ';
2763 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2764 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2765 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2766 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2767 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2768 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2769 l_dyn_sql := l_dyn_sql || ') ';
2770
2771 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2772 Write_Debug('MSII: Updated the Lifecycle Phase IDs.');
2773
2774 END IF; --end: IF (l_lifecycle_phase_col_val IS NOT NULL ...
2775
2776 END IF; --IF ( l_prod_col_name_tbl.count > 0) THEN
2777 --
2778 -- convert all date fields values from Excel Null to INTF Null
2779 --
2780 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
2781 SET start_date_active = DECODE(start_date_active,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,start_date_active),
2782 end_date_active = DECODE(end_date_active,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,end_date_active),
2783 engineering_date = DECODE(engineering_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,engineering_date)
2784 WHERE MSII.SET_PROCESS_ID = l_msii_set_process_id
2785 AND MSII.PROCESS_FLAG = G_PROCESS_STATUS
2786 AND (MSII.start_date_active IS NOT NULL
2787 OR
2788 MSII.end_date_active IS NOT NULL
2789 OR
2790 MSII.engineering_date IS NOT NULL
2791 )
2792 AND EXISTS
2793 ( SELECT 'X'
2794 FROM EGO_BULKLOAD_INTF EBI
2795 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
2796 AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID
2797 AND EBI.PROCESS_STATUS = 1
2798 );
2799 ----------------------------------------------------------------------------------
2800 -- To print all the Item Numbers.
2801 -- 1) That were passed in Excel
2802 -- 2) That were Sequence generated
2803 -- etc., (i.e. in future, Function generated etc.,)
2804 ----------------------------------------------------------------------------------
2805 Log_ItemNums_ToBe_Processed(p_resultfmt_usage_id,
2806 l_item_number_col);
2807 x_retcode := G_STATUS_SUCCESS;
2808 x_set_process_id := l_msii_set_process_id;
2809
2810 ----------------------------------------------------------------------------------
2811 -- Now that Revision Update is supported through Item Search Results,
2812 -- need to use the same set_process_id for Revisions Interface also.
2813 -- Hence storing in a Global variable.
2814 ----------------------------------------------------------------------------------
2815 G_MSII_SET_PROCESS_ID := l_msii_set_process_id;
2816
2817 END load_item_interface;
2818
2819
2820 ----------------------------------------------------------
2821 -- Preprocess Item Interface Lines --
2822 ----------------------------------------------------------
2823
2824 PROCEDURE preprocess_item_interface
2825 (
2826 p_resultfmt_usage_id IN NUMBER,
2827 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
2828 p_set_process_id IN NUMBER,
2829 x_errbuff IN OUT NOCOPY VARCHAR2,
2830 x_retcode IN OUT NOCOPY VARCHAR2
2831 ) IS
2832
2833 -- Start OF comments
2834 -- API name : Setup MSII Item Interface Lines for processing
2835 -- TYPE : Private
2836 -- Pre-reqs : None
2837 -- FUNCTION : Populate and Prepare Item interfance lines.
2838 -- Eliminates any redundancy / errors in MSII
2839
2840 -----------------------------------------------
2841 -- Long Dynamic SQL String
2842 -----------------------------------------------
2843 l_dyn_sql VARCHAR2(20000);
2844
2845 -----------------------------------------------
2846 -- Error message variables
2847 -----------------------------------------------
2848 l_item_catalog_err_msg VARCHAR2(2000);
2849 l_uom_err_msg VARCHAR2(2000);
2850 l_lifecycle_err_msg VARCHAR2(2000);
2851 l_lifecycle_ph_err_msg VARCHAR2(2000);
2852 l_useritemtype_err_msg VARCHAR2(2000);
2853 l_bomitemtype_err_msg VARCHAR2(2000);
2854 l_engitemflag_err_msg VARCHAR2(2000);
2855 l_description_err_msg VARCHAR2(2000); -- Bug: 3778006
2856 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
2857 l_conversions_err_msg VARCHAR2(2000);
2858 l_secondary_def_err_msg VARCHAR2(2000);
2859 l_ont_pricing_qty_src_err_msg VARCHAR2(2000);
2860 l_secondary_uom_code_err_msg VARCHAR2(2000);
2861 l_tracking_qty_ind_err_msg VARCHAR2(2000);
2862 l_inv_item_status_err_msg VARCHAR2(2000);
2863 --Bug: 3969593 End
2864 --R12C changes for Pack Hierarchy
2865 l_tradeitemdesc_err_msg VARCHAR2(2000);
2866 BEGIN
2867
2868 Write_Debug('EBI : Getting the messages.');
2869
2870 -----------------------------------------------------------------------
2871 -- Preparation for Inserting error messages for all pre-processing --
2872 -- Validation errors. --
2873 -----------------------------------------------------------------------
2874 FND_MESSAGE.SET_NAME('EGO','EGO_ITEMCATALOG_INVALID');
2875
2876 -----------------------------------------------------------------------
2877 -- Fixing MLS Bug# 3421756 --
2878 -- Replacing 1 quote with 2 quotes to be used in Dynamic SQL --
2879 -- None of the messages have ampersands or other suspicious chars --
2880 -- that could cause harm in the Dynamic SQL run below. --
2881 -----------------------------------------------------------------------
2882 l_item_catalog_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2883
2884 FND_MESSAGE.SET_NAME('EGO','EGO_PRIMARYUOM_INVALID');
2885 l_uom_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2886
2887 FND_MESSAGE.SET_NAME('EGO','EGO_LIFECYCLE_INVALID');
2888 l_lifecycle_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2889
2890 FND_MESSAGE.SET_NAME('EGO','EGO_LIFECYCLE_PHASE_INVALID');
2891 l_lifecycle_ph_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2892
2893 FND_MESSAGE.SET_NAME('EGO','EGO_USERITEMTYPE_INVALID');
2894 l_useritemtype_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2895
2896 FND_MESSAGE.SET_NAME('EGO','EGO_BOMITEMTYPE_INVALID');
2897 l_bomitemtype_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2898
2899 FND_MESSAGE.SET_NAME('EGO','EGO_ENGITEMFLAG_INVALID');
2900 l_engitemflag_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2901
2902 -- Bug: 3778006
2903 FND_MESSAGE.SET_NAME('EGO','EGO_ITEMDESC_IS_FG');
2904 l_description_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2905
2906 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
2907 FND_MESSAGE.SET_NAME('EGO','EGO_CONVERSIONS_INVALID');
2908 l_conversions_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2909
2910 FND_MESSAGE.SET_NAME('EGO','EGO_DEFAULTING_INVALID');
2911 l_secondary_def_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2912
2913 FND_MESSAGE.SET_NAME('EGO','EGO_PRICING_INVALID');
2914 l_ont_pricing_qty_src_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2915
2916 FND_MESSAGE.SET_NAME('EGO','EGO_SECONDARYUOM_INVALID');
2917 l_secondary_uom_code_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2918
2919 FND_MESSAGE.SET_NAME('EGO','EGO_TRACKING_INVALID');
2920 l_tracking_qty_ind_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2921 --Bug: 3969593 End
2922
2923 FND_MESSAGE.SET_NAME('EGO','EGO_STATUS_INVALID');--MLS STatus
2924 l_inv_item_status_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2925 -- R12C changes for Pack Hierarchy
2926 FND_MESSAGE.SET_NAME('EGO','EGO_TRADEITEMDESC_INVALID');
2927 l_tradeitemdesc_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2928
2929 -----------------------------------------------------------------------
2930 --Insert the Pre-processed error messages.
2931 -----------------------------------------------------------------------
2932 l_dyn_sql := '';
2933 l_dyn_sql := l_dyn_sql || 'INSERT INTO MTL_INTERFACE_ERRORS ';
2934 l_dyn_sql := l_dyn_sql || '( ';
2935 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID ';
2936 l_dyn_sql := l_dyn_sql || ', UNIQUE_ID ';
2937 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_DATE ';
2938 l_dyn_sql := l_dyn_sql || ', LAST_UPDATED_BY ';
2939 l_dyn_sql := l_dyn_sql || ', CREATION_DATE ';
2940 l_dyn_sql := l_dyn_sql || ', CREATED_BY ';
2941 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_LOGIN ';
2942 l_dyn_sql := l_dyn_sql || ', TABLE_NAME ';
2943 l_dyn_sql := l_dyn_sql || ', MESSAGE_NAME ';
2944 l_dyn_sql := l_dyn_sql || ', COLUMN_NAME ';
2945 l_dyn_sql := l_dyn_sql || ', REQUEST_ID ';
2946 l_dyn_sql := l_dyn_sql || ', PROGRAM_APPLICATION_ID ';
2947 l_dyn_sql := l_dyn_sql || ', PROGRAM_ID ';
2948 l_dyn_sql := l_dyn_sql || ', PROGRAM_UPDATE_DATE ';
2949 l_dyn_sql := l_dyn_sql || ', ERROR_MESSAGE ';
2950 l_dyn_sql := l_dyn_sql || ', TRANSACTION_ID ';
2951 l_dyn_sql := l_dyn_sql || ', ENTITY_IDENTIFIER ';
2952 l_dyn_sql := l_dyn_sql || ', BO_IDENTIFIER ';
2953 l_dyn_sql := l_dyn_sql || ') ';
2954 l_dyn_sql := l_dyn_sql || 'SELECT ';
2955 l_dyn_sql := l_dyn_sql || ' -1 ';
2956 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
2957 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
2958 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID ;
2959 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
2960 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID;
2961 l_dyn_sql := l_dyn_sql || ', '||G_LOGIN_ID;
2962 l_dyn_sql := l_dyn_sql || ', ''MTL_SYSTEM_ITEMS_INTERFACE'' ';
2963 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
2964 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_ERR_STS||', ''EGO_ITEMCATALOG_INVALID'', ';
2965 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_ERR_STS||', ''EGO_PRIMARYUOM_INVALID'', ';
2966 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_ERR_STS||', ''EGO_LIFECYCLE_INVALID'', ';
2967 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_PHASE_ERR_STS||', ''EGO_LIFECYCLE_PHASE_INVALID'', ';
2968 l_dyn_sql := l_dyn_sql || G_USER_ITEM_TYPE_ERR_STS||', ''EGO_USERITEMTYPE_INVALID'', ';
2969 l_dyn_sql := l_dyn_sql || G_BOM_ITEM_TYPE_ERR_STS||', ''EGO_BOMITEMTYPE_INVALID'', ';
2970 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', ''EGO_TRADEITEMDESC_INVALID'', ';
2971 l_dyn_sql := l_dyn_sql || G_ENG_ITEM_FLAG_ERR_STS||', ''EGO_ENGITEMFLAG_INVALID'', ';
2972 l_dyn_sql := l_dyn_sql || G_DESCRIPTION_ERR_STS||', ''EGO_ITEMDESC_IS_FG'', '; -- Bug: 3778006
2973 l_dyn_sql := l_dyn_sql || G_CONVERSIONS_ERR_STS||',''EGO_CONVERSIONS_INVALID'', '; --Bug: 3969593 Begin
2974 l_dyn_sql := l_dyn_sql || G_SECONDARY_DEF_IND_ERR_STS||',''EGO_DEFAULTING_INVALID'', ';
2975 l_dyn_sql := l_dyn_sql || G_ONT_PRICING_QTY_SRC_ERR_STS||',''EGO_PRICING_INVALID'', ';
2976 l_dyn_sql := l_dyn_sql || G_SECONDARY_UOM_CODE_ERR_STS||',''EGO_SECONDARYUOM_INVALID'', ';
2977 l_dyn_sql := l_dyn_sql || G_TRACKING_QTY_IND_ERR_STS||',''EGO_TRACKING_INVALID'', '; --Bug: 3969593 End
2978 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS||',''EGO_STATUS_INVALID'' ';--MLS Status
2979 l_dyn_sql := l_dyn_sql || ' ) ';
2980 l_dyn_sql := l_dyn_sql || ', NULL ';
2981 l_dyn_sql := l_dyn_sql || ', '||G_REQUEST_ID ;
2982 l_dyn_sql := l_dyn_sql || ', '||G_PROG_APPID ;
2983 l_dyn_sql := l_dyn_sql || ', '||G_PROG_ID ;
2984 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
2985 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
2986 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_ERR_STS ||', EBI.'||G_ITEM_CATALOG_NAME_EBI_COL || ' || '' : '||l_item_catalog_err_msg||''', ';
2987 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_ERR_STS||', EBI.'||G_PRIMARY_UOM_EBI_COL || ' || '' : '||l_uom_err_msg||''', ';
2988 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_ERR_STS||', EBI.'||G_LIFECYCLE_EBI_COL || ' || '' : '||l_lifecycle_err_msg||''', ';
2989 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_PHASE_ERR_STS||', EBI.'||G_LIFECYCLE_PHASE_EBI_COL || ' || '' : '||l_lifecycle_ph_err_msg||''', ';
2990 l_dyn_sql := l_dyn_sql || G_USER_ITEM_TYPE_ERR_STS||', EBI.'||G_USER_ITEM_TYPE_EBI_COL || ' || '' : '||l_useritemtype_err_msg||''', ';
2991 l_dyn_sql := l_dyn_sql || G_BOM_ITEM_TYPE_ERR_STS||', EBI.'||G_BOM_ITEM_TYPE_EBI_COL || ' || '' : '||l_bomitemtype_err_msg||''', ';
2992 IF l_trade_item_descriptor_col IS NULL THEN
2993 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', '''||l_tradeitemdesc_err_msg||''' , ';
2994 ELSE
2995 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', EBI.'||l_trade_item_descriptor_col || ' || '' : '||l_tradeitemdesc_err_msg||''' , ';
2996 END IF;
2997 l_dyn_sql := l_dyn_sql || G_ENG_ITEM_FLAG_ERR_STS||', EBI.'||G_ENG_ITEM_FLAG_EBI_COL || ' || '' : '||l_engitemflag_err_msg||''', ';
2998 l_dyn_sql := l_dyn_sql || G_DESCRIPTION_ERR_STS||', EBI.'||G_DESCRIPTION_EBI_COL || ' || '' : '||l_description_err_msg||''','; -- Bug: 3778006
2999 l_dyn_sql := l_dyn_sql || G_CONVERSIONS_ERR_STS||', EBI.'||G_CONVERSIONS_EBI_COL || ' || '' : '||l_conversions_err_msg||''','; --Bug: 3969593 Begin
3000 l_dyn_sql := l_dyn_sql || G_SECONDARY_DEF_IND_ERR_STS||', EBI.'||G_SECONDARY_DEF_IND_EBI_COL || ' || '' : '||l_secondary_def_err_msg||''',';
3001 l_dyn_sql := l_dyn_sql || G_ONT_PRICING_QTY_SRC_ERR_STS||', EBI.'||G_ONT_PRICING_QTY_SRC_EBI_COL || ' || '' : '||l_ont_pricing_qty_src_err_msg||''',';
3002 l_dyn_sql := l_dyn_sql || G_SECONDARY_UOM_CODE_ERR_STS||', EBI.'||G_SECONDARY_UOM_CODE_EBI_COL || ' || '' : '||l_secondary_uom_code_err_msg||''',';
3003 l_dyn_sql := l_dyn_sql || G_TRACKING_QTY_IND_ERR_STS||', EBI.'||G_TRACKING_QTY_IND_EBI_COL || ' || '' : '||l_tracking_qty_ind_err_msg||''','; --Bug: 3969593 End
3004 --Rathna MLS Status
3005 IF l_inventory_item_status_col IS NULL THEN
3006 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS||', '''||l_inv_item_status_err_msg||'''';
3007 ELSE
3008 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS||', EBI.'||l_inventory_item_status_col || ' || '' : '||l_inv_item_status_err_msg||'''';
3009 END IF;
3010 l_dyn_sql := l_dyn_sql || ' ) ';
3011 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
3012 l_dyn_sql := l_dyn_sql || ', NULL ';
3013 l_dyn_sql := l_dyn_sql || ', NULL ';
3014 l_dyn_sql := l_dyn_sql || 'FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_BULKLOAD_INTF EBI ';
3015 l_dyn_sql := l_dyn_sql || 'WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID ';
3016 l_dyn_sql := l_dyn_sql || ' AND MSII.SET_PROCESS_ID = '||p_set_process_id;
3017 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG IN ';
3018 l_dyn_sql := l_dyn_sql || ' ( ';
3019 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_ERR_STS||', ';
3020 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_ERR_STS||', ';
3021 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_ERR_STS||', ';
3022 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_PHASE_ERR_STS||', ';
3023 l_dyn_sql := l_dyn_sql || G_USER_ITEM_TYPE_ERR_STS||', ';
3024 l_dyn_sql := l_dyn_sql || G_BOM_ITEM_TYPE_ERR_STS||', ';
3025 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', ';
3026 l_dyn_sql := l_dyn_sql || G_ENG_ITEM_FLAG_ERR_STS||', ';
3027 l_dyn_sql := l_dyn_sql || G_DESCRIPTION_ERR_STS||', ';
3028 l_dyn_sql := l_dyn_sql || G_CONVERSIONS_ERR_STS||', '; --Bug: 3969593 Begin
3029 l_dyn_sql := l_dyn_sql || G_SECONDARY_DEF_IND_ERR_STS||', ';
3030 l_dyn_sql := l_dyn_sql || G_ONT_PRICING_QTY_SRC_ERR_STS||', ';
3031 l_dyn_sql := l_dyn_sql || G_SECONDARY_UOM_CODE_ERR_STS||', ';
3032 l_dyn_sql := l_dyn_sql || G_TRACKING_QTY_IND_ERR_STS||', '; --Bug: 3969593 End
3033 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS; --need to store error status as well
3034 l_dyn_sql := l_dyn_sql || ' ) ';
3035 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
3036 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3037
3038 Write_Debug('l_dyn_sql');
3039 --There is a limit of 1024 BYTES through Write_Debug (it uses
3040 --UTL_FILE)
3041 -------------------------------------------------------------------------
3042 --Fix for Bug# 3624649. (JCGEORGE, PPEDDAMA)
3043 --Since Typically NLS_LENGTH_SEMANTICS parameter value is BYTE
3044 -- (in NLS_DATABASE_PARAMETERS table), use SUBSTRB instead of SUBSTR
3045 -- when fetching possibly MLS strings.
3046 -------------------------------------------------------------------------
3047 Write_Debug(SUBSTRB(l_dyn_sql, 1, 1000));
3048 Write_Debug(SUBSTRB(l_dyn_sql, 1001, 2000));
3049 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3050
3051 Write_Debug('MIERR: Inserted Pre-processed error messages in MTL_INTERFACE_ERRORS');
3052
3053 -----------------------------------------------------------------------
3054 --Now that the error messages are inserted, update MSII lines to
3055 --Process status ERROR.
3056 -----------------------------------------------------------------------
3057
3058 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
3059 SET MSII.PROCESS_FLAG = G_INTF_STATUS_ERROR
3060 WHERE MSII.SET_PROCESS_ID = p_set_process_id
3061 AND MSII.PROCESS_FLAG IN
3062 (
3063 G_ITEM_CATALOG_NAME_ERR_STS
3064 , G_PRIMARY_UOM_ERR_STS
3065 , G_LIFECYCLE_ERR_STS
3066 , G_LIFECYCLE_PHASE_ERR_STS
3067 , G_USER_ITEM_TYPE_ERR_STS
3068 , G_BOM_ITEM_TYPE_ERR_STS
3069 , G_ENG_ITEM_FLAG_ERR_STS
3070 , G_DESCRIPTION_ERR_STS -- Bug: 3804572
3071 , G_CONVERSIONS_ERR_STS --Bug: 3969593 Begin
3072 , G_SECONDARY_DEF_IND_ERR_STS
3073 , G_ONT_PRICING_QTY_SRC_ERR_STS
3074 , G_SECONDARY_UOM_CODE_ERR_STS
3075 , G_TRACKING_QTY_IND_ERR_STS --Bug: 3969593 End
3076 , G_INV_ITEM_STATUS_ERR_STS--Rathna MLS Status
3077 )
3078 AND MSII.TRANSACTION_ID IN
3079 (
3080 SELECT TRANSACTION_ID
3081 FROM EGO_BULKLOAD_INTF
3082 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
3083 );
3084
3085 Write_Debug('MSII: Updated all the line statuses to Error for Pre-processing validation errors');
3086
3087 -- DELETE MTL_SYSTEM_ITEMS_INTERFACE MSII
3088 -- WHERE
3089 -- (
3090 -- (
3091 -- ITEM_NUMBER IS NOT NULL AND
3092 -- ORGANIZATION_CODE IS NOT NULL
3093 -- )
3094 -- OR
3095 -- (
3096 -- SOURCE_SYSTEM_REFERENCE IS NOT NULL AND --for non-PDH Batch
3097 -- SOURCE_SYSTEM_ID IS NOT NULL --for non-PDH Batch
3098 -- )
3099 --In case of CREATE : Item Catalog Group ID will be NOT NULL in MSII
3100 --In case of SYNC/UPDATE, where Item ID exists, Item Catalog Group ID
3101 --will be NULL. Hence commenting out, this NOT NULL condn.
3102 --ITEM_CATALOG_GROUP_ID IS NOT NULL
3103 -- OR
3104 -- (
3105 -- DESCRIPTION IS NULL AND
3106 -- SOURCE_SYSTEM_REFERENCE IS NULL AND
3107 -- SOURCE_SYSTEM_REFERENCE_DESC IS NULL
3108 -- )
3109 -- )
3110 -- AND
3111 -- (
3112 -- DESCRIPTION IS NULL AND
3113 -- LONG_DESCRIPTION IS NULL AND
3114 -- PRIMARY_UOM_CODE IS NULL AND
3115 -- LIFECYCLE_ID IS NULL AND
3116 -- CURRENT_PHASE_ID IS NULL AND
3117 -- INVENTORY_ITEM_STATUS_CODE IS NULL AND
3118 -- ITEM_TYPE IS NULL AND
3119 -- BOM_ITEM_TYPE IS NULL AND
3120 -- ENG_ITEM_FLAG IS NULL AND
3121 --Joseph : Bug Fix : 3621826
3122 -- TEMPLATE_ID IS NULL AND --**NEW
3123 -- TEMPLATE_NAME IS NULL AND --**NEW
3124 -- SOURCE_SYSTEM_REFERENCE_DESC IS NULL AND -- Bug: 5207217
3125 -- GLOBAL_TRADE_ITEM_NUMBER IS NULL -- Bug: 5207217
3126 -- )
3127 -- AND SET_PROCESS_ID = p_set_process_id
3128 ------------------------------------------------------------------------------------------------
3129 -- Fix for 11.5.10: Including PROCESS_FLAG status during this DELETE operation.
3130 --
3131 -- When ERROR happens during PRIMARY_UOM_CODE processing (NOTE: This is the first
3132 -- significant Value-to-ID conversion) then MSII.PROCESS_FLAG is set to something
3133 -- other than 1. Because of this, the subsequent transfer of the Data from EBI to MSII
3134 -- doesnot happen (as all SQLs check for EBI, MSII Process Status to be 1 for transfer).
3135 -- So, this DELETE will go through successfully, as all the columns are NULL (other than
3136 -- ITEM_NUMBER, ORGANIZATION_CODE.)
3137 -- Then EBI stays in PROCESS_STATUS = 1, which is later converted to 7 in Item_intf_completion.
3138 --
3139 -- Because of this User-Defined attrs for those rows are ERRONEOUSLY picked and processed.
3140 ------------------------------------------------------------------------------------------------
3141 -- AND PROCESS_FLAG = G_PROCESS_STATUS --Bug 3763665
3142 -- AND (EXISTS( -- there exists a row where item is being Created or updated in the same request
3143 -- SELECT 'X'
3144 -- FROM MTL_SYSTEM_ITEMS_INTERFACE MSI
3145 -- WHERE MSI.DESCRIPTION IS NOT NULL
3146 -- AND NVL(MSI.ITEM_NUMBER,FND_API.G_MISS_CHAR) = NVL(MSII.ITEM_NUMBER,FND_API.G_MISS_CHAR)
3147 -- AND SET_PROCESS_ID = p_set_process_id
3148 -- AND PROCESS_FLAG = G_PROCESS_STATUS
3149 -- )
3150 -- OR EXISTS(
3151 -- SELECT 'X'
3152 -- FROM MTL_SYSTEM_ITEMS_B MSI
3153 -- WHERE MSII.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
3154 -- AND MSII.ORGANIZATION_ID = MSI.ORGANIZATION_ID
3155 -- )-- End Bug 3763665
3156 -- );
3157
3158 -- Write_Debug('Preprocess_Item_Interface : NEW Deleted redundant / unnecessary rows from MSII');
3159
3160 -- Bug: 5519768
3161 -- ENG_ITEM_FLAG will be defaulted from IOI, so commented the below code
3162 -- IF G_PDH_BATCH THEN
3163 -- -----------------------------------------------------------------------
3164 -- -- Set the ENG_ITEM_FLAG to Y for all the New Items TO-BE Created.
3165 -- -- So, all new Items (if ENG_ITEM_FLAG is unspecified) are created as
3166 -- -- Engineering Items.
3167 -- -----------------------------------------------------------------------
3168 --
3169 -- UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
3170 -- SET MSII.ENG_ITEM_FLAG = 'Y'
3171 -- WHERE MSII.SET_PROCESS_ID = p_set_process_id
3172 -- AND MSII.INVENTORY_ITEM_ID IS NULL
3173 -- AND MSII.TRANSACTION_TYPE IN ('SYNC', 'CREATE')
3174 -- AND MSII.PROCESS_FLAG = G_PROCESS_STATUS
3175 -- AND MSII.ENG_ITEM_FLAG IS NULL
3176 -- AND MSII.ORGANIZATION_ID = (SELECT ORGANIZATION_ID
3177 -- FROM MTL_PARAMETERS MP
3178 -- WHERE ORGANIZATION_ID = MSII.ORGANIZATION_ID
3179 -- AND ORGANIZATION_ID = MASTER_ORGANIZATION_ID
3180 -- );
3181 --Bug 4721682 : not to set the ENG_ITEM_FLAG if the ORGANIZATION IS NOT MASTER ORG
3182 --
3183 -- Write_Debug('Preprocess_Item_Interface : Set Eng Item Flag = Y in case of NULL for New to-be created items.');
3184 -- END IF;
3185
3186 END preprocess_item_interface;
3187
3188
3189 ----------------------------------------------------------
3190 -- Setup Item Interface Lines --
3191 ----------------------------------------------------------
3192 PROCEDURE Setup_item_interface
3193 (
3194 p_resultfmt_usage_id IN NUMBER,
3195 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
3196 p_set_process_id IN NUMBER,
3197 x_set_process_id OUT NOCOPY NUMBER,
3198 x_errbuff OUT NOCOPY VARCHAR2,
3199 x_retcode OUT NOCOPY VARCHAR2
3200 ) IS
3201
3202 -- Start OF comments
3203 -- API name : Setup MSII Item Interface Lines for processing
3204 -- TYPE : Private
3205 -- Pre-reqs : None
3206 -- FUNCTION : Populate and Prepare Item interfance lines.
3207 -- Eliminates any redundancy / errors in MSII
3208
3209 l_set_process_id NUMBER(15);
3210
3211 BEGIN
3212
3213 ----------------------------------------------
3214 -- Populates rows in MSII
3215 ----------------------------------------------
3216 Developer_Debug('calling load_item_interface');
3217 load_item_interface(
3218 p_resultfmt_usage_id => p_resultfmt_usage_id
3219 ,p_set_process_id => p_set_process_id
3220 ,x_set_process_id => l_set_process_id
3221 ,p_caller_identifier => p_caller_identifier
3222 ,x_errbuff => x_errbuff
3223 ,x_retcode => x_retcode
3224 );
3225 Developer_Debug('returning with retcode'||x_retcode);
3226
3227 -----------------------------------------------------
3228 -- Deletes redundant / unnecessary rows from MSII.
3229 -----------------------------------------------------
3230 preprocess_item_interface(
3231 p_resultfmt_usage_id => p_resultfmt_usage_id
3232 ,p_set_process_id => l_set_process_id
3233 ,p_caller_identifier => p_caller_identifier
3234 ,x_errbuff => x_errbuff
3235 ,x_retcode => x_retcode
3236 );
3237
3238 x_set_process_id := l_set_process_id;
3239 Write_Debug('Setup_Item_Interface : Set Process Id => '||x_set_process_id);
3240
3241 EXCEPTION
3242 WHEN OTHERS THEN
3243 x_retcode := G_STATUS_ERROR;
3244 x_errbuff := SUBSTRB(SQLERRM, 1,240);
3245 Write_Debug('Setup_Item_Interface : EXCEPTION HAPPENED => '||x_errbuff);
3246 RAISE;
3247
3248 END setup_item_interface;
3249
3250
3251 -------------------------------------------------------------------
3252 -- Change Item Interface Lines process statuses as completed. --
3253 -- Statuses represent: Warning, Error, Success etc., --
3254 -------------------------------------------------------------------
3255 PROCEDURE Item_intf_completion
3256 (
3257 p_resultfmt_usage_id IN NUMBER
3258 , x_errbuff OUT NOCOPY VARCHAR2
3259 , x_retcode OUT NOCOPY VARCHAR2
3260 ) IS
3261
3262 -----------------------------------------------
3263 -- Long Dynamic SQL String
3264 -----------------------------------------------
3265 l_dyn_sql VARCHAR2(10000);
3266
3267 BEGIN
3268
3269 -----------------------------------------------------------------
3270 -- Update EBI, with the process status of rows in MSII after
3271 -- the completion of IOI processing.
3272 -----------------------------------------------------------------
3273 UPDATE EGO_BULKLOAD_INTF EBI
3274 SET EBI.PROCESS_STATUS =
3275 (
3276 SELECT MSII.PROCESS_FLAG
3277 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3278 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3279 )
3280 WHERE EXISTS
3281 (
3282 SELECT 'X'
3283 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3284 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3285 )
3286 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
3287
3288 ----------------------------------------------------------------------------
3289 --Update all the lines in EGO_BULKLOAD_INTF as failure, for which
3290 --The Inventory Item IDs were not available.
3291 --1. For Transaction Type : CREATE, Item ID should be populated
3292 -- at the end of Processing
3293 --2. For Transaction Type : SYNC / UPDATE, Item ID should be
3294 -- retrieved during processing.
3295 ----------------------------------------------------------------------------
3296 -- R12: this is not required
3297 -- UPDATE EGO_BULKLOAD_INTF EBI
3298 -- SET EBI.PROCESS_STATUS = G_INTF_STATUS_ERROR
3299 -- WHERE EXISTS
3300 -- (
3301 -- SELECT 'X'
3302 -- FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3303 -- WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3304 -- AND MSII.PROCESS_FLAG = G_INTF_STATUS_SUCCESS
3305 -- AND MSII.INVENTORY_ITEM_ID IS NULL
3306 -- )
3307 -- AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
3308
3309 ----------------------------------------------------------------------------
3310 -- Update all the lines in EGO_BULKLOAD_INTF as SUCCESS
3311 -- for these rows were used to populate Multi-Row
3312 -- Appropriate errors will be displayed by the User-Defined Attrs Import
3313 -- processing later.
3314 ----------------------------------------------------------------------------
3315 UPDATE EGO_BULKLOAD_INTF EBI
3316 SET EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS
3317 WHERE EBI.PROCESS_STATUS = G_INTF_STATUS_TOBE_PROCESS
3318 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
3319
3320 ----------------------------------------------------------------------------
3321 -- Update the Item IDs (Doesnt matter Create or Update, because
3322 -- Item IDs will be populated either way in MSII) in
3323 -- Generic Bulkload Intf table (EGO_BULKLOAD_INTF)
3324 -- These Item IDs are required for Item User-Defined Attrs bulkload
3325 ----------------------------------------------------------------------------
3326 UPDATE EGO_BULKLOAD_INTF EBI
3327 SET EBI.INSTANCE_PK1_VALUE =
3328 (
3329 SELECT MSII.INVENTORY_ITEM_ID
3330 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3331 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3332 )
3333 WHERE EXISTS
3334 (
3335 SELECT 'X'
3336 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3337 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3338 )
3339 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
3340 AND EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS;
3341
3342 Write_Debug('EBI: Updated the Process_Status to Indicate Succssful/Unsucessful completion.');
3343
3344 x_retcode := G_STATUS_SUCCESS;
3345
3346 EXCEPTION
3347 WHEN OTHERS THEN
3348 x_retcode := G_STATUS_ERROR;
3349 x_errbuff := SUBSTRB(SQLERRM, 1,240);
3350 Write_Debug('Item_Intf_Completion : EXCEPTION HAPPENED => '||x_errbuff);
3351 RAISE;
3352
3353 END Item_Intf_Completion;
3354
3355 ----------------------------------------------------------
3356 -- Populate Item Revision Interface Lines --
3357 ----------------------------------------------------------
3358
3359 PROCEDURE load_item_revs_interface
3360 (
3361 p_resultfmt_usage_id IN NUMBER,
3362 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
3363 p_data_level IN VARCHAR2,
3364 p_set_process_id IN NUMBER,
3365 x_set_process_id OUT NOCOPY NUMBER,
3366 x_errbuff OUT NOCOPY VARCHAR2,
3367 x_retcode OUT NOCOPY VARCHAR2
3368 ) IS
3369
3370 -- Start OF comments
3371 -- API name : Populate MTL_ITEM_REVISIONS_INTERFACE table
3372 -- TYPE : Private
3373 -- Pre-reqs : None
3374 -- FUNCTION : Populate and Load Item Revisions interfance lines.
3375 -- Loads Item Revision Attr Values
3376 -- Errors are populated in MTL_INTERFACE_ERRORS
3377 --
3378
3379 ------------------------------------------------------------------------------------------
3380 -- To get the Item Revision Base attr columns in the Result Format.
3381 -- NOTE: Only one of the SELECTs below will be active at a time, based on the Data Level.
3382 ------------------------------------------------------------------------------------------
3383 CURSOR c_item_rev_attr_intf_cols (c_resultfmt_usage_id IN NUMBER) IS
3384 --Item Revision Data Level
3385 SELECT attribute_code, intf_column_name
3386 FROM ego_results_fmt_usages
3387 WHERE resultfmt_usage_id = c_resultfmt_usage_id
3388 AND attribute_code NOT LIKE '%$$%'
3389 ---------------------------------------------------------------------------
3390 -- Added NOT LIKE 'GTIN_%' to filter out Dummy Attrs for Attr Group: "GTIN"
3391 ---------------------------------------------------------------------------
3392 AND attribute_code NOT LIKE 'GTIN_%'
3393 AND p_data_level = G_ITEM_REV_DATA_LEVEL
3394 UNION
3395 -------------------
3396 --Item Data Level
3397 -------------------
3398 SELECT attribute_code, intf_column_name
3399 FROM ego_results_fmt_usages
3400 WHERE resultfmt_usage_id = c_resultfmt_usage_id
3401 AND attribute_code NOT LIKE '%$$%'
3402 ---------------------------------------------------------------------------
3403 -- Added NOT LIKE 'GTIN_%' to filter out Dummy Attrs for Attr Group: "GTIN"
3404 ---------------------------------------------------------------------------
3405 AND attribute_code NOT LIKE 'GTIN_%'
3406 AND p_data_level = G_ITEM_DATA_LEVEL
3407 AND (
3408 attribute_code IN -- Segregating Item Revision Base Attributes using this clause
3409 (
3410 select LOOKUP_CODE CODE
3411 from FND_LOOKUP_VALUES
3412 where LOOKUP_TYPE = 'EGO_ITEM_REV_HDR_ATTR_GRP'
3413 AND LANGUAGE = USERENV('LANG')
3414 AND ENABLED_FLAG = 'Y'
3415 and LOOKUP_CODE not in ('REVISION_CREATION_DATE', 'REVISION_CREATED_BY')
3416 )
3417 OR
3418 attribute_code = G_REV_EFF_DATE_ATTR_CODE
3419 -- Bug 6186037
3420 --accomodate for revision effective date which doest exist in EGO_ITEM_REV_HDR_ATTR_GRP and cannot be included
3421
3422 );
3423
3424 --------------------------------------------------------------------------
3425 -- To check if the given Set Process ID already exists in MSII.
3426 --------------------------------------------------------------------------
3427 CURSOR c_msii_set_id_exists(c_set_process_id IN NUMBER) IS
3428 SELECT 'x'
3429 FROM mtl_system_items_interface
3430 WHERE set_process_id = c_set_process_id;
3431
3432 ---------------------------------------------------------------------
3433 -- Type Declarations
3434 ---------------------------------------------------------------------
3435 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
3436 INDEX BY BINARY_INTEGER;
3437
3438 -------------------------
3439 -- local variables --
3440 -------------------------
3441 l_prod_col_name_tbl VARCHAR_TBL_TYPE;
3442 l_intf_col_name_tbl VARCHAR_TBL_TYPE;
3443
3444 l_prod_col_name VARCHAR2(256);
3445 l_intf_col_name VARCHAR2(256);
3446
3447 ---------------------------------------------------------------------
3448 -- Assuming that the column name will not be more than 30 chars.
3449 ---------------------------------------------------------------------
3450 l_item_number_col VARCHAR2(30);
3451 l_org_code_col VARCHAR2(30);
3452 l_rev_code_col VARCHAR2(30);
3453 l_lifecycle_col_val VARCHAR2(50);
3454 l_lifecycle_phase_col_val VARCHAR2(50);
3455 l_inventory_item_id MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE;
3456 l_item_catalog_name_col VARCHAR2(50);
3457
3458 l_msii_set_process_id NUMBER;
3459 i NUMBER;
3460 l_cursor_select INTEGER;
3461 l_cursor_execute INTEGER;
3462
3463 l_item_number_table DBMS_SQL.VARCHAR2_TABLE;
3464 l_org_id_table DBMS_SQL.NUMBER_TABLE;
3465 l_temp NUMBER(10) := 1;
3466 l_count NUMBER := 0;
3467 l_exists VARCHAR2(2);
3468
3469 l_trans_id_table DBMS_SQL.NUMBER_TABLE;
3470
3471 --------------------------------------------
3472 -- Long Dynamic SQL String
3473 --------------------------------------------
3474 l_dyn_sql VARCHAR2(10000);
3475
3476 BEGIN
3477 Write_Debug('*Item Revisions Interface*');
3478
3479 Write_Debug('About to populate the EBI with Trans IDs');
3480
3481 --------------------------------------------------------------------
3482 --Populate the Transaction IDs for current Result fmt usage ID
3483 --------------------------------------------------------------------
3484 -- Bug: 3804572 - Error messages are not shown, if import format contains revision attrs.
3485 -- this was happening because the error was logged with a previous transaction id and
3486 -- here a new transaction id was updated to Bulkload interface table.
3487 IF p_data_level <> G_ITEM_DATA_LEVEL THEN
3488 UPDATE ego_bulkload_intf
3489 SET transaction_id = MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL
3490 WHERE resultfmt_usage_id = p_resultfmt_usage_id;
3491 END IF;
3492
3493 Write_Debug('Retrieving the Display and INTF cols');
3494 i := 0;
3495 --------------------------------------------------------------------
3496 -- Saving the column names in local table for easy retrieval later.
3497 -- Also save important columns such as Item ID, Org ID etc.,
3498 --------------------------------------------------------------------
3499 FOR c_item_rev_attr_intf_rec IN c_item_rev_attr_intf_cols
3500 (
3501 p_resultfmt_usage_id
3502 )
3503 LOOP
3504
3505 l_prod_col_name := c_item_rev_attr_intf_rec.attribute_code;
3506 l_intf_col_name := c_item_rev_attr_intf_rec.intf_column_name;
3507
3508 Write_Debug('The caller identity is : '|| p_caller_identifier);
3509 Write_Debug('p_data_level =>: '|| p_data_level);
3510
3511 --------------------------------------------------------------------
3512 -- If the Caller Identifer is G_ITEM, then save the column info.
3513 --------------------------------------------------------------------
3514 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM) THEN
3515
3516 --------------------------------------------------------------------
3517 -- Store the Item Number column name in the Generic Interface
3518 --------------------------------------------------------------------
3519 IF (l_prod_col_name = G_ITEM_NUMBER) THEN
3520 l_item_number_col := l_intf_col_name;
3521 Write_Debug('Item Number : '||l_item_number_col);
3522
3523 --------------------------------------------------------------------
3524 -- Store the Organization Code column name in the Generic Interface
3525 --------------------------------------------------------------------
3526 ELSIF (l_prod_col_name = G_ORG_CODE) THEN
3527 l_org_code_col := l_intf_col_name;
3528 Write_Debug('Organization Code : '||l_org_code_col);
3529
3530 --------------------------------------------------------------------
3531 --Saving the Rest of column names.
3532 --------------------------------------------------------------------
3533 ELSIF (l_prod_col_name IN (G_ITEM_CATALOG_GROUP,G_ITEM_CATALOG_GROUP1)) THEN
3534 l_item_catalog_name_col := l_intf_col_name;
3535
3536 ELSE
3537 ---------------------------------------------------------------------
3538 -- Mapping the Revision Attribute Code to the Database Column.
3539 ---------------------------------------------------------------------
3540 IF (l_prod_col_name = G_REV_CODE_ATTR_CODE) THEN
3541 l_prod_col_name_tbl(i) := G_REV_CODE_DB_COL;
3542 ------------------------------------------
3543 -- Saving the intf col name for Rev Code.
3544 ------------------------------------------
3545 l_rev_code_col := l_intf_col_name;
3546 ELSIF (l_prod_col_name = G_REV_LABEL_ATTR_CODE) THEN
3547 l_prod_col_name_tbl(i) := G_REV_LABEL_DB_COL;
3548 ELSIF (l_prod_col_name = G_REV_DESCRIPTION_ATTR_CODE) THEN
3549 l_prod_col_name_tbl(i) := G_REV_DESCRIPTION_DB_COL;
3550 ELSIF (l_prod_col_name = G_REV_REASON_ATTR_CODE) THEN
3551 l_prod_col_name_tbl(i) := G_REV_REASON_DB_COL;
3552 ELSIF (l_prod_col_name = G_REV_LC_ID_ATTR_CODE) THEN
3553 l_prod_col_name_tbl(i) := G_REV_LC_ID_DB_COL;
3554 ELSIF (l_prod_col_name = G_REV_LC_PHASE_ID_ATTR_CODE) THEN
3555 l_prod_col_name_tbl(i) := G_REV_LC_PHASE_ID_DB_COL;
3556 ELSIF (l_prod_col_name = G_REV_IMPL_DATE_ATTR_CODE) THEN
3557 l_prod_col_name_tbl(i) := G_REV_IMPL_DATE_DB_COL;
3558 ELSIF (l_prod_col_name = G_REV_EFF_DATE_ATTR_CODE OR
3559 l_prod_col_name = G_REV_EFF_DATE_ATTR_CODE_2 ) THEN
3560 l_prod_col_name_tbl(i) := G_REV_EFF_DATE_DB_COL;
3561 ELSIF (l_prod_col_name = G_REV_ID_ATTR_CODE) THEN
3562 NULL; --do nothing
3563 ELSE
3564 ---------------------------------------------------------
3565 -- The Attribute Code and DB Column name are the same.
3566 ---------------------------------------------------------
3567 l_prod_col_name_tbl(i) := l_prod_col_name;
3568 END IF;
3569
3570 l_intf_col_name_tbl(i) := l_intf_col_name;
3571
3572 END IF; --IF (l_prod_col_name = G_ITEM_NUMBER) THEN
3573
3574 END IF; --IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM)
3575 Write_Debug('^^l_prod_col_name_tbl('||i||') : '||l_prod_col_name_tbl(i));
3576 Write_Debug('^^l_intf_col_name_tbl('||i||') : '||l_intf_col_name_tbl(i));
3577 i := i+1;
3578
3579 END LOOP; --FOR c_item_rev_attr_intf_rec
3580
3581 ---------------------------------------------------------------------
3582 -- All the following need not be executed if Revision Update --
3583 -- is done through Item Search Results. --
3584 ---------------------------------------------------------------------
3585 IF p_data_level = G_ITEM_REV_DATA_LEVEL THEN
3586
3587 Write_Debug('Updating EBI with Org IDs');
3588
3589 ---------------------------------------------
3590 -- Update Instance PK2 Value with ORG ID. --
3591 ---------------------------------------------
3592 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI ';
3593 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK2_VALUE = ';
3594 l_dyn_sql := l_dyn_sql || ' ( ';
3595 l_dyn_sql := l_dyn_sql || ' SELECT ORGANIZATION_ID ';
3596 l_dyn_sql := l_dyn_sql || ' FROM MTL_PARAMETERS ';
3597 l_dyn_sql := l_dyn_sql || ' WHERE ORGANIZATION_CODE = EBI.'||l_org_code_col;
3598 l_dyn_sql := l_dyn_sql || ' ) ';
3599 l_dyn_sql := l_dyn_sql || 'WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3600 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3601
3602 Write_Debug(l_dyn_sql);
3603 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3604 Write_Debug('Selecting Org IDs, Item Numbers');
3605
3606 ---------------------------------------------------------------------
3607 -- Update EBI with Catalog Group Name if present in the Result Format
3608 ---------------------------------------------------------------------
3609 IF l_item_catalog_name_col IS NOT NULL THEN
3610 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3611 l_dyn_sql := l_dyn_sql || ' SET ';
3612 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_EBI_COL||' = '||l_item_catalog_name_col ;
3613 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3614 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3615 Write_Debug(l_dyn_sql);
3616
3617 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3618 Write_Debug('Updated EBI with Catalog Group Name for Item Revisions');
3619 END IF;
3620
3621 --------------------------------------------------------------
3622 -- Fetch Organization ID, Item Number in Temp PLSQL tables.
3623 --------------------------------------------------------------
3624 l_dyn_sql := ' SELECT INSTANCE_PK2_VALUE, '||l_item_number_col || ', ';
3625 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID ';
3626 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF ';
3627 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3628 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3629 Write_Debug(l_dyn_sql);
3630
3631 l_cursor_select := DBMS_SQL.OPEN_CURSOR;
3632 DBMS_SQL.PARSE(l_cursor_select, l_dyn_sql, DBMS_SQL.NATIVE);
3633 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 1,l_org_id_table,2500, l_temp);
3634 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 2,l_item_number_table,2500, l_temp);
3635 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 3,l_trans_id_table,2500, l_temp);
3636 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
3637 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_select);
3638 Write_Debug('About to start the Loop to fetch Rows');
3639
3640 LOOP
3641 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
3642 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 1, l_org_id_table);
3643 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 2, l_item_number_table);
3644 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 3, l_trans_id_table);
3645
3646 Write_Debug('Retrieved rows => '||To_char(l_count));
3647
3648 -------------------------------------------------------------
3649 -- Loop to Update the Inventory Item IDs.
3650 -------------------------------------------------------------
3651 FOR i IN 1..l_org_id_table.COUNT LOOP
3652
3653 Write_Debug('Org ID : '||To_char(l_org_id_table(i)));
3654 Write_Debug('Inv Item Num : '||l_item_number_table(i));
3655
3656 -------------------------------------------------------------
3657 -- Invoke FND Key Flex API to fetch the Inventory Item ID.
3658 -- If Inventory Item ID found, then update in EBI.
3659 -------------------------------------------------------------
3660 IF FND_FLEX_KEYVAL.Validate_Segs
3661 ( operation => 'FIND_COMBINATION'
3662 , appl_short_name => 'INV'
3663 , key_flex_code => 'MSTK'
3664 , structure_number => 101
3665 , concat_segments => l_item_number_table(i)
3666 , data_set => l_org_id_table(i)
3667 )
3668 THEN
3669 l_inventory_item_id := FND_FLEX_KEYVAL.combination_id;
3670
3671 Write_Debug('Inv Item ID : '||To_char(l_inventory_item_id));
3672
3673 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3674 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK1_VALUE = '||l_inventory_item_id;
3675 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = '||l_org_id_table(i);
3676 l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col|| ' = :ITEM_NUMBER';
3677 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3678 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3679
3680 Write_Debug(l_dyn_sql);
3681 EXECUTE IMMEDIATE l_dyn_sql USING l_item_number_table(i), p_resultfmt_usage_id;
3682
3683 END IF; --IF FND_FLEX_KEYVAL..
3684
3685 Write_Debug('G_CATALOG_GROUP_ID => '||G_CATALOG_GROUP_ID);
3686 -----------------------------------------------------------------
3687 -- Setting Category ID for Item Revision Flow.
3688 -- Bug #5179741(RSOUNDAR)
3689 -----------------------------------------------------------------
3690 IF G_CATALOG_GROUP_ID IS NULL THEN
3691 IF l_item_catalog_name_col IS NOT NULL THEN
3692 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI';
3693 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = ';
3694 l_dyn_sql := l_dyn_sql || '( ';
3695 l_dyn_sql := l_dyn_sql || ' SELECT TO_CHAR(MICG.ITEM_CATALOG_GROUP_ID) ';
3696 l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG ';
3697 l_dyn_sql := l_dyn_sql || ' WHERE MICG.CONCATENATED_SEGMENTS = EBI.'||l_item_catalog_name_col;
3698 l_dyn_sql := l_dyn_sql || ') ';
3699 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3700 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_item_catalog_name_col||' IS NOT NULL';
3701 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3702 Write_Debug(l_dyn_sql);
3703 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3704 ELSE -- l_item_catalog_name_col IS NULL
3705 -- no need to do anything here
3706 NULL;
3707 END IF; -- l_item_catalog_name_col IS NOT NULL
3708 ELSE -- G_CATALOG_GROUP_ID IS NOT NULL
3709
3710 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3711 -------------------------------------------------------------
3712 --Storing Catalog Group ID and other imp data in buffer cols
3713 -------------------------------------------------------------
3714 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = '||G_CATALOG_GROUP_ID;
3715 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = :ORGANIZATION_ID ';
3716 l_dyn_sql := l_dyn_sql || ' AND TRANSACTION_ID = :TRANSACTION_ID ';
3717 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3718 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3719
3720 Write_Debug(l_dyn_sql);
3721 EXECUTE IMMEDIATE l_dyn_sql USING l_org_id_table(i), l_trans_id_table(i), p_resultfmt_usage_id;
3722
3723 END IF;--end: IF (G_CATALOG_GROUP_ID IS NULL)
3724
3725 END LOOP; --FOR i IN 1..l_org_id_table.COUNT LOOP
3726
3727 l_org_id_table.DELETE;
3728 l_item_number_table.DELETE;
3729
3730 -----------------------------------------------------------------
3731 -- For the final batch of records, either it will be 0 or < 2500
3732 -----------------------------------------------------------------
3733 EXIT WHEN l_count <> 2500;
3734
3735 END LOOP; --l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
3736
3737 DBMS_SQL.CLOSE_CURSOR(l_cursor_select);
3738
3739 Write_Debug('Done with Item IDs population.');
3740
3741 -----------------------------------------------------------------
3742 -- Determine the Set Process ID, that is unique for MSII
3743 -----------------------------------------------------------------
3744 IF p_set_process_id IS NULL THEN
3745 SELECT mtl_system_items_intf_sets_s.NEXTVAL
3746 INTO l_msii_set_process_id
3747 FROM dual;
3748 ELSE
3749 l_msii_set_process_id := p_set_process_id;
3750 END IF;
3751
3752 ---------------------------------------------------------------------
3753 -- END: All the above need not be executed if Revision Update --
3754 -- is done through Item Search Results. --
3755 ---------------------------------------------------------------------
3756
3757 ELSE --p_data_level = G_ITEM_DATA_LEVEL
3758
3759 Write_Debug('Item Rev Intf using the Set Process ID used by Item Interface');
3760
3761 ----------------------------------------------------------------------------
3762 -- Using the Set Process ID used by Item Interface, as Revs are updated
3763 -- as part of Item Search Results.
3764 ----------------------------------------------------------------------------
3765 l_msii_set_process_id := G_MSII_SET_PROCESS_ID;
3766
3767 ----------------------------------------------------------------------------
3768 -- During Item processing itself, ITEM_NUMBER and ORG_CODE are loaded
3769 -- in following columns.
3770 ----------------------------------------------------------------------------
3771 l_item_number_col := G_ITEM_NUMBER_EBI_COL;
3772 l_org_code_col := G_ORG_CODE_EBI_COL;
3773
3774 END IF; --end: IF p_data_level = G_ITEM_REV_DATA_LEVEL
3775
3776 Write_Debug('l_msii_set_process_id : '||To_char(l_msii_set_process_id));
3777
3778 -----------------------------------------------------------------
3779 -- Insert rows from EBI into MSII
3780 -----------------------------------------------------------------
3781 l_dyn_sql := 'INSERT INTO MTL_ITEM_REVISIONS_INTERFACE ';
3782 l_dyn_sql := l_dyn_sql || '( ';
3783 l_dyn_sql := l_dyn_sql || ' SET_PROCESS_ID , ';
3784 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
3785 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
3786 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID, ';
3787 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
3788 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
3789 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
3790 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
3791 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
3792 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
3793 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG , ';
3794 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID , ';
3795 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE ';
3796 l_dyn_sql := l_dyn_sql || ') ';
3797 l_dyn_sql := l_dyn_sql || 'SELECT ';
3798 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
3799 l_dyn_sql := l_dyn_sql || ' EBI.TRANSACTION_ID , ';
3800 l_dyn_sql := l_dyn_sql || G_REQUEST_ID||' , ';
3801 l_dyn_sql := l_dyn_sql || G_PROG_APPID||' , ';
3802 l_dyn_sql := l_dyn_sql || G_PROG_ID||' , ';
3803 l_dyn_sql := l_dyn_sql || ' UPPER(EBI.TRANSACTION_TYPE) , ';
3804 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
3805 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
3806 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
3807 l_dyn_sql := l_dyn_sql || ' EBI.'||l_org_code_col ||' , ';
3808 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS ||' , ';
3809 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
3810 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 ';
3811 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
3812 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3813 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3814
3815 Write_Debug(l_dyn_sql);
3816 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3817 Write_Debug('Item Revs Interface: Populated the Inv Item IDs, Org IDs.');
3818
3819 ----------------------------------------------------------------------------------
3820 --Save Item Num, Org Code in designated columns in EBI for Error Reporting later
3821 ----------------------------------------------------------------------------------
3822 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3823 l_dyn_sql := l_dyn_sql || ' SET ';
3824 -----------------------------------------------------------------------------------------
3825 -- In case of ITEM_LEVEL the following is already populated in load_item_interface_lines
3826 -- procedure.
3827 -----------------------------------------------------------------------------------------
3828 IF p_data_level = G_ITEM_REV_DATA_LEVEL THEN
3829 l_dyn_sql := l_dyn_sql || G_ITEM_NUMBER_EBI_COL||' = '||l_item_number_col||' , ';
3830 l_dyn_sql := l_dyn_sql || G_ORG_CODE_EBI_COL||' = '||l_org_code_col ||' , ';
3831 END IF;
3832
3833 l_dyn_sql := l_dyn_sql || G_REVISION_CODE_EBI_COL||' = '||l_rev_code_col;
3834 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3835 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3836
3837 Write_Debug(l_dyn_sql);
3838 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3839 Write_Debug('Item Revs Interface: Done saving Item Num, Org Code, Rev Code in EBI for error retrieval later.');
3840
3841 ---------------------------------------
3842 -- Reset i back to 0, for re-use.
3843 ---------------------------------------
3844 i := 0;
3845 IF ( l_prod_col_name_tbl.count > 0) THEN
3846 FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
3847 Write_Debug('*l_prod_col_name_tbl(i)'||l_prod_col_name_tbl(i));
3848 Write_Debug('*l_intf_col_name_tbl(i)'||l_intf_col_name_tbl(i));
3849
3850 IF (l_prod_col_name_tbl(i) = G_REV_REASON_DB_COL) THEN
3851
3852 ----------------------------------------------------------------------------------
3853 -- Transfer the Revision Reason information from EBI to MIRI
3854 -- by doing Value-to-ID Conversion.
3855 ----------------------------------------------------------------------------------
3856 l_dyn_sql := '';
3857 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3858 l_dyn_sql := l_dyn_sql || ' SET MIRI.'||G_REV_REASON_DB_COL||' = ';
3859 l_dyn_sql := l_dyn_sql || '( ';
3860 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
3861 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
3862 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE = ''EGO_ITEM_REVISION_REASON'' ';
3863 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE = Userenv(''LANG'') ';
3864 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING = EBI.'||l_intf_col_name_tbl(i);
3865 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3866 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3867 ----------------------------------------------------------------------------------
3868 -- WHERE EXISTS takes care of filtering lines. Hence this join not needed.
3869 -- l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3870 ----------------------------------------------------------------------------------
3871 l_dyn_sql := l_dyn_sql || ') ';
3872 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3873 l_dyn_sql := l_dyn_sql || '( ';
3874 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3875 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
3876 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE = ''EGO_ITEM_REVISION_REASON'' ';
3877 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE = Userenv(''LANG'') ';
3878 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING = EBI.'||l_intf_col_name_tbl(i);
3879 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3880 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3881 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3882 l_dyn_sql := l_dyn_sql || ') ';
3883
3884 Write_Debug(l_dyn_sql);
3885 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3886 Write_Debug('MIRI: Updated the Revision Reason Codes.');
3887
3888 ----------------------------------------------------------------------------------
3889 -- Bug# 3421497 fix.
3890 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
3891 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
3892 -- dependant upon the Lifecycle ID value.
3893 ----------------------------------------------------------------------------------
3894 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE) THEN
3895
3896 l_lifecycle_col_val := l_intf_col_name_tbl(i);
3897
3898 ----------------------------------------------------------------------------------
3899 -- Bug# 3421497 fix.
3900 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
3901 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
3902 -- dependant upon the Lifecycle ID value.
3903 ----------------------------------------------------------------------------------
3904 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE_PHASE) THEN
3905
3906 l_lifecycle_phase_col_val := l_intf_col_name_tbl(i);
3907
3908 ----------------------------------------------------------------------------------
3909 -- Transfer the Column information from EBI to MSII
3910 -- which *DONOT NEED* Value-to-ID Conversion.
3911 ----------------------------------------------------------------------------------
3912 ELSE
3913
3914 l_dyn_sql := '';
3915 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3916 l_dyn_sql := l_dyn_sql || ' SET MIRI.'||l_prod_col_name_tbl(i) ||' = ';
3917 l_dyn_sql := l_dyn_sql || '( ';
3918 l_dyn_sql := l_dyn_sql || ' SELECT EBI.'||l_intf_col_name_tbl(i);
3919 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
3920 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3921 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3922 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3923 l_dyn_sql := l_dyn_sql || ') ';
3924 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3925 l_dyn_sql := l_dyn_sql || '( ';
3926 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3927 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
3928 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3929 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3930 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3931 l_dyn_sql := l_dyn_sql || ') ';
3932
3933 Write_Debug(l_dyn_sql);
3934
3935 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3936 Write_Debug('MIRI: Updated the '||l_prod_col_name_tbl(i)||' column values.');
3937
3938 END IF;--end: IF (l_prod_col_name_tbl(i) = G_REV_REASON_DB_COL) THEN
3939
3940 END LOOP;--end: FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
3941
3942 ----------------------------------------------------------------------------------
3943 -- Bug# 3421497 fix.
3944 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
3945 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
3946 -- dependant upon the Lifecycle ID value.
3947 -- Hence the are processed outside the above LOOP.
3948 ----------------------------------------------------------------------------------
3949
3950 IF (l_lifecycle_col_val IS NOT NULL OR l_lifecycle_phase_col_val IS NOT NULL ) THEN
3951
3952 ----------------------------------------------------------------------------------
3953 -- Fix for Bug:3624686
3954 -- LIFECYCLE_ID cannot be updated anymore through Spreadsheet (Excel) Item
3955 -- Revision Import. Only Lifecycle Phase (CURRENT_PHASE_ID) can be updated.
3956 -- ***Hence, Commenting out following which sets the LIFECYCLE_ID.
3957 ----------------------------------------------------------------------------------
3958 /*
3959
3960 ----------------------------------------------------------------------------------
3961 -- First Transfer the Lifecycle information from EBI to MSII
3962 -- by doing Value-to-ID Conversion.
3963 ----------------------------------------------------------------------------------
3964 l_dyn_sql := '';
3965 l_dyn_sql := l_dyn_sql || ' ';
3966 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3967 l_dyn_sql := l_dyn_sql || ' SET MIRI.LIFECYCLE_ID = ';
3968 l_dyn_sql := l_dyn_sql || '( ';
3969 l_dyn_sql := l_dyn_sql || ' SELECT LC.PROJ_ELEMENT_ID ';
3970 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_LIFECYCLES_PHASES_V LC, EGO_BULKLOAD_INTF EBI ';
3971 l_dyn_sql := l_dyn_sql || ' WHERE LC.OBJECT_TYPE = ''PA_STRUCTURES'' ';
3972 l_dyn_sql := l_dyn_sql || ' AND LC.NAME = EBI.'||l_lifecycle_col_val;
3973 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3974 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3975 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3976 l_dyn_sql := l_dyn_sql || ') ';
3977 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3978 l_dyn_sql := l_dyn_sql || '( ';
3979 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3980 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_LIFECYCLES_PHASES_V LC, EGO_BULKLOAD_INTF EBI ';
3981 l_dyn_sql := l_dyn_sql || ' WHERE LC.OBJECT_TYPE = ''PA_STRUCTURES'' ';
3982 l_dyn_sql := l_dyn_sql || ' AND LC.NAME = EBI.'||l_lifecycle_col_val;
3983 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3984 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3985 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3986 l_dyn_sql := l_dyn_sql || ') ';
3987
3988 Write_Debug(l_dyn_sql);
3989 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3990 Write_Debug('MIRI: Updated the Lifecycle IDs.');
3991 */
3992
3993 ----------------------------------------------------------------------------------
3994 -- Fix for Bug:3624686
3995 -- As a part of 11.5.10, Setting the Lifecycle for Revision is not available.
3996 -- But setting Lifecycle Phase is still possible.
3997 -- Hence pick up the Lifecycle from Item (MTL_SYSTEM_ITEMS_B) and set in
3998 -- MTL_ITEM_REVISIONS_INTERFACE.
3999 ----------------------------------------------------------------------------------
4000
4001 ----------------------------------------------------------------------------------
4002 -- First Transfer the Lifecycle ID information from MSI to MSII
4003 -- as the Revision inherits Lifecycle ID from Item.
4004 ----------------------------------------------------------------------------------
4005 l_dyn_sql := '';
4006 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
4007 l_dyn_sql := l_dyn_sql || ' SET MIRI.LIFECYCLE_ID = ';
4008 l_dyn_sql := l_dyn_sql || '( ';
4009 l_dyn_sql := l_dyn_sql || ' SELECT MSI.LIFECYCLE_ID ';
4010 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_B MSI, EGO_BULKLOAD_INTF EBI ';
4011 l_dyn_sql := l_dyn_sql || ' WHERE MSI.INVENTORY_ITEM_ID = EBI.INSTANCE_PK1_VALUE ';
4012 l_dyn_sql := l_dyn_sql || ' AND MSI.ORGANIZATION_ID = EBI.INSTANCE_PK2_VALUE ';
4013 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
4014 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
4015 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
4016 l_dyn_sql := l_dyn_sql || ') ';
4017 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
4018 l_dyn_sql := l_dyn_sql || '( ';
4019 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
4020 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_B MSI, EGO_BULKLOAD_INTF EBI ';
4021 l_dyn_sql := l_dyn_sql || ' WHERE MSI.INVENTORY_ITEM_ID = EBI.INSTANCE_PK1_VALUE ';
4022 l_dyn_sql := l_dyn_sql || ' AND MSI.ORGANIZATION_ID = EBI.INSTANCE_PK2_VALUE ';
4023 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
4024 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
4025 -- Bug: 3762986 - If LC Phase is not null, then only update the lifecycle_id
4026 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' IS NOT NULL';
4027 -- Bug: 3762986 - end
4028 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
4029 l_dyn_sql := l_dyn_sql || ') ';
4030
4031 Write_Debug(l_dyn_sql);
4032 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
4033 Write_Debug('MIRI: Updated the Lifecycle IDs from MTL_SYSTEM_ITEMS_B.');
4034
4035 ----------------------------------------------------------------------------------
4036 -- Next Transfer the Lifecycle Phase information from EBI to MSII
4037 -- by doing Value-to-ID Conversion, and by joining Lifecycle ID information.
4038 ----------------------------------------------------------------------------------
4039 l_dyn_sql := '';
4040 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
4041 l_dyn_sql := l_dyn_sql || ' SET MIRI.CURRENT_PHASE_ID = ';
4042 l_dyn_sql := l_dyn_sql || '( ';
4043 l_dyn_sql := l_dyn_sql || ' SELECT LCP.PROJ_ELEMENT_ID ';
4044 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_PHASES_V LCP, EGO_BULKLOAD_INTF EBI ';
4045 l_dyn_sql := l_dyn_sql || ' WHERE LCP.PARENT_STRUCTURE_ID = MIRI.LIFECYCLE_ID ';
4046 l_dyn_sql := l_dyn_sql || ' AND LCP.NAME = EBI.'||l_lifecycle_phase_col_val;
4047 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
4048 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
4049 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
4050 l_dyn_sql := l_dyn_sql || ') ';
4051 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
4052 l_dyn_sql := l_dyn_sql || '( ';
4053 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
4054 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_PHASES_V LCP, EGO_BULKLOAD_INTF EBI ';
4055 l_dyn_sql := l_dyn_sql || ' WHERE LCP.PARENT_STRUCTURE_ID = MIRI.LIFECYCLE_ID ';
4056 l_dyn_sql := l_dyn_sql || ' AND LCP.NAME = EBI.'||l_lifecycle_phase_col_val;
4057 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
4058 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
4059 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
4060 l_dyn_sql := l_dyn_sql || ') ';
4061
4062 Write_Debug(l_dyn_sql);
4063 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
4064 Write_Debug('MIRI: Updated the Lifecycle Phase IDs.');
4065
4066 END IF; --end: IF (l_lifecycle_col_val IS NOT NULL ...
4067
4068 END IF; --IF ( l_prod_col_name_tbl.count > 0) THEN
4069
4070 --
4071 -- delete unnecessary records from MIRI
4072 -- Bug: 5476972 "Rows not to be deleted if Revision is null"
4073 -- bug: 5557250 delete only if all the fields are populated as NULL
4074 --
4075 /* Bug 7578350. Moving this DELETE statement to the function process_item_interface_lines(), after the function call
4076 load_itm_or_rev_usrattr_intf() that updates UDAs, so that we delete the rows from MTL_ITEM_REVISIONS_INTERFACE
4077 only if there are no Revision Level Attributes provided.
4078
4079 DELETE MTL_ITEM_REVISIONS_INTERFACE MIRI
4080 WHERE revision IS NULL
4081 AND revision_id IS NULL
4082 AND implementation_date IS NULL
4083 AND effectivity_date IS NULL
4084 AND description IS NULL
4085 AND revision_label IS NULL
4086 AND revision_reason IS NULL
4087 AND current_phase_id IS NULL
4088 AND EXISTS (SELECT 'X'
4089 FROM EGO_BULKLOAD_INTF EBI
4090 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4091 AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID
4092 AND EBI.PROCESS_STATUS = 1
4093 ); */
4094
4095 --
4096 -- convert all date fields values from Excel Null to INTF Null
4097 --
4098 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
4099 SET ecn_initiation_date = DECODE(ecn_initiation_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,ecn_initiation_date),
4100 implementation_date = DECODE(implementation_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,implementation_date),
4101 effectivity_date = DECODE(effectivity_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,effectivity_date)
4102 WHERE MIRI.TRANSACTION_ID IN
4103 ( SELECT EBI.TRANSACTION_ID
4104 FROM EGO_BULKLOAD_INTF EBI
4105 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4106 AND EBI.PROCESS_STATUS = 1
4107 )
4108 AND (MIRI.ecn_initiation_date IS NOT NULL
4109 OR
4110 MIRI.implementation_date IS NOT NULL
4111 OR
4112 MIRI.effectivity_date IS NOT NULL
4113 );
4114
4115 x_retcode := G_STATUS_SUCCESS;
4116 x_set_process_id := l_msii_set_process_id;
4117
4118 END load_item_revs_interface;
4119
4120 ----------------------------------------------------------
4121 -- Preprocess Item Revision Interface Lines --
4122 ----------------------------------------------------------
4123 PROCEDURE preprocess_itemrev_interface
4124 (
4125 p_resultfmt_usage_id IN NUMBER,
4126 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
4127 p_set_process_id IN NUMBER,
4128 x_errbuff IN OUT NOCOPY VARCHAR2,
4129 x_retcode IN OUT NOCOPY VARCHAR2
4130 ) IS
4131
4132 -- Start OF comments
4133 -- API name : Setup MSII Item Interface Lines for processing
4134 -- TYPE : Private
4135 -- Pre-reqs : None
4136 -- FUNCTION : Populate and Prepare Item interfance lines.
4137 -- Eliminates any redundancy / errors in MSII
4138
4139 -----------------------------------------------
4140 -- Long Dynamic SQL String
4141 -----------------------------------------------
4142 l_dyn_sql VARCHAR2(20000);
4143
4144 BEGIN
4145
4146 -----------------------------------------------------------------------
4147 -- Only in case of Import, and while importing Multi-Row attr group
4148 -- values : Item, Org, Revision are NOT NULL, and rest of the base
4149 -- attributes are NULL. Hence can delete these rows off from MIRI.
4150 -----------------------------------------------------------------------
4151 DELETE MTL_ITEM_REVISIONS_INTERFACE
4152 WHERE
4153 (
4154 (
4155 ITEM_NUMBER IS NOT NULL OR
4156 INVENTORY_ITEM_ID IS NOT NULL
4157 )
4158 AND
4159 (
4160 ORGANIZATION_CODE IS NOT NULL OR
4161 ORGANIZATION_ID IS NOT NULL
4162 )
4163 AND
4164 (
4165 REVISION IS NOT NULL OR
4166 REVISION_ID IS NOT NULL
4167 )
4168 )
4169 AND
4170 (
4171 DESCRIPTION IS NULL AND
4172 LIFECYCLE_ID IS NULL AND
4173 CURRENT_PHASE_ID IS NULL AND
4174 REVISION_LABEL IS NULL AND
4175 REVISION_REASON IS NULL AND
4176 LIFECYCLE_ID IS NULL AND
4177 CURRENT_PHASE_ID IS NULL AND
4178 EFFECTIVITY_DATE IS NULL
4179 )
4180 AND SET_PROCESS_ID = p_set_process_id;
4181
4182 Write_Debug('Preprocess_ItemRev_Interface : Deleted redundant / unnecessary rows from MIRI');
4183
4184 END preprocess_itemrev_interface;
4185
4186
4187 ----------------------------------------------------------
4188 -- Setup Item Revision Interface Lines --
4189 ----------------------------------------------------------
4190 PROCEDURE Setup_itemrev_interface
4191 (
4192 p_resultfmt_usage_id IN NUMBER,
4193 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
4194 p_data_level IN VARCHAR2,
4195 p_set_process_id IN NUMBER,
4196 x_set_process_id OUT NOCOPY NUMBER,
4197 x_errbuff OUT NOCOPY VARCHAR2,
4198 x_retcode OUT NOCOPY VARCHAR2
4199 ) IS
4200
4201 -- Start OF comments
4202 -- API name : Setup MIRI Item Rev Interface Lines for processing
4203 -- TYPE : Private
4204 -- Pre-reqs : None
4205 -- FUNCTION : Populate and Prepare Item Rev interfance lines.
4206 -- Eliminates any redundancy / errors in MIRI
4207
4208 l_set_process_id NUMBER(15);
4209
4210 BEGIN
4211
4212 -----------------------------------
4213 -- Populates rows in MIRI
4214 -----------------------------------
4215 load_item_revs_interface(
4216 p_resultfmt_usage_id => p_resultfmt_usage_id
4217 ,p_data_level => p_data_level
4218 ,p_set_process_id => p_set_process_id
4219 ,x_set_process_id => l_set_process_id
4220 ,x_errbuff => x_errbuff
4221 ,x_retcode => x_retcode
4222 );
4223
4224 -------------------------------------------------------
4225 -- Deletes redundant / unnecessary rows from MIRI.
4226 -------------------------------------------------------
4227 preprocess_itemrev_interface(
4228 p_resultfmt_usage_id => p_resultfmt_usage_id
4229 ,p_set_process_id => l_set_process_id
4230 ,x_errbuff => x_errbuff
4231 ,x_retcode => x_retcode
4232 );
4233
4234 x_set_process_id := l_set_process_id;
4235
4236 Write_Debug('Setup_ItemRev_Interface : Set Process Id => '||x_set_process_id);
4237
4238 EXCEPTION
4239 WHEN OTHERS THEN
4240 x_retcode := G_STATUS_ERROR;
4241 x_errbuff := SUBSTRB(SQLERRM, 1,240);
4242 Write_Debug('Setup_Itemrev_Interface : EXCEPTION HAPPENED => '||x_errbuff);
4243 RAISE;
4244
4245 END setup_itemrev_interface;
4246
4247
4248 ----------------------------------------------------------------------------
4249 -- Change Item Revision Interface Lines process statuses as completed. --
4250 -- Statuses represent: Warning, Error, Success etc., --
4251 ----------------------------------------------------------------------------
4252 PROCEDURE Item_Revs_Intf_Completion
4253 (
4254 p_resultfmt_usage_id IN NUMBER
4255 , x_errbuff OUT NOCOPY VARCHAR2
4256 , x_retcode OUT NOCOPY VARCHAR2
4257 ) IS
4258
4259 -----------------------------------------------
4260 -- Long Dynamic SQL String
4261 -----------------------------------------------
4262 l_dyn_sql VARCHAR2(10000);
4263
4264 BEGIN
4265
4266 -----------------------------------------------------------------
4267 -- Update EBI, with the process status of rows in MIRI after
4268 -- the completion of IOI Revision processing.
4269 -----------------------------------------------------------------
4270 UPDATE EGO_BULKLOAD_INTF EBI
4271 SET EBI.PROCESS_STATUS =
4272 (
4273 SELECT MIRI.PROCESS_FLAG
4274 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4275 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4276 )
4277 WHERE EXISTS
4278 (
4279 SELECT 'X'
4280 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4281 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4282 )
4283 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
4284
4285 ----------------------------------------------------------------------------
4286 -- Update all the lines in EGO_BULKLOAD_INTF as failure, for which
4287 -- The Revision IDS were not available.
4288 -- 1. For Transaction Type : CREATE, Revision ID should be populated
4289 -- at the end of Processing
4290 -- 2. For Transaction Type : SYNC / UPDATE, Revision ID should be
4291 -- retrieved during processing.
4292 ----------------------------------------------------------------------------
4293 UPDATE EGO_BULKLOAD_INTF EBI
4294 SET EBI.PROCESS_STATUS = G_INTF_STATUS_ERROR
4295 WHERE EXISTS
4296 (
4297 SELECT 'X'
4298 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4299 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4300 AND MIRI.PROCESS_FLAG = G_INTF_STATUS_SUCCESS
4301 AND MIRI.REVISION_ID IS NULL
4302 )
4303 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
4304
4305 ----------------------------------------------------------------------------
4306 -- Update all the lines in EGO_BULKLOAD_INTF as SUCCESS
4307 -- for these rows were used to populate Multi-Row
4308 -- Appropriate errors will be displayed by the User-Defined Attrs Bulkldr.
4309 ----------------------------------------------------------------------------
4310 UPDATE EGO_BULKLOAD_INTF EBI
4311 SET EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS
4312 WHERE EBI.PROCESS_STATUS = G_INTF_STATUS_TOBE_PROCESS
4313 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
4314
4315 ----------------------------------------------------------------------------
4316 -- Update the Item IDs (Doesnt matter Create or Update, because
4317 -- Item IDs will be populated either way in MSII) in
4318 -- Generic Bulkload Intf table (EGO_BULKLOAD_INTF)
4319 -- These Item IDs are required for Item User-Defined Attrs bulkload
4320 ----------------------------------------------------------------------------
4321 UPDATE EGO_BULKLOAD_INTF EBI
4322 SET EBI.INSTANCE_PK1_VALUE =
4323 (
4324 SELECT MSII.INVENTORY_ITEM_ID
4325 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
4326 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
4327 )
4328 WHERE EXISTS
4329 (
4330 SELECT 'X'
4331 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
4332 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
4333 )
4334 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4335 AND EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS;
4336
4337 ----------------------------------------------------------------------------
4338 -- Update the Item Revision IDs (Doesnt matter Create or Update, because
4339 -- Item Revision IDs will be populated either way in MIRI) in
4340 -- Generic Bulkload Intf table (EGO_BULKLOAD_INTF)
4341 -- These Revision IDs are required for Revision User-Defined Attrs bulkload
4342 ----------------------------------------------------------------------------
4343 UPDATE EGO_BULKLOAD_INTF EBI
4344 SET EBI.INSTANCE_PK3_VALUE =
4345 (
4346 SELECT MIRI.REVISION_ID
4347 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4348 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4349 )
4350 WHERE EXISTS
4351 (
4352 SELECT 'X'
4353 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4354 WHERE MIRI.TRANSACTION_ID = EBI.transaction_id
4355 )
4356 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4357 AND EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS;
4358
4359 Write_Debug('EBI: Updated the Process_Status to Indicate Succssful/Unsucessful completion.');
4360
4361 x_retcode := G_STATUS_SUCCESS;
4362
4363 EXCEPTION
4364 WHEN OTHERS THEN
4365 x_retcode := G_STATUS_ERROR;
4366 x_errbuff := SUBSTRB(SQLERRM, 1,240);
4367 Write_Debug('Item_Revs_Intf_Completion : EXCEPTION HAPPENED => '||x_errbuff);
4368 RAISE;
4369
4370 END Item_Revs_Intf_Completion;
4371
4372
4373 ----------------------------------------------------------
4374 -- Load Item or Item Revision User Defined Attributes --
4375 -- in User-Defined Attributes Interface Table --
4376 ----------------------------------------------------------
4377
4378 PROCEDURE load_itm_or_rev_usrattr_intf
4379 (
4380 p_resultfmt_usage_id IN NUMBER,
4381 p_data_set_id IN NUMBER,
4382 x_errbuff OUT NOCOPY VARCHAR2,
4383 x_retcode OUT NOCOPY VARCHAR2
4384 ) IS
4385 -- Start OF comments
4386 -- API name : Populate Item User-Defined Attr Interfance Lines
4387 -- TYPE : Public
4388 -- Pre-reqs : None
4389 -- FUNCTION : Load Item User-Defined Attributes interfance lines.
4390 -- Loads Item User-Defined Attribute Values
4391 -- Errors are populated in MTL_INTERFACE_ERRORS
4392
4393 ------------------------------------------------------------------------------
4394 -- To retrieve Attribute group codes, for given Result Format Usage ID.
4395 ------------------------------------------------------------------------------
4396 CURSOR c_user_attr_group_codes (c_resultfmt_usage_id IN NUMBER) IS
4397 SELECT DISTINCT To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) attr_group_id
4398 FROM ego_results_fmt_usages
4399 WHERE resultfmt_usage_id = c_resultfmt_usage_id
4400 AND attribute_code LIKE '%$$%'
4401 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) IN --attr_group_id
4402 ------------------------------------------------------------------------------
4403 -- Fixed in 11.5.10. Ensuring only the Item User-Defined Attrs are processed.
4404 ------------------------------------------------------------------------------
4405 (
4406 SELECT attr_group_id
4407 FROM ego_attr_groups_v
4408 WHERE attr_group_type in (G_IUD_ATTR_GROUP_TYPE, G_GTN_SNG_ATTR_GROUP_TYPE, G_GTN_MUL_ATTR_GROUP_TYPE)
4409 AND application_id = G_APPLICATION_ID
4410 )
4411 ;
4412
4413 ------------------------------------------------------------------------------
4414 -- To get the Attribute Group and Attribute Internal Names.
4415 -- NOTE: Joined extra attributes ATTR_GROUP_TYPE and APPLICATION_ID
4416 -- To hit the index.
4417 ------------------------------------------------------------------------------
4418 CURSOR c_attr_grp_details(p_attr_id IN NUMBER) IS
4419 SELECT attr_group_name, attr_name, attr_group_type,
4420 DECODE(data_type_code,'A','C'
4421 ,'X','D'
4422 ,'Y','D'
4423 ,data_type_code) data_type_code,
4424 uom_class -- R12C UOM Change
4425 FROM ego_attrs_v
4426 WHERE attr_id = p_attr_id
4427 AND attr_group_type in (G_IUD_ATTR_GROUP_TYPE, G_GTN_SNG_ATTR_GROUP_TYPE, G_GTN_MUL_ATTR_GROUP_TYPE)
4428 AND application_id = G_APPLICATION_ID;
4429
4430 --------------------------------------------------------------------------------
4431 -- Defn includes a subset of EGO_USER_ATTRS_DATA_PVT.LOCAL_USER_ATTR_DATA_REC
4432 -- plus few User-Defined Attr Table related fields.
4433 --------------------------------------------------------------------------------
4434 TYPE L_USER_ATTR_REC_TYPE IS RECORD
4435 (
4436 DATA_SET_ID NUMBER(15)
4437 ,TRANSACTION_ID NUMBER(15)
4438 ,TRANSACTION_TYPE VARCHAR2(10)--Bug:5088831
4439 ,INVENTORY_ITEM_ID NUMBER(15)
4440 ,ORGANIZATION_ID NUMBER(15)
4441 ,REVISION_ID NUMBER(15)
4442 ,ITEM_NUMBER VARCHAR2(1000)
4443 ,ORGANIZATION_CODE VARCHAR2(10)
4444 ,REVISION VARCHAR2(10)
4445 ,ROW_IDENTIFIER NUMBER(15)
4446 ,ATTR_GROUP_NAME VARCHAR2(30)
4447 ,ATTR_NAME VARCHAR2(30)
4448 ,ATTR_DATATYPE_CODE VARCHAR2(1) --Valid Vals: C / N / D
4449 ,ATTR_VALUE_STR VARCHAR2(1000)
4450 ,ATTR_VALUE_NUM NUMBER --BugFix 4256503
4451 ,ATTR_VALUE_DATE DATE
4452 ,ATTR_DISP_VALUE VARCHAR2(1000)
4453 ,INTF_COLUMN_NAME VARCHAR2(30)
4454 ,SOURCE_SYSTEM_ID NUMBER
4455 ,SOURCE_SYSTEM_REFERENCE VARCHAR2(255)
4456 ,ATTR_GROUP_TYPE VARCHAR2(40)--Bug Fix 4630163(ISSUE2)
4457 ,DATA_LEVEL_ID NUMBER
4458 ,PK1_VALUE NUMBER
4459 ,PK2_VALUE NUMBER
4460 ,ATTR_UOM_DISP_VALUE VARCHAR2(25) -- R12C UOM Changes
4461 ,ATTR_VALUE_UOM VARCHAR2(3) -- R12C UOM Changes
4462 );
4463
4464 ---------------------------------------------------------------------
4465 -- Type Declarations
4466 ---------------------------------------------------------------------
4467 TYPE L_USER_ATTR_TBL_TYPE IS TABLE OF L_USER_ATTR_REC_TYPE
4468 INDEX BY BINARY_INTEGER;
4469
4470 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
4471 INDEX BY BINARY_INTEGER;
4472
4473 -------------------------
4474 -- local variables --
4475 -------------------------
4476 l_api_name VARCHAR2(32) := 'load_itm_or_rev_usrattr_intf()';
4477 l_prod_col_name_tbl VARCHAR_TBL_TYPE;
4478 l_intf_col_name_tbl VARCHAR_TBL_TYPE;
4479
4480 l_attr_id_table DBMS_SQL.VARCHAR2_TABLE; -- R12C UOM Change
4481 --DBMS_SQL.NUMBER_TABLE;
4482 l_intf_col_name_table DBMS_SQL.VARCHAR2_TABLE;
4483 l_data_level_id_table DBMS_SQL.NUMBER_TABLE;
4484
4485 l_usr_attr_data_tbl L_USER_ATTR_TBL_TYPE;
4486
4487 l_item_id_char VARCHAR(15);
4488 l_org_id_char VARCHAR(15);
4489 l_item_rev_id_char VARCHAR(15);
4490 l_item_num_char VARCHAR(1000);
4491 l_org_code_char VARCHAR(10);
4492 l_item_rev_code_char VARCHAR(10);
4493 l_source_system_id NUMBER;
4494 l_source_system_ref VARCHAR2(255);
4495
4496 l_count NUMBER(5);
4497 l_data_type_code VARCHAR2(2);
4498 l_transaction_id NUMBER(15);
4499 l_transaction_type VARCHAR2(10);
4500 l_uom_class VARCHAR2(10); -- R12C UOM Change
4501 l_uom_meaning VARCHAR2(150); -- R12C UOM Change
4502
4503 l_attr_group_int_name EGO_ATTRS_V.ATTR_GROUP_NAME%TYPE;
4504 l_attr_int_name EGO_ATTRS_V.ATTR_NAME%TYPE;
4505 l_attr_data_type EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4506 l_attr_group_type EGO_ATTRS_V.ATTR_GROUP_TYPE%TYPE;--Bug Fix 4630163(ISSUE2)
4507
4508 ---------------------------------------------------------
4509 -- Example Data Types to be used in Bind Variable.
4510 ---------------------------------------------------------
4511 l_varchar_example VARCHAR2(10000);
4512 l_number_example NUMBER;
4513 l_date_example DATE;
4514
4515 --------------------------------------------------------------------
4516 -- Actual Data to store corresponding data type value.
4517 -- NOTE: for fixing Bug# 3808455, changed the size of l_varchar_data
4518 -- to 10,000 chars. This is because, if there are 1000 Single
4519 -- Quotes in the String Attr Value, then the Escaped value
4520 -- becomes of Size 2000. So, for all better reasons, changing
4521 -- to a huge size.
4522 --------------------------------------------------------------------
4523 l_varchar_data VARCHAR2(10000);
4524 l_number_data NUMBER;
4525 l_date_data DATE;
4526
4527 ---------------------------------------------------------
4528 -- DBMS_SQL Open Cursor integers.
4529 ---------------------------------------------------------
4530 l_cursor_select INTEGER;
4531 l_cursor_execute INTEGER;
4532 l_cursor_attr_id_val INTEGER;
4533
4534 ---------------------------------------------------------
4535 -- Used for indexes.
4536 ---------------------------------------------------------
4537 l_temp NUMBER(10) := 1;
4538 l_actual_userattr_indx NUMBER(15);
4539 l_indx NUMBER(15);
4540 l_rows_per_attr_grp_indx NUMBER(15);
4541 l_save_indx NUMBER(15);
4542 l_attr_grp_has_data BOOLEAN;
4543
4544 l_attr_group_data_level VARCHAR2(30);
4545
4546 ---------------------------------------------------------
4547 -- Long Dynamic SQL Strings
4548 ---------------------------------------------------------
4549 l_dyn_sql VARCHAR2(10000);
4550 l_dyn_attr_id_val_sql VARCHAR2(10000);
4551
4552 ---------------------------------------------------------
4553 -- To Number the Attribute Group Data Rows Uniquely.
4554 ---------------------------------------------------------
4555
4556 -- Bug fix 6219349: 5 digits was prone to overflow,
4557 -- causing defaulting to a value that had already been
4558 -- used.
4559 L_ATTR_GRP_ROW_IDENT NUMBER(18);
4560
4561 ---------------------------------------------------------
4562 -- Token tables to log errors, through Error_Handler
4563 ---------------------------------------------------------
4564 l_token_tbl_two Error_Handler.Token_Tbl_Type;
4565 l_token_tbl_one Error_Handler.Token_Tbl_Type;
4566
4567 l_gdsn_attrs_exist VARCHAR2(1);
4568 l_dummy_char VARCHAR2(1000);
4569 l_dummy NUMBER;
4570 l_supplier_name_col VARCHAR2(30);
4571 l_supplier_number_col VARCHAR2(20);
4572 l_supplier_site_name_col VARCHAR2(30);
4573 -- l_supplier_name VARCHAR2(30); --abedajna Bug 611802
4574 l_supplier_name VARCHAR2(320);
4575 l_supplier_number VARCHAR2(20);
4576 -- l_supplier_site_name VARCHAR2(30); --abedajna Bug 611802
4577 l_supplier_site_name VARCHAR2(320);
4578 l_supplier_id NUMBER;
4579 l_supplier_site_id NUMBER;
4580 l_site_org_id NUMBER;
4581 l_row_id_incr NUMBER;
4582
4583 BEGIN
4584
4585
4586 Write_Debug(l_api_name || 'BEGIN ');
4587 ---------------------------------------------------------
4588 -- Initializing the Row Identifier.
4589 ---------------------------------------------------------
4590 BEGIN
4591 SELECT NVL(MAX(ROW_IDENTIFIER),0)
4592 INTO L_ATTR_GRP_ROW_IDENT
4593 FROM EGO_ITM_USR_ATTR_INTRFC
4594 WHERE DATA_SET_ID = p_data_set_id;
4595 EXCEPTION
4596 WHEN OTHERS THEN
4597
4598 Write_Debug(l_api_name || 'ERROR: Couldn''t generate next row identifier');
4599
4600 -- SSARNOBA: What if we come here a second time?
4601 -- We're going to get a unique constraint violation.
4602 L_ATTR_GRP_ROW_IDENT := 0;
4603 END;
4604
4605 BEGIN
4606 SELECT INTF_COLUMN_NAME
4607 INTO l_supplier_name_col
4608 FROM EGO_RESULTS_FMT_USAGES
4609 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4610 AND ATTRIBUTE_CODE NOT LIKE '%$$%'
4611 AND CUSTOMIZATION_APPLICATION_ID = 431
4612 AND REGION_APPLICATION_ID = 431
4613 AND ATTRIBUTE_CODE = 'SUPPLIER_NAME';
4614 EXCEPTION
4615 WHEN NO_DATA_FOUND THEN
4616 l_supplier_name_col := NULL;
4617 END;
4618
4619 BEGIN
4620 SELECT INTF_COLUMN_NAME
4621 INTO l_supplier_number_col
4622 FROM EGO_RESULTS_FMT_USAGES
4623 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4624 AND ATTRIBUTE_CODE NOT LIKE '%$$%'
4625 AND CUSTOMIZATION_APPLICATION_ID = 431
4626 AND REGION_APPLICATION_ID = 431
4627 AND ATTRIBUTE_CODE = 'SUPPLIER_NUMBER';
4628 EXCEPTION
4629 WHEN NO_DATA_FOUND THEN
4630 l_supplier_number_col := NULL;
4631 END;
4632
4633 BEGIN
4634 SELECT INTF_COLUMN_NAME
4635 INTO l_supplier_site_name_col
4636 FROM EGO_RESULTS_FMT_USAGES
4637 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4638 AND ATTRIBUTE_CODE NOT LIKE '%$$%'
4639 AND CUSTOMIZATION_APPLICATION_ID = 431
4640 AND REGION_APPLICATION_ID = 431
4641 AND ATTRIBUTE_CODE = 'SUPPLIER_SITE';
4642 EXCEPTION
4643 WHEN NO_DATA_FOUND THEN
4644 l_supplier_site_name_col := NULL;
4645 END;
4646
4647 --------------------------------------------------------------------
4648 -- Loop to process per Attribute Group of User-Defined Attributes.
4649 --------------------------------------------------------------------
4650 <<LIORUI_attr_groups_loop>>
4651 FOR c_attr_grp_rec IN c_user_attr_group_codes(p_resultfmt_usage_id) LOOP
4652
4653 Write_Debug(l_api_name || 'LIORUI_attr_groups_loop - Attribute Group'
4654 || c_attr_grp_rec.attr_group_id);
4655
4656 --------------------------------------------------------------------
4657 -- Added for BugFix 4114928 : We need to check for the data level --
4658 -- of the atr group and populate the REVISION_ID only if the AG --
4659 -- revision level. --
4660 --------------------------------------------------------------------
4661 SELECT DATA_LEVEL_INT_NAME INTO l_attr_group_data_level
4662 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
4663 WHERE ATTR_GROUP_TYPE in (G_IUD_ATTR_GROUP_TYPE, G_GTN_SNG_ATTR_GROUP_TYPE, G_GTN_MUL_ATTR_GROUP_TYPE)
4664 AND ATTR_GROUP_ID = c_attr_grp_rec.attr_group_id
4665 AND OBJECT_NAME = G_EGO_ITEM_OBJ_NAME
4666 AND ROWNUM = 1;-- The AG cannot have associations at Item level and Revision Level for different Catalogs.
4667
4668 --------------------------------------------------------------------
4669 -- Fetch Organization ID, Item Number in Temp PLSQL tables.
4670 --------------------------------------------------------------------
4671 --- R12C UOM Change. Removing to_Num conversion . Now attrId$$UOM will also go into l_attr_id_table
4672 -- old code l_dyn_sql := ' SELECT To_Number(SUBSTR(attribute_code, INSTR(attribute_code, ''$$'')+2)) attr_id, intf_column_name, DATA_LEVEL_ID ';
4673
4674 l_dyn_sql := ' SELECT SUBSTR(attribute_code, INSTR(attribute_code, ''$$'')+2) attr_id, intf_column_name, DATA_LEVEL_ID ';
4675 l_dyn_sql := l_dyn_sql || ' FROM ego_results_fmt_usages ';
4676 l_dyn_sql := l_dyn_sql || ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID';
4677 l_dyn_sql := l_dyn_sql || ' AND attribute_code LIKE :ATTRIBUTE_CODE ';
4678 l_dyn_sql := l_dyn_sql || ' ORDER BY DISPLAY_SEQUENCE '; --- R12C UOM Change.so that UOM col comes next to corresponding number col
4679
4680 Write_Debug(l_api_name || l_dyn_sql);
4681
4682 l_cursor_select := DBMS_SQL.OPEN_CURSOR;
4683 DBMS_SQL.PARSE(l_cursor_select, l_dyn_sql, DBMS_SQL.NATIVE);
4684 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 1,l_attr_id_table,2500, l_temp);
4685 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 2,l_intf_col_name_table,2500, l_temp);
4686 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 3,l_data_level_id_table,2500, l_temp);
4687
4688 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
4689 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':ATTRIBUTE_CODE', c_attr_grp_rec.attr_group_id||'$$%');
4690 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_select);
4691 Write_Debug(l_api_name || 'About to start the Loop to fetch Rows');
4692 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
4693 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 1, l_attr_id_table);
4694 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 2, l_intf_col_name_table);
4695 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 3, l_data_level_id_table);
4696
4697 Write_Debug(l_api_name || 'Retrieved rows => '||To_char(l_count));
4698 DBMS_SQL.CLOSE_CURSOR(l_cursor_select);
4699
4700 --------------------------------------------------------------------
4701 -- New DBMS_SQL Cursor for Select Attr Values.
4702 --------------------------------------------------------------------
4703 l_cursor_attr_id_val := DBMS_SQL.OPEN_CURSOR;
4704 l_dyn_attr_id_val_sql := ' SELECT ';
4705 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' TRANSACTION_ID , ';
4706 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' UPPER(TRANSACTION_TYPE) , ';
4707 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' INSTANCE_PK1_VALUE , ';
4708 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' INSTANCE_PK2_VALUE , ';
4709 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' INSTANCE_PK3_VALUE , ';
4710 --------------------------------------------------------------------
4711 -- Added the fix to fetch these cols also, as in case of New Item
4712 -- Instance PK1 Value might not have been retrieved.
4713 --------------------------------------------------------------------
4714 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||G_ITEM_NUMBER_EBI_COL ||' , ';
4715 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||G_ORG_CODE_EBI_COL ||' , ';
4716 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||G_REVISION_CODE_EBI_COL ||' , ';
4717 --------------------------------------------------------------------
4718 -- R12
4719 -- Adding the source system id and source system reference columns
4720 --------------------------------------------------------------------
4721 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' TO_NUMBER(C_FIX_COLUMN11) , ';
4722 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' C_FIX_COLUMN12 , ';
4723
4724 ----------------------------------------------------
4725 --R12C adding the suppplier/supplier site columns
4726 ----------------------------------------------------
4727 IF(l_supplier_name_col IS NOT NULL) THEN
4728 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||l_supplier_name_col ||' , ';
4729 END IF;
4730 IF(l_supplier_number_col IS NOT NULL) THEN
4731 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||l_supplier_number_col ||' , ';
4732 END IF;
4733 IF(l_supplier_site_name_col IS NOT NULL) THEN
4734 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||l_supplier_site_name_col ||' , ';
4735 END IF;
4736
4737 --------------------------------------------------------------------
4738 -- Loop to Update the Inventory Item IDs.
4739 --------------------------------------------------------------------
4740 <<LIORUI_update_item_ids_loop>>
4741 FOR i IN 1..l_attr_id_table.COUNT LOOP
4742 Write_Debug(l_api_name || 'LIORUI_update_item_ids_loop - '||i);
4743 Write_Debug(l_api_name || 'Attr ID : '||To_char(l_attr_id_table(i)));
4744 Write_Debug(l_api_name || 'Intf Col Name : '||l_intf_col_name_table(i));
4745 IF (i <> l_attr_id_table.COUNT) THEN
4746 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || l_intf_col_name_table(i) || ', ';
4747 ELSE
4748 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || l_intf_col_name_table(i) ;
4749 END IF;
4750 END LOOP LIORUI_update_item_ids_loop; --end: FOR i IN 1..l_attr_id_table.COUNT LOOP
4751
4752 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' FROM EGO_BULKLOAD_INTF ' ;
4753 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
4754 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' AND PROCESS_STATUS = :PROCESS_STATUS ';
4755 Write_Debug(l_api_name || l_dyn_attr_id_val_sql);
4756
4757 DBMS_SQL.PARSE(l_cursor_attr_id_val, l_dyn_attr_id_val_sql, DBMS_SQL.NATIVE);
4758 --------------------------------------------------------------------
4759 --Setting Data Type for Trasaction ID
4760 --------------------------------------------------------------------
4761 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 1, l_number_example);
4762
4763 --------------------------------------------------------------------
4764 --Setting Data Type for Trasaction Type
4765 --------------------------------------------------------------------
4766 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 2, l_varchar_example,10);
4767
4768 --------------------------------------------------------------------
4769 --Setting Data Type for INSTANCE_PK1_VALUE (Item ID)
4770 --------------------------------------------------------------------
4771 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 3, l_varchar_example, 1000);
4772
4773 --------------------------------------------------------------------
4774 --Setting Data Type for INSTANCE_PK2_VALUE (Org ID)
4775 --------------------------------------------------------------------
4776 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 4, l_varchar_example, 1000);
4777
4778 --------------------------------------------------------------------
4779 --Setting Data Type for INSTANCE_PK3_VALUE (Revision ID)
4780 --------------------------------------------------------------------
4781 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 5, l_varchar_example, 1000);
4782
4783 --------------------------------------------------------------------
4784 --Setting Data Type for Item Num
4785 --------------------------------------------------------------------
4786 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 6, l_varchar_example, 1000);
4787
4788 --------------------------------------------------------------------
4789 --Setting Data Type for Org Code
4790 --------------------------------------------------------------------
4791 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 7, l_varchar_example, 1000);
4792
4793 --------------------------------------------------------------------
4794 --Setting Data Type for Revision Code
4795 --------------------------------------------------------------------
4796 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 8, l_varchar_example, 1000);
4797
4798 --------------------------------------------------------------------
4799 --Setting Data Type for Source System Id
4800 --------------------------------------------------------------------
4801 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 9, l_number_example);
4802
4803 --------------------------------------------------------------------
4804 --Setting Data Type for Source System Reference
4805 --------------------------------------------------------------------
4806 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 10, l_varchar_example, 1000);
4807
4808 ---------------------------------------------------------------
4809 --R12C setting data type for suppplier/supplier site columns
4810 ---------------------------------------------------------------
4811 l_dummy := 0;
4812 IF(l_supplier_name_col IS NOT NULL) THEN
4813 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 11 + l_dummy, l_varchar_example, 1000);
4814 l_dummy := l_dummy +1;
4815 END IF;
4816 IF(l_supplier_number_col IS NOT NULL) THEN
4817 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 11 + l_dummy, l_varchar_example, 1000);
4818 l_dummy := l_dummy +1;
4819 END IF;
4820 IF(l_supplier_site_name_col IS NOT NULL) THEN
4821 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 11 + l_dummy, l_varchar_example, 1000);
4822 l_dummy := l_dummy +1;
4823 END IF;
4824
4825 --------------------------------------------------------------------
4826 -- Loop to Bind the Data Types for the SELECT Columns.
4827 --------------------------------------------------------------------
4828 <<LIORUI_data_types_loop_1>>
4829 FOR i IN 1..l_attr_id_table.COUNT LOOP
4830
4831 Write_Debug(l_api_name || 'LIORUI_data_types_loop_1 - '||i);
4832
4833 ------------------------------------------------------------------------
4834 -- Since TRANSACTION_ID, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE,
4835 -- INSTANCE_PK3_VALUE are added to the SELECT before the User-Defined
4836 -- Attrs, we need to adjust the index as follows.
4837 ------------------------------------------------------------------------
4838 l_actual_userattr_indx := i + 10 + l_dummy;
4839
4840 l_data_type_code := SUBSTR (l_intf_col_name_table(i), 1, 1);
4841 ------------------------------------------------------------------------
4842 -- Based on the Data Type of the attribute, define the column
4843 ------------------------------------------------------------------------
4844
4845 IF (l_data_type_code = 'C') THEN
4846 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_varchar_example, 1000);
4847 ELSIF (l_data_type_code = 'U') THEN -- R12C UOM Changes
4848 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_varchar_example, 150);
4849 ELSIF (l_data_type_code = 'N') THEN
4850 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_number_example);
4851 ELSE --IF (l_data_type_code = 'D') THEN
4852 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_date_example);
4853 END IF; --IF (l_data_type_code = 'C') THEN
4854
4855 END LOOP LIORUI_data_types_loop_1; --FOR i IN 1..l_attr_id_table.COUNT LOOP
4856
4857
4858 DBMS_SQL.BIND_VARIABLE(l_cursor_attr_id_val,':RESULTFMT_USAGE_ID',p_resultfmt_usage_id);
4859
4860 write_debug(l_api_name || 'Binding the PROCESS_STATUS = '||G_INTF_STATUS_TOBE_PROCESS);
4861 DBMS_SQL.BIND_VARIABLE(l_cursor_attr_id_val,':PROCESS_STATUS',G_INTF_STATUS_TOBE_PROCESS);
4862 ------------------------------------------------------------------------
4863 -- Execute to get the Item User-Defined Attr values.
4864 ------------------------------------------------------------------------
4865 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_attr_id_val);
4866
4867 l_rows_per_attr_grp_indx := 0;
4868 ------------------------------------------------------------------------
4869 -- Loop for each row found in EBI
4870 ------------------------------------------------------------------------
4871 <<LIORUI_ebi_rows_loop>>
4872 LOOP --LOOP FOR CURSOR_ATTR_ID_VAL
4873
4874 Write_Debug(l_api_name || 'LIORUI_ebi_rows_loop - begin');
4875
4876
4877 IF DBMS_SQL.FETCH_ROWS(l_cursor_attr_id_val)>0 THEN
4878
4879 ------------------------------------------------------------------------
4880 --Increment Row Identifier per (Attribute Group + Row) Combination.
4881 ------------------------------------------------------------------------
4882 L_ATTR_GRP_ROW_IDENT := L_ATTR_GRP_ROW_IDENT + 20;
4883
4884 Write_Debug(l_api_name || 'ROW_FOUND : '||L_ATTR_GRP_ROW_IDENT);
4885
4886 ------------------------------------------------------------------------
4887 -- First column is Transaction ID.
4888 ------------------------------------------------------------------------
4889 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 1, l_transaction_id);
4890 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 2, l_transaction_type);
4891 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 3, l_item_id_char);
4892 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 4, l_org_id_char);
4893 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 5, l_item_rev_id_char);
4894 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 6, l_item_num_char);
4895 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 7, l_org_code_char);
4896 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 8, l_item_rev_code_char);
4897 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 9, l_source_system_id);
4898 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 10, l_source_system_ref);
4899
4900 l_dummy := 0;
4901 l_supplier_site_id := NULL;
4902 l_supplier_id := NULL;
4903 l_supplier_name := NULL;
4904 l_supplier_number := NULL;
4905 l_supplier_site_name := NULL;
4906
4907 IF(l_supplier_name_col IS NOT NULL) THEN
4908 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 11 + l_dummy, l_supplier_name);
4909 l_dummy := l_dummy +1;
4910
4911 IF(l_supplier_name IS NOT NULL) THEN
4912 BEGIN
4913 SELECT VENDOR_ID
4914 INTO l_supplier_id
4915 FROM AP_SUPPLIERS
4916 WHERE VENDOR_NAME = l_supplier_name;
4917 EXCEPTION
4918 WHEN NO_DATA_FOUND THEN
4919 l_supplier_id:= NULL;
4920 END;
4921 END IF;
4922 END IF;
4923
4924 IF(l_supplier_number_col IS NOT NULL) THEN
4925 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 11 + l_dummy, l_supplier_number);
4926 l_dummy := l_dummy +1;
4927 IF(l_supplier_number IS NOT NULL) THEN
4928 BEGIN
4929 SELECT VENDOR_ID
4930 INTO l_supplier_id
4931 FROM AP_SUPPLIERS
4932 WHERE SEGMENT1 = l_supplier_number;
4933 EXCEPTION
4934 WHEN NO_DATA_FOUND THEN
4935 l_supplier_id:= NULL;
4936 END;
4937 END IF;
4938 END IF;
4939
4940 IF(l_supplier_site_name_col IS NOT NULL) THEN
4941 l_dummy := l_dummy +1;
4942 END IF;
4943 ------------------------------------------------------------------------
4944 -- Loop to Bind the Data Types for the SELECT Columns.
4945 ------------------------------------------------------------------------
4946 <<LIORUI_data_types_loop_2>>
4947 FOR i IN 1..l_attr_id_table.COUNT LOOP
4948
4949 Write_Debug(l_api_name || 'LIORUI_data_types_loop_2 - '||i);
4950
4951 IF ( INSTR(l_attr_id_table(i),'$$UOM') = 0 ) THEN -- R12C UOM change: avoiding UOM entry here
4952
4953 OPEN c_attr_grp_details(To_Number(l_attr_id_table(i)));
4954 FETCH c_attr_grp_details INTO
4955 l_attr_group_int_name, l_attr_int_name,l_attr_group_type,l_attr_data_type,l_uom_class;--Bug Fix 4630163(ISSUE2)
4956
4957 Write_Debug(l_api_name || i||'=>'||l_attr_group_int_name||':'||l_attr_int_name||':'||l_attr_group_type);--Bug Fix 4630163(ISSUE2)
4958
4959 l_attr_grp_has_data := FALSE;
4960
4961 ------------------------------------------------------------------------
4962 -- If one more Attribute found for the Attribute Group.
4963 ------------------------------------------------------------------------
4964 IF c_attr_grp_details%FOUND THEN
4965
4966 IF(l_supplier_site_name_col IS NOT NULL) THEN
4967 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 11 + l_dummy -1, l_supplier_site_name);
4968 IF(l_supplier_site_name IS NOT NULL AND l_supplier_id IS NOT NULL) THEN
4969 BEGIN
4970
4971 l_site_org_id := FND_PROFILE.VALUE('ORG_ID');
4972 SELECT VENDOR_SITE_ID
4973 INTO l_supplier_site_id
4974 FROM AP_SUPPLIER_SITES_ALL
4975 WHERE VENDOR_SITE_CODE = l_supplier_site_name
4976 AND ORG_ID = l_site_org_id
4977 AND VENDOR_ID = l_supplier_id;
4978 EXCEPTION
4979 WHEN NO_DATA_FOUND THEN
4980 l_supplier_site_id:= NULL;
4981 END;
4982 END IF;
4983 END IF;
4984
4985 l_row_id_incr := 0;
4986 IF (l_data_level_id_table(i) IS NOT NULL AND l_data_level_id_table(i) <> 0) THEN
4987 l_row_id_incr := l_data_level_id_table(i)-43100;
4988 END IF;
4989 l_rows_per_attr_grp_indx := l_rows_per_attr_grp_indx + 1;
4990 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).DATA_SET_ID := p_data_set_id;
4991 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).TRANSACTION_ID := l_transaction_id;
4992 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).TRANSACTION_TYPE := l_transaction_type;
4993 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).INVENTORY_ITEM_ID := FND_NUMBER.CANONICAL_TO_NUMBER(l_item_id_char);
4994 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ORGANIZATION_ID := FND_NUMBER.CANONICAL_TO_NUMBER(l_org_id_char);
4995 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ITEM_NUMBER := l_item_num_char;
4996 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ORGANIZATION_CODE := l_org_code_char;
4997 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ROW_IDENTIFIER := L_ATTR_GRP_ROW_IDENT + l_row_id_incr;
4998 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DATATYPE_CODE := l_attr_data_type;
4999 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_GROUP_NAME := l_attr_group_int_name;
5000 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_NAME := l_attr_int_name;
5001 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_GROUP_TYPE := l_attr_group_type;--Bug Fix 4630163(ISSUE2)
5002
5003 -- Populate the REVISION Columns only if the Data Level of the AG is Revision
5004 IF ( l_data_level_id_table(i) = 43106 ) THEN
5005 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION := l_item_rev_code_char;
5006 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION_ID := FND_NUMBER.CANONICAL_TO_NUMBER(l_item_rev_id_char);
5007 ELSE
5008 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION := null;
5009 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION_ID := null;
5010 END IF;
5011
5012 IF ( l_data_level_id_table(i) = 43103 OR l_data_level_id_table(i) = 43104 OR l_data_level_id_table(i) = 43105) THEN
5013 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK1_VALUE := l_supplier_id;
5014 ELSE
5015 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK1_VALUE := null;
5016 END IF;
5017 IF (l_data_level_id_table(i) = 43104 OR l_data_level_id_table(i) = 43105) THEN
5018 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK2_VALUE := l_supplier_site_id;
5019 ELSE
5020 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK2_VALUE := null;
5021 END IF;
5022
5023 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).SOURCE_SYSTEM_ID := l_source_system_id;
5024 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).SOURCE_SYSTEM_REFERENCE := l_source_system_ref;
5025 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).DATA_LEVEL_ID := l_data_level_id_table(i);
5026 ------------------------------------------------------------------------
5027 -- Since TRANSACTION_ID, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE,
5028 -- INSTANCE_PK3_VALUE are added to the SELECT before User-Defined
5029 -- Attrs, we need to adjust the index as follows.
5030 ------------------------------------------------------------------------
5031 l_actual_userattr_indx := i + 10 + l_dummy;
5032
5033 Write_Debug(l_api_name || 'BEGIN: To Retrieve Attr Value at Position :'||l_actual_userattr_indx);
5034
5035 ------------------------------------------------------------------------
5036 -- Depending upon the Data Type, populate corresponding field in the
5037 -- User-Defined Attribute Data record.
5038 ------------------------------------------------------------------------
5039 ------------------------------------------------------------------------
5040 -- Depending upon the Data Type, populate corresponding field in the
5041 -- User-Defined Attribute Data record.
5042 ------------------------------------------------------------------------
5043 -- bug: 5001315 Explicitly Nulling out the data columns. (this incorporates the fix for 4673865)
5044 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR := NULL;
5045 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_NUM := NULL;
5046 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_DATE := NULL;
5047 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := NULL;--bugfix:6346771
5048 l_varchar_data := NULL;
5049 l_number_data := NULL;
5050 l_date_data := NULL;
5051 l_dummy_char := SUBSTR (l_intf_col_name_table(i), 1, 1);
5052
5053 IF l_dummy_char = 'C' THEN
5054 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_varchar_data);
5055 IF l_dummy_char = l_attr_data_type THEN
5056 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR := l_varchar_data;
5057 ELSE
5058 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := l_varchar_data;
5059 END IF;
5060 Write_Debug(l_api_name || 'String Value =>'||l_varchar_data);
5061 ELSIF l_dummy_char = 'N' THEN
5062 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_number_data);
5063 IF l_dummy_char = l_attr_data_type THEN
5064 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_NUM := l_number_data;
5065 ELSE
5066 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := l_number_data;
5067 END IF;
5068 Write_Debug(l_api_name || 'Number Value =>'||l_number_data);
5069 ELSE --IF (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DATATYPE_CODE = 'D') THEN
5070 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_date_data);
5071 IF l_dummy_char = l_attr_data_type THEN
5072 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_DATE := l_date_data;
5073 ELSE
5074 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := l_date_data;
5075 END IF;
5076 Write_Debug(l_api_name || 'Date Value =>'||l_date_data);
5077 END IF; --end: IF (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DATATYPE_CODE = 'C') THEN
5078
5079 Write_Debug(l_api_name || 'END: Retrieved Attr Value');
5080
5081 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).INTF_COLUMN_NAME := l_intf_col_name_table(i);
5082
5083 ------------------------------------------------------------------------
5084 -- Bug: 3025778 Modified If statment.
5085 -- Donot populate NULL Attribute value in the User-Defined Attrs
5086 -- Interface table.
5087 ------------------------------------------------------------------------
5088 IF ((l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR IS NULL) AND
5089 (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_NUM IS NULL) AND
5090 (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_DATE IS NULL) AND
5091 (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE IS NULL)
5092 ) THEN
5093 ------------------------------------------------------------------------
5094 -- If all attribute values are NULL value, then delete
5095 -- the row from PLSQL table.
5096 ------------------------------------------------------------------------
5097 l_usr_attr_data_tbl.DELETE(l_rows_per_attr_grp_indx);
5098 l_rows_per_attr_grp_indx := l_rows_per_attr_grp_indx - 1;
5099 Write_Debug(l_api_name || 'Due to NULL Att data, resetting back the PLSQL table index to : '||l_rows_per_attr_grp_indx);
5100
5101 END IF; --end: IF ((l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR...
5102
5103 END IF; --end: IF c_attr_grp_details%FOUND THEN
5104
5105 CLOSE c_attr_grp_details;
5106 ELSE -- R12C UOM Changes:if uom column comes, previous row was the number col. so not increasing index
5107
5108 l_varchar_data := null;
5109 l_actual_userattr_indx := l_actual_userattr_indx +1 ;
5110 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_uom_meaning);
5111
5112 IF (l_uom_class IS NOT NULL AND l_uom_meaning IS NOT NULL) THEN --BugFix:6271824
5113 SELECT UOM_CODE
5114 INTO l_varchar_data
5115 FROM MTL_UNITS_OF_MEASURE_VL
5116 WHERE UOM_CLASS = l_uom_class
5117 AND UNIT_OF_MEASURE_TL = l_uom_meaning; -- Bug 6397849
5118 END IF;
5119 -- fix for bug 9044423 added IF condition
5120 IF (l_uom_meaning IS NOT NULL) THEN
5121 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_UOM := l_varchar_data;
5122 END IF;
5123 Write_Debug(l_api_name || 'UOM CODE set ' || l_varchar_data || ' at index ' || l_rows_per_attr_grp_indx);
5124
5125 END IF ; -- end IF ( INSTR(l_attr_id_table(i),'$$UOM') = 0 ) -- R12C UOM Changes:
5126
5127 END LOOP LIORUI_data_types_loop_2; --end: FOR i IN 1..l_attr_id_table.COUNT LOOP
5128
5129 ELSE --end: IF DBMS_SQL.FETCH_ROWS(l_cursor_attr_id_val)>0 THEN
5130
5131 Write_Debug(l_api_name || 'Nothing Found (or) Done.');
5132 EXIT;
5133
5134 END IF; --IF DBMS_SQL.FETCH_ROWS(l_cursor_attr_id_val)>0 THEN
5135
5136 END LOOP LIORUI_ebi_rows_loop; --END: LOOP FOR CURSOR_ATTR_ID_VAL
5137
5138 l_attr_id_table.DELETE;
5139 l_intf_col_name_table.DELETE;
5140 l_data_level_id_table.DELETE;
5141
5142 DBMS_SQL.CLOSE_CURSOR(l_cursor_attr_id_val);
5143
5144 -------------------------------------------------------------------
5145 -- Loop for all the rows to be inserted per Attribute Group.
5146 -------------------------------------------------------------------
5147 <<LIORUI_attrs_loop>>
5148 FOR i IN 1..l_rows_per_attr_grp_indx LOOP
5149
5150 Write_Debug(l_api_name || 'LIORUI_attrs_loop - ' || i);
5151
5152 -------------------------------------------------------------------------
5153 -- Fix for Bug# 3808455. To avoid the following error:
5154 -- ORA-01401: inserted value too large for column
5155 -- [This is done because ATTR_DISP_VALUE size is 1000 Chars]
5156 -------------------------------------------------------------------------
5157 IF ( LENGTH(l_usr_attr_data_tbl(i).ATTR_VALUE_STR) > 1000 ) THEN
5158 l_token_tbl_one(1).token_name := 'VALUE';
5159 l_token_tbl_one(1).token_value := l_usr_attr_data_tbl(i).ATTR_VALUE_STR;
5160
5161 Error_Handler.Add_Error_Message
5162 ( p_message_name => 'EGO_STR_ATTR_LEN_GT1000_ERR'
5163 , p_application_id => 'EGO'
5164 , p_message_text => NULL
5165 , p_token_tbl => l_token_tbl_one
5166 , p_message_type => 'E'
5167 , p_row_identifier => l_usr_attr_data_tbl(i).TRANSACTION_ID
5168 , p_table_name => G_ERROR_TABLE_NAME
5169 , p_entity_id => NULL
5170 , p_entity_index => NULL
5171 , p_entity_code => G_ERROR_ENTITY_CODE
5172 );
5173
5174 ---------------------------------------------------------------------------
5175 -- Put multiple ELSIF <<condition>> here, to report Errors with the Data.
5176 -- Finally, ELSE condition below means that Data is ~Error Free~ and ready
5177 -- to be Inserted.
5178 ---------------------------------------------------------------------------
5179
5180 ELSE --IF ( LENGTH(l_usr_attr_data_tbl(i)..
5181
5182 ------------------------------------------------------------------------
5183 -- Populate l_varchar_data, to later populate in ATTR_DISP_VALUE
5184 ------------------------------------------------------------------------
5185 -- IF (NVL(l_usr_attr_data_tbl(i).ATTR_VALUE_STR,EGO_ITEM_PUB.G_INTF_NULL_CHAR) <> EGO_ITEM_PUB.G_INTF_NULL_CHAR) THEN
5186 -- l_varchar_data := l_usr_attr_data_tbl(i).ATTR_VALUE_STR;
5187 -- ELSE
5188 -- l_varchar_data := NULL;
5189 -- END IF;
5190 IF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'C') THEN
5191 -- IF (NVL(l_usr_attr_data_tbl(i).ATTR_VALUE_STR,EGO_ITEM_PUB.G_INTF_NULL_CHAR) <> EGO_ITEM_PUB.G_INTF_NULL_CHAR ) THEN
5192 l_varchar_data := NVL(l_usr_attr_data_tbl(i).ATTR_VALUE_STR,l_usr_attr_data_tbl(i).ATTR_DISP_VALUE);
5193 -- END IF;
5194 ELSIF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'N') THEN
5195 -- IF (NVL(l_usr_attr_data_tbl(i).ATTR_VALUE_NUM,EGO_ITEM_PUB.G_INTF_NULL_NUM) <> EGO_ITEM_PUB.G_INTF_NULL_NUM) THEN
5196 l_varchar_data := NVL(To_char(l_usr_attr_data_tbl(i).ATTR_VALUE_NUM),l_usr_attr_data_tbl(i).ATTR_DISP_VALUE);
5197 BEGIN
5198 IF (TO_NUMBER(l_varchar_data) = EGO_ITEM_PUB.G_INTF_NULL_NUM) THEN
5199 l_varchar_data := EGO_USER_ATTRS_BULK_PVT.G_NULL_NUM_VAL_STR;
5200 END IF;
5201 EXCEPTION
5202 WHEN OTHERS THEN
5203 -- the value needs to be checked against value set
5204 NULL;
5205 END;
5206 Write_Debug(l_api_name || 'l_varchar_data => ' || l_varchar_data);
5207 -- END IF;
5208 ELSIF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'D') THEN
5209 IF (l_usr_attr_data_tbl(i).ATTR_VALUE_DATE = G_EXCEL_NULL_DATE) THEN
5210 l_varchar_data := To_Char(EGO_ITEM_PUB.G_INTF_NULL_DATE,G_DATE_FORMAT);
5211 ELSE
5212 l_varchar_data := NVL(To_Char(l_usr_attr_data_tbl(i).ATTR_VALUE_DATE , G_DATE_FORMAT),l_usr_attr_data_tbl(i).ATTR_DISP_VALUE);
5213 END IF;
5214 END IF; --end: IF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'C') THEN
5215
5216 -----------------------------------------------------------------------------------
5217 -- Checking for the transaction_type, if CREATE/UPDATE populate
5218 -- EGO_ITM_USR_ATTR_INTRFC with SYNC else the user-given Transaction_type is passed
5219 -----------------------------------------------------------------------------------
5220 l_transaction_type := l_usr_attr_data_tbl(i).TRANSACTION_TYPE;
5221 /* Bug 12656687 - Start. Will change the transaction type to SYNC only if user has given UPDATE. */
5222 -- IF (l_transaction_type = G_CREATE OR l_transaction_type = G_UPDATE) THEN
5223 IF (l_transaction_type = G_UPDATE) THEN
5224 -- Bug 12656687 : End
5225 l_transaction_type := G_SYNC;
5226 END IF; --transaction_type check (Bug5201097)
5227
5228 ----------------------------------------------------------------------
5229 -- 1)
5230 -- The User-Defined Attrs BO has some validation changes, which
5231 -- mandates users to pass in the display value, so that BO does the
5232 -- conversion to internal value. To support that change, I need to
5233 -- populate ATTR_DISP_VALUE instead of internal columns :
5234 -- ATTR_VALUE_STR, ATTR_VALUE_DATE, ATTR_VALUE_NUM.
5235 -- Above change to populate ATTR_DISP_VALUE was advised by DAARENA
5236 -- (Dylan Arena)
5237 --
5238 -- 2)
5239 -- TRANSACTION_TYPE, PROCESS_STATUS need *not* be populated as they
5240 -- are defaulted by the User Attrs PLSQL Program
5241 ----------------------------------------------------------------------
5242
5243 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
5244 (
5245 DATA_SET_ID ,
5246 TRANSACTION_ID ,
5247 TRANSACTION_TYPE ,
5248 INVENTORY_ITEM_ID ,
5249 ORGANIZATION_ID ,
5250 REVISION_ID ,
5251 ITEM_NUMBER ,
5252 ORGANIZATION_CODE ,
5253 REVISION ,
5254 ROW_IDENTIFIER ,
5255 ATTR_GROUP_INT_NAME ,
5256 ATTR_INT_NAME ,
5257 ATTR_DISP_VALUE ,
5258 PROCESS_STATUS ,
5259 SOURCE_SYSTEM_ID ,
5260 SOURCE_SYSTEM_REFERENCE,
5261 ATTR_GROUP_TYPE, --Bug Fix 4630163(ISSUE2)
5262 ITEM_CATALOG_GROUP_ID, --Bug Fix 5179741
5263 DATA_LEVEL_ID ,
5264 PK1_VALUE ,
5265 PK2_VALUE ,
5266 ATTR_VALUE_UOM --R12C UOM Changes
5267 )
5268 VALUES
5269 (
5270 l_usr_attr_data_tbl(i).DATA_SET_ID,
5271 l_usr_attr_data_tbl(i).TRANSACTION_ID,
5272 l_transaction_type, --l_usr_attr_data_tbl(i).TRANSACTION_TYPE,
5273 l_usr_attr_data_tbl(i).INVENTORY_ITEM_ID,
5274 l_usr_attr_data_tbl(i).ORGANIZATION_ID,
5275 l_usr_attr_data_tbl(i).REVISION_ID,
5276 l_usr_attr_data_tbl(i).ITEM_NUMBER,
5277 l_usr_attr_data_tbl(i).ORGANIZATION_CODE,
5278 l_usr_attr_data_tbl(i).REVISION,
5279 l_usr_attr_data_tbl(i).ROW_IDENTIFIER,
5280 l_usr_attr_data_tbl(i).ATTR_GROUP_NAME,
5281 l_usr_attr_data_tbl(i).ATTR_NAME,
5282 l_varchar_data, -- ATTR_DISP_VALUE
5283 G_PROCESS_STATUS,
5284 l_usr_attr_data_tbl(i).SOURCE_SYSTEM_ID,
5285 l_usr_attr_data_tbl(i).SOURCE_SYSTEM_REFERENCE,
5286 l_usr_attr_data_tbl(i).ATTR_GROUP_TYPE, --Bug Fix 4630163(ISSUE2)
5287 G_CATALOG_GROUP_ID, --Bug Fix 5179741
5288 l_usr_attr_data_tbl(i).DATA_LEVEL_ID,
5289 l_usr_attr_data_tbl(i).PK1_VALUE,
5290 l_usr_attr_data_tbl(i).PK2_VALUE,
5291 l_usr_attr_data_tbl(i).ATTR_VALUE_UOM --R12C UOM Changes
5292 );
5293
5294 Write_Debug(l_api_name || 'DataSetID ['||l_usr_attr_data_tbl(i).DATA_SET_ID||'] '||G_NEWLINE||
5295 l_api_name || 'TransactionID ['||l_usr_attr_data_tbl(i).TRANSACTION_ID||'] '||G_NEWLINE||
5296 l_api_name || 'TransactionType ['||l_usr_attr_data_tbl(i).TRANSACTION_TYPE||'] '||G_NEWLINE||
5297 l_api_name || 'InventoryItemID ['||l_usr_attr_data_tbl(i).INVENTORY_ITEM_ID||'] '||G_NEWLINE||
5298 l_api_name || 'OrganizationID ['||l_usr_attr_data_tbl(i).ORGANIZATION_ID||'] '||G_NEWLINE||
5299 l_api_name || 'RevisionID ['||l_usr_attr_data_tbl(i).REVISION_ID||'] '||G_NEWLINE||
5300 l_api_name || 'ItemNumber ['||l_usr_attr_data_tbl(i).ITEM_NUMBER||'] '||G_NEWLINE||
5301 l_api_name || 'OrganizationCode['||l_usr_attr_data_tbl(i).ORGANIZATION_CODE||'] '||G_NEWLINE||
5302 l_api_name || 'Revision ['||l_usr_attr_data_tbl(i).REVISION||'] '||G_NEWLINE||
5303 l_api_name || 'RowIdentifier ['||l_usr_attr_data_tbl(i).ROW_IDENTIFIER||'] '||G_NEWLINE||
5304 l_api_name || 'AttrGroupType ['||l_usr_attr_data_tbl(i).ATTR_GROUP_TYPE||'] '||G_NEWLINE||--Bug Fix 4630163(ISSUE2)
5305 l_api_name || 'AttrGroupName ['||l_usr_attr_data_tbl(i).ATTR_GROUP_NAME||'] '||G_NEWLINE||
5306 l_api_name || 'AttrName ['||l_usr_attr_data_tbl(i).ATTR_NAME||'] '||G_NEWLINE||
5307 l_api_name || ': Populated ATTR_DISP_VALUE of DataType['||l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE||'] => '||l_varchar_data||G_NEWLINE||
5308 l_api_name || ' Catalog Group ID ['||G_CATALOG_GROUP_ID||']');
5309
5310 END IF; --end: IF ( LENGTH(l_usr_attr_data_tbl(i)..
5311
5312 END LOOP LIORUI_attrs_loop; --FOR i IN 1..l_usr_attr_data_tbl.COUNT LOOP
5313
5314 Write_Debug(l_api_name || 'EIAI: Populated the Item / Item-Revision User-Defined Attr Values for Attribute Group : '||l_attr_group_int_name);
5315
5316 END LOOP LIORUI_attr_groups_loop; --FOR c_attr_grp_rec IN c_user_attr_group_codes
5317
5318 Write_Debug(l_api_name || 'EIAI: DONE Populating the Item / Item-Revision User-Defined Attr Values');
5319
5320 Write_Debug(l_api_name || 'END load_itm_or_rev_usrattr_intf()');
5321
5322
5323 EXCEPTION
5324 WHEN OTHERS THEN
5325 x_retcode := G_STATUS_ERROR;
5326 x_errbuff := SUBSTRB(SQLERRM, 1,240);
5327 Write_Debug(l_api_name || 'Load_itm_or_rev_usrattr_intf : EXCEPTION HAPPENED => '||x_errbuff);
5328 RAISE;
5329
5330 END load_itm_or_rev_usrattr_intf;
5331
5332 --================================================================================--
5333 -- 11.5.10 New Functionality: Item Operational Attributes Bulkload (bug# 3293098) --
5334 -- PPEDDAMA (1/31/2004) --
5335 --================================================================================--
5336
5337 ---------------------------------------------------------------
5338 --This method populates Item Operational attributes in MSII.
5339 ---------------------------------------------------------------
5340
5341 PROCEDURE load_item_oper_attr_values
5342 (
5343 p_resultfmt_usage_id IN NUMBER
5344 ) IS
5345
5346 -- Start OF comments
5347 -- API name : Populate MSII Item Interface Lines
5348 -- Pre-reqs : None
5349 -- FUNCTION : Populate and Loads Item operational attribute values in MSII.
5350 -- These operational attributes made available in Item Search Results
5351 -- through User-Defined Attributes framework.
5352 --
5353 -- Errors are populated in MTL_INTERFACE_ERRORS
5354 --
5355
5356 ------------------------------------------------------------------------
5357 -- To get the count of Item Operational Attr Groups Result Format. --
5358 ------------------------------------------------------------------------
5359 CURSOR c_item_oper_attr_grp_count (c_resultfmt_usage_id IN NUMBER) IS
5360 SELECT count(distinct(To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1))))
5361 FROM ego_results_fmt_usages
5362 WHERE resultfmt_usage_id = c_resultfmt_usage_id
5363 AND attribute_code LIKE '%$$%'
5364 -- Following statement fetches the Attribute Group Id --
5365 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) IN
5366 (
5367 SELECT ATTR_GROUP_ID
5368 FROM EGO_ATTR_GROUPS_V
5369 WHERE ATTR_GROUP_TYPE = G_ERP_ATTR_GROUP_TYPE
5370 AND APPLICATION_ID = G_APPLICATION_ID
5371 );
5372
5373 ------------------------------------------------------------------------
5374 -- To get the Item Operational Attr Groups in the Result Format. --
5375 ------------------------------------------------------------------------
5376 CURSOR c_item_oper_attr_grp_ids (c_resultfmt_usage_id IN NUMBER) IS
5377 SELECT distinct(To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1))) OPER_ATTR_GRP_ID
5378 FROM ego_results_fmt_usages
5379 WHERE resultfmt_usage_id = c_resultfmt_usage_id
5380 AND attribute_code LIKE '%$$%'
5381 -- Following statement fetches the Attribute Group Id --
5382 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) IN
5383 (
5384 SELECT ATTR_GROUP_ID
5385 FROM EGO_ATTR_GROUPS_V
5386 WHERE ATTR_GROUP_TYPE = G_ERP_ATTR_GROUP_TYPE
5387 AND APPLICATION_ID = G_APPLICATION_ID
5388 );
5389
5390 ---------------------------------------------------------------
5391 -- To get the Item Operational attr columns in the Result Format.
5392 ---------------------------------------------------------------
5393 CURSOR c_item_oper_attr_intf_cols ( c_resultfmt_usage_id IN NUMBER
5394 ,c_attr_group_id IN NUMBER
5395 ) IS
5396 -- First column is the Attibute Id --
5397 SELECT To_Number(SUBSTR(attribute_code, INSTR(attribute_code, '$$')+2))
5398 , intf_column_name
5399 FROM ego_results_fmt_usages
5400 WHERE resultfmt_usage_id = c_resultfmt_usage_id
5401 AND INSTR(attribute_code, '$$UOM') = 0 -- R12C UOM Change : ignoring uom columns in this case:
5402 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) = c_attr_group_id;
5403
5404 l_item_oper_attr_sql VARCHAR2(1000) :=
5405 ' SELECT To_Number(SUBSTR(attribute_code, INSTR(attribute_code, ''$$'')+2)) '
5406 || ' , intf_column_name '
5407 || ' FROM ego_results_fmt_usages '
5408 || ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID '
5409 || ' AND INSTR(attribute_code, ''$$UOM'') = 0 ' -- R12C UOM Change : ignoring uom columns in this case:
5410 || ' AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, ''$$'') - 1)) = :ATTR_GROUP_ID ';
5411
5412 -------------------------------------------------------------------------
5413 -- To get the Attribute Name (Table performs better than EGO_ATTRS_V) --
5414 -------------------------------------------------------------------------
5415 CURSOR c_attr_name ( c_attr_id IN NUMBER) IS
5416 SELECT ext.application_column_name , TL.FORM_LEFT_PROMPT
5417 FROM ego_fnd_df_col_usgs_ext ext, FND_DESCR_FLEX_COL_USAGE_TL TL
5418 WHERE ext.attr_id = c_attr_id
5419 AND TL.LANGUAGE = USERENV('LANG')
5420 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = TL.DESCRIPTIVE_FLEXFIELD_NAME
5421 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = TL.DESCRIPTIVE_FLEX_CONTEXT_CODE
5422 AND EXT.APPLICATION_COLUMN_NAME = TL.APPLICATION_COLUMN_NAME
5423 AND EXT.APPLICATION_ID = TL.APPLICATION_ID; -- Bug 6531938
5424
5425 -----------------------------------------------------------
5426 -- local objects and object variables --
5427 -----------------------------------------------------------
5428
5429 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
5430 l_attr_metadata_obj EGO_ATTR_METADATA_OBJ;
5431 l_user_attr_data_obj EGO_USER_ATTR_DATA_OBJ;
5432 l_user_attr_data_table EGO_USER_ATTR_DATA_TABLE;
5433 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
5434 l_ext_table_metadata_obj EGO_EXT_TABLE_METADATA_OBJ;
5435 l_pk_column_name_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
5436
5437 ----------------------------------------
5438 -- local variables --
5439 ----------------------------------------
5440
5441 l_item_oper_attr_grp_count NUMBER;
5442 l_item_oper_attr_grp_id NUMBER;
5443 l_count NUMBER(5);
5444 l_indx NUMBER(15);
5445 l_transaction_id NUMBER(15);
5446 l_object_id NUMBER(5);
5447
5448 l_dyn_sql VARCHAR2(10000);
5449 l_item_id_char VARCHAR2(15);
5450 l_org_id_char VARCHAR2(15);
5451 l_trans_type_char VARCHAR2(15);
5452 l_attr_name VARCHAR2(100);
5453
5454 l_attr_id_table DBMS_SQL.NUMBER_TABLE;
5455 l_attr_disp_name_table DBMS_SQL.VARCHAR2_TABLE;
5456 l_intf_col_table DBMS_SQL.VARCHAR2_TABLE;
5457 l_attr_disp_val_table DBMS_SQL.VARCHAR2_TABLE;
5458 l_attr_int_val_table DBMS_SQL.VARCHAR2_TABLE;
5459 l_msii_col_table DBMS_SQL.VARCHAR2_TABLE;
5460
5461 -- Example Data Types to be used in Bind Variable. --
5462 l_varchar_example VARCHAR2(1000);
5463 l_number_example NUMBER;
5464 l_date_example DATE;
5465
5466 -- Actual Data to store corresponding data type value. --
5467 l_varchar_data VARCHAR2(1000);
5468 l_number_data NUMBER;
5469
5470 -- DBMS_SQL Open Cursor integers. --
5471 l_cursor_oper_attr INTEGER;
5472 l_execute INTEGER;
5473
5474 -- Bug# 13816809
5475 l_dyn_sql_update_msii VARCHAR2(10000);
5476 l_cursor_update_msii INTEGER; -- use for update MSII by dynamic sql
5477 l_error_indicator BOOLEAN := FALSE; -- indicate if int value is incorrect when update MSII: TRUE for incorrect
5478
5479 --API return parameters
5480 l_retcode VARCHAR2(10);
5481 l_errbuff VARCHAR2(2000);
5482 l_ebi_err_msg VARCHAR2(2000);
5483 l_dyn_sql_ebi VARCHAR2(2000);
5484
5485 BEGIN
5486
5487 --------------------------------------------------------------------------------
5488 -- Fetch the Object Id. If not found, SQL exception gets thrown. --
5489 --------------------------------------------------------------------------------
5490 SELECT OBJECT_ID
5491 INTO l_object_id
5492 FROM FND_OBJECTS
5493 WHERE OBJ_NAME = G_EGO_ITEM_OBJ_NAME;
5494
5495 l_ext_table_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Ext_Table_Metadata (l_object_id);
5496
5497 --------------------------------------------------------------------------------
5498 -- Fetch the count of Operational Attribute Groups in the Result Format --
5499 --------------------------------------------------------------------------------
5500 OPEN c_item_oper_attr_grp_count(p_resultfmt_usage_id);
5501 FETCH c_item_oper_attr_grp_count INTO l_item_oper_attr_grp_count;
5502 IF c_item_oper_attr_grp_count%NOTFOUND THEN
5503 ----------------------------------------------------------------------------
5504 -- There are *no* operational attribute groups to load. Hence return. --
5505 ----------------------------------------------------------------------------
5506 Write_Debug('load_item_oper_attr_values: There are *NO* Operational Attribute Groups to load! Hence RETURNing!!');
5507 RETURN;
5508
5509 END IF;
5510 CLOSE c_item_oper_attr_grp_count;
5511
5512 IF (l_item_oper_attr_grp_count > 0) THEN
5513
5514 FOR attr_grp_id_rec IN c_item_oper_attr_grp_ids(p_resultfmt_usage_id)
5515 LOOP
5516 IF (attr_grp_id_rec.OPER_ATTR_GRP_ID IS NOT NULL) THEN
5517
5518 ------------------------------------------------------------------------------
5519 -- Deleting all the earlier retrieved rows from these temp PLSQL tables,
5520 -- and Starting afresh.
5521 -- NOTE: l_attr_id_table.COUNT will be >0, only from second exec of the loop.
5522 ------------------------------------------------------------------------------
5523 IF (l_attr_id_table.COUNT > 0) THEN
5524 l_attr_id_table.DELETE;
5525 l_intf_col_table.DELETE;
5526 END IF; --end: IF (l_attr_id_table.COUNT > 0)
5527
5528 ----------------------------------------------------------------------------
5529 -- Fetch the Attr Group Meta Data object. --
5530 -- Object will be retained until per Attr Group operational attribute --
5531 -- values for all rows are processed. --
5532 ----------------------------------------------------------------------------
5533 l_attr_group_metadata_obj :=
5534 EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata (
5535 p_attr_group_id => attr_grp_id_rec.OPER_ATTR_GRP_ID
5536 ,p_application_id => G_APPLICATION_ID
5537 ,p_attr_group_type => G_ERP_ATTR_GROUP_TYPE
5538 );
5539
5540 ----------------------------------------------------------------------------
5541 -- Fetch the Attr Group Meta Data table. --
5542 -- Table will be retained until per Attr Group operational attribute --
5543 -- values for all rows are processed. --
5544 ----------------------------------------------------------------------------
5545 l_attr_metadata_table := l_attr_group_metadata_obj.attr_metadata_table;
5546
5547 ----------------------------------------------------------------------------
5548 -- Fetch the Oper Attrs IDs, Intf Column names. --
5549 ----------------------------------------------------------------------------
5550 Write_Debug(l_item_oper_attr_sql);
5551
5552 l_cursor_oper_attr := DBMS_SQL.OPEN_CURSOR;
5553 DBMS_SQL.PARSE(l_cursor_oper_attr, l_item_oper_attr_sql, DBMS_SQL.NATIVE);
5554 DBMS_SQL.DEFINE_ARRAY(
5555 c => l_cursor_oper_attr -- cursor --
5556 , position => 1 -- select position --
5557 , n_tab => l_attr_id_table -- table of numbers --
5558 , cnt => 2500 -- rows requested --
5559 , lower_bound => 1 -- start at --
5560 );
5561 DBMS_SQL.DEFINE_ARRAY(
5562 c => l_cursor_oper_attr -- cursor --
5563 , position => 2 -- select position --
5564 , c_tab => l_intf_col_table -- table of varchar --
5565 , cnt => 2500 -- rows requested --
5566 , lower_bound => 1 -- start at --
5567 );
5568
5569 DBMS_SQL.BIND_VARIABLE(l_cursor_oper_attr,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
5570 DBMS_SQL.BIND_VARIABLE(l_cursor_oper_attr,':ATTR_GROUP_ID', attr_grp_id_rec.OPER_ATTR_GRP_ID);
5571 Write_Debug('Binding :RESULTFMT_USAGE_ID to => '||p_resultfmt_usage_id);
5572 Write_Debug('Binding :ATTR_GROUP_ID to => '||attr_grp_id_rec.OPER_ATTR_GRP_ID);
5573
5574 l_execute := DBMS_SQL.EXECUTE(l_cursor_oper_attr);
5575 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr);
5576 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 1, l_attr_id_table);
5577 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 2, l_intf_col_table);
5578
5579 Write_Debug('load_item_oper_attr_values: Retrieved rows => '||To_char(l_count));
5580 DBMS_SQL.CLOSE_CURSOR(l_cursor_oper_attr);
5581
5582
5583 ------------------------------------------ Bug#13816809: (HIGH SQL VERSION COUNT PROBLEM) --------------------------------------------
5584
5585 -- Since one group ids have the some update cols in msii, we can use one --
5586 -- dynamic sql with bind variables to share one cursor --
5587 -- ...
5588 ----------------------------------------------------------------------------
5589
5590 -- bug 4699499 deleting the msii column table
5591 IF (l_msii_col_table.COUNT > 0) THEN
5592 Write_Debug('load_item_oper_attr_values: Deleting msii col table ');
5593 l_msii_col_table.DELETE;
5594 END IF; --end: IF (l_msii_col_table.COUNT > 0)
5595
5596 --------------------------------------------------------------------------------
5597 -- Fetch the Attribute name based on the attribute id. --
5598 --------------------------------------------------------------------------------
5599 FOR i in 1..l_attr_id_table.COUNT LOOP
5600
5601 OPEN c_attr_name(l_attr_id_table(i));
5602 FETCH c_attr_name INTO l_attr_name, l_attr_disp_name_table(i);
5603 IF c_attr_name%NOTFOUND THEN
5604
5605 ----------------------------------------------------------------------------
5606 -- This shouldnot happen. All Oper Attr Ids should map to Attr names. --
5607 -- Print the following debug statement and RETURN. --
5608 ----------------------------------------------------------------------------
5609 Write_Debug('load_item_oper_attr_values: Houston we have a problem! No Attr Name found!!!');
5610 RETURN;
5611 END IF; -- IF c_attr_name%NOTFOUND THEN
5612 CLOSE c_attr_name;
5613 Write_Debug('load_item_oper_attr_values: l_attr_name => '||l_attr_name);
5614
5615 --------------------------------------------------------------------------------
5616 -- The Attribute name is the MSII DB Column name. --
5617 --------------------------------------------------------------------------------
5618 l_msii_col_table(i) := l_attr_name;
5619
5620 END LOOP;
5621
5622 --------------------------------------------------------------------------------
5623 -- Update MSII with the internal values. --
5624 -- Use dynamic sql with bind variable to share cursor for all items. --
5625 -- Construct the sql text once and bind variables for each item. --
5626 --------------------------------------------------------------------------------
5627 l_dyn_sql_update_msii := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE SET ';
5628 l_cursor_update_msii := DBMS_SQL.OPEN_CURSOR;
5629
5630 -- construct dynamic sql
5631 FOR i in 1..l_msii_col_table.COUNT LOOP
5632 IF (i <> l_msii_col_table.COUNT) THEN
5633 l_dyn_sql_update_msii := l_dyn_sql_update_msii || l_msii_col_table(i) || ' = :' || l_msii_col_table(i) || ', ';
5634 ELSE
5635 l_dyn_sql_update_msii := l_dyn_sql_update_msii || l_msii_col_table(i) || ' = :' || l_msii_col_table(i);
5636 END IF;
5637 END LOOP; --FOR i in 1..l_msii_col_table.COUNT LOOP
5638 l_dyn_sql_update_msii := l_dyn_sql_update_msii || ' WHERE TRANSACTION_ID = :TRANSACTION_ID';
5639
5640 Write_Debug(l_dyn_sql);
5641 DBMS_SQL.PARSE(l_cursor_update_msii, l_dyn_sql_update_msii, DBMS_SQL.NATIVE);
5642
5643 ------------------------------------------ Bug#13816809: (HIGH SQL VERSION COUNT PROBLEM) --------------------------------------------
5644
5645
5646 ----------------------------------------------------------------------------
5647 -- Fetch the Oper Attrs values from EGO_BULKLOAD_INTF. --
5648 ----------------------------------------------------------------------------
5649
5650 l_cursor_oper_attr := DBMS_SQL.OPEN_CURSOR;
5651 l_dyn_sql := ' SELECT ';
5652 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
5653 l_dyn_sql := l_dyn_sql || ' UPPER(TRANSACTION_TYPE) , ';
5654 l_dyn_sql := l_dyn_sql || ' INSTANCE_PK1_VALUE , ';
5655 l_dyn_sql := l_dyn_sql || ' INSTANCE_PK2_VALUE , ';
5656 FOR i in 1..l_attr_id_table.COUNT LOOP
5657 IF (i <> l_attr_id_table.COUNT) THEN
5658 l_dyn_sql := l_dyn_sql || l_intf_col_table(i) || ' , ';
5659 ELSE
5660 l_dyn_sql := l_dyn_sql || l_intf_col_table(i) || ' ';
5661 END IF;
5662 END LOOP; --FOR (i in 1..l_attr_id_table.COUNT) LOOP
5663 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF ';
5664 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
5665 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
5666
5667 Write_Debug(l_dyn_sql);
5668 DBMS_SQL.PARSE(l_cursor_oper_attr, l_dyn_sql, DBMS_SQL.NATIVE);
5669
5670 ----------------------------------------------------------------------------
5671 -- Setting the Data type for Oper Attrs values before Select. --
5672 ----------------------------------------------------------------------------
5673 -- Setting Data Type for Trasaction ID --
5674 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 1, l_number_example);
5675 -- Setting Data Type for Transaction Type --
5676 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 2, l_varchar_example, 1000);
5677 --Setting Data Type for INSTANCE_PK1_VALUE (Item ID)
5678 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 3, l_varchar_example, 1000);
5679 --Setting Data Type for INSTANCE_PK2_VALUE (Org ID)
5680 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 4, l_varchar_example, 1000);
5681 FOR i in 1..l_attr_id_table.COUNT LOOP
5682 ------------------------------------------------------------------------------------
5683 -- Since TRANSACTION_ID, TRANSACTION_TYPE, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE --
5684 -- are added to the SELECT before we need to adjust the index as follows. --
5685 ------------------------------------------------------------------------------------
5686 l_indx := i + 4;
5687 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, l_indx, l_varchar_example, 1000);
5688 END LOOP; --2nd: FOR (i in 1..l_attr_id_table.COUNT) LOOP
5689
5690 ----------------------------------------------------------------------------
5691 -- Binding the ResultFmtUsageId and Executing the Query. --
5692 ----------------------------------------------------------------------------
5693 DBMS_SQL.BIND_VARIABLE(l_cursor_oper_attr,':RESULTFMT_USAGE_ID',p_resultfmt_usage_id);
5694 l_execute := DBMS_SQL.EXECUTE(l_cursor_oper_attr);
5695
5696 LOOP --Loop for l_cursor_oper_attr
5697
5698 IF DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr)>0 THEN
5699
5700 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 1, l_transaction_id);
5701 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 2, l_trans_type_char);
5702 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 3, l_item_id_char);
5703 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 4, l_org_id_char);
5704
5705 Write_Debug('load_item_oper_attr_values: l_trans_type_char => '||l_trans_type_char);
5706 ------------------------------------------------------------------------------------
5707 -- Prepare Primary Key Name Value pair object. --
5708 -- In case of CREATE, pass in a blank object. --
5709 ------------------------------------------------------------------------------------
5710 l_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY
5711 (
5712 EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID', l_item_id_char)
5713 ,EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID', l_org_id_char)
5714 );
5715
5716 --------------------------------------------------------------------------------
5717 -- Create a table of Usr Attr Data objects that will be used for --
5718 -- Display to Internal value conversions. --
5719 --------------------------------------------------------------------------------
5720 l_user_attr_data_table := EGO_USER_ATTR_DATA_TABLE();
5721
5722 FOR i in 1..l_attr_id_table.COUNT LOOP
5723 ------------------------------------------------------------------------------------
5724 -- Since TRANSACTION_ID, TRANSACTION_TYPE, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE --
5725 -- are added to the SELECT before we need to adjust the index as follows. --
5726 ------------------------------------------------------------------------------------
5727 l_indx := i + 4;
5728 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, l_indx, l_varchar_data);
5729 Write_Debug('load_item_oper_attr_values: String Value =>'||l_varchar_data);
5730
5731 -- store the Display values in a plsql table --
5732 l_attr_disp_val_table(i) := l_varchar_data;
5733
5734
5735 ------------------------------------------------------------------------------------
5736 -- Prepare a table of l_user_attr_data_objects. --
5737 -- Dylan's mail below on, why we need to get all the objects into the table --
5738 -- l_user_attr_data_objects, before we start any disp-to-int value processing: -- --
5739 -- --
5740 -- Dylan's mail (Dated: 1/30/2004) --
5741 -- It occurred to me that adding Attrs one by one as we go might not prove to be --
5742 -- sufficient, because there's no guarantee we'll be processing the Attrs in --
5743 -- their correct order: for e.g. If Attr2 required Attr1 for its ValueSet query, --
5744 -- what if we ended up processing Attr2 before Attr1? In such a case, even if --
5745 -- the user passed Attr1's value, our one by one method of adding elements to our --
5746 -- data table wouldn't work. --
5747 -- So it will probably be better to --
5748 -- 1. Pull all Attrs for an AG --
5749 -- 2. Fetch their AG metadata (with call to EGO_USER_ATTRS_COMMON_PVT) --
5750 -- 3. Create Attr data elems for all passed values and add them to table --
5751 -- 4. Then process Attrs in the AG --
5752 ------------------------------------------------------------------------------------
5753 l_user_attr_data_obj := EGO_USER_ATTR_DATA_OBJ(
5754 1 --ROW_IDENTIFIER
5755 ,l_msii_col_table(i) --ATTR_INT_NAME
5756 ,null --ATTR_VALUE_STR
5757 ,null --ATTR_VALUE_NUM
5758 ,null --ATTR_VALUE_DATE
5759 ,l_attr_disp_val_table(i) --ATTR_DISP_VALUE
5760 ,null --ATTR_UNIT_OF_MEASURE
5761 ,l_transaction_id --TRANSACTION_ID
5762 );
5763
5764 l_user_attr_data_table.EXTEND();
5765 l_user_attr_data_table(l_user_attr_data_table.LAST) := l_user_attr_data_obj;
5766
5767 END LOOP; --FOR (i in 1..l_attr_id_table.COUNT) LOOP
5768
5769 --------------------------------------------------------------------------------
5770 -- Create a table of internal values for attributes that will be used to --
5771 -- uploading into the MSII. --
5772 --------------------------------------------------------------------------------
5773 FOR i in 1..l_attr_id_table.COUNT LOOP
5774
5775 ------------------------------------------------------------------------------------
5776 -- Get the Attribute Metadata Object, that will be used to check if the --
5777 -- attribute needs Display to Internal value conversion. --
5778 ------------------------------------------------------------------------------------
5779 l_attr_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Find_Metadata_For_Attr
5780 (
5781 p_attr_metadata_table => l_attr_metadata_table
5782 ,p_attr_id => l_attr_id_table(i)
5783 );
5784
5785 ------------------------------------------------------------------------------------
5786 -- Derive the internal value by passing all the objects created above. --
5787 -- Following is to check if there is a need for conversion. --
5788 ------------------------------------------------------------------------------------
5789 IF (l_attr_metadata_obj.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_TABLE_VALIDATION_CODE OR
5790 l_attr_metadata_obj.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_TRANS_IND_VALIDATION_CODE OR
5791 l_attr_metadata_obj.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_INDEPENDENT_VALIDATION_CODE) THEN
5792
5793 l_attr_int_val_table(i) :=
5794 EGO_USER_ATTRS_DATA_PVT.Get_Int_Val_For_Disp_Val
5795 (
5796 l_attr_metadata_obj --EGO_ATTR_METADATA_OBJ
5797 ,l_user_attr_data_table(i) --EGO_USER_ATTR_DATA_OBJ
5798 ,l_attr_group_metadata_obj --EGO_ATTR_GROUP_METADATA_OBJ
5799 ,l_ext_table_metadata_obj --EGO_EXT_TABLE_METADATA_OBJ
5800 ,l_pk_column_name_value_pairs --EGO_COL_NAME_VALUE_PAIR_ARRAY
5801 -- following is used in case of Revisions. --
5802 ,NULL --EGO_COL_NAME_VALUE_PAIR_ARRAY (p_data_level_name_value_pairs)
5803 ,G_ENTITY_ID --p_entity_id
5804 ,NULL --p_entity_index
5805 ,G_ENTITY_CODE --p_entity_code
5806 ,l_user_attr_data_table --EGO_USER_ATTR_DATA_TABLE
5807 );
5808
5809 IF l_attr_disp_val_table(i) IS NOT NULL AND l_attr_int_val_table(i) IS NULL THEN
5810 IF l_attr_metadata_obj.data_type_code = 'C' AND
5811 l_attr_disp_val_table(i) = EGO_ITEM_PUB.G_INTF_NULL_CHAR THEN
5812 l_attr_int_val_table(i) := EGO_ITEM_PUB.G_INTF_NULL_CHAR;
5813 ELSIF l_attr_metadata_obj.data_type_code = 'N' THEN
5814 BEGIN
5815 IF (l_attr_disp_val_table(i) = EGO_ITEM_PUB.G_INTF_NULL_CHAR OR
5816 TO_NUMBER(l_attr_disp_val_table(i)) = EGO_ITEM_PUB.G_INTF_NULL_NUM
5817 ) THEN
5818 l_attr_int_val_table(i) := EGO_ITEM_PUB.G_INTF_NULL_NUM;
5819 END IF;
5820 EXCEPTION
5821 WHEN OTHERS THEN
5822 -- the value needs to be checked against value set
5823 NULL;
5824 END;
5825 ELSIF l_attr_metadata_obj.data_type_code IN ('X','Y') THEN
5826 BEGIN
5827 IF (l_attr_disp_val_table(i) = EGO_ITEM_PUB.G_INTF_NULL_CHAR OR
5828 TO_DATE(l_attr_disp_val_table(i),G_DATE_FORMAT) = EGO_ITEM_PUB.G_INTF_NULL_DATE
5829 ) THEN
5830 l_attr_int_val_table(i) := EGO_ITEM_PUB.G_INTF_NULL_DATE;
5831 END IF;
5832 EXCEPTION
5833 WHEN OTHERS THEN
5834 -- the value needs to be checked against value set
5835 NULL;
5836 END;
5837 END IF;
5838 END IF;
5839 ELSE
5840 -- Value passed by user is Internal value --
5841 l_attr_int_val_table(i) := l_attr_disp_val_table(i);
5842 END IF; --IF (l_attr_metadata_obj.VALIDATION_CODE ...
5843 Write_Debug('load_item_oper_attr_values: Internal Value for '||l_attr_metadata_obj.attr_disp_name ||' => '||l_attr_disp_val_table(i)||' is: '||l_attr_int_val_table(i));
5844 END LOOP; --FOR (i in 1..l_attr_id_table.COUNT) LOOP
5845
5846 --------------------------------------------------------------------------------
5847 -- Update MSII with the internal values. --
5848 -- --
5849 -- Bug#13816809: --
5850 -- IF there are no flash errors THEN --
5851 -- use share cursor l_cursor_update_msii to update --
5852 -- ELSE --
5853 -- use l_dyn_sql with literals to update --
5854 -- --
5855 -- By this way we can keep the error code flow the same as before. --
5856 --------------------------------------------------------------------------------
5857
5858 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE ';
5859 l_dyn_sql := l_dyn_sql || ' SET ';
5860
5861 FOR i in 1..l_msii_col_table.COUNT LOOP
5862 -- flash errors where int val is not correct
5863 IF l_attr_disp_val_table(i) IS NOT NULL AND l_attr_int_val_table(i) IS NULL THEN
5864 l_error_indicator := TRUE;
5865 l_dyn_sql := l_dyn_sql || ' process_flag = '||G_VS_INVALID_ERR_STS;
5866 l_dyn_sql := l_dyn_sql || ' , request_id = '||G_REQUEST_ID;
5867 FND_MESSAGE.set_name('EGO', 'EGO_IPI_INVALID_VALUE');
5868 FND_MESSAGE.set_token('NAME', l_attr_disp_name_table(i));
5869 FND_MESSAGE.set_token('VALUE',NVL(l_attr_disp_val_table(i),l_attr_int_val_table(i)));
5870 l_ebi_err_msg := fnd_message.get();
5871 l_dyn_sql_ebi := ' UPDATE ego_bulkload_intf ' ||
5872 ' SET '|| G_VAL_SET_CONV_ERR_COL ||' = '''||l_ebi_err_msg||''''||
5873 ' WHERE TRANSACTION_ID = ' || l_transaction_id;
5874 EXECUTE IMMEDIATE l_dyn_sql_ebi;
5875 EXIT;
5876 ELSE
5877 IF (i <> l_msii_col_table.COUNT) THEN
5878 l_dyn_sql := l_dyn_sql || l_msii_col_table(i) ||' = ''' || l_attr_int_val_table(i) || ''' , ';
5879 ELSE
5880 l_dyn_sql := l_dyn_sql || l_msii_col_table(i) ||' = ''' || l_attr_int_val_table(i) || '''';
5881 END IF;
5882 END IF;
5883 END LOOP; --FOR i in 1..l_msii_col_table.COUNT LOOP
5884
5885 IF l_error_indicator = FALSE THEN
5886 -- bind variable and use share cursor l_cursor_update_msii
5887 FOR i in 1..l_msii_col_table.COUNT LOOP
5888 DBMS_SQL.BIND_VARIABLE(l_cursor_update_msii, ':' || l_msii_col_table(i), l_attr_int_val_table(i));
5889 END LOOP; --FOR i in 1..l_msii_col_table.COUNT LOOP
5890 DBMS_SQL.BIND_VARIABLE(l_cursor_update_msii, ':TRANSACTION_ID', l_transaction_id);
5891 l_execute := DBMS_SQL.EXECUTE(l_cursor_update_msii);
5892 ELSE
5893 -- use l_dyn_sql with literals to update
5894 l_dyn_sql := l_dyn_sql || ' WHERE TRANSACTION_ID = ' || l_transaction_id;
5895 Write_Debug('load_item_oper_attr_values: Internal value errors while update msii ' || l_dyn_sql);
5896 EXECUTE IMMEDIATE l_dyn_sql;
5897 END IF;
5898
5899 ELSE --IF DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr)>0 THEN
5900 -------------------------------------------------------------------
5901 -- Exit loop as there are no more rows available for processing. --
5902 -------------------------------------------------------------------
5903 Write_Debug('load_item_oper_attr_values: No more rows found !');
5904 EXIT;
5905 END IF; --IF DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr)>0 THEN
5906
5907 END LOOP; --END: Loop for l_cursor_oper_attr
5908
5909 -- Bug#13816809 close share cursor
5910 DBMS_SQL.CLOSE_CURSOR(l_cursor_update_msii);
5911
5912 -- Bug : 4099546
5913 DBMS_SQL.CLOSE_CURSOR(l_cursor_oper_attr);
5914 END IF; --IF (attr_grp_id_rec.OPER_ATTR_GRP_ID IS NOT NULL) THEN
5915
5916 -------------------------------------------------------------------
5917 -- Before proceeding to process the next Attribute Group rows, --
5918 -- delete the attrs table. --
5919 -------------------------------------------------------------------
5920 l_user_attr_data_table.DELETE;
5921
5922 END LOOP; -- FOR attr_grp_id_rec IN c_item_oper_attr_grp_ids
5923
5924 END IF; --IF (l_item_oper_attr_grp_count > 0) THEN
5925
5926 -----------------------------------------------------------------------
5927 --Insert the Value Set error messages.
5928 -----------------------------------------------------------------------
5929 l_dyn_sql := '';
5930 l_dyn_sql := l_dyn_sql || 'INSERT INTO MTL_INTERFACE_ERRORS ';
5931 l_dyn_sql := l_dyn_sql || '( ';
5932 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID ';
5933 l_dyn_sql := l_dyn_sql || ', UNIQUE_ID ';
5934 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_DATE ';
5935 l_dyn_sql := l_dyn_sql || ', LAST_UPDATED_BY ';
5936 l_dyn_sql := l_dyn_sql || ', CREATION_DATE ';
5937 l_dyn_sql := l_dyn_sql || ', CREATED_BY ';
5938 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_LOGIN ';
5939 l_dyn_sql := l_dyn_sql || ', TABLE_NAME ';
5940 l_dyn_sql := l_dyn_sql || ', MESSAGE_NAME ';
5941 l_dyn_sql := l_dyn_sql || ', COLUMN_NAME ';
5942 l_dyn_sql := l_dyn_sql || ', REQUEST_ID ';
5943 l_dyn_sql := l_dyn_sql || ', PROGRAM_APPLICATION_ID ';
5944 l_dyn_sql := l_dyn_sql || ', PROGRAM_ID ';
5945 l_dyn_sql := l_dyn_sql || ', PROGRAM_UPDATE_DATE ';
5946 l_dyn_sql := l_dyn_sql || ', ERROR_MESSAGE ';
5947 l_dyn_sql := l_dyn_sql || ', TRANSACTION_ID ';
5948 l_dyn_sql := l_dyn_sql || ', ENTITY_IDENTIFIER ';
5949 l_dyn_sql := l_dyn_sql || ', BO_IDENTIFIER ';
5950 l_dyn_sql := l_dyn_sql || ') ';
5951 l_dyn_sql := l_dyn_sql || 'SELECT ';
5952 l_dyn_sql := l_dyn_sql || ' -1 ';
5953 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
5954 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
5955 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID ;
5956 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
5957 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID;
5958 l_dyn_sql := l_dyn_sql || ', '||G_LOGIN_ID;
5959 l_dyn_sql := l_dyn_sql || ', ''MTL_SYSTEM_ITEMS_INTERFACE'' ';
5960 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
5961 l_dyn_sql := l_dyn_sql || G_VS_INVALID_ERR_STS||', ''EGO_IPI_INVALID_VALUE''';
5962 l_dyn_sql := l_dyn_sql || ' ) ';
5963 l_dyn_sql := l_dyn_sql || ', NULL ';
5964 l_dyn_sql := l_dyn_sql || ', '||G_REQUEST_ID ;
5965 l_dyn_sql := l_dyn_sql || ', '||G_PROG_APPID ;
5966 l_dyn_sql := l_dyn_sql || ', '||G_PROG_ID ;
5967 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
5968 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
5969 l_dyn_sql := l_dyn_sql || G_VS_INVALID_ERR_STS||', EBI.'||G_VAL_SET_CONV_ERR_COL;
5970 l_dyn_sql := l_dyn_sql || ' ) ';
5971 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
5972 l_dyn_sql := l_dyn_sql || ', NULL ';
5973 l_dyn_sql := l_dyn_sql || ', NULL ';
5974 l_dyn_sql := l_dyn_sql || 'FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_BULKLOAD_INTF EBI ';
5975 l_dyn_sql := l_dyn_sql || 'WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID ';
5976 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG IN ';
5977 l_dyn_sql := l_dyn_sql || ' ( ';
5978 l_dyn_sql := l_dyn_sql || G_VS_INVALID_ERR_STS; --take care of invalid value set
5979 l_dyn_sql := l_dyn_sql || ' ) ';
5980 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
5981 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
5982
5983 Write_Debug(l_dyn_sql);
5984 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
5985
5986 Write_Debug(' All Value Set value errors populated.');
5987 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5988 SET PROCESS_FLAG = G_INTF_STATUS_ERROR
5989 WHERE PROCESS_FLAG IN
5990 (
5991 G_VS_INVALID_ERR_STS
5992 )
5993 AND TRANSACTION_ID IN
5994 (
5995 SELECT TRANSACTION_ID
5996 FROM EGO_BULKLOAD_INTF
5997 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
5998 );
5999
6000 EXCEPTION
6001 WHEN OTHERS THEN
6002 l_retcode := G_STATUS_ERROR;
6003 l_errbuff := SUBSTRB(SQLERRM, 1,240);
6004 Write_Debug('Load_item_oper_attr_values : EXCEPTION HAPPENED => '||l_errbuff);
6005 RAISE;
6006
6007 END load_item_oper_attr_values;
6008
6009 --===================================================================================
6010 --END: 11.5.10 New Functionality: Item Operational Attributes Bulkload (bug# 3293098)
6011 --===================================================================================
6012
6013
6014 --------------------------------------------------------------------
6015 -- Fix for Bug# 3864813
6016 -- Process Net Weight (i.e. Unit Weights) for the Items based on the
6017 -- Trade Item Descriptor value.
6018 --
6019 -- NOTE: Net Weight can only have a value if Trade Item Descriptor
6020 -- is "Base Unit Or Each", else it will be NULL (i.e. it will be
6021 -- derived value).
6022 --------------------------------------------------------------------
6023 PROCEDURE process_netweights
6024 (
6025 p_resultfmt_usage_id IN NUMBER,
6026 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE ,
6027 x_errbuff OUT NOCOPY VARCHAR2,
6028 x_retcode OUT NOCOPY VARCHAR2
6029 ) IS
6030
6031 -- Start OF comments
6032 -- API name : Process Net Weight values for the Items
6033 -- TYPE : Public (called by oracle.apps.ego.item.cp.EgoItemConcurrentProgram)
6034 -- Pre-reqs : None
6035 -- FUNCTION : Process and update the Net Weight (i.e. Unit Weight).
6036 -- values for the Item.
6037 --
6038
6039 ------------------------------------------------------
6040 -- Local Variables
6041 ------------------------------------------------------
6042
6043 CURSOR c_err_logfile (c_resultfmt_usage_id IN NUMBER) IS
6044 SELECT C_INTF_ATTR239
6045 FROM EGO_BULKLOAD_INTF
6046 WHERE RESULTFMT_USAGE_ID = c_resultfmt_usage_id
6047 AND C_INTF_ATTR239 IS NOT NULL;
6048
6049 -- Long Dynamic SQL String
6050 l_dyn_sql VARCHAR2(10000);
6051 l_err_logfile_fullpath VARCHAR2(1000);
6052 l_is_debug BOOLEAN := FALSE;
6053
6054 l_log_dir VARCHAR2(1000);
6055 l_log_file VARCHAR2(1000);
6056
6057 --API return parameters
6058 l_retcode VARCHAR2(10);
6059 l_errbuff VARCHAR2(2000);
6060
6061 BEGIN
6062
6063 OPEN c_err_logfile(p_resultfmt_usage_id);
6064 FETCH c_err_logfile INTO l_err_logfile_fullpath;
6065 IF c_err_logfile%FOUND THEN
6066 l_is_debug := TRUE;
6067 END IF;
6068 -- Bug : 4099546
6069 CLOSE c_err_logfile;
6070 ------------------------------------------------------------
6071 -- If the Debug is TRUE, then log these statements in the
6072 -- Debug file, that has been opened before.
6073 ------------------------------------------------------------
6074 IF (l_is_debug) THEN
6075
6076 l_log_dir := SUBSTR(l_err_logfile_fullpath, 0, INSTR(l_err_logfile_fullpath, 'EGO_BULKLOAD_INTF') - 1);
6077 l_log_file := SUBSTR(l_err_logfile_fullpath, INSTR(l_err_logfile_fullpath, 'EGO_BULKLOAD_INTF'));
6078
6079 -----------------------------------------------------------------------
6080 -- To open the Debug Session to write the Debug Log. --
6081 -- This sets Debug value so that Error_Handler.Get_Debug returns 'Y' --
6082 -----------------------------------------------------------------------
6083 Error_Handler.Open_Debug_Session(
6084 p_debug_filename => l_log_file
6085 ,p_output_dir => l_log_dir
6086 ,x_return_status => l_retcode
6087 ,x_error_mesg => l_errbuff
6088 );
6089
6090 END IF;
6091
6092 Write_Debug('-----------------------------------------------------------------');
6093 Write_Debug('POST-PROCESSING After IOI + User-Def + UCCnet Attts processing');
6094 Write_Debug('-----------------------------------------------------------------');
6095
6096 l_dyn_sql :=
6097 ' UPDATE MTL_SYSTEM_ITEMS_B MSIB ' ||
6098 ' SET (MSIB.UNIT_WEIGHT, MSIB.WEIGHT_UOM_CODE) = ' ||
6099 ' ( ' ||
6100 ' DECODE(MSIB.TRADE_ITEM_DESCRIPTOR, ''BASE_UNIT_OR_EACH'', MSIB.UNIT_WEIGHT, NULL), ' ||
6101 ' DECODE(MSIB.TRADE_ITEM_DESCRIPTOR, ''BASE_UNIT_OR_EACH'', MSIB.WEIGHT_UOM_CODE, NULL) ' ||
6102 ' ) ' ||
6103 ' WHERE EXISTS ' ||
6104 ' ( ' ||
6105 ' SELECT ''X'' ' ||
6106 ' FROM EGO_BULKLOAD_INTF EBI ' ||
6107 ' WHERE FND_NUMBER.CANONICAL_TO_NUMBER(EBI.INSTANCE_PK1_VALUE) = MSIB.INVENTORY_ITEM_ID ' ||
6108 ' AND FND_NUMBER.CANONICAL_TO_NUMBER(EBI.INSTANCE_PK2_VALUE) = MSIB.ORGANIZATION_ID ' ||
6109 ' AND EBI.PROCESS_STATUS = 7 ' || -- Successful Rows Only
6110 ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_2 ' ||
6111 ' ) ';
6112
6113 Write_Debug(l_dyn_sql);
6114 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
6115 Write_Debug('MSIB: Updated the Net Weights.');
6116
6117 -------------------------------------------------------------
6118 -- Commit at the end.
6119 -------------------------------------------------------------
6120 IF (p_commit = FND_API.G_TRUE) THEN
6121 COMMIT;
6122 END IF;
6123
6124 ------------------------------------------------------------
6125 -- Close the Debug session.
6126 ------------------------------------------------------------
6127 IF (l_is_debug) THEN
6128 Close_Debug_Session;
6129 END IF;
6130
6131 x_retcode := G_STATUS_SUCCESS;
6132
6133 EXCEPTION
6134 WHEN OTHERS THEN
6135 x_retcode := G_STATUS_ERROR;
6136 x_errbuff := SUBSTRB(SQLERRM, 1,240);
6137 Write_Debug('process_netweights : EXCEPTION HAPPENED => '||x_errbuff);
6138 -- RAISE; --Donot raise, just return back the values.
6139 ------------------------------------------------------------
6140 -- Close the Debug session.
6141 ------------------------------------------------------------
6142 IF (l_is_debug) THEN
6143 Close_Debug_Session;
6144 END IF;
6145
6146 END process_netweights;
6147
6148
6149 ----------------------------------------------------------
6150 -- Process Item and Item Revision Interface Lines
6151 --
6152 -- Main API called by the Concurrent Program.
6153 ----------------------------------------------------------
6154 PROCEDURE process_item_interface_lines
6155 (
6156 p_resultfmt_usage_id IN NUMBER,
6157 p_user_id IN NUMBER,
6158 p_conc_request_id IN NUMBER,
6159 p_language_code IN VARCHAR2,
6160 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
6161 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE ,
6162 x_errbuff OUT NOCOPY VARCHAR2,
6163 x_retcode OUT NOCOPY VARCHAR2,
6164 p_start_upload IN VARCHAR2 DEFAULT FND_API.G_TRUE ,
6165 p_data_set_id IN NUMBER DEFAULT NULL
6166 ) IS
6167
6168 -- Start OF comments
6169 -- API name : Process Item Interface Lines
6170 -- TYPE : Public (called by Concurrent Program Wrapper API)
6171 -- Pre-reqs : None
6172 -- FUNCTION : Process and Load Item interfance lines.
6173 -- Loads Item Attr Values + Item User-Defined Attr Values
6174 -- Errors are populated in MTL_INTERFACE_ERRORS
6175 --
6176
6177 CURSOR c_resultfmt_info (c_resultfmt_usage_id IN NUMBER) IS
6178 SELECT Nvl(fmt.data_level, G_ITEM_DATA_LEVEL)
6179 ---------------------------------------------------------------------------------
6180 --Fix for Bug# 3681711. (JCGEORGE)
6181 -- CLASSIFICATION_CODE in EGO_RESULTS_FMT_USAGES, now stores the **current**
6182 -- Item Catalog Group ID for the selected Import Format.
6183 ---------------------------------------------------------------------------------
6184 --, Decode(fmt.classification1, -1, NULL, fmt.classification1)
6185 , Decode(fmt_usg.classification_code, -1, NULL, fmt_usg.classification_code)
6186 FROM ego_results_fmt_usages fmt_usg, ego_results_format_v fmt
6187 WHERE fmt_usg.resultfmt_usage_id = c_resultfmt_usage_id
6188 AND fmt.customization_application_id = fmt_usg.customization_application_id
6189 AND fmt.customization_code = fmt_usg.customization_code
6190 AND fmt.region_application_id = fmt_usg.region_application_id
6191 AND fmt.region_code = fmt_usg.region_code;
6192
6193 CURSOR c_revision_code_exists (c_resultfmt_usage_id IN NUMBER) IS
6194 SELECT 'x'
6195 FROM ego_results_fmt_usages
6196 WHERE resultfmt_usage_id = c_resultfmt_usage_id
6197 AND attribute_code = G_REV_CODE_ATTR_CODE;
6198
6199 CURSOR c_mtl_intf_err_row_exists IS
6200 SELECT 'x'
6201 FROM mtl_interface_errors
6202 WHERE request_id = FND_GLOBAL.conc_request_id;
6203
6204
6205 --Long Dynamic SQL String
6206 l_dyn_sql VARCHAR2(10000);
6207 l_msii_set_process_id NUMBER;
6208 l_usrattr_data_set_id NUMBER;
6209
6210 l_item_ioi_commit NUMBER;
6211
6212 l_return_code VARCHAR2(10);
6213 l_err_text VARCHAR2(2000);
6214 l_temp_txt VARCHAR2(2000);
6215 l_data_level VARCHAR2(50);
6216 l_catalog_group_id VARCHAR2(50);
6217 l_rev_base_attrs_count NUMBER;
6218 l_revision_code_exists VARCHAR2(5);
6219 ----------------------------------------------------------------
6220 -- Introduced in 11.5.10, to set appropriate Debug Level to
6221 -- call the User-Defined Attrs API.
6222 ----------------------------------------------------------------
6223 l_debug_level NUMBER;
6224
6225 --API return parameters
6226 l_retcode VARCHAR2(10);
6227 l_errbuff VARCHAR2(2000);
6228
6229 --Concurrent Request Status Boolean flag
6230 l_conc_status BOOLEAN;
6231
6232 BEGIN
6233
6234 IF (NVL(fnd_profile.value('CONC_REQUEST_ID'), 0) <> 0) THEN
6235 g_concReq_valid_flag := TRUE;
6236 END IF;
6237
6238 -----------------------------------------------------------------------
6239 --IF (g_concReq_valid_flag ) THEN
6240 -- FND_FILE.put_line(FND_FILE.LOG, ' ******** New Log ******** ');
6241 --END IF;
6242 -----------------------------------------------------------------------
6243
6244 -----------------------------------------------------
6245 -- Open Error Handler Debug Session.
6246 -----------------------------------------------------
6247 Open_Debug_Session;
6248
6249 Developer_Debug('Completely Reformatted EGO_ITEM_BULKLOAD_PKG with Error Handler Changes');
6250
6251 Developer_Debug('After Open_Debug_Session');
6252 SetGobals();
6253 G_LANGUAGE_CODE := p_language_code;
6254
6255 -----------------------------------------------------------------------
6256 -- Providing the Errors Link in the Concurrent Log file.
6257 -----------------------------------------------------------------------
6258 FND_MESSAGE.SET_NAME('EGO','EGO_ITEM_BULK_ERRS_LINKTXT1');
6259 FND_FILE.put_line(FND_FILE.LOG, FND_MESSAGE.GET);
6260
6261 FND_MESSAGE.SET_NAME('EGO','EGO_ITEMBULK_HOSTANDPORT');
6262 l_temp_txt := rtrim(FND_PROFILE.VALUE('APPS_FRAMEWORK_AGENT'), '/');--FND_MESSAGE.GET;
6263
6264 FND_MESSAGE.SET_NAME('EGO','EGO_ITEM_BULK_ERRS_LINK');
6265 FND_MESSAGE.SET_TOKEN('HOST_AND_PORT', l_temp_txt);
6266 FND_MESSAGE.SET_TOKEN('CONC_REQ_ID', G_REQUEST_ID);
6267 FND_FILE.put_line(FND_FILE.LOG, FND_MESSAGE.GET);
6268
6269 Developer_Debug('G_USER_ID : '||To_char(G_USER_ID));
6270 Developer_Debug('G_PROG_ID : '||To_char(G_PROG_ID));
6271 Developer_Debug('G_REQUEST_ID : '||To_char(G_REQUEST_ID));
6272 Developer_Debug('P_RESULT_FMT_USAGE_ID : '||To_char(p_resultfmt_usage_id));
6273
6274 -----------------------------------------------------------------------
6275 -- This is the Result Format Usage ID for the Current Upload. --
6276 -----------------------------------------------------------------------
6277 G_RESULTFMT_USAGE_ID := p_resultfmt_usage_id;
6278
6279 -----------------------------------------------------------------------
6280 -- Delete all the earlier loads from the same spreadsheet.
6281 -- And also setup the Error Log file in the EBI, to be picked up by
6282 -- Java portion of the Conc Program later.
6283 -----------------------------------------------------------------------
6284 setup_buffer_intf_table(p_resultfmt_usage_id);
6285
6286 -----------------------------------------------------------------------
6287 -- If the process id is passed, we will be using this throughout the program
6288 -- So setting this to the global variable here itself.
6289 -----------------------------------------------------------------------
6290 IF (p_data_set_id IS NOT NULL) THEN
6291 G_MSII_SET_PROCESS_ID := p_data_set_id;
6292 END IF;
6293
6294 -----------------------------------------------------------------------
6295 -- If the process id is passed, we need to store the information is a
6296 -- PDH batch or not
6297 -----------------------------------------------------------------------
6298
6299 IF (p_data_set_id IS NOT NULL) THEN
6300 setup_batch_info();
6301 END IF;
6302
6303 -------------------------------------------------------------------------------
6304 -- --
6305 --If the caller is G_ITEM, then the import format can have 2 levels : --
6306 -- 1. Item 2. Item Revision. --
6307 -- Hence need to call appropriate populate interface table procedure. --
6308 -- --
6309 -------------------------------------------------------------------------------
6310 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM) THEN
6311
6312 OPEN c_resultfmt_info(p_resultfmt_usage_id);
6313 FETCH c_resultfmt_info INTO l_data_level, l_catalog_group_id;
6314 Developer_Debug('Result Format Data Level =>'||l_data_level);
6315
6316 -------------------------------------------------------------------
6317 --This Global Catalog Group variable is useful during imports. --
6318 -------------------------------------------------------------------
6319 IF (l_catalog_group_id IS NOT NULL) THEN
6320 G_CATALOG_GROUP_ID := l_catalog_group_id;
6321 Developer_Debug('G_CATALOG_GROUP_ID : '||G_CATALOG_GROUP_ID);
6322 END IF;
6323 IF c_resultfmt_info%FOUND THEN
6324 --IF (l_data_level = G_ITEM_DATA_LEVEL) THEN
6325 --------------------------------------------------------------------
6326 -- Since the Data Level is ITEM, need to setup the Item Interface --
6327 -- table. --
6328 --------------------------------------------------------------------
6329 Developer_Debug(' Calling Internal Setup_Item_interface ');
6330 Setup_Item_interface(
6331 p_resultfmt_usage_id => p_resultfmt_usage_id
6332 ,p_set_process_id => p_data_set_id
6333 ,x_set_process_id => l_msii_set_process_id
6334 ,p_caller_identifier => p_caller_identifier
6335 ,x_errbuff => l_errbuff
6336 ,x_retcode => l_retcode
6337 );
6338 Developer_Debug(' Returning Internal Setup_Item_interface '|| l_retcode);
6339
6340 FND_FILE.put_line(FND_FILE.LOG, '*Importing Items*. SET_PROCESS_ID : '||l_msii_set_process_id);
6341
6342 -------------------------------------------------------------------
6343 -- New procedure introduced in 11.5.10 to load the operational --
6344 -- attributes using User-Def attrs framework. (PPEDDAMA) --
6345 -------------------------------------------------------------------
6346 load_item_oper_attr_values(p_resultfmt_usage_id);
6347
6348 Developer_Debug('process_item_interface_lines: Done loading the Item operational attributes');
6349
6350 delete_records_from_MSII(p_data_set_id);
6351
6352 Write_Debug('Deleting unwanted records from MSII');
6353
6354 -------------------------------------------------------------------
6355 -- Fix for Bug# 3403455. (PPEDDAMA) --
6356 -- Setup Item Rev Interface only if Revision Base attrs exist. --
6357 -------------------------------------------------------------------
6358
6359 SELECT count(*)
6360 INTO l_rev_base_attrs_count
6361 FROM ego_results_fmt_usages
6362 WHERE resultfmt_usage_id = p_resultfmt_usage_id
6363 AND attribute_code NOT LIKE '%$$%'
6364 ---------------------------------------------------------------------------
6365 -- Added NOT LIKE 'GTIN_%' to filter out Dummy Attrs for Attr Group: "GTIN"
6366 ---------------------------------------------------------------------------
6367 AND attribute_code NOT LIKE 'GTIN_%'
6368 AND attribute_code IN --Segregating Item Revision Base Attrs using this clause
6369 (
6370 select LOOKUP_CODE CODE
6371 from FND_LOOKUP_VALUES
6372 where LOOKUP_TYPE = 'EGO_ITEM_REV_HDR_ATTR_GRP'
6373 AND LANGUAGE = USERENV('LANG')
6374 AND ENABLED_FLAG = 'Y'
6375 );
6376
6377 Developer_Debug('process_item_interface_lines.l_rev_base_attrs_count : '||l_rev_base_attrs_count);
6378 --------------------------------------------------------------------
6379 -- Changed from >0 to >1 because, only if other attributes apart --
6380 -- from REVISION exist, then setup Item Revision interface. --
6381 --------------------------------------------------------------------
6382
6383 IF (l_rev_base_attrs_count > 1) THEN
6384
6385 OPEN c_revision_code_exists(p_resultfmt_usage_id);
6386 FETCH c_revision_code_exists INTO l_revision_code_exists;
6387 IF c_revision_code_exists%FOUND THEN
6388 Developer_Debug('process_item_interface_lines.l_revision_code_exists : '||l_revision_code_exists ||'. Calling Setup_ItemRev_interface');
6389
6390 --------------------------------------------------------------------
6391 -- Now that Revisions show up as a part of Item Search Results, --
6392 -- calling Setup Revisions Interface as a part of Item Bulkload --
6393 --------------------------------------------------------------------
6394 Setup_ItemRev_interface(
6395 p_resultfmt_usage_id => p_resultfmt_usage_id
6396 ,p_caller_identifier => p_caller_identifier
6397 ,p_data_level => G_ITEM_DATA_LEVEL
6398 ,p_set_process_id => p_data_set_id
6399 ,x_set_process_id => l_msii_set_process_id
6400 ,x_errbuff => l_errbuff
6401 ,x_retcode => l_retcode
6402 );
6403
6404 END IF; --IF c_revision_code_exists%FOUND THEN
6405 -- Bug : 4099546
6406 CLOSE c_revision_code_exists;
6407 END IF; --IF (l_rev_base_attrs_count > 0) THEN
6408 -------------------------------------------------------------------
6409 -- End: Fix for Bug# 3403455. (PPEDDAMA) --
6410 -- Setup Item Rev Interface only if Revision Base attrs exist. --
6411 -------------------------------------------------------------------
6412 EGO_ITEM_BULKLOAD_PKG.load_intersections_interface
6413 (
6414 p_resultfmt_usage_id =>p_resultfmt_usage_id,
6415 p_set_process_id =>p_data_set_id,
6416 x_set_process_id =>l_msii_set_process_id,
6417 x_errbuff =>x_errbuff,
6418 x_retcode =>x_retcode
6419 );
6420 write_debug('Done with EGO_ITEM_BULKLOAD_PKG.load_intersections_interface ---x_retcode-'||x_retcode);
6421 --ELSE --G_ITEM_REV_DATA_LEVEL
6422 /*
6423 ---------------------------------------------------------------------------------
6424 -- Now that Revisions show up as a part of Item Search Results,
6425 -- adding new parameter p_data_level, to distinguish that this Setup Revisions
6426 -- Interface is called from 'Import Revisions' (through Revision Import Format)
6427 ---------------------------------------------------------------------------------
6428 Setup_ItemRev_interface(
6429 p_resultfmt_usage_id => p_resultfmt_usage_id
6430 ,p_caller_identifier => p_caller_identifier
6431 ,p_data_level => G_ITEM_REV_DATA_LEVEL
6432 ,p_set_process_id => p_data_set_id
6433 ,x_set_process_id => l_msii_set_process_id
6434 ,x_errbuff => l_errbuff
6435 ,x_retcode => l_retcode
6436 );
6437 FND_FILE.put_line(FND_FILE.LOG, '*Importing Item Revisions*. SET_PROCESS_ID : '||l_msii_set_process_id);
6438
6439 END IF; --end: IF (l_data_level = G_ITEM_DATA_LEVEL) THEN
6440 */
6441 END IF; --end: IF c_resultfmt_info%FOUND THEN
6442
6443 CLOSE c_resultfmt_info;
6444
6445 ELSIF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM) THEN
6446
6447 --------------------------------------------------------------
6448 -- BOM called the Bulkload code, hence setup Item and Item
6449 -- Revision Interface tables appropriately.
6450 --------------------------------------------------------------
6451
6452 Developer_Debug('CALLER IDENTIFIER : '|| p_caller_identifier);
6453
6454 Setup_item_interface(
6455 p_resultfmt_usage_id => p_resultfmt_usage_id
6456 ,p_set_process_id => p_data_set_id
6457 ,x_set_process_id => l_msii_set_process_id
6458 ,p_caller_identifier => p_caller_identifier
6459 ,x_errbuff => l_errbuff
6460 ,x_retcode => l_retcode
6461 );
6462
6463 -------------------------------------------------------------------
6464 -- New procedure introduced in 11.5.10 to load the operational --
6465 -- attributes using User-Def attrs framework. (HGELLI) --
6466 -------------------------------------------------------------------
6467 load_item_oper_attr_values(p_resultfmt_usage_id);
6468
6469 Developer_Debug('process_item_interface_lines: Done loading the Item operational attributes');
6470
6471 --------------------------------------------------------------
6472 -- Check to see if Revision Code exists, before calling to
6473 -- to set up the Revisions Interface table.
6474 --------------------------------------------------------------
6475 OPEN c_revision_code_exists(p_resultfmt_usage_id);
6476 FETCH c_revision_code_exists INTO l_revision_code_exists;
6477 IF c_revision_code_exists%FOUND THEN
6478 Developer_Debug('process_item_interface_lines.l_revision_code_exists : '||l_revision_code_exists ||'. Calling Setup_ItemRev_interface');
6479
6480 --Now that Revisions show up as a part of Item Search Results,
6481 --calling Setup Revisions Interface as a part of Item Bulkload
6482 Setup_ItemRev_interface(
6483 p_resultfmt_usage_id => p_resultfmt_usage_id
6484 ,p_caller_identifier => p_caller_identifier
6485 ,p_data_level => G_ITEM_DATA_LEVEL
6486 ,p_set_process_id => p_data_set_id
6487 ,x_set_process_id => l_msii_set_process_id
6488 ,x_errbuff => l_errbuff
6489 ,x_retcode => l_retcode
6490 );
6491
6492 END IF; --IF c_revision_code_exists%FOUND THEN
6493 -- Bug : 4099546
6494 CLOSE c_revision_code_exists;
6495 FND_FILE.put_line(FND_FILE.LOG, '*Importing Items*. SET_PROCESS_ID : '||l_msii_set_process_id);
6496
6497 ELSE
6498 --------------------------------------------------------------
6499 -- This ELSE condition should never be reached.
6500 --------------------------------------------------------------
6501 Developer_Debug('INVALID CALLER IDENTIFIER : '|| p_caller_identifier);
6502
6503 END IF;--IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM)
6504
6505 --R12
6506 ----------------------------------------------------------------
6507 -- Call for User Attributes Bulk Processing, to load the
6508 -- Interface table: EGO_ITM_USR_ATTR_INTRFC
6509 ----------------------------------------------------------------
6510 Developer_Debug('Before calling load_itm_or_rev_usrattr_intf ');
6511 load_itm_or_rev_usrattr_intf
6512 (
6513 p_resultfmt_usage_id => p_resultfmt_usage_id
6514 ,p_data_set_id => l_msii_set_process_id
6515 ,x_errbuff => l_errbuff
6516 ,x_retcode => l_retcode
6517 );
6518
6519 Developer_Debug('UsrAttr_Populate_Process: done. l_retcode = ' || l_retcode);
6520 Developer_Debug('UsrAttr_Populate_Process: l_errbuff = ' || l_errbuff);
6521
6522 /* Bug 7578350. Moved this DELETE statement from load_item_revs_interface() function,
6523 by addubg NOT EXITS condition in WHERE caluse, so that we delete the rows from MTL_ITEM_REVISIONS_INTERFACE
6524 only if there are no Revision Level Attributes provided. */
6525
6526 DELETE MTL_ITEM_REVISIONS_INTERFACE MIRI
6527 WHERE revision IS NULL
6528 AND revision_id IS NULL
6529 AND implementation_date IS NULL
6530 AND effectivity_date IS NULL
6531 AND description IS NULL
6532 AND revision_label IS NULL
6533 AND revision_reason IS NULL
6534 AND current_phase_id IS NULL
6535 AND EXISTS (SELECT 'X'
6536 FROM EGO_BULKLOAD_INTF EBI
6537 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
6538 AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID
6539 AND EBI.PROCESS_STATUS = 1
6540 )
6541 AND NOT EXISTS (SELECT 'X'
6542 FROM EGO_ITM_USR_ATTR_INTRFC EIUAT
6543 WHERE EIUAT.TRANSACTION_ID = MIRI.TRANSACTION_ID
6544 AND EIUAT.PROCESS_STATUS = 1
6545 AND EIUAT.DATA_LEVEL_ID=43106);
6546
6547 -------------------------------------------------------------
6548 -- Log Errors only to MTL_INTERFACE_ERRORS table.
6549 -------------------------------------------------------------
6550 Error_Handler.Log_Error(
6551 p_write_err_to_inttable => 'Y',
6552 p_write_err_to_debugfile => 'Y'
6553 );
6554 ------------------------------------------------------------------------
6555 -- In case the Error Reporting Page has problems, following
6556 -- SQL helps debugging.
6557 -- NOTE: This is only for *Printing* purposes, hence adding NEWLINE
6558 -- character at the end.
6559 ------------------------------------------------------------------------
6560 l_dyn_sql := 'SELECT MIERR.REQUEST_ID REQUEST_ID, '||G_NEWLINE;
6561 l_dyn_sql := l_dyn_sql || 'EBI.C_INTF_ATTR240 ITEM_NUMBER, '||G_NEWLINE;
6562 l_dyn_sql := l_dyn_sql || 'EBI.C_INTF_ATTR241 ORGANIZATION_CODE, '||G_NEWLINE;
6563 l_dyn_sql := l_dyn_sql || 'EBI.C_INTF_ATTR242 REVISION_CODE, '||G_NEWLINE;
6564 l_dyn_sql := l_dyn_sql || 'MIERR.ERROR_MESSAGE '||G_NEWLINE;
6565 l_dyn_sql := l_dyn_sql || 'FROM MTL_INTERFACE_ERRORS MIERR, '||G_NEWLINE;
6566 l_dyn_sql := l_dyn_sql || 'EGO_BULKLOAD_INTF EBI '||G_NEWLINE;
6567 l_dyn_sql := l_dyn_sql || 'WHERE MIERR.TRANSACTION_ID = EBI.TRANSACTION_ID '||G_NEWLINE;
6568 l_dyn_sql := l_dyn_sql || 'AND MIERR.request_id = '||G_REQUEST_ID||G_NEWLINE;
6569 Developer_Debug('In Case Error Reporting page has problems, Execute the following SQL to fetch the Concurrent Program CUMULATIVE Errors: ');
6570 Developer_Debug(l_dyn_sql);
6571
6572 -------------------------------------------------------------
6573 -- Commit at the end.
6574 -------------------------------------------------------------
6575 IF (p_commit = FND_API.G_TRUE) THEN
6576 COMMIT;
6577 Developer_Debug('COMMITing at the end.');
6578 END IF;
6579
6580 ------------------------------------------------------------
6581 -- Check to See if Errors exist in MTL_INTERFACE_ERRORS.
6582 -- If Exists, then set the Status as Completed w/ Warnings.
6583 ------------------------------------------------------------
6584 OPEN c_mtl_intf_err_row_exists;
6585 FETCH c_mtl_intf_err_row_exists INTO l_temp_txt;
6586 IF c_mtl_intf_err_row_exists%FOUND THEN
6587 Developer_Debug('Errors exist in MTL_INTERFACE_ERRORS.');
6588 l_conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('WARNING', --Status
6589 'Completed with Warnings' --Message
6590 );
6591 x_retcode := Error_Handler.G_STATUS_WARNING;
6592 ELSE
6593 Developer_Debug('*NO* Errors exist in MTL_INTERFACE_ERRORS.');
6594 x_retcode := G_STATUS_SUCCESS;
6595 END IF;
6596 CLOSE c_mtl_intf_err_row_exists;
6597
6598 -----------------------------------------------------------
6599 -- Add log messages for all successfully created items
6600 -----------------------------------------------------------
6601 -- 5653266 commenting out the call to Log_Created_items
6602 -- IF (G_REQUEST_ID <> -1 ) THEN
6603 -- Log_created_Items(G_REQUEST_ID);
6604 -- END IF;
6605
6606 -----------------------------------------------------
6607 -- Close Error Handler Debug Session.
6608 -----------------------------------------------------
6609
6610 Close_Debug_Session;
6611
6612 -----------------------------------------------------------------
6613 -- Main EXCEPTION Block, that handles all underlying Procedures'
6614 -- Exceptions. This also sets the PROCESS_STATUS value of the
6615 -- EBI Rows, to indicate Error.
6616 -----------------------------------------------------------------
6617 EXCEPTION
6618
6619 WHEN OTHERS THEN
6620 Developer_Debug('Exception encountered processing one of the procedures in Process_Item_Interface_lines.');
6621 Developer_Debug('error code : '|| to_char(SQLCODE));
6622 Developer_Debug('error text : '|| SQLERRM);
6623 x_errbuff := 'Error : '||to_char(SQLCODE)||'---'||SQLERRM;
6624 x_retcode := Error_Handler.G_STATUS_ERROR;
6625 Developer_Debug('Returning x_retcode : '|| x_retcode);
6626 l_conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', --Status
6627 to_char(SQLCODE) --Message
6628 );
6629 Developer_Debug('Setting all the *Unprocessed* rows (PROCESS_STATUS = 1) in EGO_BULKLOAD_INTF to PROCESS_STATUS = 3.');
6630
6631 -----------------------------------------------------------------------------------------------
6632 -- Update all the lines in EGO_BULKLOAD_INTF as ERROR.
6633 -- This will ensure that the next submission of the Same excel doesnt throw
6634 -- IOI error:
6635 -- Item <Item#> already exists in the organization V1. Please use a different item name/number.
6636 -----------------------------------------------------------------------------------------------
6637 UPDATE EGO_BULKLOAD_INTF EBI
6638 SET EBI.PROCESS_STATUS = G_INTF_STATUS_ERROR
6639 WHERE EBI.PROCESS_STATUS = G_INTF_STATUS_TOBE_PROCESS
6640 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
6641
6642 COMMIT;
6643 Developer_Debug('COMMITing the error statuses for EBI Rows.');
6644
6645 -----------------------------------------------------
6646 -- Close Error Handler Debug Session.
6647 -----------------------------------------------------
6648 Close_Debug_Session;
6649
6650 --Exception block ends.
6651 ------------------------------------------------------------------
6652
6653 END Process_item_interface_lines;
6654
6655 /*
6656 ** Added by Ssingal - This procedure gets the Trade ItemDescriptor for a given
6657 ** Inventory_item_id and organization Id.
6658 ** Bug Fix 4001661
6659 */
6660
6661
6662 PROCEDURE get_Trade_Item_Descriptor (
6663 p_inventory_item_id IN VARCHAR2,
6664 p_organization_id IN VARCHAR2,
6665 x_tradeItemDescriptor OUT NOCOPY VARCHAR2
6666 ) IS
6667 l_tradeItemDescriptor VARCHAR2(100);
6668 BEGIN
6669
6670 SELECT TRADE_ITEM_DESCRIPTOR INTO x_tradeItemDescriptor
6671 FROM MTL_SYSTEM_ITEMS_B
6672 WHERE INVENTORY_ITEM_ID = to_number(p_inventory_item_id)
6673 AND ORGANIZATION_ID = to_number(p_organization_id);
6674
6675
6676 EXCEPTION
6677 WHEN OTHERS THEN
6678 Write_Debug('EGO BULK LOAD Gtin Attributes get_Trade_Item_Descriptor :GTID is null for an Item EXCEPTION HAPPENED => '|| SUBSTR ( SQLERRM , 0 ,240 ));
6679 Write_Debug('EGO BULK LOAD Gtin Attributes get_Trade_Item_Descriptor GTID Is null for => '|| p_inventory_item_id || ' , org Id ' || p_organization_id);
6680 END get_Trade_Item_Descriptor;
6681
6682
6683 /*
6684 ** Added by Ssingal - For clearing the attribute values for an Item
6685 ** taking into consideration the Trade Item Descriptor
6686 ** Bug Fix 4001661
6687 */
6688
6689
6690 PROCEDURE Clear_Gtin_Attrs
6691 (
6692 p_resultfmt_usage_id IN NUMBER ,
6693 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE,
6694 x_errbuff OUT NOCOPY VARCHAR2 ,
6695 x_ret_code OUT NOCOPY VARCHAR2
6696 )
6697 IS
6698 CURSOR c_errLogFile ( c_resultfmt_usage_id IN NUMBER) IS
6699 SELECT C_INTF_ATTR239
6700 FROM EGO_BULKLOAD_INTF
6701 WHERE C_INTF_ATTR239 IS NOT NULL
6702 AND RESULTFMT_USAGE_ID = c_resultfmt_usage_id
6703 AND ROWNUM < 2;
6704
6705 CURSOR c_itemId_OrgId (c_resultfmt_usage_id IN NUMBER) IS
6706 SELECT INSTANCE_PK1_VALUE , INSTANCE_PK2_VALUE
6707 FROM EGO_BULKLOAD_INTF
6708 WHERE RESULTFMT_USAGE_ID = c_resultfmt_usage_id
6709 AND PROCESS_STATUS = 7;
6710
6711 CURSOR c_gtid (c_inventory_itemId IN NUMBER , c_organization_Id IN NUMBER) IS
6712 SELECT TRADE_ITEM_DESCRIPTOR
6713 FROM MTL_SYSTEM_ITEMS_B
6714 WHERE INVENTORY_ITEM_ID = c_inventory_itemId
6715 AND ORGANIZATION_ID = c_organization_Id ;
6716
6717 /* Editable at root
6718 Attribute Values to be cleared for Leaf
6719 these attributes are _B table attributes
6720 We need to to pass Single/Multi attribute group type */
6721 CURSOR c_leafAttrs_bTable ( c_attr_group_type IN VARCHAR2 , c_edit_in_hcR IN VARCHAR2 , c_data_type_codeA IN VARCHAR2) IS
6722 SELECT DATABASE_COLUMN ,
6723 EDIT_IN_HIERARCHY_CODE ,
6724 DATA_TYPE_CODE
6725 FROM EGO_ATTRS_V
6726 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6727 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcR ) -- ( 'L' , 'LP', 'A' , 'AP')
6728 AND DATA_TYPE_CODE not in ( c_data_type_codeA );
6729
6730 /* Editable at leaf
6731 Attribute Values to be cleared for Root
6732 these attributes are _B table attributes
6733 We need to to pass Single/Multi attribute group type */
6734 CURSOR c_rootAttrs_bTable ( c_attr_group_type IN VARCHAR2 , c_edit_in_hcL IN VARCHAR2 , c_edit_in_hcLP IN VARCHAR2 , c_data_type_codeA IN VARCHAR2 ) is
6735 SELECT DATABASE_COLUMN ,
6736 EDIT_IN_HIERARCHY_CODE ,
6737 DATA_TYPE_CODE
6738 FROM EGO_ATTRS_V
6739 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6740 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcL , c_edit_in_hcLP ) -- ( 'L' , 'LP', 'A' , 'AP')
6741 AND DATA_TYPE_CODE not in ( c_data_type_codeA ) ;
6742
6743 /* Editable at root
6744 Attribute Values to be cleared for Leaf
6745 these attributes are _TL table attributes
6746 We need to to pass Single/Multi attribute group type */
6747 CURSOR c_leafAttrs_tlTable ( c_attr_group_type IN VARCHAR2 , c_edit_in_hcR IN VARCHAR2 , c_data_type_codeA IN VARCHAR2) is
6748 SELECT DATABASE_COLUMN ,
6749 EDIT_IN_HIERARCHY_CODE ,
6750 DATA_TYPE_CODE
6751 FROM EGO_ATTRS_V
6752 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6753 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcR ) -- ( 'L' , 'LP', 'A' , 'AP')
6754 AND DATA_TYPE_CODE in ( c_data_type_codeA ) ;
6755
6756 /* Editable at leaf
6757 Attribute Values to be cleared for Root
6758 these attributes are _TL table attributes
6759 We need to to pass Single/Multi attribute group type */
6760 CURSOR c_rootAttrs_tlTable ( c_attr_group_type IN VARCHAR2 , c_edit_in_hcL IN VARCHAR2 , c_edit_in_hcLP IN VARCHAR2 , c_data_type_codeA IN VARCHAR2 ) is
6761 SELECT DATABASE_COLUMN ,
6762 EDIT_IN_HIERARCHY_CODE ,
6763 DATA_TYPE_CODE
6764 FROM EGO_ATTRS_V
6765 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6766 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcL , c_edit_in_hcLP ) -- ( 'L' , 'LP', 'A' , 'AP')
6767 AND DATA_TYPE_CODE in ( c_data_type_codeA ) ;
6768
6769 TYPE ATTR_METADATA_REC IS RECORD ( DATABASE_COLUMN VARCHAR2(30),
6770 EDIT_IN_HIERARCHY_CODE VARCHAR2(30),
6771 DATA_TYPE_CODE VARCHAR2(30)
6772 );
6773 /*TYPE ATTR_METADATA_TABLE IS TABLE OF ATTR_METADATA_REC INDEX BY BINARY_INTEGER;*/
6774
6775 l_is_Debug BOOLEAN := FALSE ;
6776 l_err_log_file VARCHAR2(1000);
6777 l_err_log_file_name VARCHAR2(1000);
6778 l_err_log_file_dir VARCHAR2(1000);
6779 l_dyn_sql VARCHAR2(20000);
6780 l_inventory_item_id NUMBER ;
6781 l_organization_id NUMBER ;
6782 l_hierarchyExists VARCHAR2(20);
6783 l_gtid VARCHAR2(100);
6784 l_return_status VARCHAR2(100);
6785 l_msg_count NUMBER ;
6786 l_msg_data fnd_new_messages.message_text%TYPE;
6787 l_retCode VARCHAR2(10);
6788 l_errbuff VARCHAR2(20000);
6789 l_err_code NUMBER;
6790 -- l_attr_table ATTR_METADATA_TABLE ;
6791 l_attr_rec ATTR_METADATA_REC ;
6792 l_used_in_structure VARCHAR2(100) ;
6793
6794 l_leafAttrs_bTable_dbCol VARCHAR2(5000);
6795 l_leafAttrs_MulBTable_dbCol VARCHAR2(5000);
6796 l_rootAttrs_bTable_dbCol VARCHAR2(5000);
6797 l_rootAttrs_MulBTable_dbCol VARCHAR2(5000);
6798 l_leafAttrs_tlTable_dbCol VARCHAR2(5000);
6799 l_leafAttrs_MulTlTable_dbCol VARCHAR2(5000);
6800 l_rootAttrs_TlTable_dbCol VARCHAR2(5000);
6801 l_rootAttrs_MulTlTable_dbCol VARCHAR2(5000);
6802
6803 l_leafAttrs_bTable_value VARCHAR2(5000);
6804 l_leafAttrs_MulBTable_value VARCHAR2(5000);
6805 l_rootAttrs_bTable_value VARCHAR2(5000);
6806 l_rootAttrs_MulBTable_value VARCHAR2(5000);
6807 l_leafAttrs_tlTable_value VARCHAR2(5000);
6808 l_leafAttrs_MulTlTable_value VARCHAR2(5000);
6809 l_rootAttrs_TlTable_value VARCHAR2(5000);
6810 l_rootAttrs_MulTlTable_value VARCHAR2(5000);
6811
6812
6813 --API return parameters
6814
6815 BEGIN
6816
6817 OPEN c_errLogFile ( p_resultfmt_usage_id );
6818 FETCH c_errLogFile INTO l_err_log_file;
6819 IF c_errLogFile%FOUND THEN
6820 l_is_Debug := TRUE ;
6821 END IF;
6822 -- Bug : 4099546
6823 CLOSE c_errLogFile;
6824 Write_Debug('-----------------------------------------------------------------');
6825 Write_Debug('Clear_Gtin_Attrs : ');
6826 Write_Debug('-----------------------------------------------------------------');
6827
6828 IF (l_is_Debug ) THEN
6829 l_err_log_file_dir := SUBSTR (l_err_log_file , 0 , INSTR (l_err_log_file , 'EGO_BULKLOAD_INTF' ) - 1 );
6830 l_err_log_file_name := SUBSTR (l_err_log_file , INSTR ( l_err_log_file , 'EGO_BULKLOAD_INTF' )-1 );
6831 -----------------------------------------------------------------------
6832 -- To open the Debug Session to write the Debug Log. --
6833 -- This sets Debug value so that Error_Handler.Get_Debug returns 'Y' --
6834 -----------------------------------------------------------------------
6835 Error_Handler.Open_Debug_Session(
6836 p_debug_filename => l_err_log_file_name
6837 ,p_output_dir => l_err_log_file_dir
6838 ,x_return_status => l_retCode
6839 ,x_error_mesg => l_errbuff
6840 );
6841
6842 END IF;
6843
6844 -- Fetch the metadata now for Uccnet attributes
6845 Write_Debug('Clear_Gtin_Attrs : Getting metadata');
6846
6847 OPEN c_leafAttrs_bTable ('EGO_ITEM_GTIN_ATTRS', 'R' , 'A') ;
6848 LOOP
6849 FETCH c_leafAttrs_bTable INTO l_attr_rec ;
6850 EXIT WHEN c_leafAttrs_bTable%NOTFOUND;
6851 l_leafAttrs_bTable_dbCol := l_leafAttrs_bTable_dbCol || ' , ' || l_attr_rec.DATABASE_COLUMN ;
6852 l_leafAttrs_bTable_value := l_leafAttrs_bTable_value || ' , NULL ' ;
6853 END LOOP;
6854 CLOSE c_leafAttrs_bTable;
6855 l_leafAttrs_bTable_dbCol := SUBSTR ( l_leafAttrs_bTable_dbCol , INSTR( l_leafAttrs_bTable_dbCol , ',')+1 ) ;
6856 l_leafAttrs_bTable_value := SUBSTR ( l_leafAttrs_bTable_value , INSTR( l_leafAttrs_bTable_value , ',')+1 ) ;
6857
6858 OPEN c_leafAttrs_bTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'R' , 'A') ;
6859 LOOP
6860 FETCH c_leafAttrs_bTable INTO l_attr_rec ;
6861 EXIT WHEN c_leafAttrs_bTable%NOTFOUND ;
6862 l_leafAttrs_MulBTable_dbCol := l_leafAttrs_MulBTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6863 l_leafAttrs_MulBTable_value := l_leafAttrs_MulBTable_value || ' , NULL ' ;
6864 END LOOP;
6865 CLOSE c_leafAttrs_bTable;
6866 l_leafAttrs_MulBTable_dbCol := SUBSTR ( l_leafAttrs_MulBTable_dbCol , INSTR( l_leafAttrs_MulBTable_dbCol , ',')+1 ) ;
6867 l_leafAttrs_MulBTable_value := SUBSTR ( l_leafAttrs_MulBTable_value , INSTR( l_leafAttrs_MulBTable_value , ',')+1 ) ;
6868
6869 OPEN c_rootAttrs_bTable ('EGO_ITEM_GTIN_ATTRS', 'L' ,'LP' , 'A') ;
6870 LOOP
6871 FETCH c_rootAttrs_bTable INTO l_attr_rec ;
6872 EXIT WHEN c_rootAttrs_bTable%NOTFOUND ;
6873 l_rootAttrs_bTable_dbCol := l_rootAttrs_bTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6874 l_rootAttrs_bTable_value := l_rootAttrs_bTable_value || ' , NULL ' ;
6875 END LOOP;
6876 CLOSE c_rootAttrs_bTable;
6877 l_rootAttrs_bTable_dbCol := SUBSTR ( l_rootAttrs_bTable_dbCol , INSTR( l_rootAttrs_bTable_dbCol , ',')+1 ) ;
6878 l_rootAttrs_bTable_value := SUBSTR ( l_rootAttrs_bTable_value , INSTR( l_rootAttrs_bTable_value , ',')+1 ) ;
6879
6880 OPEN c_rootAttrs_bTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'L' ,'LP' , 'A') ;
6881 LOOP
6882 FETCH c_rootAttrs_bTable INTO l_attr_rec ;
6883 EXIT WHEN c_rootAttrs_bTable%NOTFOUND ;
6884 l_rootAttrs_MulBTable_dbCol := l_rootAttrs_MulBTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6885 l_rootAttrs_MulBTable_value := l_rootAttrs_MulBTable_value || ' , NULL ' ;
6886 END LOOP;
6887 CLOSE c_rootAttrs_bTable;
6888 l_rootAttrs_MulBTable_dbCol := SUBSTR ( l_rootAttrs_MulBTable_dbCol , INSTR( l_rootAttrs_MulBTable_dbCol , ',')+1 ) ;
6889 l_rootAttrs_MulBTable_value := SUBSTR ( l_rootAttrs_MulBTable_value , INSTR( l_rootAttrs_MulBTable_value , ',')+1 ) ;
6890
6891 OPEN c_leafAttrs_tlTable ('EGO_ITEM_GTIN_ATTRS', 'R' , 'A') ;
6892 LOOP
6893 FETCH c_leafAttrs_tlTable INTO l_attr_rec ;
6894 EXIT WHEN c_leafAttrs_tlTable%NOTFOUND ;
6895 l_leafAttrs_tlTable_dbCol := l_leafAttrs_tlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6896 l_leafAttrs_tlTable_value := l_leafAttrs_tlTable_value || ' , NULL ' ;
6897 END LOOP;
6898 CLOSE c_leafAttrs_tlTable;
6899 l_leafAttrs_tlTable_dbCol := SUBSTR ( l_leafAttrs_tlTable_dbCol , INSTR( l_leafAttrs_tlTable_dbCol , ',')+1 ) ;
6900 l_leafAttrs_tlTable_value := SUBSTR ( l_leafAttrs_tlTable_value , INSTR( l_leafAttrs_tlTable_value , ',')+1 ) ;
6901
6902 OPEN c_leafAttrs_tlTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'R' , 'A') ;
6903 LOOP
6904 FETCH c_leafAttrs_tlTable INTO l_attr_rec ;
6905 EXIT WHEN c_leafAttrs_tlTable%NOTFOUND ;
6906 l_leafAttrs_MultlTable_dbCol := l_leafAttrs_MulTlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6907 l_leafAttrs_MultlTable_value := l_leafAttrs_MultlTable_value || ' , NULL ';
6908 END LOOP;
6909 CLOSE c_leafAttrs_tlTable;
6910 l_leafAttrs_MultlTable_dbCol := SUBSTR ( l_leafAttrs_MultlTable_dbCol , INSTR( l_leafAttrs_MultlTable_dbCol , ',')+1 ) ;
6911 l_leafAttrs_MultlTable_value := SUBSTR ( l_leafAttrs_MultlTable_value , INSTR( l_leafAttrs_MultlTable_value , ',')+1 ) ;
6912
6913 OPEN c_rootAttrs_tlTable ('EGO_ITEM_GTIN_ATTRS', 'L' ,'LP' , 'A') ;
6914 LOOP
6915 FETCH c_rootAttrs_tlTable INTO l_attr_rec ;
6916 EXIT WHEN c_rootAttrs_tlTable%NOTFOUND ;
6917 l_rootAttrs_TlTable_dbCol := l_rootAttrs_TlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6918 l_rootAttrs_TlTable_value := l_rootAttrs_TlTable_value || ' , NULL ' ;
6919 END LOOP;
6920 CLOSE c_rootAttrs_tlTable;
6921 l_rootAttrs_TlTable_dbCol := SUBSTR ( l_rootAttrs_TlTable_dbCol , INSTR( l_rootAttrs_TlTable_dbCol , ',')+1 ) ;
6922 l_rootAttrs_TlTable_value := SUBSTR ( l_rootAttrs_TlTable_value , INSTR( l_rootAttrs_TlTable_value , ',')+1 ) ;
6923
6924 OPEN c_rootAttrs_tlTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'L' ,'LP' , 'A') ;
6925 LOOP
6926 FETCH c_rootAttrs_tlTable INTO l_attr_rec ;
6927 EXIT WHEN c_rootAttrs_tlTable%NOTFOUND ;
6928 l_rootAttrs_MulTlTable_dbCol := l_rootAttrs_MulTlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6929 l_rootAttrs_MulTlTable_value := l_rootAttrs_MulTlTable_value || ' , NULL ' ;
6930 END LOOP;
6931 CLOSE c_rootAttrs_tlTable;
6932 l_rootAttrs_MulTlTable_dbCol := SUBSTR ( l_rootAttrs_MulTlTable_dbCol , INSTR( l_rootAttrs_MulTlTable_dbCol , ',')+1 ) ;
6933 l_rootAttrs_MulTlTable_value := SUBSTR ( l_rootAttrs_MulTlTable_value , INSTR( l_rootAttrs_MulTlTable_value , ',')+1 ) ;
6934
6935 Write_Debug('Clear_Gtin_Attrs : Fetched the metadata');
6936
6937 OPEN c_itemId_OrgId (p_resultfmt_usage_id) ;
6938 LOOP
6939 FETCH c_itemId_OrgId into l_inventory_item_id , l_organization_id ;
6940 EXIT WHEN c_itemId_OrgId%NOTFOUND ;
6941 /*
6942 * GTID can be changed only if the Item is not having a
6943 * packaging hierarchy.So we will clear the attributes
6944 * only if the packaging hierarcy does not exist.
6945 */
6946
6947 EXECUTE IMMEDIATE ' BEGIN BOM_IMPLODER_PUB.IMPLODER_USEREXIT (
6948 SEQUENCE_ID => NULL ,
6949 ENG_MFG_FLAG => :1 ,
6950 ORG_ID => :2 ,
6951 IMPL_FLAG => :3 ,
6952 DISPLAY_OPTION => :4 ,
6953 LEVELS_TO_IMPLODE => :5 ,
6954 OBJ_NAME => :6 ,
6955 PK1_VALUE => :7 ,
6956 PK2_VALUE => :8 ,
6957 PK3_VALUE => NULL ,
6958 PK4_VALUE => NULL ,
6959 PK5_VALUE => NULL ,
6960 IMPL_DATE => :9,
6961 UNIT_NUMBER_FROM => :10 ,
6962 UNIT_NUMBER_TO => :11 ,
6963 ERR_MSG => :12 ,
6964 ERR_CODE => :13 ,
6965 ORGANIZATION_OPTION => :14 ,
6966 ORGANIZATION_HIERARCHY => NULL ,
6967 SERIAL_NUMBER_FROM => NULL ,
6968 SERIAL_NUMBER_TO => NULL ,
6969 STRUCT_TYPE => :15 ,
6970 PREFERRED_ONLY => :16 ,
6971 USED_IN_STRUCTURE => :17
6972 ); END ; '
6973 USING IN 2, IN l_organization_id, IN 2, IN 1, IN 60, IN 'EGO_ITEM',
6974 IN l_inventory_item_id, IN l_organization_id, IN to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') ,
6975 IN 'N', IN 'Y', OUT l_errbuff, OUT l_err_code, IN 1,
6976 IN 'Packaging Hierarchy', IN 2, OUT l_used_in_structure ;
6977
6978
6979 IF (l_used_in_structure <> 'T') THEN
6980 OPEN c_gtid ( l_inventory_item_id , l_organization_id );
6981 FETCH c_gtid INTO l_gtid;
6982 -- Bug : 4099546
6983 CLOSE c_gtid;
6984 IF (l_gtid = 'BASE_UNIT_OR_EACH' )THEN
6985
6986 IF ( length(l_leafAttrs_bTable_dbCol) > 0 ) THEN
6987
6988 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_B SET ( '|| l_leafAttrs_bTable_dbCol ||
6989 ' ) = ( SELECT '|| l_leafAttrs_bTable_value ||
6990 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id '||
6991 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6992
6993 END IF;
6994
6995 IF ( length(l_leafAttrs_tlTable_dbCol) > 0 ) THEN
6996
6997 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_TL SET ( '|| l_leafAttrs_tlTable_dbCol ||
6998 ' ) = ( SELECT '|| l_leafAttrs_tlTable_value ||
6999 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
7000 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
7001 END IF;
7002
7003 IF ( length(l_leafAttrs_MulBTable_dbCol) > 0 ) THEN
7004
7005 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_B SET ( ' || l_leafAttrs_MulBTable_dbCol||
7006 ' ) = ( SELECT ' || l_leafAttrs_MulBTable_value ||
7007 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
7008 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
7009 END IF;
7010 IF ( length(l_leafAttrs_MultlTable_dbCol) > 0 ) THEN
7011 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_TL SET ( ' || l_leafAttrs_MultlTable_dbCol||
7012 ' ) = ( SELECT ' || l_leafAttrs_MultlTable_value ||
7013 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id' ||
7014 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
7015 END IF;
7016
7017 EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES (p_inventory_item_id => l_inventory_item_id ,
7018 p_organization_id => l_organization_id ,
7019 p_update_reg => 'Y' ,
7020 x_return_status => l_return_status ,
7021 x_msg_count => l_msg_count,
7022 x_msg_data => l_msg_data );
7023 IF l_return_status <> 'S' THEN
7024 Write_Debug('GTIN : Clear_Gtin_Attrs. :: Exception from EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES ');
7025 Write_Debug('GTIN : Clear_Gtin_Attrs. ::message ' || l_msg_data );
7026 END IF;
7027
7028 ELSE
7029
7030 IF ( length(l_rootAttrs_bTable_dbCol) > 0 ) THEN
7031
7032 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_B SET ( '|| l_rootAttrs_bTable_dbCol ||
7033 ' ) = ( SELECT'|| l_rootAttrs_bTable_value ||
7034 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id '||
7035 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
7036 END IF;
7037 IF ( length(l_rootAttrs_tlTable_dbCol) > 0 ) THEN
7038
7039 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_TL SET ( '|| l_rootAttrs_tlTable_dbCol ||
7040 ' ) = ( SELECT'|| l_rootAttrs_tlTable_value ||
7041 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
7042 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
7043 END IF;
7044 IF ( length(l_rootAttrs_MulBTable_dbCol) > 0 ) THEN
7045
7046 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_B SET ( '|| l_rootAttrs_MulBTable_dbCol ||
7047 ' ) = ( SELECT '|| l_rootAttrs_MulBTable_value ||
7048 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
7049 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
7050 END IF;
7051 IF ( length(l_rootAttrs_MultlTable_dbCol) > 0 ) THEN
7052
7053 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_TL SET ( '||l_rootAttrs_MultlTable_dbCol ||
7054 ' ) = ( SELECT '|| l_rootAttrs_MultlTable_value ||
7055 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
7056 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
7057 END IF;
7058
7059 EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES (p_inventory_item_id => l_inventory_item_id ,
7060 p_organization_id => l_organization_id ,
7061 p_update_reg => 'N' ,
7062 x_return_status => l_return_status,
7063 x_msg_count => l_msg_count,
7064 x_msg_data => l_msg_data );
7065 IF l_return_status <> 'S' THEN
7066 Write_Debug('GTIN : Clear_Gtin_Attrs. :: Exception from EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES ');
7067 Write_Debug('GTIN : Clear_Gtin_Attrs. ::message ' || l_msg_data );
7068 END IF;
7069
7070 END IF; --GTID is Each / non-Each
7071
7072 END IF; -- If the Item is not having a Packaging Hierarchy
7073
7074 END LOOP;
7075 close c_itemId_OrgId;
7076
7077 Write_Debug('GTIN : Clear_Gtin_Attrs.');
7078
7079 -------------------------------------------------------------
7080 -- Commit at the end.
7081 -------------------------------------------------------------
7082 IF (p_commit = FND_API.G_TRUE) THEN
7083 COMMIT;
7084 END IF;
7085
7086 IF (l_is_debug) THEN
7087 Close_Debug_Session;
7088 END IF;
7089
7090 x_ret_code := G_STATUS_SUCCESS;
7091
7092 EXCEPTION
7093 WHEN OTHERS THEN
7094 x_ret_code := G_STATUS_ERROR;
7095 x_errbuff := SUBSTRB(SQLERRM, 1,240);
7096 Write_Debug('Clear_Gtin_Attrs : EXCEPTION HAPPENED => '||x_errbuff);
7097
7098 IF c_errLogFile%ISOPEN THEN
7099 close c_errLogFile;
7100 END IF;
7101
7102 IF c_itemId_OrgId%ISOPEN THEN
7103 close c_itemId_OrgId ;
7104 END IF;
7105
7106 IF c_gtid%ISOPEN THEN
7107 close c_gtid ;
7108 END IF;
7109
7110 IF c_leafAttrs_bTable%ISOPEN THEN
7111 close c_leafAttrs_bTable ;
7112 END IF;
7113
7114 IF c_rootAttrs_bTable%ISOPEN THEN
7115 close c_rootAttrs_bTable ;
7116 END IF;
7117
7118 IF c_leafAttrs_tlTable%ISOPEN THEN
7119 close c_leafAttrs_tlTable ;
7120 END IF;
7121
7122 IF c_rootAttrs_tlTable%ISOPEN THEN
7123 close c_rootAttrs_tlTable ;
7124 END IF;
7125
7126 IF (l_is_debug) THEN
7127 Close_Debug_Session;
7128 END IF;
7129
7130 END Clear_Gtin_Attrs ;
7131
7132 -- ============================================================================
7133 -- API Name : Populate_Seq_Gen_Item_Nums
7134 -- Description : This procedure will be called from IOI
7135 -- (after org and catalog category details are resolved)
7136 -- to populate the item numbers for all the sequence generated items.
7137 -- ============================================================================
7138 PROCEDURE Populate_Seq_Gen_Item_Nums
7139 (p_set_id IN NUMBER
7140 ,p_org_id IN NUMBER
7141 ,p_all_org IN NUMBER
7142 ,p_rec_status IN NUMBER
7143 ,x_return_status OUT NOCOPY VARCHAR2
7144 ,x_msg_count OUT NOCOPY NUMBER
7145 ,x_msg_data OUT NOCOPY VARCHAR2) IS
7146
7147 TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7148
7149 l_cc_id_table num_tbl_type;
7150 l_trans_id_table num_tbl_type;
7151 l_org_id_table DBMS_SQL.VARCHAR2_TABLE;
7152 l_ss_id_table num_tbl_type;
7153 l_ss_ref_table EGO_VARCHAR_TBL_TYPE;
7154 l_item_num_table EGO_VARCHAR_TBL_TYPE;
7155 l_old_item_num_table EGO_VARCHAR_TBL_TYPE; --Added R12C
7156 l_sql VARCHAR2(10000);
7157 l_cc_rows_processed NUMBER;
7158 l_item_rows_processed NUMBER;
7159 l_xset_id NUMBER;
7160
7161 BEGIN
7162 Write_Debug (' started with params p_set_id: '||p_set_id||' p_org_id: '||p_org_id||' p_all_org: '||p_all_org);
7163 x_return_status := FND_API.G_RET_STS_SUCCESS;
7164 x_msg_count := 0;
7165 x_msg_data := NULL;
7166
7167 --Only Item Row has p_set_id, setting batch id for the rest
7168 l_xset_id := p_set_id-5000000000000;
7169
7170 --Removing Item Num NULL clause - R12C
7171 SELECT DISTINCT item_catalog_group_id
7172 BULK COLLECT INTO l_cc_id_table
7173 FROM MTL_SYSTEM_ITEMS_INTERFACE
7174 WHERE set_process_id = p_set_id
7175 AND (organization_id = p_org_id OR p_all_org = 1)
7176 AND process_flag = p_rec_status
7177 AND transaction_type = 'CREATE';
7178
7179 l_cc_rows_processed := SQL%ROWCOUNT;
7180 IF l_cc_rows_processed = 0 THEN
7181 RETURN;
7182 END IF;
7183
7184 FOR cc_row_index in 1..l_cc_rows_processed LOOP
7185 Write_Debug (' CC being processed '||cc_row_index);
7186
7187 --Removing Item Num NULL clause - R12C
7188 SELECT TO_CHAR(organization_id), item_number,
7189 transaction_id, source_system_id,
7190 source_system_reference
7191 BULK COLLECT INTO l_org_id_table, l_old_item_num_table,
7192 l_trans_id_table, l_ss_id_table,
7193 l_ss_ref_table
7194 FROM MTL_SYSTEM_ITEMS_INTERFACE
7195 WHERE set_process_id = p_set_id
7196 AND (organization_id = p_org_id OR p_all_org = 1)
7197 AND item_catalog_group_id = l_cc_id_table(cc_row_index)
7198 AND process_flag = p_rec_status
7199 AND transaction_type = 'CREATE';
7200
7201 l_item_rows_processed := SQL%ROWCOUNT;
7202 IF (l_item_rows_processed > 0) THEN
7203 EGO_ITEM_PVT.Get_Seq_Gen_Item_Nums
7204 (
7205 p_item_catalog_group_id => l_cc_id_table(cc_row_index)
7206 ,p_org_id_tbl => l_org_id_table
7207 ,x_item_num_tbl => l_item_num_table
7208 );
7209
7210 -- for item interface table
7211 FORALL item_num_row_index IN 1..l_item_rows_processed
7212 UPDATE mtl_system_items_interface
7213 SET item_number = l_item_num_table(item_num_row_index),
7214 SEGMENT1 = NULL,
7215 SEGMENT2 = NULL,
7216 SEGMENT3 = NULL,
7217 SEGMENT4 = NULL,
7218 SEGMENT5 = NULL,
7219 SEGMENT6 = NULL,
7220 SEGMENT7 = NULL,
7221 SEGMENT8 = NULL,
7222 SEGMENT9 = NULL,
7223 SEGMENT10 = NULL,
7224 SEGMENT11 = NULL,
7225 SEGMENT12 = NULL,
7226 SEGMENT13 = NULL,
7227 SEGMENT14 = NULL,
7228 SEGMENT15 = NULL,
7229 SEGMENT16 = NULL,
7230 SEGMENT17 = NULL,
7231 SEGMENT18 = NULL,
7232 SEGMENT19 = NULL,
7233 SEGMENT20 = NULL
7234 WHERE set_process_id IN (p_set_id, l_xset_id) /*bug 6158936 child records are in l_xset_id*/
7235 AND process_flag IN (p_rec_status, 60001) /*bug 6158936 child records are in process_flag + 60000*/
7236 AND source_system_id = l_ss_id_table(item_num_row_index)
7237 AND ( item_number = l_old_item_num_table(item_num_row_index) OR
7238 source_system_reference = l_ss_ref_table(item_num_row_index));
7239
7240 -- for item revisions interface table
7241 FORALL rev_row_index IN 1..l_item_rows_processed
7242 UPDATE mtl_item_revisions_interface
7243 SET item_number = l_item_num_table(rev_row_index)
7244 WHERE set_process_id = l_xset_id
7245 AND source_system_id = l_ss_id_table(rev_row_index)
7246 AND process_flag = p_rec_status
7247 AND ( item_number = l_old_item_num_table(rev_row_index) OR
7248 source_system_reference = l_ss_ref_table(rev_row_index));
7249
7250 -- for category assignments interface table
7251 FORALL item_cat_row_index IN 1..l_item_rows_processed
7252 UPDATE mtl_item_categories_interface
7253 SET item_number = l_item_num_table(item_cat_row_index)
7254 WHERE set_process_id = l_xset_id
7255 AND source_system_id = l_ss_id_table(item_cat_row_index)
7256 AND process_flag = p_rec_status
7257 AND ( item_number = l_old_item_num_table(item_cat_row_index) OR
7258 source_system_reference = l_ss_ref_table(item_cat_row_index));
7259
7260 -- for user attrs interface table
7261 FORALL usr_attr_row_index IN 1..l_item_rows_processed
7262 UPDATE ego_itm_usr_attr_intrfc
7263 SET item_number = l_item_num_table(usr_attr_row_index)
7264 WHERE data_set_id = l_xset_id
7265 AND source_system_id = l_ss_id_table(usr_attr_row_index)
7266 AND process_status = p_rec_status
7267 AND ( item_number = l_old_item_num_table(usr_attr_row_index) OR
7268 source_system_reference = l_ss_ref_table(usr_attr_row_index));
7269
7270 -- item people interface table
7271 FORALL ss_id_row_index IN 1..l_item_rows_processed
7272 UPDATE ego_item_people_intf
7273 SET item_number = l_item_num_table(ss_id_row_index)
7274 WHERE data_set_id = l_xset_id
7275 AND source_system_id = l_ss_id_table(ss_id_row_index)
7276 AND process_status = p_rec_status
7277 AND ( item_number = l_old_item_num_table(ss_id_row_index) OR
7278 source_system_reference = l_ss_ref_table(ss_id_row_index));
7279
7280 -- aml interface table
7281 FORALL ss_id_row_index IN 1..l_item_rows_processed
7282 UPDATE ego_aml_intf
7283 SET item_number = l_item_num_table(ss_id_row_index)
7284 WHERE data_set_id = l_xset_id
7285 AND source_system_id = l_ss_id_table(ss_id_row_index)
7286 AND process_flag = p_rec_status
7287 AND ( item_number = l_old_item_num_table(ss_id_row_index) OR
7288 source_system_reference = l_ss_ref_table(ss_id_row_index));
7289
7290 --BOM interface tables R12C
7291 FORALL bill_id_row_index IN 1..l_item_rows_processed
7292 UPDATE bom_bill_of_mtls_interface
7293 SET item_number = l_item_num_table(bill_id_row_index)
7294 WHERE process_flag = p_rec_status
7295 AND batch_id = l_xset_id
7296 AND ( item_number = l_old_item_num_table(bill_id_row_index) OR
7297 source_system_reference = l_ss_ref_table(bill_id_row_index));
7298
7299 FORALL bom_inv_id_row_index IN 1..l_item_rows_processed
7300 UPDATE BOM_INVENTORY_COMPS_INTERFACE
7301 SET component_item_number = l_item_num_table(bom_inv_id_row_index)
7302 WHERE process_flag = p_rec_status
7303 AND batch_id = l_xset_id
7304 AND ( component_item_number = l_old_item_num_table(bom_inv_id_row_index) OR
7305 comp_source_system_reference = l_ss_ref_table(bom_inv_id_row_index));
7306
7307 FORALL bom_par_id_row_index IN 1..l_item_rows_processed
7308 UPDATE BOM_INVENTORY_COMPS_INTERFACE
7309 SET assembly_item_number = l_item_num_table(bom_par_id_row_index)
7310 WHERE process_flag = p_rec_status
7311 AND batch_id = l_xset_id
7312 AND ( assembly_item_number = l_old_item_num_table(bom_par_id_row_index) OR
7313 parent_source_system_reference = l_ss_ref_table(bom_par_id_row_index));
7314
7315 FORALL bom_sub_id_row_index IN 1..l_item_rows_processed
7316 UPDATE BOM_SUB_COMPS_INTERFACE
7317 SET assembly_item_number = l_item_num_table(bom_sub_id_row_index)
7318 WHERE process_flag = p_rec_status
7319 AND batch_id = l_xset_id
7320 AND ( assembly_item_number = l_old_item_num_table(bom_sub_id_row_index) OR
7321 parent_source_system_reference = l_ss_ref_table(bom_sub_id_row_index));
7322
7323 FORALL bom_sub_id_row_index IN 1..l_item_rows_processed
7324 UPDATE BOM_SUB_COMPS_INTERFACE
7325 SET component_item_number = l_item_num_table(bom_sub_id_row_index)
7326 WHERE process_flag = p_rec_status
7327 AND batch_id = l_xset_id
7328 AND ( component_item_number = l_old_item_num_table(bom_sub_id_row_index) OR
7329 comp_source_system_reference = l_ss_ref_table(bom_sub_id_row_index));
7330
7331 FORALL bom_sub_id_row_index IN 1..l_item_rows_processed
7332 UPDATE BOM_SUB_COMPS_INTERFACE
7333 SET substitute_comp_number = l_item_num_table(bom_sub_id_row_index)
7334 WHERE process_flag = p_rec_status
7335 AND batch_id = l_xset_id
7336 AND ( substitute_comp_number = l_old_item_num_table(bom_sub_id_row_index) OR
7337 subcom_source_system_reference = l_ss_ref_table(bom_sub_id_row_index));
7338
7339 FORALL bom_ref_id_row_index IN 1..l_item_rows_processed
7340 UPDATE BOM_REF_DESGS_INTERFACE
7341 SET assembly_item_number = l_item_num_table(bom_ref_id_row_index)
7342 WHERE process_flag = p_rec_status
7343 AND batch_id = l_xset_id
7344 AND ( assembly_item_number = l_old_item_num_table(bom_ref_id_row_index) OR
7345 parent_source_system_reference = l_ss_ref_table(bom_ref_id_row_index));
7346
7347 FORALL bom_ref_id_row_index IN 1..l_item_rows_processed
7348 UPDATE BOM_REF_DESGS_INTERFACE
7349 SET component_item_number = l_item_num_table(bom_ref_id_row_index)
7350 WHERE process_flag = p_rec_status
7351 AND batch_id = l_xset_id
7352 AND ( component_item_number = l_old_item_num_table(bom_ref_id_row_index) OR
7353 comp_source_system_reference = l_ss_ref_table(bom_ref_id_row_index));
7354
7355 FORALL bom_comp_id_row_index IN 1..l_item_rows_processed
7356 UPDATE BOM_COMPONENT_OPS_INTERFACE
7357 SET assembly_item_number = l_item_num_table(bom_comp_id_row_index)
7358 WHERE process_flag = p_rec_status
7359 AND batch_id = l_xset_id
7360 AND ( assembly_item_number = l_old_item_num_table(bom_comp_id_row_index) OR
7361 parent_source_system_reference = l_ss_ref_table(bom_comp_id_row_index));
7362
7363 FORALL bom_comp_id_row_index IN 1..l_item_rows_processed
7364 UPDATE BOM_COMPONENT_OPS_INTERFACE
7365 SET component_item_number = l_item_num_table(bom_comp_id_row_index)
7366 WHERE process_flag = p_rec_status
7367 AND batch_id = l_xset_id
7368 AND ( component_item_number = l_old_item_num_table(bom_comp_id_row_index) OR
7369 comp_source_system_reference = l_ss_ref_table(bom_comp_id_row_index));
7370
7371 END IF; --end: IF (l_org_id_rows_cnt > 0) THEN
7372
7373 END LOOP; -- for cc_row_identifier in 1..l_rows_processed
7374
7375 EXCEPTION
7376 WHEN OTHERS THEN
7377 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7378 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7379 FND_MESSAGE.Set_Token('PKG_NAME', 'EGO_ITEM_BULKLOAD_PKG');
7380 FND_MESSAGE.Set_Token('API_NAME', 'Populate_Seq_Gen_Item_Nums');
7381 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7382 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7383 ,p_count => x_msg_count
7384 ,p_data => x_msg_data);
7385 END Populate_Seq_Gen_Item_Nums;
7386
7387
7388
7389 -- ============================================================================
7390 -- API Name : load_intersections_interface
7391 -- Description : This procedure will be called to load the intersection
7392 -- interface table ego_item_associations_intf with the required data
7393 -- ============================================================================
7394 PROCEDURE load_intersections_interface
7395 (
7396 p_resultfmt_usage_id IN NUMBER,
7397 p_set_process_id IN NUMBER,
7398 x_set_process_id OUT NOCOPY NUMBER,
7399 x_errbuff OUT NOCOPY VARCHAR2,
7400 x_retcode OUT NOCOPY VARCHAR2
7401 ) IS
7402
7403
7404 ------------------------------------------------------------------------------------------
7405 -- To get the Item intersection attr columns in the Result Format.
7406 ------------------------------------------------------------------------------------------
7407 CURSOR c_item_intersection_intf_cols (c_resultfmt_usage_id IN NUMBER) IS
7408 SELECT attribute_code, intf_column_name, data_level_id
7409 FROM ego_results_fmt_usages
7410 WHERE resultfmt_usage_id = c_resultfmt_usage_id
7411 /* AND DATA_LEVEL_ID in (SELECT DATA_LEVEL_ID
7412 FROM EGO_DATA_LEVEL_B
7413 WHERE DATA_LEVEL_NAME IN ('ITEM_SUP','ITEM_ORG','ITEM_SUP_SITE')
7414 AND APPLICATION_ID = 431
7415 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
7416 )*/;
7417
7418 ---------------------------------------------------------------------
7419 -- Type Declarations
7420 ---------------------------------------------------------------------
7421 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
7422 INDEX BY BINARY_INTEGER;
7423
7424 -------------------------
7425 -- local variables --
7426 -------------------------
7427 l_prod_col_name VARCHAR2(256);
7428 l_intf_col_name VARCHAR2(256);
7429
7430 ---------------------------------------------------------------------
7431 -- Assuming that the column name will not be more than 30 chars.
7432 ---------------------------------------------------------------------
7433 l_supplier_name_col VARCHAR2(30);
7434 l_org_code_col VARCHAR2(30);
7435 l_supplier_site_col VARCHAR2(30);
7436 l_supplier_site_name_col VARCHAR2(30);
7437 l_supplier_site_prim_flag_col VARCHAR2(30);
7438 l_supplier_site_status_col VARCHAR2(30);
7439 l_sup_site_store_status_col VARCHAR2(30);
7440 l_supplier_number_col VARCHAR2(30);
7441
7442 l_msii_set_process_id NUMBER;
7443 i NUMBER;
7444 l_data_level_id NUMBER;
7445 l_item_number_col VARCHAR2(30);
7446 l_supplier_prim_flag_col VARCHAR2(30);
7447 l_supplier_status_col VARCHAR2(30);
7448 l_data_level_id_1 VARCHAR2(30);
7449
7450 l_yes_meaning VARCHAR2(20);
7451 l_no_meaning VARCHAR2(20);
7452 l_active_meaning VARCHAR2(20);
7453 l_inactive_meaning VARCHAR2(20);
7454 l_has_sup_sit_org_col VARCHAR2(1);
7455
7456 --------------------------------------------
7457 -- Long Dynamic SQL String
7458 --------------------------------------------
7459 l_dyn_sql VARCHAR2(10000);
7460
7461 BEGIN
7462 Write_Debug('*Item Intersections Interface*');
7463
7464 Write_Debug('Retrieving the Display and INTF cols');
7465 i := 0;
7466
7467 IF p_set_process_id IS NULL THEN
7468 SELECT mtl_system_items_intf_sets_s.NEXTVAL
7469 INTO l_msii_set_process_id
7470 FROM dual;
7471 ELSE
7472 l_msii_set_process_id := p_set_process_id;
7473 END IF;
7474
7475 l_has_sup_sit_org_col := 'N';
7476 --------------------------------------------------------------------
7477 -- Saving the column names in local table for easy retrieval later.
7478 -- Also save important columns such as Item ID, Org ID etc.,
7479 --------------------------------------------------------------------
7480 FOR c_item_rev_attr_intf_rec IN c_item_intersection_intf_cols
7481 (
7482 p_resultfmt_usage_id
7483 )
7484 LOOP
7485
7486 l_prod_col_name := c_item_rev_attr_intf_rec.attribute_code;
7487 l_intf_col_name := c_item_rev_attr_intf_rec.intf_column_name;
7488 l_data_level_id := c_item_rev_attr_intf_rec.data_level_id;
7489
7490 -- bedajna bug 6491762
7491 -- IF(l_data_level_id = 43105) THEN
7492 IF((l_data_level_id = 43105) OR (l_prod_col_name = 'SUPPLIERSITE_STORE_STATUS')) THEN
7493 l_has_sup_sit_org_col := 'Y';
7494 END IF;
7495 --------------------------------------------------------------------
7496 -- Store the Item Number column name in the Generic Interface
7497 --------------------------------------------------------------------
7498 IF (l_prod_col_name = G_ITEM_NUMBER) THEN
7499 l_item_number_col := l_intf_col_name;
7500 Write_Debug('Item Number : '||l_item_number_col);
7501
7502 --------------------------------------------------------------------
7503 -- Store the Organization Code column name in the Generic Interface
7504 --------------------------------------------------------------------
7505 ELSIF (l_prod_col_name = G_ORG_CODE) THEN
7506 l_org_code_col := l_intf_col_name;
7507 Write_Debug('Organization Code : '||l_org_code_col);
7508
7509 --------------------------------------------------------------------
7510 -- Store the Supplier Name column name in the Generic Interface
7511 --------------------------------------------------------------------
7512 ELSIF (l_prod_col_name = 'SUPPLIER_NAME') THEN
7513 l_supplier_name_col := l_intf_col_name;
7514 Write_Debug('Supplier Name : '||l_supplier_name_col);
7515
7516 --------------------------------------------------------------------
7517 -- Store the Supplier Number column name in the Generic Interface
7518 --------------------------------------------------------------------
7519 ELSIF (l_prod_col_name = 'SUPPLIER_NUMBER') THEN
7520 l_supplier_number_col := l_intf_col_name;
7521 Write_Debug('Supplier Number : '||l_supplier_name_col);
7522
7523
7524 --------------------------------------------------------------------
7525 -- Store the Supplier Name column name in the Generic Interface
7526 --------------------------------------------------------------------
7527 ELSIF (l_prod_col_name = 'SUPPLIER_PRIMARY') THEN
7528 l_supplier_prim_flag_col := l_intf_col_name;
7529 Write_Debug('Supplier Primary flag : '||l_supplier_name_col);
7530
7531 --------------------------------------------------------------------
7532 -- Store the Supplier Status column name in the Generic Interface
7533 --------------------------------------------------------------------
7534 ELSIF (l_prod_col_name = 'SUPPLIER_STATUS') THEN
7535 l_supplier_status_col := l_intf_col_name;
7536 Write_Debug('Supplier Status : '||l_supplier_status_col);
7537
7538 --------------------------------------------------------------------
7539 -- Store the Supplier Site Name column name in the Generic Interface
7540 --------------------------------------------------------------------
7541 ELSIF (l_prod_col_name = 'SUPPLIER_SITE') THEN
7542 l_supplier_site_name_col := l_intf_col_name;
7543 Write_Debug('Supplier Site Name : '||l_supplier_site_name_col);
7544
7545 --------------------------------------------------------------------
7546 -- Store the Supplier Name column name in the Generic Interface
7547 --------------------------------------------------------------------
7548 ELSIF (l_prod_col_name = 'SUPPLIERSITE_PRIMARY') THEN
7549 l_supplier_site_prim_flag_col := l_intf_col_name;
7550 Write_Debug('Supplier Primary flag : '||l_supplier_site_prim_flag_col);
7551
7552 --------------------------------------------------------------------
7553 -- Store the Supplier Status column name in the Generic Interface
7554 --------------------------------------------------------------------
7555 ELSIF (l_prod_col_name = 'SUPPLIERSITE_STATUS') THEN
7556 l_supplier_site_status_col := l_intf_col_name;
7557 Write_Debug('Supplier site Status : '||l_supplier_site_status_col);
7558
7559 ELSIF (l_prod_col_name = 'SUPPLIERSITE_STORE_STATUS') THEN
7560 l_sup_site_store_status_col := l_intf_col_name;
7561 Write_Debug('Supplier site store Status : '||l_sup_site_store_status_col);
7562
7563 END IF; --IF (l_prod_col_name = G_ITEM_NUMBER) THEN
7564
7565 END LOOP; --FOR c_item_rev_attr_intf_rec
7566
7567 SELECT MEANING
7568 INTO l_yes_meaning
7569 FROM FND_LOOKUP_VALUES_VL
7570 WHERE LOOKUP_TYPE = 'EGO_YES_NO'
7571 AND LOOKUP_CODE = 'Y';
7572
7573 SELECT MEANING
7574 INTO l_no_meaning
7575 FROM FND_LOOKUP_VALUES_VL
7576 WHERE LOOKUP_TYPE = 'EGO_YES_NO'
7577 AND LOOKUP_CODE = 'N';
7578
7579 SELECT MEANING
7580 INTO l_active_meaning
7581 FROM FND_LOOKUP_VALUES_VL
7582 WHERE LOOKUP_TYPE = 'EGO_ASSOCIATION_STATUS'
7583 AND LOOKUP_CODE = '1';
7584
7585 SELECT MEANING
7586 INTO l_inactive_meaning
7587 FROM FND_LOOKUP_VALUES_VL
7588 WHERE LOOKUP_TYPE = 'EGO_ASSOCIATION_STATUS'
7589 AND LOOKUP_CODE = '2';
7590
7591 ----------------------------------------------------------------------
7592 -- Inserting rows in the intersection interface table for supplier
7593 -- intersection ...
7594 ----------------------------------------------------------------------
7595 IF(l_supplier_name_col IS NOT NULL OR
7596 l_supplier_number_col IS NOT NULL) THEN
7597
7598 SELECT DATA_LEVEL_ID
7599 INTO l_data_level_id
7600 FROM EGO_DATA_LEVEL_B
7601 WHERE DATA_LEVEL_NAME = 'ITEM_SUP'
7602 AND APPLICATION_ID = 431
7603 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP';
7604
7605 l_dyn_sql := 'INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF ';
7606 l_dyn_sql := l_dyn_sql || '( ';
7607 l_dyn_sql := l_dyn_sql || ' BATCH_ID , ';
7608 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
7609 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
7610 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
7611 l_dyn_sql := l_dyn_sql || ' DATA_LEVEL_ID , ';
7612 l_dyn_sql := l_dyn_sql || ' PRIMARY_FLAG , ';
7613 l_dyn_sql := l_dyn_sql || ' STATUS_CODE , ';
7614 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NAME , ';
7615 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NUMBER , ';
7616 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
7617 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
7618 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG , ';
7619 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
7620 l_dyn_sql := l_dyn_sql || ' CREATED_BY , ';
7621 l_dyn_sql := l_dyn_sql || ' CREATION_DATE , ';
7622 l_dyn_sql := l_dyn_sql || ' LAST_UPDATED_BY , ';
7623 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_DATE , ';
7624 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_LOGIN , ';
7625 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
7626 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID , ';
7627 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
7628 l_dyn_sql := l_dyn_sql || ' PROGRAM_UPDATE_DATE , ';
7629 l_dyn_sql := l_dyn_sql || ' BUNDLE_ID , ';
7630 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID , ';
7631 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE , ';
7632 l_dyn_sql := l_dyn_sql || ' ASSOCIATION_ID ';
7633 l_dyn_sql := l_dyn_sql || ' ) ';
7634 l_dyn_sql := l_dyn_sql || 'SELECT ';
7635 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
7636 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
7637 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
7638 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
7639 --l_dyn_sql := l_dyn_sql || ' ''EGO_ITEM'' , ';
7640 l_dyn_sql := l_dyn_sql || l_data_level_id||' , ';
7641 IF(l_supplier_prim_flag_col IS NOT NULL) THEN
7642 -- bedajna bug 6429874
7643 -- l_dyn_sql := l_dyn_sql || 'DECODE (EBI.'||l_supplier_prim_flag_col||', '''||l_yes_meaning||''', ''Y'', '''||l_no_meaning||''', ''N'', NULL ) , ';
7644 l_dyn_sql := l_dyn_sql || 'DECODE (EBI.'||l_supplier_prim_flag_col||', '||':yes_meaning'||', ''Y'', '||':no_meaning'||', ''N'', NULL ) , ';
7645 ELSE
7646 l_dyn_sql := l_dyn_sql || ' NULL, ';
7647 END IF;
7648 IF(l_supplier_status_col IS NOT NULL) THEN
7649 -- bedajna bug 6429874
7650 -- l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_status_col||' , '''||l_active_meaning||''', ''1'', '''||l_inactive_meaning||''', ''2'', NULL) STATUS_CODE ,';
7651 l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_status_col||' , '||':active_meaning'||', ''1'', '||':inactive_meaning'||', ''2'', NULL) STATUS_CODE ,';
7652 ELSE
7653 l_dyn_sql := l_dyn_sql || ' NULL, ';
7654 END IF;
7655 IF(l_supplier_name_col IS NOT NULL)THEN
7656 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_name_col ||' , ';
7657 ELSE
7658 l_dyn_sql := l_dyn_sql || ' NULL, ';
7659 END IF;
7660 IF(l_supplier_number_col IS NOT NULL)THEN
7661 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_number_col ||' , ';
7662 ELSE
7663 l_dyn_sql := l_dyn_sql || ' NULL, ';
7664 END IF;
7665 l_dyn_sql := l_dyn_sql || 'EBI.'||l_org_code_col ||' , ';
7666 l_dyn_sql := l_dyn_sql || '''SYNC'' , ';
7667 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
7668 l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL , ';
7669 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATED_BY , ';
7670 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATION_DATE , ';
7671 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATED_BY , ';
7672 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_DATE , ';
7673 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_LOGIN , ';
7674 l_dyn_sql := l_dyn_sql || 'EBI.'||'REQUEST_ID , ';
7675 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_APPLICATION_ID , ';
7676 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_ID , ';
7677 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_UPDATE_DATE , ';
7678 l_dyn_sql := l_dyn_sql || ' NULL , ';
7679 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
7680 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
7681 l_dyn_sql := l_dyn_sql || ' NULL ';
7682 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
7683 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
7684 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
7685 IF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NOT NULL)THEN
7686 l_dyn_sql := l_dyn_sql || ' AND ( EBI.'||l_supplier_name_col||' IS NOT NULL ';
7687 l_dyn_sql := l_dyn_sql || ' OR EBI.'||l_supplier_number_col||' IS NOT NULL ) ';
7688 ELSIF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NULL) THEN
7689 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_name_col||' IS NOT NULL ';
7690 ELSIF(l_supplier_name_col IS NULL AND l_supplier_number_col IS NOT NULL) THEN
7691 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_number_col||' IS NOT NULL ';
7692 END IF;
7693
7694 Write_Debug(l_dyn_sql);
7695 -- bedajna bug 6429874
7696 -- EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
7697 IF ( (l_supplier_prim_flag_col IS NOT NULL) AND (l_supplier_status_col IS NOT NULL) ) then
7698 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7699 ELSIF ( (l_supplier_prim_flag_col IS NOT NULL) AND (l_supplier_status_col IS NULL) ) then
7700 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, p_resultfmt_usage_id;
7701 ELSIF ( (l_supplier_prim_flag_col IS NULL) AND (l_supplier_status_col IS NOT NULL) ) then
7702 EXECUTE IMMEDIATE l_dyn_sql USING l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7703 ELSIF ( (l_supplier_prim_flag_col IS NULL) AND (l_supplier_status_col IS NULL) ) then
7704 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
7705 end if;
7706
7707 Write_Debug('Item Revs Interface: Populated the Inv Item IDs, Org IDs.');
7708
7709 END IF;
7710 --------------------------------------------------------------------------
7711 -- Inserting rows in the intersection interface table for supplier Site --
7712 -- and supplier site store intersection ...
7713 --------------------------------------------------------------------------
7714 IF((l_supplier_name_col IS NOT NULL OR l_supplier_number_col IS NOT NULL)
7715 AND l_supplier_site_name_col IS NOT NULL) THEN
7716
7717 SELECT DATA_LEVEL_ID
7718 INTO l_data_level_id
7719 FROM EGO_DATA_LEVEL_B
7720 WHERE DATA_LEVEL_NAME = 'ITEM_SUP_SITE'
7721 AND APPLICATION_ID = 431
7722 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP';
7723
7724 SELECT DATA_LEVEL_ID
7725 INTO l_data_level_id_1
7726 FROM EGO_DATA_LEVEL_B
7727 WHERE DATA_LEVEL_NAME = 'ITEM_SUP_SITE_ORG'
7728 AND APPLICATION_ID = 431
7729 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP';
7730
7731 l_dyn_sql := 'INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF ';
7732 l_dyn_sql := l_dyn_sql || '( ';
7733 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
7734 l_dyn_sql := l_dyn_sql || ' BATCH_ID , ';
7735 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
7736 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
7737 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
7738 --l_dyn_sql := l_dyn_sql || ' OBJ_NAME , ';
7739 l_dyn_sql := l_dyn_sql || ' DATA_LEVEL_ID , ';
7740 l_dyn_sql := l_dyn_sql || ' PRIMARY_FLAG , ';
7741 l_dyn_sql := l_dyn_sql || ' STATUS_CODE , ';
7742 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NAME , ';
7743 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NUMBER , ';
7744 l_dyn_sql := l_dyn_sql || ' SUPPLIER_SITE_NAME , ';
7745 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
7746 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
7747 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG , ';
7748 l_dyn_sql := l_dyn_sql || ' CREATED_BY , ';
7749 l_dyn_sql := l_dyn_sql || ' CREATION_DATE , ';
7750 l_dyn_sql := l_dyn_sql || ' LAST_UPDATED_BY , ';
7751 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_DATE , ';
7752 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_LOGIN , ';
7753 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
7754 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID , ';
7755 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
7756 l_dyn_sql := l_dyn_sql || ' PROGRAM_UPDATE_DATE , ';
7757 l_dyn_sql := l_dyn_sql || ' BUNDLE_ID , ';
7758 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID , ';
7759 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE , ';
7760 l_dyn_sql := l_dyn_sql || ' ASSOCIATION_ID ';
7761 l_dyn_sql := l_dyn_sql || ' ) ';
7762 l_dyn_sql := l_dyn_sql || 'SELECT ';
7763 l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL , ';
7764 l_dyn_sql := l_dyn_sql || ' INTERSECTIONS.* ';
7765 l_dyn_sql := l_dyn_sql || ' FROM ( ';
7766
7767 l_dyn_sql := l_dyn_sql || 'SELECT ';
7768 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
7769 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
7770 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
7771 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
7772 --l_dyn_sql := l_dyn_sql || ' ''EGO_ITEM'' , ';
7773 l_dyn_sql := l_dyn_sql || l_data_level_id||' , ';
7774 IF(l_supplier_site_prim_flag_col IS NOT NULL) THEN
7775 -- bedajna bug 6429874
7776 -- l_dyn_sql := l_dyn_sql || ' DECODE(EBI.'||l_supplier_site_prim_flag_col||', '''||l_yes_meaning||''', ''Y'', '''||l_no_meaning||''',''N'' ) PRIMARY_FLAG , ';
7777 l_dyn_sql := l_dyn_sql || ' DECODE(EBI.'||l_supplier_site_prim_flag_col||', '||':yes_meaning'||', ''Y'', '||':no_meaning'||',''N'' ) PRIMARY_FLAG , ';
7778 ELSE
7779 l_dyn_sql := l_dyn_sql || ' NULL PRIMARY_FLAG , ';
7780 END IF;
7781 IF(l_supplier_site_status_col IS NOT NULL) THEN
7782 -- bedajna bug 6429874
7783 -- l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_site_status_col||' , '''||l_active_meaning||''', ''1'', '''||l_inactive_meaning||''', ''2'', NULL) STATUS_CODE,';
7784 l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_site_status_col||' , '||':active_meaning1'||', ''1'', '||':inactive_meaning1'||', ''2'', NULL) STATUS_CODE,';
7785 ELSE
7786 l_dyn_sql := l_dyn_sql || ' NULL STATUS_CODE , ';
7787 END IF;
7788 IF(l_supplier_name_col IS NOT NULL)THEN
7789 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_name_col ||' SUPPLIER_NAME, ';
7790 ELSE
7791 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NAME, ';
7792 END IF;
7793 IF(l_supplier_number_col IS NOT NULL)THEN
7794 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_number_col ||' SUPPLIER_NUMBER , ';
7795 ELSE
7796 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NUMBER , ';
7797 END IF;
7798 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_site_name_col ||' , ';
7799 l_dyn_sql := l_dyn_sql || 'EBI.'||l_org_code_col ||' , ';
7800 l_dyn_sql := l_dyn_sql || '''SYNC'' , ';
7801 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
7802 --l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL, ';
7803 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATED_BY , ';
7804 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATION_DATE , ';
7805 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATED_BY , ';
7806 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_DATE , ';
7807 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_LOGIN , ';
7808 l_dyn_sql := l_dyn_sql || 'EBI.'||'REQUEST_ID , ';
7809 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_APPLICATION_ID , ';
7810 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_ID , ';
7811 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_UPDATE_DATE , ';
7812 l_dyn_sql := l_dyn_sql || ' NULL BUNDLE_ID , ';
7813 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
7814 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
7815 l_dyn_sql := l_dyn_sql || ' NULL ASSOCIATION_ID ';
7816 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
7817 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
7818 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
7819 IF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NOT NULL)THEN
7820 l_dyn_sql := l_dyn_sql || ' AND ( EBI.'||l_supplier_name_col||' IS NOT NULL ';
7821 l_dyn_sql := l_dyn_sql || ' OR EBI.'||l_supplier_number_col||' IS NOT NULL ) ';
7822 ELSIF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NULL) THEN
7823 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_name_col||' IS NOT NULL ';
7824 ELSIF(l_supplier_name_col IS NULL AND l_supplier_number_col IS NOT NULL) THEN
7825 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_number_col||' IS NOT NULL ';
7826 END IF;
7827 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_site_name_col||' IS NOT NULL ';
7828 l_dyn_sql := l_dyn_sql || ' UNION ';
7829 l_dyn_sql := l_dyn_sql || ' SELECT ';
7830 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
7831 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
7832 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
7833 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
7834 --l_dyn_sql := l_dyn_sql || ' ''EGO_ITEM'' , ';
7835 l_dyn_sql := l_dyn_sql || l_data_level_id_1||' , ';
7836 --IF(l_supplier_site_prim_flag_col IS NOT NULL) THEN
7837 -- l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_site_prim_flag_col||' , ';
7838 --ELSE
7839 l_dyn_sql := l_dyn_sql || ' NULL PRIMARY_FLAG , ';
7840 --END IF;
7841
7842 IF(l_sup_site_store_status_col IS NOT NULL) THEN
7843 -- bedajna bug 6429874
7844 -- l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_sup_site_store_status_col||' , '''||l_active_meaning||''', ''1'', '''||l_inactive_meaning||''', ''2'', NULL) STATUS_CODE,';
7845 l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_sup_site_store_status_col||' , '||':active_meaning2'||', ''1'', '||':inactive_meaning2'||', ''2'', NULL) STATUS_CODE,';
7846 ELSE
7847 l_dyn_sql := l_dyn_sql || ' NULL STATUS_CODE , ';
7848 END IF;
7849 IF(l_supplier_name_col IS NOT NULL)THEN
7850 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_name_col ||' SUPPLIER_NAME , ';
7851 ELSE
7852 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NAME, ';
7853 END IF;
7854 IF(l_supplier_number_col IS NOT NULL)THEN
7855 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_number_col ||' SUPPLIER_NUMBER , ';
7856 ELSE
7857 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NUMBER , ';
7858 END IF;
7859 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_site_name_col ||' , ';
7860
7861 l_dyn_sql := l_dyn_sql || 'EBI.'||l_org_code_col ||' , ';
7862 l_dyn_sql := l_dyn_sql || '''SYNC'' , ';
7863 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
7864 --l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL, ';
7865 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATED_BY , ';
7866 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATION_DATE , ';
7867 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATED_BY , ';
7868 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_DATE , ';
7869 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_LOGIN , ';
7870 l_dyn_sql := l_dyn_sql || 'EBI.'||'REQUEST_ID , ';
7871 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_APPLICATION_ID , ';
7872 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_ID , ';
7873 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_UPDATE_DATE , ';
7874 l_dyn_sql := l_dyn_sql || ' NULL BUNDLE_ID , ';
7875 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
7876 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
7877 l_dyn_sql := l_dyn_sql || ' NULL ASSOCIATION_ID ';
7878 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
7879 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
7880 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
7881 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_name_col||' IS NOT NULL ';
7882 l_dyn_sql := l_dyn_sql || ' AND ''Y'' = '''||l_has_sup_sit_org_col||''' ';
7883
7884 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_site_name_col||' IS NOT NULL ) INTERSECTIONS ';
7885
7886 Write_Debug(l_dyn_sql);
7887
7888 -- bedajna bug 6429874
7889 -- EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
7890 IF ( (l_supplier_site_prim_flag_col IS NOT NULL) AND (l_supplier_site_status_col IS NOT NULL) AND (l_sup_site_store_status_col IS NOT NULL) ) then
7891 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7892 ELSIF ( (l_supplier_site_prim_flag_col IS NOT NULL) AND (l_supplier_site_status_col IS NOT NULL) AND (l_sup_site_store_status_col IS NULL) ) then
7893 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id, p_resultfmt_usage_id;
7894 ELSIF ( (l_supplier_site_prim_flag_col IS NOT NULL) AND (l_supplier_site_status_col IS NULL) AND (l_sup_site_store_status_col IS NOT NULL) ) then
7895 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, p_resultfmt_usage_id, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7896 ELSIF ( (l_supplier_site_prim_flag_col IS NULL) AND (l_supplier_site_status_col IS NOT NULL) AND (l_sup_site_store_status_col IS NOT NULL) ) then
7897 EXECUTE IMMEDIATE l_dyn_sql USING l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7898 ELSIF ( (l_supplier_site_prim_flag_col IS NOT NULL) AND (l_supplier_site_status_col IS NULL) AND (l_sup_site_store_status_col IS NULL) ) then
7899 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, p_resultfmt_usage_id, p_resultfmt_usage_id;
7900 ELSIF ( (l_supplier_site_prim_flag_col IS NULL) AND (l_supplier_site_status_col IS NOT NULL) AND (l_sup_site_store_status_col IS NULL) ) then
7901 EXECUTE IMMEDIATE l_dyn_sql USING l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id, p_resultfmt_usage_id;
7902 ELSIF ( (l_supplier_site_prim_flag_col IS NULL) AND (l_supplier_site_status_col IS NULL) AND (l_sup_site_store_status_col IS NOT NULL) ) then
7903 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7904 ELSIF ( (l_supplier_site_prim_flag_col IS NULL) AND (l_supplier_site_status_col IS NULL) AND (l_sup_site_store_status_col IS NULL) ) then
7905 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
7906 end if;
7907
7908 Write_Debug('Item Revs Interface: Populated the Inv Item IDs, Org IDs.');
7909
7910 END IF;
7911
7912 x_retcode := G_STATUS_SUCCESS;
7913 x_set_process_id := l_msii_set_process_id;
7914
7915 END load_intersections_interface;
7916
7917
7918
7919
7920
7921 END EGO_ITEM_BULKLOAD_PKG;