[Home] [Help]
PACKAGE BODY: APPS.EGO_ITEM_BULKLOAD_PKG
Source
1 PACKAGE BODY EGO_ITEM_BULKLOAD_PKG AS
2 /* $Header: EGOIBLKB.pls 120.90.12010000.3 2009/01/05 13:13:02 snandana 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 ----------------------------------------------------------
298 PRAGMA EXCEPTION_INIT(G_SEGMENT_SEQ_INVALID, -20000);
295 G_SEGMENT_SEQ_INVALID EXCEPTION;
296 G_DATA_TYPE_INVALID EXCEPTION;
297
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 l_log_output_dir VARCHAR2(512);
364 l_log_return_status VARCHAR2(99);
365 l_errbuff VARCHAR2(999);
366 BEGIN
367
368 Error_Handler.initialize();
369 Error_Handler.set_bo_identifier(G_BO_IDENTIFIER);
370
371 ---------------------------------------------------------------------------------
372 -- Commented on 12/17/2003 (PPEDDAMA). Open_Debug_Session should set the value
373 -- appropriately, so that when the Debug Session is successfully opened :
374 -- will return Error_Handler.Get_Debug = 'Y', else Error_Handler.Get_Debug = 'N'
375 ---------------------------------------------------------------------------------
376 -- Error_Handler.Set_Debug('Y');
377
378 OPEN c_get_utl_file_dir;
379 FETCH c_get_utl_file_dir INTO l_log_output_dir;
380 --developer_debug('UTL_FILE_DIR : '||l_log_output_dir);
381 IF c_get_utl_file_dir%FOUND THEN
382 ------------------------------------------------------
383 -- Trim to get only the first directory in the list --
384 ------------------------------------------------------
385 IF INSTR(l_log_output_dir,',') <> 0 THEN
386 l_log_output_dir := SUBSTR(l_log_output_dir, 1, INSTR(l_log_output_dir, ',') - 1);
387 --developer_debug('Log Output Dir : '||l_log_output_dir);
388 END IF;
389
390 G_ERROR_FILE_NAME := G_ERROR_TABLE_NAME||'_'||to_char(SYSDATE, 'DDMONYYYY_HH24MISS')||'.err';
391 --developer_debug('Trying to open the Error File => '||G_ERROR_FILE_NAME);
392
393 -----------------------------------------------------------------------
394 -- To open the Debug Session to write the Debug Log. --
395 -- This sets Debug value so that Error_Handler.Get_Debug returns 'Y' --
396 -----------------------------------------------------------------------
397 Error_Handler.Open_Debug_Session(
398 p_debug_filename => G_ERROR_FILE_NAME
399 ,p_output_dir => l_log_output_dir
400 ,x_return_status => l_log_return_status
401 ,x_error_mesg => l_errbuff
402 );
403
404 ---------------------------------------------------------------
405 -- Introduced for 11.5.10, so that Java Conc Program can --
406 -- continue writing to the same Error Log File. --
407 ---------------------------------------------------------------
408 G_ERRFILE_PATH_AND_NAME := l_log_output_dir||'/'||G_ERROR_FILE_NAME;
409
410 developer_debug(' Log file location --> '||l_log_output_dir||'/'||G_ERROR_FILE_NAME ||' created with status '|| l_log_return_status);
411
412 IF (l_log_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
413 developer_debug('Unable to open error log file. Error => '||l_errbuff);
414 END IF;
415
416 END IF;--IF c_get_utl_file_dir%FOUND THEN
417 -- Bug : 4099546
421
418 CLOSE c_get_utl_file_dir;
419 END open_debug_session_internal;
420
422 -----------------------------------------------------------
423 -- Open the Debug Session, conditionally if the profile: --
424 -- INV Debug Trace is set to TRUE --
425 -----------------------------------------------------------
426 PROCEDURE Open_Debug_Session IS
427
428 BEGIN
429 ----------------------------------------------------------------
430 -- Open the Debug Log Session, only if Profile is set to TRUE --
431 ----------------------------------------------------------------
432 IF (G_DEBUG = 1) THEN
433
434 ----------------------------------------------------------------------------------
435 -- Opens Error_Handler debug session, only if Debug session is not already open.
436 -- Suggested by RFAROOK, so that multiple debug sessions are not open PER
437 -- Concurrent Request.
438 ----------------------------------------------------------------------------------
439 IF (Error_Handler.Get_Debug <> 'Y') THEN
440 Open_Debug_Session_Internal;
441 END IF;
442
443 END IF;
444
445 END Open_Debug_Session;
446
447 -----------------------------------------------------------------
448 -- Close the Debug Session, only if Debug is already Turned ON --
449 -----------------------------------------------------------------
450 PROCEDURE Close_Debug_Session IS
451
452 BEGIN
453 -----------------------------------------------------------------------------
454 -- Close Error_Handler debug session, only if Debug session is already open.
455 -----------------------------------------------------------------------------
456 IF (Error_Handler.Get_Debug = 'Y') THEN
457 Error_Handler.Close_Debug_Session;
458 END IF;
459
460 END Close_Debug_Session;
461
462 -----------------------------------------------------------------
463 -- Replace all Single Quote to TWO Single Quotes, for Escaping --
464 -- NOTE: Used while inserting Strings using Dynamic SQL. --
465 -----------------------------------------------------------------
466 FUNCTION Escape_Single_Quote (p_String IN VARCHAR2)
467 RETURN VARCHAR2 IS
468
469 BEGIN
470
471 IF (p_String IS NOT NULL) THEN
472 ---------------------------------------------------
473 -- Replace all Single Quotes to 2 Single Quotes --
474 ---------------------------------------------------
475 RETURN REPLACE(p_String, '''', '''''');
476 ELSE
477 ----------------------------------------------
478 -- Return NULL, if the String is NULL or '' --
479 ----------------------------------------------
480 RETURN NULL;
481 END IF;
482
483 END Escape_Single_Quote;
484
485 PROCEDURE delete_records_from_MSII (p_set_process_id IN NUMBER) IS
486
487 TYPE char_tbl_type IS TABLE OF VARCHAR2(240);
488
489 l_dyn_sql VARCHAR2(32767) := '';
490 l_column_name char_tbl_type;
491 l_rows_processed NUMBER;
492 l_column_list VARCHAR2(32767) := '';
493
494 BEGIN
495 -----------------------------------------------------------------------
496 --Only in case of Import, and while importing Multi-Row attr group
497 --values : Item, Org, Catalog are NOT NULL, and rest of the base
498 --attributes are NULL. Hence can delete these rows off from MSII.
499 -----------------------------------------------------------------------
500
501 SELECT COLUMN_NAME
502 BULK COLLECT INTO l_column_name
503 FROM SYS.ALL_TAB_COLUMNS WHERE TABLE_NAME = 'MTL_SYSTEM_ITEMS_INTERFACE'
504 AND COLUMN_NAME NOT IN ('SET_PROCESS_ID',
505 'TRANSACTION_ID',
506 'REQUEST_ID',
507 'PROGRAM_APPLICATION_ID',
508 'PROGRAM_ID',
509 'TRANSACTION_TYPE',
510 'ITEM_NUMBER',
511 'ORGANIZATION_CODE',
512 'PROCESS_FLAG',
513 'SOURCE_SYSTEM_ID',
514 'SOURCE_SYSTEM_REFERENCE',
515 'ITEM_CATALOG_GROUP_ID',
516 'INTERFACE_TABLE_UNIQUE_ID',
517 'INVENTORY_ITEM_ID',
518 'ORGANIZATION_ID',
519 'LAST_UPDATE_DATE',
520 'LAST_UPDATED_BY',
521 'CREATION_DATE',
522 'CREATED_BY',
523 'LAST_UPDATE_LOGIN')
524 AND COLUMN_NAME NOT LIKE 'SEGMENT%'
525 AND COLUMN_NAME NOT LIKE 'GLOBAL_ATTRIBUTE%'
526 AND COLUMN_NAME NOT LIKE 'ATTRIBUTE%';
527
528 l_rows_processed := SQL%ROWCOUNT;
529
530 IF l_rows_processed > 0 THEN
531 FOR l_row_index IN 1..l_rows_processed LOOP
532 l_column_list := l_column_list || l_column_name(l_row_index) || ' IS NULL AND ';
533 END LOOP;
534 l_column_list := SUBSTR(l_column_list,1,length(l_column_list)-4);
535 END IF;
536
537 l_dyn_sql := '';
538 l_dyn_sql := l_dyn_sql || ' DELETE MTL_SYSTEM_ITEMS_INTERFACE MSII ' ;
539 l_dyn_sql := l_dyn_sql || ' WHERE ';
540 l_dyn_sql := l_dyn_sql || ' ( ';
541 l_dyn_sql := l_dyn_sql || ' (ITEM_NUMBER IS NOT NULL AND ORGANIZATION_CODE IS NOT NULL ) ';
542 l_dyn_sql := l_dyn_sql || ' OR ';
546 l_dyn_sql := l_dyn_sql || ' ) ';
543 l_dyn_sql := l_dyn_sql || ' ( SOURCE_SYSTEM_REFERENCE IS NOT NULL AND SOURCE_SYSTEM_ID IS NOT NULL ) '; --for non-PDH Batch
544 l_dyn_sql := l_dyn_sql || ' OR ';
545 l_dyn_sql := l_dyn_sql || ' (DESCRIPTION IS NULL AND SOURCE_SYSTEM_REFERENCE IS NULL AND SOURCE_SYSTEM_REFERENCE_DESC IS NULL ) ';
547 l_dyn_sql := l_dyn_sql || ' AND ';
548 l_dyn_sql := l_dyn_sql || ' ( ' || l_column_list || ' ) ';
549 l_dyn_sql := l_dyn_sql || ' AND SET_PROCESS_ID = :SET_PROCESS_ID_1 ';
550
551 ------------------------------------------------------------------------------------------------
552 -- Fix for 11.5.10: Including PROCESS_FLAG status during this DELETE operation.
553 --
554 -- When ERROR happens during PRIMARY_UOM_CODE processing (NOTE: This is the first
555 -- significant Value-to-ID conversion) then MSII.PROCESS_FLAG is set to something
556 -- other than 1. Because of this, the subsequent transfer of the Data from EBI to MSII
557 -- doesnot happen (as all SQLs check for EBI, MSII Process St atus to be 1 for transfer).
558 -- So, this DELETE will go through successfully, as all the columns are NULL (other than
559 -- ITEM_NUMBER, ORGANIZATION_CODE.)
560 -- Then EBI stays in PROCESS_STATUS = 1, which is later converted to 7 in Item_intf_completion.
561 --
562 -- Because of this User-Defined attrs for those rows are ERRONEOUSLY picked and processed.
563 ------------------------------------------------------------------------------------------------
564 l_dyn_sql := l_dyn_sql || ' AND PROCESS_FLAG = :PROCESS_STATUS_1 '; --Bug 3763665
565 l_dyn_sql := l_dyn_sql || ' AND ( ';
566 l_dyn_sql := l_dyn_sql || ' EXISTS ( '; -- there exists a row where item is being Created or updated in the same request
567 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
568 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_INTERFACE MSI ';
569 l_dyn_sql := l_dyn_sql || ' WHERE MSI.DESCRIPTION IS NOT NULL ';
570 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))';
571 l_dyn_sql := l_dyn_sql || ' AND SET_PROCESS_ID = :SET_PROCESS_ID_2 ';
572 l_dyn_sql := l_dyn_sql || ' AND PROCESS_FLAG = :PROCESS_STATUS_2 ';
573 l_dyn_sql := l_dyn_sql || ' ) ';
574 l_dyn_sql := l_dyn_sql || ' OR EXISTS( ';
575 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
576 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_B MSI ';
577 l_dyn_sql := l_dyn_sql || ' WHERE MSII.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID ';
578 l_dyn_sql := l_dyn_sql || ' AND MSII.ORGANIZATION_ID = MSI.ORGANIZATION_ID ';
579 l_dyn_sql := l_dyn_sql || ' ) ';-- End Bug 3763665
580 l_dyn_sql := l_dyn_sql || ' ) ';
581 Write_Debug(' DELETE MSII sql: '||l_dyn_sql);
582 IF (l_column_list IS NOT NULL) THEN
583 EXECUTE IMMEDIATE l_dyn_sql USING p_set_process_id,G_PROCESS_STATUS,p_set_process_id,G_PROCESS_STATUS;
584 END IF;
585 Write_Debug('delete_records_from_MSII : NEW Deleted redundant / unnecessary rows from MSII');
586 EXCEPTION
587 WHEN OTHERS THEN
588 RAISE;
589 END delete_records_from_MSII;
590 -----------------------------------------------------------------------
591 -- Fix for Bug# 3970069.
592 -- Insert into MTL_INTERFACE_ERRORS through autonomous transaction
593 -- commit. Earlier for any exception during Java Conc Program's
594 -- AM.commit(), the errors wouldnot get logged. By following Autonomous
595 -- Transaction block, that issue gets resolved.
596 -----------------------------------------------------------------------
597 PROCEDURE Insert_Mtl_Intf_Err( p_transaction_id IN VARCHAR2
598 , p_bo_identifier IN VARCHAR2
599 , p_error_entity_code IN VARCHAR2
600 , p_error_table_name IN VARCHAR2
601 , p_error_msg IN VARCHAR2
602 ) IS
603
604 PRAGMA AUTONOMOUS_TRANSACTION;
605
606 BEGIN
607 SetGobals();
608
609 INSERT INTO MTL_INTERFACE_ERRORS
610 ( ORGANIZATION_ID
611 , UNIQUE_ID
612 , LAST_UPDATE_DATE
613 , LAST_UPDATED_BY
614 , CREATION_DATE
615 , CREATED_BY
616 , LAST_UPDATE_LOGIN
617 , TABLE_NAME
618 , MESSAGE_NAME
619 , COLUMN_NAME
620 , REQUEST_ID
621 , PROGRAM_APPLICATION_ID
622 , PROGRAM_ID
623 , PROGRAM_UPDATE_DATE
624 , ERROR_MESSAGE
625 , TRANSACTION_ID
626 , ENTITY_IDENTIFIER
627 , BO_IDENTIFIER)
628 VALUES
629 ( NULL
630 , NULL
631 , SYSDATE
632 , G_USER_ID
633 , SYSDATE
634 , G_USER_ID
635 , G_LOGIN_ID
636 , p_error_table_name
637 , NULL
638 , NULL
639 , G_REQUEST_ID
640 , G_PROG_APPID
641 , G_PROG_ID
642 , SYSDATE
643 , p_error_msg
644 , p_transaction_id
645 , p_error_entity_code
646 , p_bo_identifier
647 );
648
649 COMMIT;
650
651 END Insert_Mtl_Intf_Err;
652
653 -----------------------------------------------------------------------
654 -- Fix for Bug# 3945885.
655 -- Generate Seq Item Numbers, for all Rows per ResultFmt_Usage_ID
656 -- where Item Number column are NULL.
657 -----------------------------------------------------------------------
658 PROCEDURE Log_ItemNums_ToBe_Processed(p_resultfmt_usage_id IN NUMBER,
662 ' SELECT '|| p_item_num_colname
659 p_item_num_colname IN VARCHAR2) IS
660
661 l_item_num_sql VARCHAR2(10000) :=
663 || ' FROM EGO_BULKLOAD_INTF '
664 || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
665 --|| ' AND PROCESS_STATUS = 1';
666
667 -----------------------------------------------------------------------
668 -- Variables used to query Item Number Generation Method
669 -----------------------------------------------------------------------
670 l_item_num_table DBMS_SQL.VARCHAR2_TABLE;
671 l_item_num_cursor INTEGER;
672 l_item_num_exec INTEGER;
673 l_item_num_rows_cnt NUMBER;
674
675 l_msg fnd_new_messages.message_text%TYPE;
676 -----------------------------------------------------------------------
677
678 BEGIN
679
680 l_item_num_cursor := DBMS_SQL.OPEN_CURSOR;
681 --Developer_Debug('l_item_num_sql => '||l_item_num_sql);
682
683 DBMS_SQL.PARSE(l_item_num_cursor, l_item_num_sql, DBMS_SQL.NATIVE);
684
685 DBMS_SQL.DEFINE_ARRAY(
686 c => l_item_num_cursor -- cursor --
687 , position => 1 -- select position --
688 , c_tab => l_item_num_table -- table of chars --
689 , cnt => 10000 -- rows requested --
690 , lower_bound => 1 -- start at --
691 );
692
693 DBMS_SQL.BIND_VARIABLE(l_item_num_cursor, ':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
694
695 l_item_num_exec := DBMS_SQL.EXECUTE(l_item_num_cursor);
696 l_item_num_rows_cnt := DBMS_SQL.FETCH_ROWS(l_item_num_cursor);
697
698 DBMS_SQL.COLUMN_VALUE(l_item_num_cursor, 1, l_item_num_table);
699 -- Bug : 4099546
700 DBMS_SQL.CLOSE_CURSOR(l_item_num_cursor);
701 FND_MESSAGE.SET_NAME('EGO','EGO_NUM_OF_ITEMS_PROCD');
702 l_msg := FND_MESSAGE.GET;
703
704 Developer_Debug(l_msg||' '||To_char(l_item_num_rows_cnt));
705
706 FND_MESSAGE.SET_NAME('EGO','EGO_ROW');
707 l_msg := FND_MESSAGE.GET;
708
709 IF (l_item_num_rows_cnt > 0) THEN
710 FOR i IN 1..l_item_num_rows_cnt LOOP
711 Developer_Debug(l_msg||' ['||i||'] = '||l_item_num_table(i));
712 END LOOP; --end: FOR i IN 1..l_item_num_rows_cnt LOOP
713 END IF; --end: IF (l_item_num_rows_cnt > 0) THEN
714
715 END Log_ItemNums_ToBe_Processed;
716
717 -- 5653266 commenting out the code
718 -- this procedure must be shifted to fag end of item_open_interface_process
719 -- in the package EGO_ITEM_OPEN_INTERFACE_PVT and the logging to be changed
720 -- to concurrent log and message must have tokens for item number and org
721 -- discuss with PM before implenenting the above change
722 /***
723 -----------------------------------------------------------------------
724 -- API FOR BUG 4101754 --
725 -- THIS API WOULD LOG A MESSAGE IN FOR EVERY SUCCESSFUL ITEM --
726 -- CREATED --
727 -----------------------------------------------------------------------
728 PROCEDURE Log_created_Items (REQUEST_ID IN NUMBER)
729 IS
730 l_item_num_sql VARCHAR2(10000);
731 l_item_num_table DBMS_SQL.VARCHAR2_TABLE;
732 l_transaction_id_table DBMS_SQL.NUMBER_TABLE;
733 l_item_num_cursor INTEGER;
734 l_item_num_exec INTEGER;
735 l_item_num_rows_cnt NUMBER;
736 l_msg fnd_new_messages.message_text%TYPE;
737 l_token_tbl Error_Handler.Token_Tbl_Type;
738
739 BEGIN
740
741 l_item_num_sql :=
742 ' SELECT SEGMENT1 , TRANSACTION_ID '
743 || ' FROM MTL_SYSTEM_ITEMS_INTERFACE '
744 || ' WHERE REQUEST_ID = '||REQUEST_ID
745 || ' AND PROCESS_FLAG = '||G_INTF_STATUS_SUCCESS
746 || ' AND TRANSACTION_TYPE = '''||G_CREATE||'''';
747
748 l_item_num_cursor := DBMS_SQL.OPEN_CURSOR;
749 DBMS_SQL.PARSE(l_item_num_cursor, l_item_num_sql, DBMS_SQL.NATIVE);
750 DBMS_SQL.DEFINE_ARRAY(
751 c => l_item_num_cursor
752 , position => 1
753 , c_tab => l_item_num_table
754 , cnt => 10000
755 , lower_bound => 1
756 );
757
758 DBMS_SQL.DEFINE_ARRAY(
759 c => l_item_num_cursor
760 , position => 2
761 , n_tab => l_transaction_id_table
762 , cnt => 10000
763 , lower_bound => 1
764 );
765
766 l_item_num_exec := DBMS_SQL.EXECUTE(l_item_num_cursor);
767 l_item_num_rows_cnt := DBMS_SQL.FETCH_ROWS(l_item_num_cursor);
768 DBMS_SQL.COLUMN_VALUE(l_item_num_cursor, 1, l_item_num_table);
769 DBMS_SQL.COLUMN_VALUE(l_item_num_cursor, 2, l_transaction_id_table);
770 DBMS_SQL.CLOSE_CURSOR(l_item_num_cursor);
771 IF (l_item_num_rows_cnt > 0) THEN
772 FOR i IN 1..l_item_num_rows_cnt LOOP
773 Developer_Debug(l_msg||' ['||i||'] = '||l_item_num_table(i));
774 Error_Handler.Add_Error_Message
775 ( p_message_name => 'EGO_ITEM_CREATION_SUCC'
779 , p_message_type => 'E'
776 , p_application_id => 'EGO'
777 , p_message_text => NULL
778 , p_token_tbl => l_token_tbl
780 , p_row_identifier => l_transaction_id_table(i)
781 , p_table_name => 'MTL_SYSTEM_ITEMS_INTERFACE'
782 , p_entity_id => NULL
783 , p_entity_index => NULL
784 , p_entity_code => G_ERROR_ENTITY_CODE
785 );
786 END LOOP;
787 END IF;
788
789 END Log_created_Items;
790 ***/
791
792 ------------------------------------------------------------------------------
793 -- Fix for Bug# 3945885.
794 --
795 -- API Name: Get_Seq_Gen_Item_Nums
796 --
797 -- Description:
798 -- API to return a Sequence of Item Numbers, given the ResultFmt_Usage_ID
799 -- and Item Catalog Group ID. Row count returned will be number of Rows per
800 -- ResultFmt_Usage_ID where Item Number column are NULL.
801 ------------------------------------------------------------------------------
802 PROCEDURE Get_Seq_Gen_Item_Nums(p_resultfmt_usage_id IN NUMBER,
803 p_item_catalog_group_id IN NUMBER,
804 p_item_num_colname IN VARCHAR2,
805 x_item_num_tbl IN OUT NOCOPY EGO_VARCHAR_TBL_TYPE) IS
806
807
808 --------------------------------------------------------------------
809 --Fetch the Org IDs in EBI, for which Item Number column is NULL
810 --------------------------------------------------------------------
811 l_org_id_sql VARCHAR2(10000) :=
812 ' SELECT '
813 || ' INSTANCE_PK2_VALUE '
814 || ' FROM EGO_BULKLOAD_INTF '
815 || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID'
816 || ' AND '|| p_item_num_colname ||' IS NULL '
817 || ' AND PROCESS_STATUS = 1';
818
819
820 -----------------------------------------------------------------------
821 -- Variables used to query Item Number Generation Method
822 -----------------------------------------------------------------------
823 l_org_id_table DBMS_SQL.VARCHAR2_TABLE;
824 l_org_id_cursor INTEGER;
825 l_org_id_exec INTEGER;
826 l_org_id_rows_cnt NUMBER;
827
828 l_item_num_tbl EGO_VARCHAR_TBL_TYPE;
829 l_exists VARCHAR2(1);
830 l_can_itemnum_gen BOOLEAN;
831 l_itemgen_rownum NUMBER;
832 l_new_itemgen_sql VARCHAR2(1000);
833 -----------------------------------------------------------------------
834
835 BEGIN
836
837 l_org_id_cursor := DBMS_SQL.OPEN_CURSOR;
838 --Write_Debug('l_org_id_sql => '||l_org_id_sql);
839
840 DBMS_SQL.PARSE(l_org_id_cursor, l_org_id_sql, DBMS_SQL.NATIVE);
841
842 DBMS_SQL.DEFINE_ARRAY(
843 c => l_org_id_cursor -- cursor --
844 , position => 1 -- select position --
845 , c_tab => l_org_id_table -- table of chars --
846 , cnt => 10000 -- rows requested --
847 , lower_bound => 1 -- start at --
848 );
849
850 DBMS_SQL.BIND_VARIABLE(l_org_id_cursor, ':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
851
852 l_org_id_exec := DBMS_SQL.EXECUTE(l_org_id_cursor);
853 l_org_id_rows_cnt := DBMS_SQL.FETCH_ROWS(l_org_id_cursor);
854
855 DBMS_SQL.COLUMN_VALUE(l_org_id_cursor, 1, l_org_id_table);
856
857 Write_Debug('Number of rows where ITEM_NUMBER is NULL => '||To_char(l_org_id_rows_cnt));
858
859 IF (l_org_id_rows_cnt > 0) THEN
860
861 EGO_ITEM_PVT.Get_Seq_Gen_Item_Nums
862 (
863 p_item_catalog_group_id => p_item_catalog_group_id
864 ,p_org_id_tbl => l_org_id_table
865 ,x_item_num_tbl => x_item_num_tbl
866 );
867 ELSE
868 x_item_num_tbl := NULL;
869 END IF; --end: IF (l_org_id_rows_cnt > 0) THEN
870 -- Bug : 4099546
871 DBMS_SQL.CLOSE_CURSOR(l_org_id_cursor);
872 END Get_Seq_Gen_Item_Nums;
873
874
875 ---------------------------------------------------------------------------
876 -- To return the Display value of Attribute, given the Attribute Code. --
877 ---------------------------------------------------------------------------
878 FUNCTION get_attr_display_name
879 (
880 p_attribute_code IN EGO_RESULTS_FORMAT_COLUMNS_V.ATTRIBUTE_CODE%TYPE
881 )
882 RETURN VARCHAR2 IS
883
884 l_attr_group_id NUMBER;
885 l_attr_id NUMBER;
886 l_temp_str VARCHAR2(30); --R12C UOM Changes
887 l_attr_group_disp_name EGO_ATTR_GROUPS_V.ATTR_GROUP_DISP_NAME%TYPE;
888 l_attr_disp_name EGO_ATTRS_V.ATTR_DISPLAY_NAME%TYPE;
889
890 CURSOR c_attr_group_disp_name(p_attr_group_id IN NUMBER) IS
891 SELECT attr_group_disp_name
892 FROM ego_attr_groups_v
893 WHERE attr_group_id = p_attr_group_id;
894
895 CURSOR c_attr_disp_name(p_attr_id IN NUMBER) IS
896 SELECT attr_display_name
897 FROM ego_attrs_v
898 WHERE attr_id = p_attr_id;
899
900 BEGIN
904
901
902 l_attr_group_id := To_Number(SUBSTR(p_attribute_code, 1, INSTR(p_attribute_code, '$$') - 1));
903 l_temp_str := SUBSTR(p_attribute_code, INSTR(p_attribute_code, '$$')+2);
905 IF (INSTR(l_temp_str, '$$UOM') > 0) THEN
906 l_temp_str:= SUBSTR(l_temp_str, 1, INSTR(l_temp_str, '$$')-1); --R12C UOM Changes
907 END IF;
908
909 l_attr_id := To_Number(l_temp_str);
910
911 OPEN c_attr_group_disp_name(l_attr_group_id);
912 FETCH c_attr_group_disp_name INTO l_attr_group_disp_name;
913 IF c_attr_group_disp_name%NOTFOUND THEN
914 l_attr_group_disp_name := NULL;
915 END IF;
916 CLOSE c_attr_group_disp_name;
917
918 OPEN c_attr_disp_name(l_attr_id);
919 FETCH c_attr_disp_name INTO l_attr_disp_name;
920 IF c_attr_disp_name%NOTFOUND THEN
921 l_attr_disp_name := NULL;
922 END IF;
923 CLOSE c_attr_disp_name;
924
925 IF (l_attr_group_disp_name IS NULL OR
926 l_attr_disp_name IS NULL) THEN
927 RETURN NULL;
928 ELSE
929 RETURN l_attr_group_disp_name||'.'||l_attr_disp_name;
930 END IF;
931
932 END;
933
934
935 -------------------------------------------------------------
936 -- Delete all the earlier loads from the same spreadsheet. --
937 -------------------------------------------------------------
938
939 PROCEDURE setup_buffer_intf_table(
940 p_resultfmt_usage_id IN NUMBER
941 ) IS
942
943 --------------------------------------------
944 -- Long Dynamic SQL String
945 --------------------------------------------
946 l_dyn_sql VARCHAR2(10000);
947
948 BEGIN
949
950 --Delete all the earlier loads from the same spreadsheet.
951 DELETE EGO_BULKLOAD_INTF
952 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
953 AND PROCESS_STATUS <> 1;
954
955
956 Write_Debug('Setting up the Error Debug File, so that Java Conc Program can use it.');
957 ---------------------------------------------------------------
958 -- Introduced for 11.5.10, so that Java Conc Program can --
959 -- continue writing to the same Error Log File. --
960 ---------------------------------------------------------------
961 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI';
962 l_dyn_sql := l_dyn_sql || ' SET '||G_ERR_LOGFILE_COL ||' = ''' || G_ERRFILE_PATH_AND_NAME ||'''';
963 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
964 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
965 --------------------------------------------------------------
966 -- Updates only 1 row that matches the criterion, for --
967 -- performance reasons. --
968 --------------------------------------------------------------
969 l_dyn_sql := l_dyn_sql || ' AND ROWNUM < 2 ';
970
971
972 Write_Debug(l_dyn_sql);
973
974 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
975
976 END setup_buffer_intf_table;
977
978
979 -------------------------------------------------------------
980 -- Sets if the Batch that is being processed in PDH or Not --
981 -------------------------------------------------------------
982
983 PROCEDURE setup_batch_info IS
984 l_source_system_id NUMBER;
985 BEGIN
986
987 Write_Debug('Setting up the batch info for : ' || G_MSII_SET_PROCESS_ID);
988
989 ---------------------------------------------------------------
990 -- Introduced for R12, so that the rest of the api call can --
991 -- set the process status/flag accordingly. --
992 ---------------------------------------------------------------
993 SELECT source_system_id into l_source_system_id
994 FROM EGO_IMPORT_BATCHES_B
995 WHERE batch_id = G_MSII_SET_PROCESS_ID;
996
997 IF l_source_system_id = EGO_IMPORT_PVT.Get_PDH_Source_System_Id THEN
998 G_PDH_BATCH := TRUE;
999 G_PROCESS_STATUS := 1;
1000 ELSE
1001 G_PDH_BATCH := FALSE;
1002 G_PROCESS_STATUS := 0;
1003 END IF;
1004
1005 Write_Debug('Setting process status to ' || G_PROCESS_STATUS);
1006
1007 EXCEPTION
1008 WHEN NO_DATA_FOUND THEN
1009 G_PDH_BATCH := TRUE;
1010 G_PROCESS_STATUS := 1;
1011
1012 END setup_batch_info;
1013
1014
1015 -- Bug: 3778006
1016 -------------------------------------------------------------------------
1017 -- Function to get description generation method for catalog category --
1018 -------------------------------------------------------------------------
1019 FUNCTION get_desc_gen_method(p_catalog_group_id NUMBER) RETURN VARCHAR2
1020 IS
1021 CURSOR c_cat_grp(c_catalog_group_id NUMBER) IS
1022 SELECT ITEM_DESC_GEN_METHOD, ITEM_CATALOG_GROUP_ID, LEVEL
1023 FROM MTL_ITEM_CATALOG_GROUPS_B
1024 WHERE LEVEL > 1
1025 CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID
1026 START WITH ITEM_CATALOG_GROUP_ID = c_catalog_group_id
1027 ORDER BY LEVEL;
1028
1029 l_desc_gen_method VARCHAR2(10) := 'U';
1030 BEGIN
1031 IF p_catalog_group_id IS NOT NULL THEN
1032 -----------------------------------------------------------------------
1033 -- Get the description generation method for catalog category itself --
1034 -----------------------------------------------------------------------
1035 SELECT ITEM_DESC_GEN_METHOD into l_desc_gen_method
1039 ------------------------------------------------------------------------
1036 FROM MTL_ITEM_CATALOG_GROUPS_B
1037 WHERE ITEM_CATALOG_GROUP_ID = p_catalog_group_id;
1038
1040 -- If the generation method is I i.e. inherit from parent, then check --
1041 -- parents till we get something other than I --
1042 ------------------------------------------------------------------------
1043 IF NVL(l_desc_gen_method, 'U') = 'I' THEN
1044 FOR i IN c_cat_grp(p_catalog_group_id) LOOP
1045 l_desc_gen_method := i.ITEM_DESC_GEN_METHOD;
1046 IF NVL(l_desc_gen_method, 'U') <> 'I' THEN
1047 EXIT;
1048 END IF;
1049 END LOOP;
1050 END IF;
1051
1052 ------------------------------------------------------------------------
1053 -- If the generation method is I even for the topmost parent, then --
1054 -- treat it as U (user entered) --
1055 ------------------------------------------------------------------------
1056 IF NVL(l_desc_gen_method, 'U') = 'I' THEN
1057 l_desc_gen_method := 'U';
1058 END IF;
1059
1060 END IF; -- end if p_catalog_group_id is not null
1061
1062 RETURN l_desc_gen_method;
1063
1064 EXCEPTION WHEN OTHERS THEN
1065 RETURN 'U';
1066 END get_desc_gen_method;
1067
1068 ----------------------------------------------------------
1069 -- Populate Item Interface Lines --
1070 ----------------------------------------------------------
1071
1072 PROCEDURE load_item_interface
1073 (
1074 p_resultfmt_usage_id IN NUMBER,
1075 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
1076 p_set_process_id IN NUMBER,
1077 x_set_process_id OUT NOCOPY NUMBER,
1078 x_errbuff OUT NOCOPY VARCHAR2,
1079 x_retcode OUT NOCOPY VARCHAR2
1080 ) IS
1081
1082 -- Start OF comments
1083 -- API name : Populate MSII Item Interface Lines
1084 -- TYPE : Public (called by Concurrent Program Wrapper API)
1085 -- Pre-reqs : None
1086 -- FUNCTION : Populate and Load Item interfance lines in MSII
1087 --
1088
1089
1090 ---------------------------------------------------------------
1091 -- To get the Item Base attr columns in the Result Format.
1092 ---------------------------------------------------------------
1093 CURSOR c_item_base_attr_intf_cols (c_resultfmt_usage_id IN NUMBER) IS
1094 SELECT attribute_code, intf_column_name
1095 FROM ego_results_fmt_usages
1096 WHERE resultfmt_usage_id = c_resultfmt_usage_id
1097 AND attribute_code NOT LIKE '%$$%'
1098 AND attribute_code <> 'APPROVAL_STATUS' -- bug: 3433942
1099 AND attribute_code NOT IN ('SUPPLIER_NAME','SUPPLIER_SITE','SUPPLIER_PRIMARY','SUPPLIER_STATUS','SUPPLIERSITE_STATUS'
1100 ,'SUPPLIERSITE_PRIMARY','SUPPLIERSITE_STORE_STATUS','SUPPLIER_NUMBER')
1101 AND attribute_code NOT IN --Segregating Item Base Attributes using this clause
1102 (
1103 select LOOKUP_CODE CODE
1104 from FND_LOOKUP_VALUES
1105 where LOOKUP_TYPE = 'EGO_ITEM_REV_HDR_ATTR_GRP'
1106 AND LANGUAGE = USERENV('LANG')
1107 AND ENABLED_FLAG = 'Y'
1108 )
1109 AND attribute_code <> G_REV_EFF_DATE_ATTR_CODE --Bug 6139409
1110 ORDER BY intf_column_name;-- Bug: 3340808
1111
1112 --------------------------------------------------------------------------
1113 -- To check if the given attribute code is a valid BOM Component Column.
1114 --------------------------------------------------------------------------
1115 CURSOR c_bom_comp_col_exists(c_attribute_code IN VARCHAR2) IS
1116 SELECT 'x'
1117 FROM bom_component_columns
1118 WHERE attribute_code = c_attribute_code
1119 AND parent_entity = 'ITEM';
1120 -- AND whereclause IS NOT NULL;
1121
1122 --------------------------------------------------------------------------
1123 -- To check if the given Set Process ID already exists in MSII.
1124 --------------------------------------------------------------------------
1125 CURSOR c_msii_set_id_exists(c_set_process_id IN NUMBER) IS
1126 SELECT 'x'
1127 FROM mtl_system_items_interface
1128 WHERE set_process_id = c_set_process_id;
1129
1130
1131 ---------------------------------------------------------------------
1132 -- Type Declarations
1133 ---------------------------------------------------------------------
1134 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
1135 INDEX BY BINARY_INTEGER;
1136
1137 -------------------------
1138 -- local variables --
1139 -------------------------
1140 l_prod_col_name_tbl VARCHAR_TBL_TYPE;
1141 l_intf_col_name_tbl VARCHAR_TBL_TYPE;
1142
1143 l_prod_col_name VARCHAR2(256);
1144 l_intf_col_name VARCHAR2(256);
1145
1146 ---------------------------------------------------------------------
1147 -- Assuming that the column name will not be more than 30 chars.
1148 ---------------------------------------------------------------------
1149 l_item_number_col VARCHAR2(50);
1150 l_org_code_col VARCHAR2(50);
1151 l_item_catalog_name_col VARCHAR2(50);
1152 l_primary_uom_col VARCHAR2(50);
1153 l_lifecycle_col VARCHAR2(50);
1154 l_lifecycle_phase_col VARCHAR2(50);
1158 l_lifecycle_col_val VARCHAR2(50);
1155 l_user_item_type_col VARCHAR2(50);
1156 l_bom_item_type_col VARCHAR2(50);
1157 l_eng_item_flag_col VARCHAR2(50);
1159 l_lifecycle_phase_col_val VARCHAR2(50);
1160 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
1161 l_conversions_col VARCHAR2(50);
1162 l_secondary_def_col VARCHAR2(50);
1163 l_dual_uom_dev_low_col VARCHAR2(50);
1164 l_dual_uom_dev_high_col VARCHAR2(50);
1165 l_ont_pricing_qty_src_col VARCHAR2(50);
1166 l_secondary_uom_code_col VARCHAR2(50);
1167 l_tracking_qty_ind_col VARCHAR2(50);
1168 --Bug: 3969593 End
1169
1170 l_catalog_group_id VARCHAR2(50);
1171 l_inventory_item_id MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE;
1172
1173 l_msii_set_process_id NUMBER;
1174 i NUMBER;
1175 l_cursor_select INTEGER;
1176 l_cursor_execute INTEGER;
1177
1178 l_item_number_table DBMS_SQL.VARCHAR2_TABLE;
1179 l_org_id_table DBMS_SQL.NUMBER_TABLE;
1180 l_trans_type_table DBMS_SQL.VARCHAR2_TABLE;
1181 l_trans_id_table DBMS_SQL.NUMBER_TABLE;
1182
1183 ---------------------------------------------------------------------
1184 -- This is to store the Sequence Generated Item Numbers.
1185 ---------------------------------------------------------------------
1186 -- l_gen_item_num_tbl EGO_VARCHAR_TBL_TYPE;
1187 -- l_gen_itemnum_indx NUMBER;
1188
1189 l_temp NUMBER(10) := 1;
1190 l_count NUMBER := 0;
1191 l_exists VARCHAR2(2);
1192 l_itemgen_count NUMBER;
1193
1194 l_value_to_id_col_exists BOOLEAN := FALSE;
1195 l_bom_col_exists BOOLEAN := FALSE;
1196 l_bom_prod_col_name VARCHAR2(50);
1197
1198 --------------------------------------------
1199 -- Long Dynamic SQL String
1200 --------------------------------------------
1201 l_dyn_sql VARCHAR2(10000);
1202 l_desc_gen_method VARCHAR2(10) := 'U'; -- Bug: 3778006
1203 --Bug 4713312
1204 l_col_name VARCHAR2(40);
1205
1206 BEGIN
1207
1208 Write_Debug('About to populate the EBI with Trans IDs');
1209 --------------------------------------------------------------------
1210 --Populate the Transaction IDs for current Result fmt usage ID
1211 --------------------------------------------------------------------
1212 UPDATE ego_bulkload_intf
1213 --The Transaction ID sequence that is used in INVPOPIF package to
1214 --auto-populate Transaction ID in MSII.
1215 SET transaction_id = MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL
1216 WHERE resultfmt_usage_id = p_resultfmt_usage_id;
1217
1218 Write_Debug('Retrieving the Display and INTF cols');
1219 i := 0;
1220 --------------------------------------------------------------------
1221 -- Saving the column names in local table for easy retrieval later.
1222 -- Also save important columns such as Item ID, Org ID etc.,
1223 --------------------------------------------------------------------
1224 FOR c_item_base_attr_intf_rec IN c_item_base_attr_intf_cols
1225 (
1226 p_resultfmt_usage_id
1227 )
1228 LOOP
1229
1230 l_prod_col_name := c_item_base_attr_intf_rec.attribute_code;
1231 l_intf_col_name := c_item_base_attr_intf_rec.intf_column_name;
1232
1233 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM) THEN
1234 OPEN c_bom_comp_col_exists(l_prod_col_name);
1235 FETCH c_bom_comp_col_exists INTO l_exists;
1236 IF c_bom_comp_col_exists%FOUND THEN
1237 l_bom_col_exists := TRUE;
1238 ELSE
1239 l_bom_col_exists := FALSE;
1240 END IF;
1241 CLOSE c_bom_comp_col_exists;
1242 END IF;
1243
1244
1245 IF (l_bom_col_exists = TRUE) THEN
1246 Write_Debug('The column: ' || l_prod_col_name || ' and BOM_COL_EXISTS value IS TRUE');
1247 ELSE
1248 Write_Debug('The column: ' || l_prod_col_name || ' and BOM_COL_EXISTS value IS FALSE');
1249 END IF;
1250
1251 Write_Debug('The caller identity is : '|| p_caller_identifier);
1252
1253 --------------------------------------------------------------------
1254 -- If the Caller Identifer is G_BOM and the column exists in
1255 -- BOM_COMPONENT_COLUMNS then fetch the Correct prod column
1256 -- name from BOM_COMPONENT_COLUMNS.
1257 --------------------------------------------------------------------
1258 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM AND
1259 l_bom_col_exists = TRUE AND l_prod_col_name <> G_ITEM_NUMBER)
1260 THEN
1261 SELECT BOM_INTF_COLUMN_NAME INTO l_bom_prod_col_name
1262 FROM BOM_COMPONENT_COLUMNS
1263 WHERE Attribute_Code = l_prod_col_name AND Parent_Entity = 'ITEM';
1264 Write_Debug('The column value from BCC: ' || l_bom_prod_col_name);
1265 IF l_bom_prod_col_name IS NOT NULL THEN
1266 l_prod_col_name := l_bom_prod_col_name;
1267 END IF;
1268 Write_Debug('The column value after getting from BCC: ' || l_prod_col_name);
1269 END IF;
1270
1271 --------------------------------------------------------------------
1272 -- If the Caller Identifer is G_ITEM, then save the column info.
1273 -- If the Caller Identifer is G_BOM, and the column exists in
1274 -- BOM_COMPONENT_COLUMNS, then save the column info.
1275 --------------------------------------------------------------------
1276 IF (
1280 )
1277 (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM) OR
1278 (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM AND
1279 l_bom_col_exists = TRUE
1281 ) THEN
1282 --------------------------------------------------------------------
1283 --Store the Item Number column name in the Generic Interface
1284 --------------------------------------------------------------------
1285 IF (l_prod_col_name = G_ITEM_NUMBER) THEN
1286 l_item_number_col := l_intf_col_name;
1287 Write_Debug('Item Number : '||l_item_number_col);
1288 --------------------------------------------------------------------
1289 --Store the Organization Code column name in the Generic Interface
1290 --------------------------------------------------------------------
1291 ELSIF (l_prod_col_name = G_ORG_CODE) THEN
1292 l_org_code_col := l_intf_col_name;
1293 Write_Debug('Organization Code : '||l_org_code_col);
1294 ELSE
1295 --------------------------------------------------------------------
1296 --Saving the Rest of column names.
1297 --------------------------------------------------------------------
1298 IF (l_prod_col_name = G_ITEM_CATALOG_GROUP) THEN
1299 l_item_catalog_name_col := l_intf_col_name;
1300 ELSIF (l_prod_col_name = G_PRIMARY_UOM) THEN
1301 l_primary_uom_col := l_intf_col_name;
1302 ELSIF (l_prod_col_name = G_LIFECYCLE) THEN
1303 l_lifecycle_col := l_intf_col_name;
1304 ELSIF (l_prod_col_name = G_LIFECYCLE_PHASE) THEN
1305 l_lifecycle_phase_col := l_intf_col_name;
1306 ELSIF (l_prod_col_name = G_USER_ITEM_TYPE) THEN
1307 l_user_item_type_col := l_intf_col_name;
1308 ELSIF (l_prod_col_name = G_BOM_ITEM_TYPE) THEN
1309 l_bom_item_type_col := l_intf_col_name;
1310 ELSIF (l_prod_col_name = G_ENG_ITEM_FLAG) THEN
1311 l_eng_item_flag_col := l_intf_col_name;
1312 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
1313 ELSIF (l_prod_col_name = G_CONVERSIONS) THEN
1314 l_conversions_col := l_intf_col_name;
1315 ELSIF (l_prod_col_name = G_SECONDARY_DEF_IND) THEN
1316 l_secondary_def_col := l_intf_col_name;
1317 ELSIF (l_prod_col_name = G_DUAL_UOM_DEV_LOW) THEN
1318 l_dual_uom_dev_low_col := l_intf_col_name;
1319 ELSIF (l_prod_col_name = G_DUAL_UOM_DEV_HIGH) THEN
1320 l_dual_uom_dev_high_col := l_intf_col_name;
1321 ELSIF (l_prod_col_name = G_ONT_PRICING_QTY_SRC) THEN
1322 l_ont_pricing_qty_src_col := l_intf_col_name;
1323 ELSIF (l_prod_col_name = G_SECONDARY_UOM_CODE) THEN
1324 l_secondary_uom_code_col := l_intf_col_name;
1325 ELSIF (l_prod_col_name = G_TRACKING_QTY_IND) THEN
1326 l_tracking_qty_ind_col := l_intf_col_name;
1327 --Bug: 3969593 End
1328 ELSIF (l_prod_col_name = G_INVENTORY_ITEM_STATUS) THEN-- required in error handler
1329 l_inventory_item_status_col := l_intf_col_name;
1330 ELSIF (l_prod_col_name = G_TRADE_ITEM_DESCRIPTOR) THEN
1331 -- R12C Pack Hierarchy Changes for Trade Item Descriptor --
1332 l_trade_item_descriptor_col := l_intf_col_name;
1333 END IF;
1334
1335 -- R12 - to update GTIN and GTIN description in MTL_SYSTEM_ITEMS_INTERFACE table
1336 IF (l_prod_col_name = G_GTIN_NUM_ATTR_CODE) THEN
1337 l_prod_col_name_tbl(i) := G_GTIN_NUM_DB_COL;
1338 ELSIF (l_prod_col_name = G_GTIN_DESC_ATTR_CODE) THEN
1339 l_prod_col_name_tbl(i) := G_GTIN_DESC_DB_COL;
1340 ELSE
1341 l_prod_col_name_tbl(i) := l_prod_col_name;
1342 END IF;
1343
1344 l_intf_col_name_tbl(i) := l_intf_col_name;
1345
1346 Write_Debug('l_prod_col_name_tbl('||i||') : '||l_prod_col_name_tbl(i));
1347 Write_Debug('l_intf_col_name_tbl('||i||') : '||l_intf_col_name_tbl(i));
1348 i := i+1;
1349 END IF; --end: IF (l_prod_col_name = G_ITEM_NUMBER) THEN
1350 END IF; --end: IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM)...
1351 END LOOP;--end: FOR c_item_base_attr_intf_rec..
1352
1353
1354 l_value_to_id_col_exists := FALSE;
1355
1356 -----------------------------------------------------------------------
1357 -- Save all Value-to-ID conversion columns in designated places in EBI.
1358 -----------------------------------------------------------------------
1359 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1360 l_dyn_sql := l_dyn_sql || ' SET ';
1361 IF l_item_catalog_name_col IS NOT NULL THEN
1362 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_EBI_COL||' = '||l_item_catalog_name_col|| ' ,';
1363 l_value_to_id_col_exists := TRUE;
1364 END IF;
1365 IF l_primary_uom_col IS NOT NULL THEN
1366 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_EBI_COL||' = '||l_primary_uom_col|| ' ,';
1367 l_value_to_id_col_exists := TRUE;
1368 END IF;
1369 IF l_lifecycle_col IS NOT NULL THEN
1370 l_dyn_sql := l_dyn_sql ||G_LIFECYCLE_EBI_COL||' = '||l_lifecycle_col|| ' ,';
1371 l_value_to_id_col_exists := TRUE;
1372 END IF;
1373 IF l_lifecycle_phase_col IS NOT NULL THEN
1374 l_dyn_sql := l_dyn_sql ||G_LIFECYCLE_PHASE_EBI_COL||' = '||l_lifecycle_phase_col|| ' ,';
1375 l_value_to_id_col_exists := TRUE;
1376 END IF;
1377 IF l_user_item_type_col IS NOT NULL THEN
1378 l_dyn_sql := l_dyn_sql ||G_USER_ITEM_TYPE_EBI_COL||' = '||l_user_item_type_col|| ' ,';
1379 l_value_to_id_col_exists := TRUE;
1380 END IF;
1384 END IF;
1381 IF l_bom_item_type_col IS NOT NULL THEN
1382 l_dyn_sql := l_dyn_sql ||G_BOM_ITEM_TYPE_EBI_COL||' = '||l_bom_item_type_col|| ' ,';
1383 l_value_to_id_col_exists := TRUE;
1385 IF l_eng_item_flag_col IS NOT NULL THEN
1386 l_dyn_sql := l_dyn_sql ||G_ENG_ITEM_FLAG_EBI_COL||' = '||l_eng_item_flag_col|| ' ,';
1387 l_value_to_id_col_exists := TRUE;
1388 END IF;
1389 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
1390 IF l_conversions_col IS NOT NULL THEN
1391 l_dyn_sql := l_dyn_sql ||G_CONVERSIONS_EBI_COL||' = '||l_conversions_col|| ' ,';
1392 l_value_to_id_col_exists := TRUE;
1393 END IF;
1394 IF l_secondary_def_col IS NOT NULL THEN
1395 l_dyn_sql := l_dyn_sql ||G_SECONDARY_DEF_IND_EBI_COL||' = '||l_secondary_def_col|| ' ,';
1396 l_value_to_id_col_exists := TRUE;
1397 END IF;
1398 IF l_ont_pricing_qty_src_col IS NOT NULL THEN
1399 l_dyn_sql := l_dyn_sql ||G_ONT_PRICING_QTY_SRC_EBI_COL||' = '||l_ont_pricing_qty_src_col|| ' ,';
1400 l_value_to_id_col_exists := TRUE;
1401 END IF;
1402 IF l_secondary_uom_code_col IS NOT NULL THEN
1403 l_dyn_sql := l_dyn_sql ||G_SECONDARY_UOM_CODE_EBI_COL||' = '||l_secondary_uom_code_col|| ' ,';
1404 l_value_to_id_col_exists := TRUE;
1405 END IF;
1406 IF l_tracking_qty_ind_col IS NOT NULL THEN
1407 l_dyn_sql := l_dyn_sql ||G_TRACKING_QTY_IND_EBI_COL||' = '||l_tracking_qty_ind_col|| ' ,';
1408 l_value_to_id_col_exists := TRUE;
1409 END IF;
1410 --Bug: 3969593 End
1411 --------------------------------
1412 --Remove the comma at the end.
1413 --------------------------------
1414 l_dyn_sql := Substr(l_dyn_sql, 1, Length(l_dyn_sql)-1);
1415 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1416 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1417 Write_Debug(l_dyn_sql);
1418
1419 IF l_value_to_id_col_exists = TRUE THEN
1420 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1421 Write_Debug('Updated EBI with Value-to-ID Conversion Cols');
1422 END IF;
1423
1424 Write_Debug('Updating EBI with Org IDs');
1425 -----------------------------------------------------
1426 -- Update Instance PK2 Value with ORG ID.
1427 -----------------------------------------------------
1428 l_dyn_sql := 'UPDATE EGO_BULKLOAD_INTF EBI';
1429 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK2_VALUE = ';
1430 l_dyn_sql := l_dyn_sql || ' ( ';
1431 l_dyn_sql := l_dyn_sql || ' SELECT ORGANIZATION_ID ';
1432 l_dyn_sql := l_dyn_sql || ' FROM MTL_PARAMETERS ';
1433 l_dyn_sql := l_dyn_sql || ' WHERE ORGANIZATION_CODE =EBI.'||l_org_code_col;
1434 l_dyn_sql := l_dyn_sql || ' ) ';
1435 l_dyn_sql := l_dyn_sql || 'WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1436 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1437
1438 Write_Debug(l_dyn_sql);
1439
1440 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1441 --------------------------------------------------------------------
1442 -- Fix for Bug# 3945885.
1443 -- Fetch Item Numbers for rows where Item Number is NULL
1444 --------------------------------------------------------------------
1445 -- commenting as a part of 6118945
1446 --
1447 -- IF(G_PDH_BATCH) THEN
1448 -- Get_Seq_Gen_Item_Nums(
1449 -- p_resultfmt_usage_id => p_resultfmt_usage_id
1450 -- ,p_item_catalog_group_id => G_CATALOG_GROUP_ID
1451 -- ,p_item_num_colname => l_item_number_col
1452 -- ,x_item_num_tbl => l_gen_item_num_tbl
1453 -- );
1454 -- END IF;
1455 --
1456 -- IF (l_gen_item_num_tbl IS NULL) THEN
1457 -- Write_Debug('Item Number *could not* be Generated !!!');
1458 -- ELSE
1459 ---- Write_Debug('Item Numbers *were* be Generated !!! Count => '||l_gen_item_num_tbl.LAST);
1460 -- Write_Debug('Item Numbers *were* be Generated !!! Count => '||l_gen_item_num_tbl.COUNT);
1461 -- --FOR i IN 1..l_gen_item_num_tbl.LAST LOOP
1462 -- -- Write_Debug('Item Number ['||i||'] => '||l_gen_item_num_tbl(i));
1463 -- --END LOOP;
1464 -- END IF;
1465 --
1466 -- Write_Debug('Selecting Org IDs, Item Numbers');
1467 --
1468 -------------------------------------------------------------
1469 --Fetch Organization ID, Item Number in Temp PLSQL tables.
1470 -------------------------------------------------------------
1471 l_dyn_sql := 'SELECT ';
1472 l_dyn_sql := l_dyn_sql || ' INSTANCE_PK2_VALUE , ';
1473 l_dyn_sql := l_dyn_sql || l_item_number_col ||' , ';
1474 ----------------------------------------------------------------------
1475 -- Upcasing the Transaction Type, for fixing Trans Type related bugs
1476 ----------------------------------------------------------------------
1477 l_dyn_sql := l_dyn_sql || ' UPPER(TRANSACTION_TYPE) , ';
1478 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID ';
1479 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF ';
1480 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1481 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1';
1482 -- l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col ||' IS NOT NULL';
1483
1484 Write_Debug(l_dyn_sql);
1485
1486 l_cursor_select := DBMS_SQL.OPEN_CURSOR;
1487 DBMS_SQL.PARSE(l_cursor_select, l_dyn_sql, DBMS_SQL.NATIVE);
1488 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 1,l_org_id_table,2500, l_temp);
1492
1489 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 2,l_item_number_table,2500, l_temp);
1490 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 3,l_trans_type_table,2500, l_temp);
1491 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 4,l_trans_id_table,2500, l_temp);
1493 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
1494 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_select);
1495 Write_Debug('About to start the Loop to fetch Rows');
1496
1497 -------------------------------------------------------------
1498 -- Separate Index to keep track of Generated Item Numbers.
1499 -------------------------------------------------------------
1500 -- commenting as a part of 6118945
1501 -- IF (l_gen_item_num_tbl IS NOT NULL AND
1502 -- l_gen_item_num_tbl.LAST > 0
1503 -- ) THEN
1504 -- l_gen_itemnum_indx := l_gen_item_num_tbl.FIRST;
1505 -- END IF;
1506
1507 LOOP
1508 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
1509 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 1, l_org_id_table);
1510 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 2, l_item_number_table);
1511 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 3, l_trans_type_table);
1512 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 4, l_trans_id_table);
1513
1514 Write_Debug('Retrieved rows => '||To_char(l_count));
1515
1516 -------------------------------------------------------------
1517 -- Loop to Update the Inventory Item IDs.
1518 -------------------------------------------------------------
1519 FOR i IN l_temp..l_org_id_table.COUNT LOOP --Bug: 4211498 Modified initialize cnter
1520
1521 Write_Debug('Org ID : '||To_char(l_org_id_table(i)));
1522 Write_Debug('Inv Item Num : '||l_item_number_table(i));
1523 Write_Debug('Transaction Type : '||l_trans_type_table(i));
1524 l_temp := l_org_id_table.COUNT; --Bug:4211498
1525 -------------------------------------------------------------
1526 -- If Inventory Item ID found, then update in EBI.
1527 -------------------------------------------------------------
1528 IF FND_FLEX_KEYVAL.Validate_Segs
1529 ( operation => 'FIND_COMBINATION'
1530 , appl_short_name => 'INV'
1531 , key_flex_code => 'MSTK'
1532 , structure_number => 101
1533 , concat_segments => l_item_number_table(i)
1534 , data_set => l_org_id_table(i)
1535 )
1536 THEN
1537 l_inventory_item_id := FND_FLEX_KEYVAL.combination_id;
1538
1539 Write_Debug('Inv Item ID : '||To_char(l_inventory_item_id));
1540
1541 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1542 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK1_VALUE = '||l_inventory_item_id;
1543 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = '||l_org_id_table(i);
1544 l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col|| ' = :ITEM_NUMBER';
1545 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1546 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1547
1548 Write_Debug(l_dyn_sql);
1549 EXECUTE IMMEDIATE l_dyn_sql USING l_item_number_table(i), p_resultfmt_usage_id;
1550 END IF;
1551
1552
1553 --l_inventory_item_id := FND_FLEX_KEYVAL.combination_id;
1554
1555 -------------------------------------------------------------
1556 --Determining if Item Creation.
1557 -------------------------------------------------------------
1558 /**IF (
1559 (l_trans_type_table(i) = G_CREATE) OR
1560 (l_trans_type_table(i) = G_SYNC)
1561 ) THEN**/
1562
1563 Write_Debug('G_CATALOG_GROUP_ID => '||G_CATALOG_GROUP_ID);
1564 -----------------------------------------------------------------
1565 -- Setting Category ID in case where User enters the Catalog Name
1566 -- from Excel
1567 -- Bug #4652582(RSOUNDAR)
1568 -----------------------------------------------------------------
1569 IF G_CATALOG_GROUP_ID IS NULL THEN
1570 IF l_item_catalog_name_col IS NOT NULL THEN
1571 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI';
1572 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = ';
1573 l_dyn_sql := l_dyn_sql || '( ';
1574 l_dyn_sql := l_dyn_sql || ' SELECT TO_CHAR(MICG.ITEM_CATALOG_GROUP_ID) ';
1575 l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG ';
1576 l_dyn_sql := l_dyn_sql || ' WHERE MICG.CONCATENATED_SEGMENTS = EBI.'||l_item_catalog_name_col;
1577 l_dyn_sql := l_dyn_sql || ') ';
1578 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1579 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_item_catalog_name_col||' IS NOT NULL';
1580 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1581 Write_Debug(l_dyn_sql);
1582 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1583 ELSE -- l_item_catalog_name_col IS NULL
1584 -- no need to do anything here
1585 NULL;
1586 END IF; -- l_item_catalog_name_col IS NOT NULL
1587 ELSE -- G_CATALOG_GROUP_ID IS NOT NULL
1588 /* Since Item Number can be NULL, removing its reference from the WHERE Clause.
1589
1590 l_dyn_sql := '';
1591 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1595 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = '||G_CATALOG_GROUP_ID;
1592 -------------------------------------------------------------
1593 --Storing Catalog Group ID and other imp data in buffer cols
1594 -------------------------------------------------------------
1596 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = '||l_org_id_table(i);
1597 l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col|| ' = :ITEM_NUMBER';
1598 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1599 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1600
1601 EXECUTE IMMEDIATE l_dyn_sql USING l_item_number_table(i), p_resultfmt_usage_id;
1602 */
1603 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1604 -------------------------------------------------------------
1605 --Storing Catalog Group ID and other imp data in buffer cols
1606 -------------------------------------------------------------
1607 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = '||G_CATALOG_GROUP_ID;
1608 -----------------------------------------------------------------
1609 -- Fix for Bug# 3945885.
1610 -- When Item Number in EXCEL is NULL, populate with the Sequence
1611 -- generated Item Number.
1612 -----------------------------------------------------------------
1613 -- commenting as a part of 6118945
1614 -- IF (l_item_number_table(i) IS NULL AND
1615 -- (l_gen_item_num_tbl IS NOT NULL AND
1616 -- l_gen_item_num_tbl(l_gen_itemnum_indx) IS NOT NULL)
1617 -- ) THEN
1618 --
1619 -- l_dyn_sql := l_dyn_sql || ' , '||l_item_number_col||' = '''||Escape_Single_Quote(l_gen_item_num_tbl(l_gen_itemnum_indx))||'''';
1620 -- ---------------------------------------------------------------------------
1621 -- -- Increment only if Item Number is used.
1622 -- -- NOTE: If l_gen_itemnum_indx = l_gen_item_num_tbl.LAST and still the loop
1623 -- -- is continuing, then need to fetch few more Seq Gen Item Numbers.
1624 -- ---------------------------------------------------------------------------
1625 -- l_gen_itemnum_indx := l_gen_itemnum_indx + 1;
1626 --
1627 -- END IF;
1628 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = :ORGANIZATION_ID ';
1629 l_dyn_sql := l_dyn_sql || ' AND TRANSACTION_ID = :TRANSACTION_ID ';
1630 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1631 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1632
1633 Write_Debug(l_dyn_sql);
1634 EXECUTE IMMEDIATE l_dyn_sql USING l_org_id_table(i), l_trans_id_table(i), p_resultfmt_usage_id;
1635
1636 END IF;--end: IF (l_catalog_group_id IS NOT NULL)
1637
1638 --END IF; --end: IF (l_trans_type_table(i) = G_CREATE) ..
1639
1640 --end: IF FND_FLEX_KEVAL..
1641
1642 END LOOP; --FOR i IN 1..l_org_id_table.COUNT LOOP
1643
1644 -----------------------------------------------------------------
1645 -- Clear all the tables after use.
1646 -----------------------------------------------------------------
1647 /*Bug:4211498
1648 l_org_id_table.DELETE;
1649 l_item_number_table.DELETE;
1650 l_trans_type_table.DELETE;
1651 l_trans_id_table.DELETE;
1652 */
1653 -----------------------------------------------------------------
1654 -- For the final batch of records, either it will be 0 or < 2500
1655 -----------------------------------------------------------------
1656 EXIT WHEN l_count <> 2500;
1657
1658 END LOOP;
1659
1660 DBMS_SQL.CLOSE_CURSOR(l_cursor_select);
1661
1662 Write_Debug('Done with Item IDs population.');
1663
1664 Write_Debug('Populating item number into ego_bulkload_intf for function generated items');
1665 IF G_PDH_BATCH THEN
1666 /***
1667 l_dyn_sql := ' UPDATE ego_bulkload_intf ebi' ||
1668 ' SET '||l_item_number_col||' = ''$$FG-''||TO_CHAR(transaction_id)'||
1669 ' ,c_fix_column12 = TO_CHAR(transaction_id)'||
1670 ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID'||
1671 ' AND '||G_ITEM_CATALOG_EBI_COL||' IS NOT NULL'||
1672 ' AND process_status = 1'||
1673 ' AND 10 < '||
1674 ' ( SELECT LENGTH ( MIN ('||
1675 ' CASE WHEN ITEM_NUM_GEN_METHOD = ''F'' '||
1676 ' AND (PRIOR ITEM_NUM_GEN_METHOD IS NULL OR PRIOR ITEM_NUM_GEN_METHOD = ''I'') ' ||
1677 ' THEN LPAD(LEVEL, 8, ''0'')||''XX''||TO_CHAR(item_num_action_id) '||
1678 ' WHEN item_num_gen_method IN (''U'', ''S'') '||
1679 ' THEN LPAD(LEVEL, 8, ''0'')||''XX'' '||
1680 ' ELSE NULL ' ||
1681 ' END )'||
1682 ' )'||
1683 ' FROM MTL_ITEM_CATALOG_GROUPS_B '||
1684 ' CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID ';
1685 ***/
1686 --
1687 -- R12C changes Tag_Function_Gen_Item_Nums with item_num as $$FG-transaction_id
1688 -- populate item number col if null but always set the source system reference
1689 --
1690 l_dyn_sql := ' UPDATE ego_bulkload_intf ebi' ||
1694 ' AND '||G_ITEM_CATALOG_EBI_COL||' IS NOT NULL'||
1691 ' SET '||l_item_number_col||' = NVL( '||l_item_number_col||', ''$$FG-''||TO_CHAR(transaction_id) )'||
1692 ' ,c_fix_column12 = TO_CHAR(transaction_id)'||
1693 ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID'||
1695 ' AND UPPER(ebi.transaction_type) IN (''CREATE'',''SYNC'') '||
1696 ' AND process_status = 1'||
1697 ' AND ''F'' = '||
1698 ' ( SELECT item_num_gen_method'||
1699 ' FROM mtl_item_catalog_groups_b '||
1700 ' WHERE NVL(item_num_gen_method,''I'') IN (''U'',''S'', ''F'') '||
1701 ' AND ROWNUM = 1 '||
1702 ' CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID';
1703 IF G_CATALOG_GROUP_ID IS NULL THEN
1704 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = ebi.'||G_ITEM_CATALOG_EBI_COL;
1705 ELSE
1706 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = :CATALOG_GROUP_ID';
1707 END IF;
1708 l_dyn_sql := l_dyn_sql ||' )';
1709 Write_Debug(' SQL to generate function generated item numbers: '||l_dyn_sql);
1710 IF G_CATALOG_GROUP_ID IS NULL THEN
1711 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1712 ELSE
1713 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, G_CATALOG_GROUP_ID;
1714 END IF;
1715 Write_Debug(' SQL to generate function generated item numbers DONE ');
1716
1717 --
1718 -- R12C changes Tag_Sequence_Gen_Item_Nums with item_num as $$SG-transaction_id
1719 -- populate item number col if null but always set the source system reference
1720 --
1721 l_dyn_sql := ' UPDATE ego_bulkload_intf ebi' ||
1722 ' SET '||l_item_number_col||' = NVL( '||l_item_number_col||', ''$$SG-''||TO_CHAR(transaction_id) )'||
1723 ' ,c_fix_column12 = TO_CHAR(transaction_id)'||
1724 ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID'||
1725 ' AND '||G_ITEM_CATALOG_EBI_COL||' IS NOT NULL'||
1726 ' AND UPPER(ebi.transaction_type) IN (''CREATE'',''SYNC'') '||
1727 ' AND process_status = 1'||
1728 ' AND ''S'' = '||
1729 ' ( SELECT item_num_gen_method'||
1730 ' FROM mtl_item_catalog_groups_b '||
1731 ' WHERE NVL(item_num_gen_method,''I'') IN (''U'',''S'', ''F'') '||
1732 ' AND ROWNUM = 1 '||
1733 ' CONNECT BY PRIOR PARENT_CATALOG_GROUP_ID = ITEM_CATALOG_GROUP_ID';
1734 IF G_CATALOG_GROUP_ID IS NULL THEN
1735 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = ebi.'||G_ITEM_CATALOG_EBI_COL;
1736 ELSE
1737 l_dyn_sql := l_dyn_sql || ' START WITH ITEM_CATALOG_GROUP_ID = :CATALOG_GROUP_ID';
1738 END IF;
1739 l_dyn_sql := l_dyn_sql ||' )';
1740 Write_Debug(' SQL to generate sequence generated item numbers: '||l_dyn_sql);
1741 IF G_CATALOG_GROUP_ID IS NULL THEN
1742 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1743 ELSE
1744 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, G_CATALOG_GROUP_ID;
1745 END IF;
1746 Write_Debug(' SQL to generate sequence generated item numbers DONE ');
1747 END IF;
1748
1749 -----------------------------------------------------------------
1750 -- Determine the Set Process ID, that is unique for MSII
1751 -----------------------------------------------------------------
1752 IF p_set_process_id IS NULL THEN
1753 SELECT mtl_system_items_intf_sets_s.NEXTVAL
1754 INTO l_msii_set_process_id
1755 FROM dual;
1756 ELSE
1757 l_msii_set_process_id := p_set_process_id;
1758 END IF;
1759
1760 Write_Debug('l_msii_set_process_id : '||To_char(l_msii_set_process_id));
1761 Write_Debug('PROCESS_FLAG : '||To_char(G_PROCESS_STATUS));
1762
1763 -----------------------------------------------------------------
1764 -- Insert rows from EBI into MSII
1765 -----------------------------------------------------------------
1766 l_dyn_sql := 'INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE MSII';
1767 l_dyn_sql := l_dyn_sql || ' ( ';
1768 l_dyn_sql := l_dyn_sql || ' SET_PROCESS_ID , ';
1769 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
1770 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
1771 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID, ';
1772 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
1773 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
1774 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
1775 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
1776 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
1777 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
1778 l_dyn_sql := l_dyn_sql || ' ITEM_CATALOG_GROUP_ID, ';
1779 l_dyn_sql := l_dyn_sql || ' ITEM_CATALOG_GROUP_NAME, ';
1780 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG, ';
1781 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID, ';
1782 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE, ';
1783 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE_DESC ';
1784 l_dyn_sql := l_dyn_sql || ') ';
1785 l_dyn_sql := l_dyn_sql || ' SELECT ';
1786 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
1787 l_dyn_sql := l_dyn_sql || ' EBI.TRANSACTION_ID , ';
1788 l_dyn_sql := l_dyn_sql || G_REQUEST_ID||' , ';
1792 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
1789 l_dyn_sql := l_dyn_sql || G_PROG_APPID||' , ';
1790 l_dyn_sql := l_dyn_sql || G_PROG_ID||' , ';
1791 l_dyn_sql := l_dyn_sql || ' UPPER(EBI.TRANSACTION_TYPE) , ';
1793 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
1794 /* 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 */
1795 l_dyn_sql := l_dyn_sql || ' REPLACE( EBI.'||l_item_number_col ||', ''\'', ''\\'') , ';
1796 -- l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
1797 l_dyn_sql := l_dyn_sql || ' EBI.'||l_org_code_col ||' , ';
1798 l_dyn_sql := l_dyn_sql || ' EBI.'||G_ITEM_CATALOG_EBI_COL||' , ';
1799 --------------------------------------------------------------------
1800 --Bug 4652582 (RSOUNDAR) Catalog Group Name is also required in MSII
1801 --------------------------------------------------------------------
1802 l_dyn_sql := l_dyn_sql || ' EBI.'||G_ITEM_CATALOG_NAME_EBI_COL||' , ';
1803 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
1804 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
1805 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
1806 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN13 ';
1807 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1808 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1809 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1';
1810
1811 Write_Debug(l_dyn_sql);
1812 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1813 Write_Debug('MSII: Populated the Inv Item IDs, Org IDs.');
1814
1815 ----------------------------------------------------------------------------------
1816 --Save Item Num, Org Code in designated columns in EBI for Error Reporting later
1817 ----------------------------------------------------------------------------------
1818 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
1819 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_NUMBER_EBI_COL||' = '||l_item_number_col||' , ';
1820 l_dyn_sql := l_dyn_sql || G_ORG_CODE_EBI_COL||' = '||l_org_code_col ;
1821 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1822 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
1823
1824 Write_Debug(l_dyn_sql);
1825 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1826 Write_Debug('Items Interface: Done saving Item Num, Org Code in EBI for error retrieval later.');
1827
1828 ---------------------------------------
1829 -- Reset i back to 0, for re-use.
1830 ---------------------------------------
1831 i := 0;
1832 IF ( l_prod_col_name_tbl.count > 0) THEN
1833 FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
1834 Write_Debug('$l_prod_col_name_tbl(i)'||l_prod_col_name_tbl(i));
1835 Write_Debug('$l_intf_col_name_tbl(i)'||l_intf_col_name_tbl(i));
1836
1837 ----------------------------------------------------------------------------------
1838 -- Transfer the Item Catalog Group information from EBI to MSII
1839 -- by doing Value-to-ID Conversion.
1840 ----------------------------------------------------------------------------------
1841 ---------------------------------------------------------------------
1842 --Bug#4652582 (RSOUNDAR)
1843 --(Catalog Name validation will be done by IOI)
1844 ---------------------------------------------------------------------
1845 -- IF (l_prod_col_name_tbl(i) = G_ITEM_CATALOG_GROUP) THEN
1846 -- l_dyn_sql := '';
1847 -- l_dyn_sql := l_dyn_sql || 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1848 -- l_dyn_sql := l_dyn_sql || ' SET (MSII.ITEM_CATALOG_GROUP_ID, MSII.PROCESS_FLAG)=';
1849 -- l_dyn_sql := l_dyn_sql || '( ';
1850 -- l_dyn_sql := l_dyn_sql || ' SELECT MICG.ITEM_CATALOG_GROUP_ID ';
1851 -- l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(MICG.ITEM_CATALOG_GROUP_ID, -1), -1,'||G_ITEM_CATALOG_NAME_ERR_STS||', ' || G_PROCESS_STATUS || ' ) ';
1852 -- l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG, EGO_BULKLOAD_INTF EBI ';
1853 -- l_dyn_sql := l_dyn_sql || ' WHERE MICG.CONCATENATED_SEGMENTS(+) = EBI.'||l_intf_col_name_tbl(i);
1854 -- l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1855 -- l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1856 -- ----------------------------------------------------------------------------------
1857 -- -- WHERE EXISTS takes care of filtering lines. Hence this join not needed.
1858 -- -- l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1859 -- ----------------------------------------------------------------------------------
1860 -- l_dyn_sql := l_dyn_sql || ') ';
1861 -- l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
1862 -- l_dyn_sql := l_dyn_sql || '( ';
1863 -- l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1864 -- l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1865 -- l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1866 -- l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1867 -- ----------------------------------------------------------------------------------
1868 -- -- Validate only for the NOT NULL values, and update MSII.
1869 -- -- NULL values dont need to go in.
1873 -- l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS ;
1870 -- ----------------------------------------------------------------------------------
1871 -- l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
1872 -- l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1874 -- l_dyn_sql := l_dyn_sql || ') ';
1875 --
1876 -- Write_Debug(l_dyn_sql);
1877 -- EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
1878 -- Write_Debug('MSII: Updated the Catalog Group IDs.');
1879
1880 ----------------------------------------------------------------------------------
1881 -- Transfer the Primary Unit of Measure information from EBI to MSII
1882 -- by doing Value-to-ID Conversion.
1883 ----------------------------------------------------------------------------------
1884
1885 IF (l_prod_col_name_tbl(i) = G_PRIMARY_UOM) THEN
1886
1887 -- populating MSII with PRIMARY_UOM_CODE if exists
1888 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1889 l_dyn_sql := l_dyn_sql || ' SET (MSII.PRIMARY_UOM_CODE ';
1890 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
1891 l_dyn_sql := l_dyn_sql || '( ';
1892 l_dyn_sql := l_dyn_sql || ' SELECT MUOM.UOM_CODE ';
1893 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(MUOM.UOM_CODE, ''NULL''),''NULL'','||G_PRIMARY_UOM_ERR_STS||', ' || G_PROCESS_STATUS || ' ) ';
1894 l_dyn_sql := l_dyn_sql || ' FROM MTL_UNITS_OF_MEASURE_TL MUOM, EGO_BULKLOAD_INTF EBI ';
1895 l_dyn_sql := l_dyn_sql || ' WHERE MUOM.UNIT_OF_MEASURE_TL (+) = EBI.'||l_intf_col_name_tbl(i);
1896 l_dyn_sql := l_dyn_sql || ' AND MUOM.LANGUAGE (+) = Userenv(''LANG'') ';
1897 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1898 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1899 l_dyn_sql := l_dyn_sql || ') ';
1900 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
1901 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
1902 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
1903 l_dyn_sql := l_dyn_sql || '( ';
1904 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1905 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1906 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1907 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1908 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
1909 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1910 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1911 l_dyn_sql := l_dyn_sql || ') ';
1912
1913 Write_Debug(l_dyn_sql);
1914 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
1915
1916 -- populating MSII with PRIMARY_UOM_CODE if special char for null out exists
1917 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1918 l_dyn_sql := l_dyn_sql || ' SET MSII.PRIMARY_UOM_CODE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1919 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
1920 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
1921 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
1922 l_dyn_sql := l_dyn_sql || '( ';
1923 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1924 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1925 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1926 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1927 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1928 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1929 l_dyn_sql := l_dyn_sql || ') ';
1930
1931 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
1932 Write_Debug('MSII: Updated the Primary UOMs.');
1933
1934 ----------------------------------------------------------------------------------
1935 -- Bug# 3421497 fix.
1936 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
1937 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
1938 -- dependant upon the Lifecycle ID value.
1939 ----------------------------------------------------------------------------------
1940 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE) THEN
1941
1942 l_lifecycle_col_val := l_intf_col_name_tbl(i);
1943
1944 ----------------------------------------------------------------------------------
1945 -- Bug# 3421497 fix.
1946 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
1947 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
1948 -- dependant upon the Lifecycle ID value.
1949 ----------------------------------------------------------------------------------
1950 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE_PHASE) THEN
1951
1952 l_lifecycle_phase_col_val := l_intf_col_name_tbl(i);
1953
1957 ----------------------------------------------------------------------------------
1954 ----------------------------------------------------------------------------------
1955 -- Transfer the User Item Type information from EBI to MSII
1956 -- by doing Value-to-ID Conversion.
1958 ELSIF (l_prod_col_name_tbl(i) = G_USER_ITEM_TYPE) THEN
1959
1960 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1961 l_dyn_sql := l_dyn_sql || ' SET (MSII.ITEM_TYPE ';
1962 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
1963 l_dyn_sql := l_dyn_sql || '( ';
1964 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
1965 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_USER_ITEM_TYPE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
1966 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
1967 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''ITEM_TYPE'' ';
1968 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
1969 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
1970 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
1971 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1972 l_dyn_sql := l_dyn_sql || ') ';
1973 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
1974 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
1975 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
1976 l_dyn_sql := l_dyn_sql || '( ';
1977 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1978 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1979 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1980 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1981 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
1982 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1983 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
1984 l_dyn_sql := l_dyn_sql || ') ';
1985
1986 Write_Debug(l_dyn_sql);
1987 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
1988
1989 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
1990 l_dyn_sql := l_dyn_sql || ' SET MSII.ITEM_TYPE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
1991 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
1992 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
1993 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
1994 l_dyn_sql := l_dyn_sql || '( ';
1995 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
1996 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
1997 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
1998 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
1999 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2000 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2001 l_dyn_sql := l_dyn_sql || ') ';
2002
2003 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2004 Write_Debug('MSII: Updated the User Item Types.');
2005
2006 ----------------------------------------------------------------------------------
2007 -- Transfer the BOM Item Type information from EBI to MSII
2008 -- by doing Value-to-ID Conversion.
2009 ----------------------------------------------------------------------------------
2010 ELSIF (l_prod_col_name_tbl(i) = G_BOM_ITEM_TYPE) THEN
2011
2012 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2013 l_dyn_sql := l_dyn_sql || ' SET (MSII.BOM_ITEM_TYPE ';
2014 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2015 l_dyn_sql := l_dyn_sql || '( ';
2016 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2017 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_BOM_ITEM_TYPE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2018 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2019 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''BOM_ITEM_TYPE'' ';
2020 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2021 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2022 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2023 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2024 l_dyn_sql := l_dyn_sql || ') ';
2025 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2026 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2027 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2028 l_dyn_sql := l_dyn_sql || '( ';
2029 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2030 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2031 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2035 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2032 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2033 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2034 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2036 l_dyn_sql := l_dyn_sql || ') ';
2037
2038 Write_Debug(l_dyn_sql);
2039 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2040
2041 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2042 l_dyn_sql := l_dyn_sql || ' SET MSII.BOM_ITEM_TYPE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2043 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2044 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2045 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2046 l_dyn_sql := l_dyn_sql || '( ';
2047 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2048 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2049 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2050 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2051 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2052 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2053 l_dyn_sql := l_dyn_sql || ') ';
2054
2055 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2056 Write_Debug('MSII: Updated the BOM Item Types.');
2057
2058 ELSIF (l_prod_col_name_tbl(i) = G_TRADE_ITEM_DESCRIPTOR) THEN
2059 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2060 l_dyn_sql := l_dyn_sql || ' SET (MSII.TRADE_ITEM_DESCRIPTOR ';
2061 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2062 l_dyn_sql := l_dyn_sql || '( ';
2063 l_dyn_sql := l_dyn_sql || ' SELECT IT.INTERNAL_NAME ';
2064 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.INTERNAL_NAME, ''NULL''),''NULL'','||G_TRADE_ITEM_DESC_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2065 l_dyn_sql := l_dyn_sql || ' FROM EGO_VALUE_SET_VALUES_V IT, EGO_BULKLOAD_INTF EBI ';
2066 l_dyn_sql := l_dyn_sql || ' WHERE IT.VALUE_SET_NAME = ''TradeItemDescVS'' ';
2067 l_dyn_sql := l_dyn_sql || ' AND IT.DISPLAY_NAME = EBI.'||l_intf_col_name_tbl(i);
2068 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2069 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2070 l_dyn_sql := l_dyn_sql || ') ';
2071 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2072 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2073 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2074 l_dyn_sql := l_dyn_sql || '( ';
2075 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2076 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2077 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2078 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2079 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2080 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2081 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2082 l_dyn_sql := l_dyn_sql || ') ';
2083
2084 Write_Debug(l_dyn_sql);
2085 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2086
2087 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2088 l_dyn_sql := l_dyn_sql || ' SET MSII.TRADE_ITEM_DESCRIPTOR = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2089 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2090 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2091 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2092 l_dyn_sql := l_dyn_sql || '( ';
2093 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2094 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2095 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2096 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2097 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2098 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2099 l_dyn_sql := l_dyn_sql || ') ';
2100
2101 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2102 Write_Debug('MSII: Updated the Trade Item Descriptor.');
2103
2104 ----------------------------------------------------------------------------------
2105 -- Transfer the Engineering Item Flag information from EBI to MSII
2106 -- by doing Value-to-ID Conversion.
2107 ----------------------------------------------------------------------------------
2108 ELSIF (l_prod_col_name_tbl(i) = G_ENG_ITEM_FLAG) THEN
2109
2110 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2111 l_dyn_sql := l_dyn_sql || ' SET (MSII.ENG_ITEM_FLAG ';
2112 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2113 l_dyn_sql := l_dyn_sql || '( ';
2117 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''EGO_YES_NO'' ';
2114 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2115 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_ENG_ITEM_FLAG_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2116 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2118 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2119 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2120 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2121 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2122 l_dyn_sql := l_dyn_sql || ') ';
2123 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2124 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2125 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2126 l_dyn_sql := l_dyn_sql || '( ';
2127 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2128 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2129 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2130 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2131 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2132 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2133 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2134 l_dyn_sql := l_dyn_sql || ') ';
2135
2136 Write_Debug(l_dyn_sql);
2137 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2138
2139 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2140 l_dyn_sql := l_dyn_sql || ' SET MSII.ENG_ITEM_FLAG = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2141 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2142 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2143 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2144 l_dyn_sql := l_dyn_sql || '( ';
2145 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2146 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2147 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2148 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2149 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2150 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2151 l_dyn_sql := l_dyn_sql || ') ';
2152
2153 Write_Debug(l_dyn_sql);
2154 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2155 Write_Debug('MSII: Updated the Eng Item Flags.');
2156
2157 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
2158 ----------------------------------------------------------------------------------
2159 -- Transfer the Conversions attribute information from EBI to MSII
2160 -- by doing Value-to-ID Conversion.
2161 ----------------------------------------------------------------------------------
2162 ELSIF (l_prod_col_name_tbl(i) = G_CONVERSIONS) THEN
2163
2164 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2165 l_dyn_sql := l_dyn_sql || ' SET (MSII.ALLOWED_UNITS_LOOKUP_CODE ';
2166 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2167 l_dyn_sql := l_dyn_sql || '( ';
2168 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2169 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_CONVERSIONS_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2170 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2171 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''MTL_CONVERSION_TYPE'' ';
2172 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2173 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2174 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2175 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2176 l_dyn_sql := l_dyn_sql || ') ';
2177 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2178 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2179 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2180 l_dyn_sql := l_dyn_sql || '( ';
2181 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2182 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2183 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2184 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2185 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2186 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2187 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2188 l_dyn_sql := l_dyn_sql || ') ';
2189
2190 Write_Debug(l_dyn_sql);
2191 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2192
2196 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2193 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2194 l_dyn_sql := l_dyn_sql || ' SET MSII.ALLOWED_UNITS_LOOKUP_CODE = :NULL_NUM ';
2195 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2197 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2198 l_dyn_sql := l_dyn_sql || '( ';
2199 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2200 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2201 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2202 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2203 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2204 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2205 l_dyn_sql := l_dyn_sql || ') ';
2206
2207 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2208 Write_Debug('MSII: Updated the Conversions.');
2209
2210 ----------------------------------------------------------------------------------
2211 -- Transfer the Conversions attribute information from EBI to MSII
2212 -- by doing Value-to-ID Conversion.
2213 ----------------------------------------------------------------------------------
2214 ELSIF (l_prod_col_name_tbl(i) = G_SECONDARY_DEF_IND) THEN
2215
2216 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2217 l_dyn_sql := l_dyn_sql || ' SET (MSII.SECONDARY_DEFAULT_IND ';
2218 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2219 l_dyn_sql := l_dyn_sql || '( ';
2220 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2221 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_SECONDARY_DEF_IND_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2222 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2223 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''INV_DEFAULTING_UOM_TYPE'' ';
2224 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2225 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2226 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2227 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2228 l_dyn_sql := l_dyn_sql || ') ';
2229 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2230 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2231 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2232 l_dyn_sql := l_dyn_sql || '( ';
2233 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2234 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2235 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2236 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2237 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2238 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2239 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2240 l_dyn_sql := l_dyn_sql || ') ';
2241
2242 Write_Debug(l_dyn_sql);
2243 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2244
2245 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2246 l_dyn_sql := l_dyn_sql || ' SET MSII.SECONDARY_DEFAULT_IND = :NULL_NUM';
2247 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2248 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2249 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2250 l_dyn_sql := l_dyn_sql || '( ';
2251 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2252 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2253 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2254 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2255 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2256 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2257 l_dyn_sql := l_dyn_sql || ') ';
2258
2259 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2260 Write_Debug('MSII: Updated the Conversions.');
2261
2262 ----------------------------------------------------------------------------------
2263 -- Transfer the Conversions attribute information from EBI to MSII
2264 -- by doing Value-to-ID Conversion.
2265 ----------------------------------------------------------------------------------
2266 ELSIF (l_prod_col_name_tbl(i) = G_ONT_PRICING_QTY_SRC) THEN
2267
2268 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2269 l_dyn_sql := l_dyn_sql || ' SET (MSII.ONT_PRICING_QTY_SOURCE ';
2270 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2271 l_dyn_sql := l_dyn_sql || '( ';
2272 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2276 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2273 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_ONT_PRICING_QTY_SRC_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2274 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2275 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''INV_PRICING_UOM_TYPE'' ';
2277 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2278 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2279 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2280 l_dyn_sql := l_dyn_sql || ') ';
2281 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2282 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2283 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2284 l_dyn_sql := l_dyn_sql || '( ';
2285 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2286 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2287 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2288 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2289 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2290 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2291 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2292 l_dyn_sql := l_dyn_sql || ') ';
2293
2294 Write_Debug(l_dyn_sql);
2295 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2296
2297 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2298 l_dyn_sql := l_dyn_sql || ' SET MSII.ONT_PRICING_QTY_SOURCE = :NULL_NUM';
2299 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2300 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2301 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2302 l_dyn_sql := l_dyn_sql || '( ';
2303 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2304 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2305 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2306 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2307 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2308 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2309 l_dyn_sql := l_dyn_sql || ') ';
2310
2311 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2312 Write_Debug('MSII: Updated the Conversions.');
2313
2314 ----------------------------------------------------------------------------------
2315 -- Transfer the Conversions attribute information from EBI to MSII
2316 -- by doing Value-to-ID Conversion.
2317 ----------------------------------------------------------------------------------
2318 ELSIF (l_prod_col_name_tbl(i) = G_SECONDARY_UOM_CODE) THEN
2319
2320 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2321 l_dyn_sql := l_dyn_sql || ' SET (MSII.SECONDARY_UOM_CODE ';
2322 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2323 l_dyn_sql := l_dyn_sql || '( ';
2324 l_dyn_sql := l_dyn_sql || ' SELECT MUOM.UOM_CODE ';
2325 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(MUOM.UOM_CODE, ''NULL''),''NULL'','||G_SECONDARY_UOM_CODE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2326 l_dyn_sql := l_dyn_sql || ' FROM MTL_UNITS_OF_MEASURE_TL MUOM, EGO_BULKLOAD_INTF EBI ';
2327 l_dyn_sql := l_dyn_sql || ' WHERE MUOM.UNIT_OF_MEASURE_TL (+) = EBI.'||l_intf_col_name_tbl(i);
2328 l_dyn_sql := l_dyn_sql || ' AND MUOM.LANGUAGE (+) = Userenv(''LANG'') ';
2329 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2330 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2331 l_dyn_sql := l_dyn_sql || ') ';
2332 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2333 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2334 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2335 l_dyn_sql := l_dyn_sql || '( ';
2336 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2337 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2338 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2339 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2340 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2341 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2342 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2343 l_dyn_sql := l_dyn_sql || ') ';
2344
2345 Write_Debug(l_dyn_sql);
2346 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2347
2348 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2352 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2349 l_dyn_sql := l_dyn_sql || ' SET MSII.SECONDARY_UOM_CODE = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2350 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2351 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2353 l_dyn_sql := l_dyn_sql || '( ';
2354 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2355 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2356 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2357 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2358 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2359 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2360 l_dyn_sql := l_dyn_sql || ') ';
2361
2362 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2363 Write_Debug('MSII: Updated the Conversions.');
2364
2365 ----------------------------------------------------------------------------------
2366 -- Transfer the Conversions attribute information from EBI to MSII
2367 -- by doing Value-to-ID Conversion.
2368 ----------------------------------------------------------------------------------
2369 ELSIF (l_prod_col_name_tbl(i) = G_TRACKING_QTY_IND) THEN
2370
2371 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2372 l_dyn_sql := l_dyn_sql || ' SET (MSII.TRACKING_QUANTITY_IND ';
2373 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2374 l_dyn_sql := l_dyn_sql || '( ';
2375 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
2376 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.LOOKUP_CODE, ''NULL''),''NULL'','||G_TRACKING_QTY_IND_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2377 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
2378 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE (+) = ''INV_TRACKING_UOM_TYPE'' ';
2379 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE (+) = Userenv(''LANG'') ';
2380 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING (+) = EBI.'||l_intf_col_name_tbl(i);
2381 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2382 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2383 l_dyn_sql := l_dyn_sql || ') ';
2384 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2385 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2386 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2387 l_dyn_sql := l_dyn_sql || '( ';
2388 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2389 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2390 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2391 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2392 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2393 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2394 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2395 l_dyn_sql := l_dyn_sql || ') ';
2396
2397 Write_Debug(l_dyn_sql);
2398 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2399
2400 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2401 l_dyn_sql := l_dyn_sql || ' SET MSII.TRACKING_QUANTITY_IND = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2402 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2403 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2404 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2405 l_dyn_sql := l_dyn_sql || '( ';
2406 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2407 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2408 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2409 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2410 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2411 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2412 l_dyn_sql := l_dyn_sql || ') ';
2413
2414 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2415 Write_Debug('MSII: Updated the Conversions.');
2416 --Bug: 3969593 End
2417
2418 ----------------------------------------------------------------------------------
2419 -- Transfer the Item Status Code attribute information from EBI to MSII
2420 -- by doing Value-to-ID Conversion. Rathna
2421 ----------------------------------------------------------------------------------
2422 ELSIF (l_prod_col_name_tbl(i) = G_INVENTORY_ITEM_STATUS) THEN
2423
2424 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2425 l_dyn_sql := l_dyn_sql || ' SET (MSII.INVENTORY_ITEM_STATUS_CODE ';
2426 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2427 l_dyn_sql := l_dyn_sql || '( ';
2428 l_dyn_sql := l_dyn_sql || ' SELECT IT.INVENTORY_ITEM_STATUS_CODE ';
2432 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2429 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(IT.INVENTORY_ITEM_STATUS_CODE, ''NULL''),''NULL'','||G_INV_ITEM_STATUS_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2430 l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_STATUS IT, EGO_BULKLOAD_INTF EBI ';
2431 l_dyn_sql := l_dyn_sql || ' WHERE IT.INVENTORY_ITEM_STATUS_CODE_TL (+) = EBI.'||l_intf_col_name_tbl(i);
2433 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2434 l_dyn_sql := l_dyn_sql || ') ';
2435 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2436 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2437 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2438 l_dyn_sql := l_dyn_sql || '( ';
2439 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2440 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2441 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2442 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2443 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2444 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2445 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2446 l_dyn_sql := l_dyn_sql || ') ';
2447
2448 Write_Debug(l_dyn_sql);
2449 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2450
2451 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2452 l_dyn_sql := l_dyn_sql || ' SET MSII.TRACKING_QUANTITY_IND = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2453 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2454 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2455 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2456 l_dyn_sql := l_dyn_sql || '( ';
2457 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2458 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2459 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2460 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2461 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2462 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2463 l_dyn_sql := l_dyn_sql || ') ';
2464
2465 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2466 Write_Debug('MSII: Updated the Item Status.*');
2467
2468 ----------------------------------------------------------------------------------
2469 -- Transfer the Column information from EBI to MSII
2470 -- which *DONOT NEED* Value-to-ID Conversion.
2471 ----------------------------------------------------------------------------------
2472 ELSIF (l_prod_col_name_tbl(i) <> G_CREATION_DATE AND l_prod_col_name_tbl(i) <> G_CREATED_BY) THEN
2473 --Bug Fix 4713312:START
2474 IF (l_prod_col_name_tbl(i) = G_ITEM_CATALOG_GROUP1) THEN
2475 l_col_name := G_ITEM_CATALOG_GROUP;
2476 ELSE
2477 l_col_name := l_prod_col_name_tbl(i);
2478 END IF;
2479 Write_Debug('Updating MSII: l_col_name = ' || l_col_name);
2480 --Bug Fix 4713312:END
2481 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2482 l_dyn_sql := l_dyn_sql || ' SET MSII.'||l_col_name||' = ';
2483 l_dyn_sql := l_dyn_sql || '( ';
2484 -- MLS Status
2485 -- IF (l_prod_col_name_tbl(i) = G_INV_STATUS_CODE_NAME) THEN
2486 -- ----------------------------------------------------------------------------------
2487 -- -- MSII INVENTORY_ITEM_STATUS_CODE is only 10 char long
2488 -- ----------------------------------------------------------------------------------
2489 -- l_dyn_sql := l_dyn_sql || ' SELECT SUBSTRB(EBI.'||l_intf_col_name_tbl(i) || ', 1, 10)';
2490 --
2491 -- ELSE
2492 IF (l_prod_col_name_tbl(i) = G_ITEM_TEMPLATE_NAME) THEN
2493 ----------------------------------------------------------------------------------
2494 -- MSII TEMPLATE_NAME is only 30 chars long
2495 ----------------------------------------------------------------------------------
2496 l_dyn_sql := l_dyn_sql || ' SELECT SUBSTR(EBI.'||l_intf_col_name_tbl(i)|| ',1,30)';
2497
2498 ELSIF (l_prod_col_name_tbl(i) IN ('STYLE_ITEM_FLAG', 'GDSN_OUTBOUND_ENABLED_FLAG' )) THEN
2499 l_dyn_sql := l_dyn_sql || ' SELECT LOOKUP_CODE ';
2500 ELSE
2501 ----------------------------------------------------------------------------------
2502 -- All other columns, which *DONOT NEED* any special treatment.
2503 ----------------------------------------------------------------------------------
2504 l_dyn_sql := l_dyn_sql || ' SELECT EBI.'||l_intf_col_name_tbl(i);
2505 END IF; --end: IF (l_prod_col_name_tbl(i) = G_ITEM_TEMPLATE_NAME)
2506
2507 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2508
2509 IF (l_prod_col_name_tbl(i) IN ('STYLE_ITEM_FLAG', 'GDSN_OUTBOUND_ENABLED_FLAG' )) THEN
2510 l_dyn_sql := l_dyn_sql || ' , FND_LOOKUP_VALUES_VL LKUP ';
2511 END IF;
2512
2516 IF (l_prod_col_name_tbl(i) IN ('STYLE_ITEM_FLAG', 'GDSN_OUTBOUND_ENABLED_FLAG' )) THEN
2513 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2514 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2515
2517 l_dyn_sql := l_dyn_sql || ' AND LOOKUP_TYPE = ''EGO_YES_NO'' ';
2518 l_dyn_sql := l_dyn_sql || ' AND LKUP.MEANING = EBI.'||l_intf_col_name_tbl(i)||' ';
2519 END IF;
2520
2521 l_dyn_sql := l_dyn_sql || ') ';
2522 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2523 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2524 l_dyn_sql := l_dyn_sql || ' AND MSII.TRANSACTION_ID IN ';
2525 l_dyn_sql := l_dyn_sql || ' ( ';
2526 l_dyn_sql := l_dyn_sql || ' SELECT EBI.TRANSACTION_ID ';
2527 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2528 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2529 -- l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2530 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2531 l_dyn_sql := l_dyn_sql || ' ) ';
2532
2533 Write_Debug(l_dyn_sql);
2534 Write_Debug('Updating : RSOUNDAR: MSII: l_dyn_sql = ' || l_dyn_sql);
2535 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2536 Write_Debug('MSII: Updated the '||l_prod_col_name_tbl(i)||' column values.');
2537
2538 END IF;--end: IF (l_prod_col_name_tbl(i) = G_ITEM_CATALOG_GROUP) THEN
2539
2540 -- Bug: 3778006
2541 ----------------------------------------------------------------------------------
2542 -- Checking if transaction_type is update and Description generation method is
2543 -- Function Generated, then Description updation should not be allowed.
2544 ----------------------------------------------------------------------------------
2545 IF (l_prod_col_name_tbl(i) = G_DESCRIPTION) THEN
2546 --DPHILIP: we need to check what is the impact of this check
2547 Write_Debug('DPHILIP :updating description setting the error status to: ' || G_DESCRIPTION_ERR_STS);
2548
2549 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2550 l_dyn_sql := l_dyn_sql || ' SET MSII.PROCESS_FLAG = '||G_DESCRIPTION_ERR_STS||' ';
2551 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2552 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2553 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2554 l_dyn_sql := l_dyn_sql || '( ';
2555 l_dyn_sql := l_dyn_sql || ' SELECT NULL ';
2556 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI, MTL_SYSTEM_ITEMS_VL MSIV ';
2557 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2558 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2559 l_dyn_sql := l_dyn_sql || ' AND EBI.INSTANCE_PK1_VALUE = MSIV.INVENTORY_ITEM_ID ';
2560 l_dyn_sql := l_dyn_sql || ' AND EBI.INSTANCE_PK2_VALUE = MSIV.ORGANIZATION_ID ';
2561 l_dyn_sql := l_dyn_sql || ' AND EGO_ITEM_BULKLOAD_PKG.get_desc_gen_method(MSIV.ITEM_CATALOG_GROUP_ID) = :FUNCTION_GEN ';
2562 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' IS NOT NULL';
2563 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_intf_col_name_tbl(i)||' <> MSIV.DESCRIPTION';
2564 l_dyn_sql := l_dyn_sql || ' AND EBI.INSTANCE_PK1_VALUE IS NOT NULL';
2565 l_dyn_sql := l_dyn_sql || ' AND UPPER(EBI.TRANSACTION_TYPE) IN (:UPD, :SYNC)';
2566 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2567 l_dyn_sql := l_dyn_sql || ') ';
2568
2569 Write_Debug(l_dyn_sql);
2570 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, 'F', 'UPDATE', 'SYNC';
2571 Write_Debug('MSII: Logged Error (if any) in updating description');
2572
2573 END IF;
2574
2575 END LOOP;--end: FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
2576
2577 ----------------------------------------------------------------------------------
2578 -- Bug# 3421497 fix.
2579 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
2580 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
2581 -- dependant upon the Lifecycle ID value.
2582 -- Hence the are processed outside the above LOOP.
2583 ----------------------------------------------------------------------------------
2584
2585 IF (l_lifecycle_col_val IS NOT NULL) THEN
2586
2587 ----------------------------------------------------------------------------------
2588 -- First Transfer the Lifecycle information from EBI to MSII
2589 -- by doing Value-to-ID Conversion.
2590 ----------------------------------------------------------------------------------
2591 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2592 l_dyn_sql := l_dyn_sql || ' SET (MSII.LIFECYCLE_ID ';
2593 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2594 l_dyn_sql := l_dyn_sql || '( ';
2595 l_dyn_sql := l_dyn_sql || ' SELECT LC.PROJ_ELEMENT_ID ';
2596 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(LC.PROJ_ELEMENT_ID, -1), -1,'||G_LIFECYCLE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2600 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2597 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_LIFECYCLES_V LC, EGO_BULKLOAD_INTF EBI ';
2598 l_dyn_sql := l_dyn_sql || ' WHERE LC.NAME (+) = EBI.'||l_lifecycle_col_val;
2599 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2601 l_dyn_sql := l_dyn_sql || ') ';
2602 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2603 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2604 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2605 l_dyn_sql := l_dyn_sql || '( ';
2606 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2607 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2608 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2609 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2610 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_col_val||' IS NOT NULL';
2611 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_col_val||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2612 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2613 l_dyn_sql := l_dyn_sql || ') ';
2614
2615 Write_Debug(l_dyn_sql);
2616 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2617
2618 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2619 l_dyn_sql := l_dyn_sql || ' SET MSII.LIFECYCLE_ID = :NULL_NUM';
2620 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2621 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2622 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2623 l_dyn_sql := l_dyn_sql || '( ';
2624 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2625 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2626 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2627 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2628 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_col_val||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2629 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2630 l_dyn_sql := l_dyn_sql || ') ';
2631
2632 Write_Debug(l_dyn_sql);
2633 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2634
2635 Write_Debug('MSII: Updated the Lifecycle IDs.');
2636
2637 END IF; --end: IF (l_lifecycle_col_val IS NOT NULL ...
2638
2639 IF (l_lifecycle_phase_col_val IS NOT NULL) THEN
2640 ----------------------------------------------------------------------------------
2641 -- Next Transfer the Lifecycle Phase information from EBI to MSII
2642 -- by doing Value-to-ID Conversion, and by joining Lifecycle ID information.
2643 ----------------------------------------------------------------------------------
2644 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2645 l_dyn_sql := l_dyn_sql || ' SET (MSII.CURRENT_PHASE_ID ';
2646 l_dyn_sql := l_dyn_sql || ' , MSII.PROCESS_FLAG )= ';
2647 l_dyn_sql := l_dyn_sql || '( ';
2648 l_dyn_sql := l_dyn_sql || ' SELECT LCP.PROJ_ELEMENT_ID ';
2649 l_dyn_sql := l_dyn_sql || ' , DECODE(NVL(LCP.PROJ_ELEMENT_ID, -1), -1,'||G_LIFECYCLE_PHASE_ERR_STS||', ' || G_PROCESS_STATUS || ') ';
2650 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_PHASES_V LCP, EGO_BULKLOAD_INTF EBI ';
2651 l_dyn_sql := l_dyn_sql || ' WHERE LCP.PARENT_STRUCTURE_ID (+) = MSII.LIFECYCLE_ID ';
2652 l_dyn_sql := l_dyn_sql || ' AND LCP.NAME (+) = EBI.'||l_lifecycle_phase_col_val;
2653 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
2654 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2655 l_dyn_sql := l_dyn_sql || ') ';
2656 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2657 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2658 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2659 l_dyn_sql := l_dyn_sql || '( ';
2660 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2661 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2662 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2663 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2664 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' IS NOT NULL';
2665 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' <> '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2666 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2667 l_dyn_sql := l_dyn_sql || ') ';
2668
2669 Write_Debug(l_dyn_sql);
2670 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
2671
2672 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII ';
2673 l_dyn_sql := l_dyn_sql || ' SET MSII.CURRENT_PHASE_ID = :NULL_NUM';
2674 l_dyn_sql := l_dyn_sql || ' WHERE MSII.SET_PROCESS_ID = ' || l_msii_set_process_id;
2675 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG = ' || G_PROCESS_STATUS;
2676 l_dyn_sql := l_dyn_sql || ' AND EXISTS ';
2677 l_dyn_sql := l_dyn_sql || '( ';
2681 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID ';
2678 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
2679 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
2680 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
2682 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' = '''||EGO_ITEM_PUB.G_INTF_NULL_CHAR||'''';
2683 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2684 l_dyn_sql := l_dyn_sql || ') ';
2685
2686 EXECUTE IMMEDIATE l_dyn_sql USING EGO_ITEM_PUB.G_INTF_NULL_NUM, p_resultfmt_usage_id;
2687 Write_Debug('MSII: Updated the Lifecycle Phase IDs.');
2688
2689 END IF; --end: IF (l_lifecycle_phase_col_val IS NOT NULL ...
2690
2691 END IF; --IF ( l_prod_col_name_tbl.count > 0) THEN
2692 --
2693 -- convert all date fields values from Excel Null to INTF Null
2694 --
2695 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
2696 SET start_date_active = DECODE(start_date_active,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,start_date_active),
2697 end_date_active = DECODE(end_date_active,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,end_date_active),
2698 engineering_date = DECODE(engineering_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,engineering_date)
2699 WHERE MSII.SET_PROCESS_ID = l_msii_set_process_id
2700 AND MSII.PROCESS_FLAG = G_PROCESS_STATUS
2701 AND (MSII.start_date_active IS NOT NULL
2702 OR
2703 MSII.end_date_active IS NOT NULL
2704 OR
2705 MSII.engineering_date IS NOT NULL
2706 )
2707 AND EXISTS
2708 ( SELECT 'X'
2709 FROM EGO_BULKLOAD_INTF EBI
2710 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
2711 AND EBI.TRANSACTION_ID = MSII.TRANSACTION_ID
2712 AND EBI.PROCESS_STATUS = 1
2713 );
2714 ----------------------------------------------------------------------------------
2715 -- To print all the Item Numbers.
2716 -- 1) That were passed in Excel
2717 -- 2) That were Sequence generated
2718 -- etc., (i.e. in future, Function generated etc.,)
2719 ----------------------------------------------------------------------------------
2720 Log_ItemNums_ToBe_Processed(p_resultfmt_usage_id,
2721 l_item_number_col);
2722 x_retcode := G_STATUS_SUCCESS;
2723 x_set_process_id := l_msii_set_process_id;
2724
2725 ----------------------------------------------------------------------------------
2726 -- Now that Revision Update is supported through Item Search Results,
2727 -- need to use the same set_process_id for Revisions Interface also.
2728 -- Hence storing in a Global variable.
2729 ----------------------------------------------------------------------------------
2730 G_MSII_SET_PROCESS_ID := l_msii_set_process_id;
2731
2732 END load_item_interface;
2733
2734
2735 ----------------------------------------------------------
2736 -- Preprocess Item Interface Lines --
2737 ----------------------------------------------------------
2738
2739 PROCEDURE preprocess_item_interface
2740 (
2741 p_resultfmt_usage_id IN NUMBER,
2742 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
2743 p_set_process_id IN NUMBER,
2744 x_errbuff IN OUT NOCOPY VARCHAR2,
2745 x_retcode IN OUT NOCOPY VARCHAR2
2746 ) IS
2747
2748 -- Start OF comments
2749 -- API name : Setup MSII Item Interface Lines for processing
2750 -- TYPE : Private
2751 -- Pre-reqs : None
2752 -- FUNCTION : Populate and Prepare Item interfance lines.
2753 -- Eliminates any redundancy / errors in MSII
2754
2755 -----------------------------------------------
2756 -- Long Dynamic SQL String
2757 -----------------------------------------------
2758 l_dyn_sql VARCHAR2(20000);
2759
2760 -----------------------------------------------
2761 -- Error message variables
2762 -----------------------------------------------
2763 l_item_catalog_err_msg VARCHAR2(2000);
2764 l_uom_err_msg VARCHAR2(2000);
2765 l_lifecycle_err_msg VARCHAR2(2000);
2766 l_lifecycle_ph_err_msg VARCHAR2(2000);
2767 l_useritemtype_err_msg VARCHAR2(2000);
2768 l_bomitemtype_err_msg VARCHAR2(2000);
2769 l_engitemflag_err_msg VARCHAR2(2000);
2770 l_description_err_msg VARCHAR2(2000); -- Bug: 3778006
2771 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
2772 l_conversions_err_msg VARCHAR2(2000);
2773 l_secondary_def_err_msg VARCHAR2(2000);
2774 l_ont_pricing_qty_src_err_msg VARCHAR2(2000);
2775 l_secondary_uom_code_err_msg VARCHAR2(2000);
2776 l_tracking_qty_ind_err_msg VARCHAR2(2000);
2777 l_inv_item_status_err_msg VARCHAR2(2000);
2778 --Bug: 3969593 End
2779 --R12C changes for Pack Hierarchy
2780 l_tradeitemdesc_err_msg VARCHAR2(2000);
2781 BEGIN
2782
2783 Write_Debug('EBI : Getting the messages.');
2784
2785 -----------------------------------------------------------------------
2786 -- Preparation for Inserting error messages for all pre-processing --
2787 -- Validation errors. --
2791 -----------------------------------------------------------------------
2788 -----------------------------------------------------------------------
2789 FND_MESSAGE.SET_NAME('EGO','EGO_ITEMCATALOG_INVALID');
2790
2792 -- Fixing MLS Bug# 3421756 --
2793 -- Replacing 1 quote with 2 quotes to be used in Dynamic SQL --
2794 -- None of the messages have ampersands or other suspicious chars --
2795 -- that could cause harm in the Dynamic SQL run below. --
2796 -----------------------------------------------------------------------
2797 l_item_catalog_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2798
2799 FND_MESSAGE.SET_NAME('EGO','EGO_PRIMARYUOM_INVALID');
2800 l_uom_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2801
2802 FND_MESSAGE.SET_NAME('EGO','EGO_LIFECYCLE_INVALID');
2803 l_lifecycle_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2804
2805 FND_MESSAGE.SET_NAME('EGO','EGO_LIFECYCLE_PHASE_INVALID');
2806 l_lifecycle_ph_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2807
2808 FND_MESSAGE.SET_NAME('EGO','EGO_USERITEMTYPE_INVALID');
2809 l_useritemtype_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2810
2811 FND_MESSAGE.SET_NAME('EGO','EGO_BOMITEMTYPE_INVALID');
2812 l_bomitemtype_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2813
2814 FND_MESSAGE.SET_NAME('EGO','EGO_ENGITEMFLAG_INVALID');
2815 l_engitemflag_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2816
2817 -- Bug: 3778006
2818 FND_MESSAGE.SET_NAME('EGO','EGO_ITEMDESC_IS_FG');
2819 l_description_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2820
2821 --Bug: 3969593 Adding new 11.5.10 Primary Attrs: Begin
2822 FND_MESSAGE.SET_NAME('EGO','EGO_CONVERSIONS_INVALID');
2823 l_conversions_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2824
2825 FND_MESSAGE.SET_NAME('EGO','EGO_DEFAULTING_INVALID');
2826 l_secondary_def_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2827
2828 FND_MESSAGE.SET_NAME('EGO','EGO_PRICING_INVALID');
2829 l_ont_pricing_qty_src_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2830
2831 FND_MESSAGE.SET_NAME('EGO','EGO_SECONDARYUOM_INVALID');
2832 l_secondary_uom_code_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2833
2834 FND_MESSAGE.SET_NAME('EGO','EGO_TRACKING_INVALID');
2835 l_tracking_qty_ind_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2836 --Bug: 3969593 End
2837
2838 FND_MESSAGE.SET_NAME('EGO','EGO_STATUS_INVALID');--MLS STatus
2839 l_inv_item_status_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2840 -- R12C changes for Pack Hierarchy
2841 FND_MESSAGE.SET_NAME('EGO','EGO_TRADEITEMDESC_INVALID');
2842 l_tradeitemdesc_err_msg := REPLACE(FND_MESSAGE.GET,'''','''''');
2843
2844 -----------------------------------------------------------------------
2845 --Insert the Pre-processed error messages.
2846 -----------------------------------------------------------------------
2847 l_dyn_sql := '';
2848 l_dyn_sql := l_dyn_sql || 'INSERT INTO MTL_INTERFACE_ERRORS ';
2849 l_dyn_sql := l_dyn_sql || '( ';
2850 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID ';
2851 l_dyn_sql := l_dyn_sql || ', UNIQUE_ID ';
2852 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_DATE ';
2853 l_dyn_sql := l_dyn_sql || ', LAST_UPDATED_BY ';
2854 l_dyn_sql := l_dyn_sql || ', CREATION_DATE ';
2855 l_dyn_sql := l_dyn_sql || ', CREATED_BY ';
2856 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_LOGIN ';
2857 l_dyn_sql := l_dyn_sql || ', TABLE_NAME ';
2858 l_dyn_sql := l_dyn_sql || ', MESSAGE_NAME ';
2859 l_dyn_sql := l_dyn_sql || ', COLUMN_NAME ';
2860 l_dyn_sql := l_dyn_sql || ', REQUEST_ID ';
2861 l_dyn_sql := l_dyn_sql || ', PROGRAM_APPLICATION_ID ';
2862 l_dyn_sql := l_dyn_sql || ', PROGRAM_ID ';
2863 l_dyn_sql := l_dyn_sql || ', PROGRAM_UPDATE_DATE ';
2864 l_dyn_sql := l_dyn_sql || ', ERROR_MESSAGE ';
2865 l_dyn_sql := l_dyn_sql || ', TRANSACTION_ID ';
2866 l_dyn_sql := l_dyn_sql || ', ENTITY_IDENTIFIER ';
2867 l_dyn_sql := l_dyn_sql || ', BO_IDENTIFIER ';
2868 l_dyn_sql := l_dyn_sql || ') ';
2869 l_dyn_sql := l_dyn_sql || 'SELECT ';
2870 l_dyn_sql := l_dyn_sql || ' -1 ';
2871 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
2872 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
2873 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID ;
2874 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
2875 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID;
2876 l_dyn_sql := l_dyn_sql || ', '||G_LOGIN_ID;
2877 l_dyn_sql := l_dyn_sql || ', ''MTL_SYSTEM_ITEMS_INTERFACE'' ';
2878 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
2879 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_ERR_STS||', ''EGO_ITEMCATALOG_INVALID'', ';
2880 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_ERR_STS||', ''EGO_PRIMARYUOM_INVALID'', ';
2881 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_ERR_STS||', ''EGO_LIFECYCLE_INVALID'', ';
2882 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_PHASE_ERR_STS||', ''EGO_LIFECYCLE_PHASE_INVALID'', ';
2883 l_dyn_sql := l_dyn_sql || G_USER_ITEM_TYPE_ERR_STS||', ''EGO_USERITEMTYPE_INVALID'', ';
2884 l_dyn_sql := l_dyn_sql || G_BOM_ITEM_TYPE_ERR_STS||', ''EGO_BOMITEMTYPE_INVALID'', ';
2885 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', ''EGO_TRADEITEMDESC_INVALID'', ';
2886 l_dyn_sql := l_dyn_sql || G_ENG_ITEM_FLAG_ERR_STS||', ''EGO_ENGITEMFLAG_INVALID'', ';
2887 l_dyn_sql := l_dyn_sql || G_DESCRIPTION_ERR_STS||', ''EGO_ITEMDESC_IS_FG'', '; -- Bug: 3778006
2888 l_dyn_sql := l_dyn_sql || G_CONVERSIONS_ERR_STS||',''EGO_CONVERSIONS_INVALID'', '; --Bug: 3969593 Begin
2892 l_dyn_sql := l_dyn_sql || G_TRACKING_QTY_IND_ERR_STS||',''EGO_TRACKING_INVALID'', '; --Bug: 3969593 End
2889 l_dyn_sql := l_dyn_sql || G_SECONDARY_DEF_IND_ERR_STS||',''EGO_DEFAULTING_INVALID'', ';
2890 l_dyn_sql := l_dyn_sql || G_ONT_PRICING_QTY_SRC_ERR_STS||',''EGO_PRICING_INVALID'', ';
2891 l_dyn_sql := l_dyn_sql || G_SECONDARY_UOM_CODE_ERR_STS||',''EGO_SECONDARYUOM_INVALID'', ';
2893 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS||',''EGO_STATUS_INVALID'' ';--MLS Status
2894 l_dyn_sql := l_dyn_sql || ' ) ';
2895 l_dyn_sql := l_dyn_sql || ', NULL ';
2896 l_dyn_sql := l_dyn_sql || ', '||G_REQUEST_ID ;
2897 l_dyn_sql := l_dyn_sql || ', '||G_PROG_APPID ;
2898 l_dyn_sql := l_dyn_sql || ', '||G_PROG_ID ;
2899 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
2900 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
2901 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_ERR_STS ||', EBI.'||G_ITEM_CATALOG_NAME_EBI_COL || ' || '' : '||l_item_catalog_err_msg||''', ';
2902 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_ERR_STS||', EBI.'||G_PRIMARY_UOM_EBI_COL || ' || '' : '||l_uom_err_msg||''', ';
2903 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_ERR_STS||', EBI.'||G_LIFECYCLE_EBI_COL || ' || '' : '||l_lifecycle_err_msg||''', ';
2904 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_PHASE_ERR_STS||', EBI.'||G_LIFECYCLE_PHASE_EBI_COL || ' || '' : '||l_lifecycle_ph_err_msg||''', ';
2905 l_dyn_sql := l_dyn_sql || G_USER_ITEM_TYPE_ERR_STS||', EBI.'||G_USER_ITEM_TYPE_EBI_COL || ' || '' : '||l_useritemtype_err_msg||''', ';
2906 l_dyn_sql := l_dyn_sql || G_BOM_ITEM_TYPE_ERR_STS||', EBI.'||G_BOM_ITEM_TYPE_EBI_COL || ' || '' : '||l_bomitemtype_err_msg||''', ';
2907 IF l_trade_item_descriptor_col IS NULL THEN
2908 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', '''||l_tradeitemdesc_err_msg||''' , ';
2909 ELSE
2910 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', EBI.'||l_trade_item_descriptor_col || ' || '' : '||l_tradeitemdesc_err_msg||''' , ';
2911 END IF;
2912 l_dyn_sql := l_dyn_sql || G_ENG_ITEM_FLAG_ERR_STS||', EBI.'||G_ENG_ITEM_FLAG_EBI_COL || ' || '' : '||l_engitemflag_err_msg||''', ';
2913 l_dyn_sql := l_dyn_sql || G_DESCRIPTION_ERR_STS||', EBI.'||G_DESCRIPTION_EBI_COL || ' || '' : '||l_description_err_msg||''','; -- Bug: 3778006
2914 l_dyn_sql := l_dyn_sql || G_CONVERSIONS_ERR_STS||', EBI.'||G_CONVERSIONS_EBI_COL || ' || '' : '||l_conversions_err_msg||''','; --Bug: 3969593 Begin
2915 l_dyn_sql := l_dyn_sql || G_SECONDARY_DEF_IND_ERR_STS||', EBI.'||G_SECONDARY_DEF_IND_EBI_COL || ' || '' : '||l_secondary_def_err_msg||''',';
2916 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||''',';
2917 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||''',';
2918 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
2919 --Rathna MLS Status
2920 IF l_inventory_item_status_col IS NULL THEN
2921 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS||', '''||l_inv_item_status_err_msg||'''';
2922 ELSE
2923 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS||', EBI.'||l_inventory_item_status_col || ' || '' : '||l_inv_item_status_err_msg||'''';
2924 END IF;
2925 l_dyn_sql := l_dyn_sql || ' ) ';
2926 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
2927 l_dyn_sql := l_dyn_sql || ', NULL ';
2928 l_dyn_sql := l_dyn_sql || ', NULL ';
2929 l_dyn_sql := l_dyn_sql || 'FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_BULKLOAD_INTF EBI ';
2930 l_dyn_sql := l_dyn_sql || 'WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID ';
2931 l_dyn_sql := l_dyn_sql || ' AND MSII.SET_PROCESS_ID = '||p_set_process_id;
2932 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG IN ';
2933 l_dyn_sql := l_dyn_sql || ' ( ';
2934 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_ERR_STS||', ';
2935 l_dyn_sql := l_dyn_sql || G_PRIMARY_UOM_ERR_STS||', ';
2936 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_ERR_STS||', ';
2937 l_dyn_sql := l_dyn_sql || G_LIFECYCLE_PHASE_ERR_STS||', ';
2938 l_dyn_sql := l_dyn_sql || G_USER_ITEM_TYPE_ERR_STS||', ';
2939 l_dyn_sql := l_dyn_sql || G_BOM_ITEM_TYPE_ERR_STS||', ';
2940 l_dyn_sql := l_dyn_sql || G_TRADE_ITEM_DESC_ERR_STS||', ';
2941 l_dyn_sql := l_dyn_sql || G_ENG_ITEM_FLAG_ERR_STS||', ';
2942 l_dyn_sql := l_dyn_sql || G_DESCRIPTION_ERR_STS||', ';
2943 l_dyn_sql := l_dyn_sql || G_CONVERSIONS_ERR_STS||', '; --Bug: 3969593 Begin
2944 l_dyn_sql := l_dyn_sql || G_SECONDARY_DEF_IND_ERR_STS||', ';
2945 l_dyn_sql := l_dyn_sql || G_ONT_PRICING_QTY_SRC_ERR_STS||', ';
2946 l_dyn_sql := l_dyn_sql || G_SECONDARY_UOM_CODE_ERR_STS||', ';
2947 l_dyn_sql := l_dyn_sql || G_TRACKING_QTY_IND_ERR_STS||', '; --Bug: 3969593 End
2948 l_dyn_sql := l_dyn_sql || G_INV_ITEM_STATUS_ERR_STS; --need to store error status as well
2949 l_dyn_sql := l_dyn_sql || ' ) ';
2950 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
2951 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
2952
2953 Write_Debug('l_dyn_sql');
2954 --There is a limit of 1024 BYTES through Write_Debug (it uses
2955 --UTL_FILE)
2956 -------------------------------------------------------------------------
2957 --Fix for Bug# 3624649. (JCGEORGE, PPEDDAMA)
2958 --Since Typically NLS_LENGTH_SEMANTICS parameter value is BYTE
2959 -- (in NLS_DATABASE_PARAMETERS table), use SUBSTRB instead of SUBSTR
2960 -- when fetching possibly MLS strings.
2961 -------------------------------------------------------------------------
2962 Write_Debug(SUBSTRB(l_dyn_sql, 1, 1000));
2963 Write_Debug(SUBSTRB(l_dyn_sql, 1001, 2000));
2967
2964 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
2965
2966 Write_Debug('MIERR: Inserted Pre-processed error messages in MTL_INTERFACE_ERRORS');
2968 -----------------------------------------------------------------------
2969 --Now that the error messages are inserted, update MSII lines to
2970 --Process status ERROR.
2971 -----------------------------------------------------------------------
2972
2973 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
2974 SET MSII.PROCESS_FLAG = G_INTF_STATUS_ERROR
2975 WHERE MSII.SET_PROCESS_ID = p_set_process_id
2976 AND MSII.PROCESS_FLAG IN
2977 (
2978 G_ITEM_CATALOG_NAME_ERR_STS
2979 , G_PRIMARY_UOM_ERR_STS
2980 , G_LIFECYCLE_ERR_STS
2981 , G_LIFECYCLE_PHASE_ERR_STS
2982 , G_USER_ITEM_TYPE_ERR_STS
2983 , G_BOM_ITEM_TYPE_ERR_STS
2984 , G_ENG_ITEM_FLAG_ERR_STS
2985 , G_DESCRIPTION_ERR_STS -- Bug: 3804572
2986 , G_CONVERSIONS_ERR_STS --Bug: 3969593 Begin
2987 , G_SECONDARY_DEF_IND_ERR_STS
2988 , G_ONT_PRICING_QTY_SRC_ERR_STS
2989 , G_SECONDARY_UOM_CODE_ERR_STS
2990 , G_TRACKING_QTY_IND_ERR_STS --Bug: 3969593 End
2991 , G_INV_ITEM_STATUS_ERR_STS--Rathna MLS Status
2992 )
2993 AND MSII.TRANSACTION_ID IN
2994 (
2995 SELECT TRANSACTION_ID
2996 FROM EGO_BULKLOAD_INTF
2997 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
2998 );
2999
3000 Write_Debug('MSII: Updated all the line statuses to Error for Pre-processing validation errors');
3001
3002 -- DELETE MTL_SYSTEM_ITEMS_INTERFACE MSII
3003 -- WHERE
3004 -- (
3005 -- (
3006 -- ITEM_NUMBER IS NOT NULL AND
3007 -- ORGANIZATION_CODE IS NOT NULL
3008 -- )
3009 -- OR
3010 -- (
3011 -- SOURCE_SYSTEM_REFERENCE IS NOT NULL AND --for non-PDH Batch
3012 -- SOURCE_SYSTEM_ID IS NOT NULL --for non-PDH Batch
3013 -- )
3014 --In case of CREATE : Item Catalog Group ID will be NOT NULL in MSII
3015 --In case of SYNC/UPDATE, where Item ID exists, Item Catalog Group ID
3016 --will be NULL. Hence commenting out, this NOT NULL condn.
3017 --ITEM_CATALOG_GROUP_ID IS NOT NULL
3018 -- OR
3019 -- (
3020 -- DESCRIPTION IS NULL AND
3021 -- SOURCE_SYSTEM_REFERENCE IS NULL AND
3022 -- SOURCE_SYSTEM_REFERENCE_DESC IS NULL
3023 -- )
3024 -- )
3025 -- AND
3026 -- (
3027 -- DESCRIPTION IS NULL AND
3028 -- LONG_DESCRIPTION IS NULL AND
3029 -- PRIMARY_UOM_CODE IS NULL AND
3030 -- LIFECYCLE_ID IS NULL AND
3031 -- CURRENT_PHASE_ID IS NULL AND
3032 -- INVENTORY_ITEM_STATUS_CODE IS NULL AND
3033 -- ITEM_TYPE IS NULL AND
3034 -- BOM_ITEM_TYPE IS NULL AND
3035 -- ENG_ITEM_FLAG IS NULL AND
3036 --Joseph : Bug Fix : 3621826
3037 -- TEMPLATE_ID IS NULL AND --**NEW
3038 -- TEMPLATE_NAME IS NULL AND --**NEW
3039 -- SOURCE_SYSTEM_REFERENCE_DESC IS NULL AND -- Bug: 5207217
3040 -- GLOBAL_TRADE_ITEM_NUMBER IS NULL -- Bug: 5207217
3041 -- )
3042 -- AND SET_PROCESS_ID = p_set_process_id
3043 ------------------------------------------------------------------------------------------------
3044 -- Fix for 11.5.10: Including PROCESS_FLAG status during this DELETE operation.
3045 --
3046 -- When ERROR happens during PRIMARY_UOM_CODE processing (NOTE: This is the first
3047 -- significant Value-to-ID conversion) then MSII.PROCESS_FLAG is set to something
3048 -- other than 1. Because of this, the subsequent transfer of the Data from EBI to MSII
3049 -- doesnot happen (as all SQLs check for EBI, MSII Process Status to be 1 for transfer).
3050 -- So, this DELETE will go through successfully, as all the columns are NULL (other than
3051 -- ITEM_NUMBER, ORGANIZATION_CODE.)
3052 -- Then EBI stays in PROCESS_STATUS = 1, which is later converted to 7 in Item_intf_completion.
3053 --
3054 -- Because of this User-Defined attrs for those rows are ERRONEOUSLY picked and processed.
3055 ------------------------------------------------------------------------------------------------
3056 -- AND PROCESS_FLAG = G_PROCESS_STATUS --Bug 3763665
3057 -- AND (EXISTS( -- there exists a row where item is being Created or updated in the same request
3058 -- SELECT 'X'
3059 -- FROM MTL_SYSTEM_ITEMS_INTERFACE MSI
3060 -- WHERE MSI.DESCRIPTION IS NOT NULL
3061 -- AND NVL(MSI.ITEM_NUMBER,FND_API.G_MISS_CHAR) = NVL(MSII.ITEM_NUMBER,FND_API.G_MISS_CHAR)
3062 -- AND SET_PROCESS_ID = p_set_process_id
3063 -- AND PROCESS_FLAG = G_PROCESS_STATUS
3064 -- )
3065 -- OR EXISTS(
3066 -- SELECT 'X'
3067 -- FROM MTL_SYSTEM_ITEMS_B MSI
3068 -- WHERE MSII.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
3069 -- AND MSII.ORGANIZATION_ID = MSI.ORGANIZATION_ID
3070 -- )-- End Bug 3763665
3071 -- );
3072
3073 -- Write_Debug('Preprocess_Item_Interface : NEW Deleted redundant / unnecessary rows from MSII');
3074
3075 -- Bug: 5519768
3076 -- ENG_ITEM_FLAG will be defaulted from IOI, so commented the below code
3077 -- IF G_PDH_BATCH THEN
3081 -- -- Engineering Items.
3078 -- -----------------------------------------------------------------------
3079 -- -- Set the ENG_ITEM_FLAG to Y for all the New Items TO-BE Created.
3080 -- -- So, all new Items (if ENG_ITEM_FLAG is unspecified) are created as
3082 -- -----------------------------------------------------------------------
3083 --
3084 -- UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
3085 -- SET MSII.ENG_ITEM_FLAG = 'Y'
3086 -- WHERE MSII.SET_PROCESS_ID = p_set_process_id
3087 -- AND MSII.INVENTORY_ITEM_ID IS NULL
3088 -- AND MSII.TRANSACTION_TYPE IN ('SYNC', 'CREATE')
3089 -- AND MSII.PROCESS_FLAG = G_PROCESS_STATUS
3090 -- AND MSII.ENG_ITEM_FLAG IS NULL
3091 -- AND MSII.ORGANIZATION_ID = (SELECT ORGANIZATION_ID
3092 -- FROM MTL_PARAMETERS MP
3093 -- WHERE ORGANIZATION_ID = MSII.ORGANIZATION_ID
3094 -- AND ORGANIZATION_ID = MASTER_ORGANIZATION_ID
3095 -- );
3096 --Bug 4721682 : not to set the ENG_ITEM_FLAG if the ORGANIZATION IS NOT MASTER ORG
3097 --
3098 -- Write_Debug('Preprocess_Item_Interface : Set Eng Item Flag = Y in case of NULL for New to-be created items.');
3099 -- END IF;
3100
3101 END preprocess_item_interface;
3102
3103
3104 ----------------------------------------------------------
3105 -- Setup Item Interface Lines --
3106 ----------------------------------------------------------
3107 PROCEDURE Setup_item_interface
3108 (
3109 p_resultfmt_usage_id IN NUMBER,
3110 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
3111 p_set_process_id IN NUMBER,
3112 x_set_process_id OUT NOCOPY NUMBER,
3113 x_errbuff OUT NOCOPY VARCHAR2,
3114 x_retcode OUT NOCOPY VARCHAR2
3115 ) IS
3116
3117 -- Start OF comments
3118 -- API name : Setup MSII Item Interface Lines for processing
3119 -- TYPE : Private
3120 -- Pre-reqs : None
3121 -- FUNCTION : Populate and Prepare Item interfance lines.
3122 -- Eliminates any redundancy / errors in MSII
3123
3124 l_set_process_id NUMBER(15);
3125
3126 BEGIN
3127
3128 ----------------------------------------------
3129 -- Populates rows in MSII
3130 ----------------------------------------------
3131 Developer_Debug('calling load_item_interface');
3132 load_item_interface(
3133 p_resultfmt_usage_id => p_resultfmt_usage_id
3134 ,p_set_process_id => p_set_process_id
3135 ,x_set_process_id => l_set_process_id
3136 ,p_caller_identifier => p_caller_identifier
3137 ,x_errbuff => x_errbuff
3138 ,x_retcode => x_retcode
3139 );
3140 Developer_Debug('returning with retcode'||x_retcode);
3141
3142 -----------------------------------------------------
3143 -- Deletes redundant / unnecessary rows from MSII.
3144 -----------------------------------------------------
3145 preprocess_item_interface(
3146 p_resultfmt_usage_id => p_resultfmt_usage_id
3147 ,p_set_process_id => l_set_process_id
3148 ,p_caller_identifier => p_caller_identifier
3149 ,x_errbuff => x_errbuff
3150 ,x_retcode => x_retcode
3151 );
3152
3153 x_set_process_id := l_set_process_id;
3154 Write_Debug('Setup_Item_Interface : Set Process Id => '||x_set_process_id);
3155
3156 EXCEPTION
3157 WHEN OTHERS THEN
3158 x_retcode := G_STATUS_ERROR;
3159 x_errbuff := SUBSTRB(SQLERRM, 1,240);
3160 Write_Debug('Setup_Item_Interface : EXCEPTION HAPPENED => '||x_errbuff);
3161 RAISE;
3162
3163 END setup_item_interface;
3164
3165
3166 -------------------------------------------------------------------
3167 -- Change Item Interface Lines process statuses as completed. --
3168 -- Statuses represent: Warning, Error, Success etc., --
3169 -------------------------------------------------------------------
3170 PROCEDURE Item_intf_completion
3171 (
3172 p_resultfmt_usage_id IN NUMBER
3173 , x_errbuff OUT NOCOPY VARCHAR2
3174 , x_retcode OUT NOCOPY VARCHAR2
3175 ) IS
3176
3177 -----------------------------------------------
3178 -- Long Dynamic SQL String
3179 -----------------------------------------------
3180 l_dyn_sql VARCHAR2(10000);
3181
3182 BEGIN
3183
3184 -----------------------------------------------------------------
3185 -- Update EBI, with the process status of rows in MSII after
3186 -- the completion of IOI processing.
3187 -----------------------------------------------------------------
3188 UPDATE EGO_BULKLOAD_INTF EBI
3189 SET EBI.PROCESS_STATUS =
3190 (
3191 SELECT MSII.PROCESS_FLAG
3192 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3193 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3194 )
3195 WHERE EXISTS
3196 (
3197 SELECT 'X'
3198 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3199 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3200 )
3201 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
3202
3206 --1. For Transaction Type : CREATE, Item ID should be populated
3203 ----------------------------------------------------------------------------
3204 --Update all the lines in EGO_BULKLOAD_INTF as failure, for which
3205 --The Inventory Item IDs were not available.
3207 -- at the end of Processing
3208 --2. For Transaction Type : SYNC / UPDATE, Item ID should be
3209 -- retrieved during processing.
3210 ----------------------------------------------------------------------------
3211 -- R12: this is not required
3212 -- UPDATE EGO_BULKLOAD_INTF EBI
3213 -- SET EBI.PROCESS_STATUS = G_INTF_STATUS_ERROR
3214 -- WHERE EXISTS
3215 -- (
3216 -- SELECT 'X'
3217 -- FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3218 -- WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3219 -- AND MSII.PROCESS_FLAG = G_INTF_STATUS_SUCCESS
3220 -- AND MSII.INVENTORY_ITEM_ID IS NULL
3221 -- )
3222 -- AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
3223
3224 ----------------------------------------------------------------------------
3225 -- Update all the lines in EGO_BULKLOAD_INTF as SUCCESS
3226 -- for these rows were used to populate Multi-Row
3227 -- Appropriate errors will be displayed by the User-Defined Attrs Import
3228 -- processing later.
3229 ----------------------------------------------------------------------------
3230 UPDATE EGO_BULKLOAD_INTF EBI
3231 SET EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS
3232 WHERE EBI.PROCESS_STATUS = G_INTF_STATUS_TOBE_PROCESS
3233 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
3234
3235 ----------------------------------------------------------------------------
3236 -- Update the Item IDs (Doesnt matter Create or Update, because
3237 -- Item IDs will be populated either way in MSII) in
3238 -- Generic Bulkload Intf table (EGO_BULKLOAD_INTF)
3239 -- These Item IDs are required for Item User-Defined Attrs bulkload
3240 ----------------------------------------------------------------------------
3241 UPDATE EGO_BULKLOAD_INTF EBI
3242 SET EBI.INSTANCE_PK1_VALUE =
3243 (
3244 SELECT MSII.INVENTORY_ITEM_ID
3245 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3246 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3247 )
3248 WHERE EXISTS
3249 (
3250 SELECT 'X'
3251 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
3252 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
3253 )
3254 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
3255 AND EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS;
3256
3257 Write_Debug('EBI: Updated the Process_Status to Indicate Succssful/Unsucessful completion.');
3258
3259 x_retcode := G_STATUS_SUCCESS;
3260
3261 EXCEPTION
3262 WHEN OTHERS THEN
3263 x_retcode := G_STATUS_ERROR;
3264 x_errbuff := SUBSTRB(SQLERRM, 1,240);
3265 Write_Debug('Item_Intf_Completion : EXCEPTION HAPPENED => '||x_errbuff);
3266 RAISE;
3267
3268 END Item_Intf_Completion;
3269
3270 ----------------------------------------------------------
3271 -- Populate Item Revision Interface Lines --
3272 ----------------------------------------------------------
3273
3274 PROCEDURE load_item_revs_interface
3275 (
3276 p_resultfmt_usage_id IN NUMBER,
3277 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
3278 p_data_level IN VARCHAR2,
3279 p_set_process_id IN NUMBER,
3280 x_set_process_id OUT NOCOPY NUMBER,
3281 x_errbuff OUT NOCOPY VARCHAR2,
3282 x_retcode OUT NOCOPY VARCHAR2
3283 ) IS
3284
3285 -- Start OF comments
3286 -- API name : Populate MTL_ITEM_REVISIONS_INTERFACE table
3287 -- TYPE : Private
3288 -- Pre-reqs : None
3289 -- FUNCTION : Populate and Load Item Revisions interfance lines.
3290 -- Loads Item Revision Attr Values
3291 -- Errors are populated in MTL_INTERFACE_ERRORS
3292 --
3293
3294 ------------------------------------------------------------------------------------------
3295 -- To get the Item Revision Base attr columns in the Result Format.
3296 -- NOTE: Only one of the SELECTs below will be active at a time, based on the Data Level.
3297 ------------------------------------------------------------------------------------------
3298 CURSOR c_item_rev_attr_intf_cols (c_resultfmt_usage_id IN NUMBER) IS
3299 --Item Revision Data Level
3300 SELECT attribute_code, intf_column_name
3301 FROM ego_results_fmt_usages
3302 WHERE resultfmt_usage_id = c_resultfmt_usage_id
3303 AND attribute_code NOT LIKE '%$$%'
3304 ---------------------------------------------------------------------------
3305 -- Added NOT LIKE 'GTIN_%' to filter out Dummy Attrs for Attr Group: "GTIN"
3306 ---------------------------------------------------------------------------
3307 AND attribute_code NOT LIKE 'GTIN_%'
3308 AND p_data_level = G_ITEM_REV_DATA_LEVEL
3309 UNION
3310 -------------------
3311 --Item Data Level
3312 -------------------
3313 SELECT attribute_code, intf_column_name
3314 FROM ego_results_fmt_usages
3315 WHERE resultfmt_usage_id = c_resultfmt_usage_id
3316 AND attribute_code NOT LIKE '%$$%'
3317 ---------------------------------------------------------------------------
3321 AND p_data_level = G_ITEM_DATA_LEVEL
3318 -- Added NOT LIKE 'GTIN_%' to filter out Dummy Attrs for Attr Group: "GTIN"
3319 ---------------------------------------------------------------------------
3320 AND attribute_code NOT LIKE 'GTIN_%'
3322 AND (
3323 attribute_code IN -- Segregating Item Revision Base Attributes using this clause
3324 (
3325 select LOOKUP_CODE CODE
3326 from FND_LOOKUP_VALUES
3327 where LOOKUP_TYPE = 'EGO_ITEM_REV_HDR_ATTR_GRP'
3328 AND LANGUAGE = USERENV('LANG')
3329 AND ENABLED_FLAG = 'Y'
3330 and LOOKUP_CODE not in ('REVISION_CREATION_DATE', 'REVISION_CREATED_BY')
3331 )
3332 OR
3333 attribute_code = G_REV_EFF_DATE_ATTR_CODE
3334 -- Bug 6186037
3335 --accomodate for revision effective date which doest exist in EGO_ITEM_REV_HDR_ATTR_GRP and cannot be included
3336
3337 );
3338
3339 --------------------------------------------------------------------------
3340 -- To check if the given Set Process ID already exists in MSII.
3341 --------------------------------------------------------------------------
3342 CURSOR c_msii_set_id_exists(c_set_process_id IN NUMBER) IS
3343 SELECT 'x'
3344 FROM mtl_system_items_interface
3345 WHERE set_process_id = c_set_process_id;
3346
3347 ---------------------------------------------------------------------
3348 -- Type Declarations
3349 ---------------------------------------------------------------------
3350 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
3351 INDEX BY BINARY_INTEGER;
3352
3353 -------------------------
3354 -- local variables --
3355 -------------------------
3356 l_prod_col_name_tbl VARCHAR_TBL_TYPE;
3357 l_intf_col_name_tbl VARCHAR_TBL_TYPE;
3358
3359 l_prod_col_name VARCHAR2(256);
3360 l_intf_col_name VARCHAR2(256);
3361
3362 ---------------------------------------------------------------------
3363 -- Assuming that the column name will not be more than 30 chars.
3364 ---------------------------------------------------------------------
3365 l_item_number_col VARCHAR2(30);
3366 l_org_code_col VARCHAR2(30);
3367 l_rev_code_col VARCHAR2(30);
3368 l_lifecycle_col_val VARCHAR2(50);
3369 l_lifecycle_phase_col_val VARCHAR2(50);
3370 l_inventory_item_id MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE;
3371 l_item_catalog_name_col VARCHAR2(50);
3372
3373 l_msii_set_process_id NUMBER;
3374 i NUMBER;
3375 l_cursor_select INTEGER;
3376 l_cursor_execute INTEGER;
3377
3378 l_item_number_table DBMS_SQL.VARCHAR2_TABLE;
3379 l_org_id_table DBMS_SQL.NUMBER_TABLE;
3380 l_temp NUMBER(10) := 1;
3381 l_count NUMBER := 0;
3382 l_exists VARCHAR2(2);
3383
3384 l_trans_id_table DBMS_SQL.NUMBER_TABLE;
3385
3386 --------------------------------------------
3387 -- Long Dynamic SQL String
3388 --------------------------------------------
3389 l_dyn_sql VARCHAR2(10000);
3390
3391 BEGIN
3392 Write_Debug('*Item Revisions Interface*');
3393
3394 Write_Debug('About to populate the EBI with Trans IDs');
3395
3396 --------------------------------------------------------------------
3397 --Populate the Transaction IDs for current Result fmt usage ID
3398 --------------------------------------------------------------------
3399 -- Bug: 3804572 - Error messages are not shown, if import format contains revision attrs.
3400 -- this was happening because the error was logged with a previous transaction id and
3401 -- here a new transaction id was updated to Bulkload interface table.
3402 IF p_data_level <> G_ITEM_DATA_LEVEL THEN
3403 UPDATE ego_bulkload_intf
3404 SET transaction_id = MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL
3405 WHERE resultfmt_usage_id = p_resultfmt_usage_id;
3406 END IF;
3407
3408 Write_Debug('Retrieving the Display and INTF cols');
3409 i := 0;
3410 --------------------------------------------------------------------
3411 -- Saving the column names in local table for easy retrieval later.
3412 -- Also save important columns such as Item ID, Org ID etc.,
3413 --------------------------------------------------------------------
3414 FOR c_item_rev_attr_intf_rec IN c_item_rev_attr_intf_cols
3415 (
3416 p_resultfmt_usage_id
3417 )
3418 LOOP
3419
3420 l_prod_col_name := c_item_rev_attr_intf_rec.attribute_code;
3421 l_intf_col_name := c_item_rev_attr_intf_rec.intf_column_name;
3422
3423 Write_Debug('The caller identity is : '|| p_caller_identifier);
3424 Write_Debug('p_data_level =>: '|| p_data_level);
3425
3426 --------------------------------------------------------------------
3427 -- If the Caller Identifer is G_ITEM, then save the column info.
3428 --------------------------------------------------------------------
3429 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM) THEN
3430
3431 --------------------------------------------------------------------
3432 -- Store the Item Number column name in the Generic Interface
3433 --------------------------------------------------------------------
3434 IF (l_prod_col_name = G_ITEM_NUMBER) THEN
3435 l_item_number_col := l_intf_col_name;
3439 -- Store the Organization Code column name in the Generic Interface
3436 Write_Debug('Item Number : '||l_item_number_col);
3437
3438 --------------------------------------------------------------------
3440 --------------------------------------------------------------------
3441 ELSIF (l_prod_col_name = G_ORG_CODE) THEN
3442 l_org_code_col := l_intf_col_name;
3443 Write_Debug('Organization Code : '||l_org_code_col);
3444
3445 --------------------------------------------------------------------
3446 --Saving the Rest of column names.
3447 --------------------------------------------------------------------
3448 ELSIF (l_prod_col_name IN (G_ITEM_CATALOG_GROUP,G_ITEM_CATALOG_GROUP1)) THEN
3449 l_item_catalog_name_col := l_intf_col_name;
3450
3451 ELSE
3452 ---------------------------------------------------------------------
3453 -- Mapping the Revision Attribute Code to the Database Column.
3454 ---------------------------------------------------------------------
3455 IF (l_prod_col_name = G_REV_CODE_ATTR_CODE) THEN
3456 l_prod_col_name_tbl(i) := G_REV_CODE_DB_COL;
3457 ------------------------------------------
3458 -- Saving the intf col name for Rev Code.
3459 ------------------------------------------
3460 l_rev_code_col := l_intf_col_name;
3461 ELSIF (l_prod_col_name = G_REV_LABEL_ATTR_CODE) THEN
3462 l_prod_col_name_tbl(i) := G_REV_LABEL_DB_COL;
3463 ELSIF (l_prod_col_name = G_REV_DESCRIPTION_ATTR_CODE) THEN
3464 l_prod_col_name_tbl(i) := G_REV_DESCRIPTION_DB_COL;
3465 ELSIF (l_prod_col_name = G_REV_REASON_ATTR_CODE) THEN
3466 l_prod_col_name_tbl(i) := G_REV_REASON_DB_COL;
3467 ELSIF (l_prod_col_name = G_REV_LC_ID_ATTR_CODE) THEN
3468 l_prod_col_name_tbl(i) := G_REV_LC_ID_DB_COL;
3469 ELSIF (l_prod_col_name = G_REV_LC_PHASE_ID_ATTR_CODE) THEN
3470 l_prod_col_name_tbl(i) := G_REV_LC_PHASE_ID_DB_COL;
3471 ELSIF (l_prod_col_name = G_REV_IMPL_DATE_ATTR_CODE) THEN
3472 l_prod_col_name_tbl(i) := G_REV_IMPL_DATE_DB_COL;
3473 ELSIF (l_prod_col_name = G_REV_EFF_DATE_ATTR_CODE OR
3474 l_prod_col_name = G_REV_EFF_DATE_ATTR_CODE_2 ) THEN
3475 l_prod_col_name_tbl(i) := G_REV_EFF_DATE_DB_COL;
3476 ELSIF (l_prod_col_name = G_REV_ID_ATTR_CODE) THEN
3477 NULL; --do nothing
3478 ELSE
3479 ---------------------------------------------------------
3480 -- The Attribute Code and DB Column name are the same.
3481 ---------------------------------------------------------
3482 l_prod_col_name_tbl(i) := l_prod_col_name;
3483 END IF;
3484
3485 l_intf_col_name_tbl(i) := l_intf_col_name;
3486
3487 END IF; --IF (l_prod_col_name = G_ITEM_NUMBER) THEN
3488
3489 END IF; --IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM)
3490 Write_Debug('^^l_prod_col_name_tbl('||i||') : '||l_prod_col_name_tbl(i));
3491 Write_Debug('^^l_intf_col_name_tbl('||i||') : '||l_intf_col_name_tbl(i));
3492 i := i+1;
3493
3494 END LOOP; --FOR c_item_rev_attr_intf_rec
3495
3496 ---------------------------------------------------------------------
3497 -- All the following need not be executed if Revision Update --
3498 -- is done through Item Search Results. --
3499 ---------------------------------------------------------------------
3500 IF p_data_level = G_ITEM_REV_DATA_LEVEL THEN
3501
3502 Write_Debug('Updating EBI with Org IDs');
3503
3504 ---------------------------------------------
3505 -- Update Instance PK2 Value with ORG ID. --
3506 ---------------------------------------------
3507 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI ';
3508 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK2_VALUE = ';
3509 l_dyn_sql := l_dyn_sql || ' ( ';
3510 l_dyn_sql := l_dyn_sql || ' SELECT ORGANIZATION_ID ';
3511 l_dyn_sql := l_dyn_sql || ' FROM MTL_PARAMETERS ';
3512 l_dyn_sql := l_dyn_sql || ' WHERE ORGANIZATION_CODE = EBI.'||l_org_code_col;
3513 l_dyn_sql := l_dyn_sql || ' ) ';
3514 l_dyn_sql := l_dyn_sql || 'WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3515 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3516
3517 Write_Debug(l_dyn_sql);
3518 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3519 Write_Debug('Selecting Org IDs, Item Numbers');
3520
3521 ---------------------------------------------------------------------
3522 -- Update EBI with Catalog Group Name if present in the Result Format
3523 ---------------------------------------------------------------------
3524 IF l_item_catalog_name_col IS NOT NULL THEN
3525 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3526 l_dyn_sql := l_dyn_sql || ' SET ';
3527 l_dyn_sql := l_dyn_sql || G_ITEM_CATALOG_NAME_EBI_COL||' = '||l_item_catalog_name_col ;
3528 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3529 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3530 Write_Debug(l_dyn_sql);
3531
3532 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3533 Write_Debug('Updated EBI with Catalog Group Name for Item Revisions');
3534 END IF;
3535
3536 --------------------------------------------------------------
3540 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID ';
3537 -- Fetch Organization ID, Item Number in Temp PLSQL tables.
3538 --------------------------------------------------------------
3539 l_dyn_sql := ' SELECT INSTANCE_PK2_VALUE, '||l_item_number_col || ', ';
3541 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF ';
3542 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3543 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3544 Write_Debug(l_dyn_sql);
3545
3546 l_cursor_select := DBMS_SQL.OPEN_CURSOR;
3547 DBMS_SQL.PARSE(l_cursor_select, l_dyn_sql, DBMS_SQL.NATIVE);
3548 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 1,l_org_id_table,2500, l_temp);
3549 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 2,l_item_number_table,2500, l_temp);
3550 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 3,l_trans_id_table,2500, l_temp);
3551 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
3552 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_select);
3553 Write_Debug('About to start the Loop to fetch Rows');
3554
3555 LOOP
3556 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
3557 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 1, l_org_id_table);
3558 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 2, l_item_number_table);
3559 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 3, l_trans_id_table);
3560
3561 Write_Debug('Retrieved rows => '||To_char(l_count));
3562
3563 -------------------------------------------------------------
3564 -- Loop to Update the Inventory Item IDs.
3565 -------------------------------------------------------------
3566 FOR i IN 1..l_org_id_table.COUNT LOOP
3567
3568 Write_Debug('Org ID : '||To_char(l_org_id_table(i)));
3569 Write_Debug('Inv Item Num : '||l_item_number_table(i));
3570
3571 -------------------------------------------------------------
3572 -- Invoke FND Key Flex API to fetch the Inventory Item ID.
3573 -- If Inventory Item ID found, then update in EBI.
3574 -------------------------------------------------------------
3575 IF FND_FLEX_KEYVAL.Validate_Segs
3576 ( operation => 'FIND_COMBINATION'
3577 , appl_short_name => 'INV'
3578 , key_flex_code => 'MSTK'
3579 , structure_number => 101
3580 , concat_segments => l_item_number_table(i)
3581 , data_set => l_org_id_table(i)
3582 )
3583 THEN
3584 l_inventory_item_id := FND_FLEX_KEYVAL.combination_id;
3585
3586 Write_Debug('Inv Item ID : '||To_char(l_inventory_item_id));
3587
3588 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3589 l_dyn_sql := l_dyn_sql || ' SET INSTANCE_PK1_VALUE = '||l_inventory_item_id;
3590 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = '||l_org_id_table(i);
3591 l_dyn_sql := l_dyn_sql || ' AND '|| l_item_number_col|| ' = :ITEM_NUMBER';
3592 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3593 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3594
3595 Write_Debug(l_dyn_sql);
3596 EXECUTE IMMEDIATE l_dyn_sql USING l_item_number_table(i), p_resultfmt_usage_id;
3597
3598 END IF; --IF FND_FLEX_KEYVAL..
3599
3600 Write_Debug('G_CATALOG_GROUP_ID => '||G_CATALOG_GROUP_ID);
3601 -----------------------------------------------------------------
3602 -- Setting Category ID for Item Revision Flow.
3603 -- Bug #5179741(RSOUNDAR)
3604 -----------------------------------------------------------------
3605 IF G_CATALOG_GROUP_ID IS NULL THEN
3606 IF l_item_catalog_name_col IS NOT NULL THEN
3607 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF EBI';
3608 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = ';
3609 l_dyn_sql := l_dyn_sql || '( ';
3610 l_dyn_sql := l_dyn_sql || ' SELECT TO_CHAR(MICG.ITEM_CATALOG_GROUP_ID) ';
3611 l_dyn_sql := l_dyn_sql || ' FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG ';
3612 l_dyn_sql := l_dyn_sql || ' WHERE MICG.CONCATENATED_SEGMENTS = EBI.'||l_item_catalog_name_col;
3613 l_dyn_sql := l_dyn_sql || ') ';
3614 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3615 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_item_catalog_name_col||' IS NOT NULL';
3616 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3617 Write_Debug(l_dyn_sql);
3618 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3619 ELSE -- l_item_catalog_name_col IS NULL
3620 -- no need to do anything here
3621 NULL;
3622 END IF; -- l_item_catalog_name_col IS NOT NULL
3623 ELSE -- G_CATALOG_GROUP_ID IS NOT NULL
3624
3625 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3626 -------------------------------------------------------------
3627 --Storing Catalog Group ID and other imp data in buffer cols
3628 -------------------------------------------------------------
3629 l_dyn_sql := l_dyn_sql || ' SET '||G_ITEM_CATALOG_EBI_COL||' = '||G_CATALOG_GROUP_ID;
3630 l_dyn_sql := l_dyn_sql || ' WHERE INSTANCE_PK2_VALUE = :ORGANIZATION_ID ';
3631 l_dyn_sql := l_dyn_sql || ' AND TRANSACTION_ID = :TRANSACTION_ID ';
3632 l_dyn_sql := l_dyn_sql || ' AND RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3636 EXECUTE IMMEDIATE l_dyn_sql USING l_org_id_table(i), l_trans_id_table(i), p_resultfmt_usage_id;
3633 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3634
3635 Write_Debug(l_dyn_sql);
3637
3638 END IF;--end: IF (G_CATALOG_GROUP_ID IS NULL)
3639
3640 END LOOP; --FOR i IN 1..l_org_id_table.COUNT LOOP
3641
3642 l_org_id_table.DELETE;
3643 l_item_number_table.DELETE;
3644
3645 -----------------------------------------------------------------
3646 -- For the final batch of records, either it will be 0 or < 2500
3647 -----------------------------------------------------------------
3648 EXIT WHEN l_count <> 2500;
3649
3650 END LOOP; --l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
3651
3652 DBMS_SQL.CLOSE_CURSOR(l_cursor_select);
3653
3654 Write_Debug('Done with Item IDs population.');
3655
3656 -----------------------------------------------------------------
3657 -- Determine the Set Process ID, that is unique for MSII
3658 -----------------------------------------------------------------
3659 IF p_set_process_id IS NULL THEN
3660 SELECT mtl_system_items_intf_sets_s.NEXTVAL
3661 INTO l_msii_set_process_id
3662 FROM dual;
3663 ELSE
3664 l_msii_set_process_id := p_set_process_id;
3665 END IF;
3666
3667 ---------------------------------------------------------------------
3668 -- END: All the above need not be executed if Revision Update --
3669 -- is done through Item Search Results. --
3670 ---------------------------------------------------------------------
3671
3672 ELSE --p_data_level = G_ITEM_DATA_LEVEL
3673
3674 Write_Debug('Item Rev Intf using the Set Process ID used by Item Interface');
3675
3676 ----------------------------------------------------------------------------
3677 -- Using the Set Process ID used by Item Interface, as Revs are updated
3678 -- as part of Item Search Results.
3679 ----------------------------------------------------------------------------
3680 l_msii_set_process_id := G_MSII_SET_PROCESS_ID;
3681
3682 ----------------------------------------------------------------------------
3683 -- During Item processing itself, ITEM_NUMBER and ORG_CODE are loaded
3684 -- in following columns.
3685 ----------------------------------------------------------------------------
3686 l_item_number_col := G_ITEM_NUMBER_EBI_COL;
3687 l_org_code_col := G_ORG_CODE_EBI_COL;
3688
3689 END IF; --end: IF p_data_level = G_ITEM_REV_DATA_LEVEL
3690
3691 Write_Debug('l_msii_set_process_id : '||To_char(l_msii_set_process_id));
3692
3693 -----------------------------------------------------------------
3694 -- Insert rows from EBI into MSII
3695 -----------------------------------------------------------------
3696 l_dyn_sql := 'INSERT INTO MTL_ITEM_REVISIONS_INTERFACE ';
3697 l_dyn_sql := l_dyn_sql || '( ';
3698 l_dyn_sql := l_dyn_sql || ' SET_PROCESS_ID , ';
3699 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
3700 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
3701 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID, ';
3702 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
3703 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
3704 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
3705 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
3706 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
3707 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
3708 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG , ';
3709 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID , ';
3710 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE ';
3711 l_dyn_sql := l_dyn_sql || ') ';
3712 l_dyn_sql := l_dyn_sql || 'SELECT ';
3713 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
3714 l_dyn_sql := l_dyn_sql || ' EBI.TRANSACTION_ID , ';
3715 l_dyn_sql := l_dyn_sql || G_REQUEST_ID||' , ';
3716 l_dyn_sql := l_dyn_sql || G_PROG_APPID||' , ';
3717 l_dyn_sql := l_dyn_sql || G_PROG_ID||' , ';
3718 l_dyn_sql := l_dyn_sql || ' UPPER(EBI.TRANSACTION_TYPE) , ';
3719 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
3720 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
3721 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
3722 l_dyn_sql := l_dyn_sql || ' EBI.'||l_org_code_col ||' , ';
3723 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS ||' , ';
3724 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
3725 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 ';
3726 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
3727 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3728 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3729
3730 Write_Debug(l_dyn_sql);
3731 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3732 Write_Debug('Item Revs Interface: Populated the Inv Item IDs, Org IDs.');
3733
3734 ----------------------------------------------------------------------------------
3735 --Save Item Num, Org Code in designated columns in EBI for Error Reporting later
3736 ----------------------------------------------------------------------------------
3737 l_dyn_sql := ' UPDATE EGO_BULKLOAD_INTF ';
3738 l_dyn_sql := l_dyn_sql || ' SET ';
3739 -----------------------------------------------------------------------------------------
3743 IF p_data_level = G_ITEM_REV_DATA_LEVEL THEN
3740 -- In case of ITEM_LEVEL the following is already populated in load_item_interface_lines
3741 -- procedure.
3742 -----------------------------------------------------------------------------------------
3744 l_dyn_sql := l_dyn_sql || G_ITEM_NUMBER_EBI_COL||' = '||l_item_number_col||' , ';
3745 l_dyn_sql := l_dyn_sql || G_ORG_CODE_EBI_COL||' = '||l_org_code_col ||' , ';
3746 END IF;
3747
3748 l_dyn_sql := l_dyn_sql || G_REVISION_CODE_EBI_COL||' = '||l_rev_code_col;
3749 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3750 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
3751
3752 Write_Debug(l_dyn_sql);
3753 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
3754 Write_Debug('Item Revs Interface: Done saving Item Num, Org Code, Rev Code in EBI for error retrieval later.');
3755
3756 ---------------------------------------
3757 -- Reset i back to 0, for re-use.
3758 ---------------------------------------
3759 i := 0;
3760 IF ( l_prod_col_name_tbl.count > 0) THEN
3761 FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
3762 Write_Debug('*l_prod_col_name_tbl(i)'||l_prod_col_name_tbl(i));
3763 Write_Debug('*l_intf_col_name_tbl(i)'||l_intf_col_name_tbl(i));
3764
3765 IF (l_prod_col_name_tbl(i) = G_REV_REASON_DB_COL) THEN
3766
3767 ----------------------------------------------------------------------------------
3768 -- Transfer the Revision Reason information from EBI to MIRI
3769 -- by doing Value-to-ID Conversion.
3770 ----------------------------------------------------------------------------------
3771 l_dyn_sql := '';
3772 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3773 l_dyn_sql := l_dyn_sql || ' SET MIRI.'||G_REV_REASON_DB_COL||' = ';
3774 l_dyn_sql := l_dyn_sql || '( ';
3775 l_dyn_sql := l_dyn_sql || ' SELECT IT.LOOKUP_CODE ';
3776 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
3777 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE = ''EGO_ITEM_REVISION_REASON'' ';
3778 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE = Userenv(''LANG'') ';
3779 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING = EBI.'||l_intf_col_name_tbl(i);
3780 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3781 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3782 ----------------------------------------------------------------------------------
3783 -- WHERE EXISTS takes care of filtering lines. Hence this join not needed.
3784 -- l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3785 ----------------------------------------------------------------------------------
3786 l_dyn_sql := l_dyn_sql || ') ';
3787 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3788 l_dyn_sql := l_dyn_sql || '( ';
3789 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3790 l_dyn_sql := l_dyn_sql || ' FROM FND_LOOKUP_VALUES IT, EGO_BULKLOAD_INTF EBI ';
3791 l_dyn_sql := l_dyn_sql || ' WHERE IT.LOOKUP_TYPE = ''EGO_ITEM_REVISION_REASON'' ';
3792 l_dyn_sql := l_dyn_sql || ' AND IT.LANGUAGE = Userenv(''LANG'') ';
3793 l_dyn_sql := l_dyn_sql || ' AND IT.MEANING = EBI.'||l_intf_col_name_tbl(i);
3794 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3795 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3796 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3797 l_dyn_sql := l_dyn_sql || ') ';
3798
3799 Write_Debug(l_dyn_sql);
3800 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3801 Write_Debug('MIRI: Updated the Revision Reason Codes.');
3802
3803 ----------------------------------------------------------------------------------
3804 -- Bug# 3421497 fix.
3805 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
3806 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
3807 -- dependant upon the Lifecycle ID value.
3808 ----------------------------------------------------------------------------------
3809 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE) THEN
3810
3811 l_lifecycle_col_val := l_intf_col_name_tbl(i);
3812
3813 ----------------------------------------------------------------------------------
3814 -- Bug# 3421497 fix.
3815 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
3816 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
3817 -- dependant upon the Lifecycle ID value.
3818 ----------------------------------------------------------------------------------
3819 ELSIF (l_prod_col_name_tbl(i) = G_LIFECYCLE_PHASE) THEN
3820
3821 l_lifecycle_phase_col_val := l_intf_col_name_tbl(i);
3822
3823 ----------------------------------------------------------------------------------
3824 -- Transfer the Column information from EBI to MSII
3825 -- which *DONOT NEED* Value-to-ID Conversion.
3826 ----------------------------------------------------------------------------------
3827 ELSE
3828
3829 l_dyn_sql := '';
3830 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3831 l_dyn_sql := l_dyn_sql || ' SET MIRI.'||l_prod_col_name_tbl(i) ||' = ';
3832 l_dyn_sql := l_dyn_sql || '( ';
3833 l_dyn_sql := l_dyn_sql || ' SELECT EBI.'||l_intf_col_name_tbl(i);
3834 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
3835 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3836 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3837 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3838 l_dyn_sql := l_dyn_sql || ') ';
3839 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3840 l_dyn_sql := l_dyn_sql || '( ';
3841 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3842 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF EBI ';
3843 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3844 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3845 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3846 l_dyn_sql := l_dyn_sql || ') ';
3847
3848 Write_Debug(l_dyn_sql);
3849
3850 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3851 Write_Debug('MIRI: Updated the '||l_prod_col_name_tbl(i)||' column values.');
3852
3853 END IF;--end: IF (l_prod_col_name_tbl(i) = G_REV_REASON_DB_COL) THEN
3854
3855 END LOOP;--end: FOR i IN l_prod_col_name_tbl.first .. l_prod_col_name_tbl.last LOOP
3856
3857 ----------------------------------------------------------------------------------
3858 -- Bug# 3421497 fix.
3859 -- If Lifecycle ID or Lifecycle Phase ID, save column information, and process
3860 -- later in the sequence, as Lifecycle Phase ID Value-to-ID conversion is
3861 -- dependant upon the Lifecycle ID value.
3862 -- Hence the are processed outside the above LOOP.
3863 ----------------------------------------------------------------------------------
3864
3865 IF (l_lifecycle_col_val IS NOT NULL OR l_lifecycle_phase_col_val IS NOT NULL ) THEN
3866
3867 ----------------------------------------------------------------------------------
3868 -- Fix for Bug:3624686
3869 -- LIFECYCLE_ID cannot be updated anymore through Spreadsheet (Excel) Item
3870 -- Revision Import. Only Lifecycle Phase (CURRENT_PHASE_ID) can be updated.
3871 -- ***Hence, Commenting out following which sets the LIFECYCLE_ID.
3872 ----------------------------------------------------------------------------------
3873 /*
3874
3875 ----------------------------------------------------------------------------------
3876 -- First Transfer the Lifecycle information from EBI to MSII
3877 -- by doing Value-to-ID Conversion.
3878 ----------------------------------------------------------------------------------
3879 l_dyn_sql := '';
3880 l_dyn_sql := l_dyn_sql || ' ';
3881 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3882 l_dyn_sql := l_dyn_sql || ' SET MIRI.LIFECYCLE_ID = ';
3883 l_dyn_sql := l_dyn_sql || '( ';
3884 l_dyn_sql := l_dyn_sql || ' SELECT LC.PROJ_ELEMENT_ID ';
3885 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_LIFECYCLES_PHASES_V LC, EGO_BULKLOAD_INTF EBI ';
3886 l_dyn_sql := l_dyn_sql || ' WHERE LC.OBJECT_TYPE = ''PA_STRUCTURES'' ';
3887 l_dyn_sql := l_dyn_sql || ' AND LC.NAME = EBI.'||l_lifecycle_col_val;
3888 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3889 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3890 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3891 l_dyn_sql := l_dyn_sql || ') ';
3892 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3893 l_dyn_sql := l_dyn_sql || '( ';
3894 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3895 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_LIFECYCLES_PHASES_V LC, EGO_BULKLOAD_INTF EBI ';
3896 l_dyn_sql := l_dyn_sql || ' WHERE LC.OBJECT_TYPE = ''PA_STRUCTURES'' ';
3897 l_dyn_sql := l_dyn_sql || ' AND LC.NAME = EBI.'||l_lifecycle_col_val;
3898 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3899 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3900 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3901 l_dyn_sql := l_dyn_sql || ') ';
3902
3903 Write_Debug(l_dyn_sql);
3904 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3905 Write_Debug('MIRI: Updated the Lifecycle IDs.');
3906 */
3907
3908 ----------------------------------------------------------------------------------
3909 -- Fix for Bug:3624686
3910 -- As a part of 11.5.10, Setting the Lifecycle for Revision is not available.
3911 -- But setting Lifecycle Phase is still possible.
3912 -- Hence pick up the Lifecycle from Item (MTL_SYSTEM_ITEMS_B) and set in
3913 -- MTL_ITEM_REVISIONS_INTERFACE.
3914 ----------------------------------------------------------------------------------
3915
3916 ----------------------------------------------------------------------------------
3917 -- First Transfer the Lifecycle ID information from MSI to MSII
3918 -- as the Revision inherits Lifecycle ID from Item.
3919 ----------------------------------------------------------------------------------
3920 l_dyn_sql := '';
3921 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3922 l_dyn_sql := l_dyn_sql || ' SET MIRI.LIFECYCLE_ID = ';
3923 l_dyn_sql := l_dyn_sql || '( ';
3924 l_dyn_sql := l_dyn_sql || ' SELECT MSI.LIFECYCLE_ID ';
3925 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_B MSI, EGO_BULKLOAD_INTF EBI ';
3926 l_dyn_sql := l_dyn_sql || ' WHERE MSI.INVENTORY_ITEM_ID = EBI.INSTANCE_PK1_VALUE ';
3927 l_dyn_sql := l_dyn_sql || ' AND MSI.ORGANIZATION_ID = EBI.INSTANCE_PK2_VALUE ';
3928 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
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 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3933 l_dyn_sql := l_dyn_sql || '( ';
3934 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3935 l_dyn_sql := l_dyn_sql || ' FROM MTL_SYSTEM_ITEMS_B MSI, EGO_BULKLOAD_INTF EBI ';
3936 l_dyn_sql := l_dyn_sql || ' WHERE MSI.INVENTORY_ITEM_ID = EBI.INSTANCE_PK1_VALUE ';
3937 l_dyn_sql := l_dyn_sql || ' AND MSI.ORGANIZATION_ID = EBI.INSTANCE_PK2_VALUE ';
3938 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3939 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3940 -- Bug: 3762986 - If LC Phase is not null, then only update the lifecycle_id
3941 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_lifecycle_phase_col_val||' IS NOT NULL';
3942 -- Bug: 3762986 - end
3943 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3944 l_dyn_sql := l_dyn_sql || ') ';
3945
3946 Write_Debug(l_dyn_sql);
3947 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3948 Write_Debug('MIRI: Updated the Lifecycle IDs from MTL_SYSTEM_ITEMS_B.');
3949
3950 ----------------------------------------------------------------------------------
3951 -- Next Transfer the Lifecycle Phase information from EBI to MSII
3952 -- by doing Value-to-ID Conversion, and by joining Lifecycle ID information.
3953 ----------------------------------------------------------------------------------
3954 l_dyn_sql := '';
3955 l_dyn_sql := l_dyn_sql || 'UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI ';
3956 l_dyn_sql := l_dyn_sql || ' SET MIRI.CURRENT_PHASE_ID = ';
3957 l_dyn_sql := l_dyn_sql || '( ';
3958 l_dyn_sql := l_dyn_sql || ' SELECT LCP.PROJ_ELEMENT_ID ';
3959 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_PHASES_V LCP, EGO_BULKLOAD_INTF EBI ';
3960 l_dyn_sql := l_dyn_sql || ' WHERE LCP.PARENT_STRUCTURE_ID = MIRI.LIFECYCLE_ID ';
3961 l_dyn_sql := l_dyn_sql || ' AND LCP.NAME = EBI.'||l_lifecycle_phase_col_val;
3962 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
3963 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3964 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3965 l_dyn_sql := l_dyn_sql || ') ';
3966 l_dyn_sql := l_dyn_sql || ' WHERE EXISTS ';
3967 l_dyn_sql := l_dyn_sql || '( ';
3968 l_dyn_sql := l_dyn_sql || ' SELECT ''X'' ';
3969 l_dyn_sql := l_dyn_sql || ' FROM PA_EGO_PHASES_V LCP, EGO_BULKLOAD_INTF EBI ';
3970 l_dyn_sql := l_dyn_sql || ' WHERE LCP.PARENT_STRUCTURE_ID = MIRI.LIFECYCLE_ID ';
3971 l_dyn_sql := l_dyn_sql || ' AND LCP.NAME = EBI.'||l_lifecycle_phase_col_val;
3972 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_EXISTS';
3973 l_dyn_sql := l_dyn_sql || ' AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID ';
3974 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
3975 l_dyn_sql := l_dyn_sql || ') ';
3976
3977 Write_Debug(l_dyn_sql);
3978 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
3979 Write_Debug('MIRI: Updated the Lifecycle Phase IDs.');
3980
3981 END IF; --end: IF (l_lifecycle_col_val IS NOT NULL ...
3982
3983 END IF; --IF ( l_prod_col_name_tbl.count > 0) THEN
3984
3985 --
3986 -- delete unnecessary records from MIRI
3987 -- Bug: 5476972 "Rows not to be deleted if Revision is null"
3988 -- bug: 5557250 delete only if all the fields are populated as NULL
3989 --
3990 /* Bug 7578350. Moving this DELETE statement to the function process_item_interface_lines(), after the function call
3991 load_itm_or_rev_usrattr_intf() that updates UDAs, so that we delete the rows from MTL_ITEM_REVISIONS_INTERFACE
3992 only if there are no Revision Level Attributes provided.
3993
3994 DELETE MTL_ITEM_REVISIONS_INTERFACE MIRI
3995 WHERE revision IS NULL
3996 AND revision_id IS NULL
3997 AND implementation_date IS NULL
3998 AND effectivity_date IS NULL
3999 AND description IS NULL
4000 AND revision_label IS NULL
4001 AND revision_reason IS NULL
4002 AND current_phase_id IS NULL
4003 AND EXISTS (SELECT 'X'
4004 FROM EGO_BULKLOAD_INTF EBI
4005 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4006 AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID
4007 AND EBI.PROCESS_STATUS = 1
4008 ); */
4009
4010 --
4011 -- convert all date fields values from Excel Null to INTF Null
4012 --
4013 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
4014 SET ecn_initiation_date = DECODE(ecn_initiation_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,ecn_initiation_date),
4015 implementation_date = DECODE(implementation_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,implementation_date),
4016 effectivity_date = DECODE(effectivity_date,G_EXCEL_NULL_DATE,EGO_ITEM_PUB.G_INTF_NULL_DATE,effectivity_date)
4017 WHERE MIRI.TRANSACTION_ID IN
4018 ( SELECT EBI.TRANSACTION_ID
4019 FROM EGO_BULKLOAD_INTF EBI
4020 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4021 AND EBI.PROCESS_STATUS = 1
4022 )
4023 AND (MIRI.ecn_initiation_date IS NOT NULL
4024 OR
4025 MIRI.implementation_date IS NOT NULL
4026 OR
4027 MIRI.effectivity_date IS NOT NULL
4028 );
4029
4030 x_retcode := G_STATUS_SUCCESS;
4031 x_set_process_id := l_msii_set_process_id;
4032
4033 END load_item_revs_interface;
4034
4035 ----------------------------------------------------------
4036 -- Preprocess Item Revision Interface Lines --
4037 ----------------------------------------------------------
4038 PROCEDURE preprocess_itemrev_interface
4039 (
4040 p_resultfmt_usage_id IN NUMBER,
4041 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
4042 p_set_process_id IN NUMBER,
4043 x_errbuff IN OUT NOCOPY VARCHAR2,
4044 x_retcode IN OUT NOCOPY VARCHAR2
4045 ) IS
4046
4047 -- Start OF comments
4048 -- API name : Setup MSII Item Interface Lines for processing
4049 -- TYPE : Private
4050 -- Pre-reqs : None
4051 -- FUNCTION : Populate and Prepare Item interfance lines.
4052 -- Eliminates any redundancy / errors in MSII
4053
4054 -----------------------------------------------
4055 -- Long Dynamic SQL String
4056 -----------------------------------------------
4057 l_dyn_sql VARCHAR2(20000);
4058
4059 BEGIN
4060
4061 -----------------------------------------------------------------------
4062 -- Only in case of Import, and while importing Multi-Row attr group
4063 -- values : Item, Org, Revision are NOT NULL, and rest of the base
4064 -- attributes are NULL. Hence can delete these rows off from MIRI.
4065 -----------------------------------------------------------------------
4069 (
4066 DELETE MTL_ITEM_REVISIONS_INTERFACE
4067 WHERE
4068 (
4070 ITEM_NUMBER IS NOT NULL OR
4071 INVENTORY_ITEM_ID IS NOT NULL
4072 )
4073 AND
4074 (
4075 ORGANIZATION_CODE IS NOT NULL OR
4076 ORGANIZATION_ID IS NOT NULL
4077 )
4078 AND
4079 (
4080 REVISION IS NOT NULL OR
4081 REVISION_ID IS NOT NULL
4082 )
4083 )
4084 AND
4085 (
4086 DESCRIPTION IS NULL AND
4087 LIFECYCLE_ID IS NULL AND
4088 CURRENT_PHASE_ID IS NULL AND
4089 REVISION_LABEL IS NULL AND
4090 REVISION_REASON IS NULL AND
4091 LIFECYCLE_ID IS NULL AND
4092 CURRENT_PHASE_ID IS NULL AND
4093 EFFECTIVITY_DATE IS NULL
4094 )
4095 AND SET_PROCESS_ID = p_set_process_id;
4096
4097 Write_Debug('Preprocess_ItemRev_Interface : Deleted redundant / unnecessary rows from MIRI');
4098
4099 END preprocess_itemrev_interface;
4100
4101
4102 ----------------------------------------------------------
4103 -- Setup Item Revision Interface Lines --
4104 ----------------------------------------------------------
4105 PROCEDURE Setup_itemrev_interface
4106 (
4107 p_resultfmt_usage_id IN NUMBER,
4108 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
4109 p_data_level IN VARCHAR2,
4110 p_set_process_id IN NUMBER,
4111 x_set_process_id OUT NOCOPY NUMBER,
4112 x_errbuff OUT NOCOPY VARCHAR2,
4113 x_retcode OUT NOCOPY VARCHAR2
4114 ) IS
4115
4116 -- Start OF comments
4117 -- API name : Setup MIRI Item Rev Interface Lines for processing
4118 -- TYPE : Private
4119 -- Pre-reqs : None
4120 -- FUNCTION : Populate and Prepare Item Rev interfance lines.
4121 -- Eliminates any redundancy / errors in MIRI
4122
4123 l_set_process_id NUMBER(15);
4124
4125 BEGIN
4126
4127 -----------------------------------
4128 -- Populates rows in MIRI
4129 -----------------------------------
4130 load_item_revs_interface(
4131 p_resultfmt_usage_id => p_resultfmt_usage_id
4132 ,p_data_level => p_data_level
4133 ,p_set_process_id => p_set_process_id
4134 ,x_set_process_id => l_set_process_id
4135 ,x_errbuff => x_errbuff
4136 ,x_retcode => x_retcode
4137 );
4138
4139 -------------------------------------------------------
4140 -- Deletes redundant / unnecessary rows from MIRI.
4141 -------------------------------------------------------
4142 preprocess_itemrev_interface(
4143 p_resultfmt_usage_id => p_resultfmt_usage_id
4144 ,p_set_process_id => l_set_process_id
4145 ,x_errbuff => x_errbuff
4146 ,x_retcode => x_retcode
4147 );
4148
4149 x_set_process_id := l_set_process_id;
4150
4151 Write_Debug('Setup_ItemRev_Interface : Set Process Id => '||x_set_process_id);
4152
4153 EXCEPTION
4154 WHEN OTHERS THEN
4155 x_retcode := G_STATUS_ERROR;
4156 x_errbuff := SUBSTRB(SQLERRM, 1,240);
4157 Write_Debug('Setup_Itemrev_Interface : EXCEPTION HAPPENED => '||x_errbuff);
4158 RAISE;
4159
4160 END setup_itemrev_interface;
4161
4162
4163 ----------------------------------------------------------------------------
4164 -- Change Item Revision Interface Lines process statuses as completed. --
4165 -- Statuses represent: Warning, Error, Success etc., --
4166 ----------------------------------------------------------------------------
4167 PROCEDURE Item_Revs_Intf_Completion
4168 (
4169 p_resultfmt_usage_id IN NUMBER
4170 , x_errbuff OUT NOCOPY VARCHAR2
4171 , x_retcode OUT NOCOPY VARCHAR2
4172 ) IS
4173
4174 -----------------------------------------------
4175 -- Long Dynamic SQL String
4176 -----------------------------------------------
4177 l_dyn_sql VARCHAR2(10000);
4178
4179 BEGIN
4180
4181 -----------------------------------------------------------------
4182 -- Update EBI, with the process status of rows in MIRI after
4183 -- the completion of IOI Revision processing.
4184 -----------------------------------------------------------------
4185 UPDATE EGO_BULKLOAD_INTF EBI
4186 SET EBI.PROCESS_STATUS =
4187 (
4188 SELECT MIRI.PROCESS_FLAG
4189 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4190 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4191 )
4192 WHERE EXISTS
4193 (
4194 SELECT 'X'
4195 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4196 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4197 )
4198 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
4199
4200 ----------------------------------------------------------------------------
4201 -- Update all the lines in EGO_BULKLOAD_INTF as failure, for which
4205 -- 2. For Transaction Type : SYNC / UPDATE, Revision ID should be
4202 -- The Revision IDS were not available.
4203 -- 1. For Transaction Type : CREATE, Revision ID should be populated
4204 -- at the end of Processing
4206 -- retrieved during processing.
4207 ----------------------------------------------------------------------------
4208 UPDATE EGO_BULKLOAD_INTF EBI
4209 SET EBI.PROCESS_STATUS = G_INTF_STATUS_ERROR
4210 WHERE EXISTS
4211 (
4212 SELECT 'X'
4213 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4214 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4215 AND MIRI.PROCESS_FLAG = G_INTF_STATUS_SUCCESS
4216 AND MIRI.REVISION_ID IS NULL
4217 )
4218 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
4219
4220 ----------------------------------------------------------------------------
4221 -- Update all the lines in EGO_BULKLOAD_INTF as SUCCESS
4222 -- for these rows were used to populate Multi-Row
4223 -- Appropriate errors will be displayed by the User-Defined Attrs Bulkldr.
4224 ----------------------------------------------------------------------------
4225 UPDATE EGO_BULKLOAD_INTF EBI
4226 SET EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS
4227 WHERE EBI.PROCESS_STATUS = G_INTF_STATUS_TOBE_PROCESS
4228 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
4229
4230 ----------------------------------------------------------------------------
4231 -- Update the Item IDs (Doesnt matter Create or Update, because
4232 -- Item IDs will be populated either way in MSII) in
4233 -- Generic Bulkload Intf table (EGO_BULKLOAD_INTF)
4234 -- These Item IDs are required for Item User-Defined Attrs bulkload
4235 ----------------------------------------------------------------------------
4236 UPDATE EGO_BULKLOAD_INTF EBI
4237 SET EBI.INSTANCE_PK1_VALUE =
4238 (
4239 SELECT MSII.INVENTORY_ITEM_ID
4240 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
4241 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
4242 )
4243 WHERE EXISTS
4244 (
4245 SELECT 'X'
4246 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
4247 WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID
4248 )
4249 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4250 AND EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS;
4251
4252 ----------------------------------------------------------------------------
4253 -- Update the Item Revision IDs (Doesnt matter Create or Update, because
4254 -- Item Revision IDs will be populated either way in MIRI) in
4255 -- Generic Bulkload Intf table (EGO_BULKLOAD_INTF)
4256 -- These Revision IDs are required for Revision User-Defined Attrs bulkload
4257 ----------------------------------------------------------------------------
4258 UPDATE EGO_BULKLOAD_INTF EBI
4259 SET EBI.INSTANCE_PK3_VALUE =
4260 (
4261 SELECT MIRI.REVISION_ID
4262 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4263 WHERE MIRI.TRANSACTION_ID = EBI.TRANSACTION_ID
4264 )
4265 WHERE EXISTS
4266 (
4267 SELECT 'X'
4268 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
4269 WHERE MIRI.TRANSACTION_ID = EBI.transaction_id
4270 )
4271 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4272 AND EBI.PROCESS_STATUS = G_INTF_STATUS_SUCCESS;
4273
4274 Write_Debug('EBI: Updated the Process_Status to Indicate Succssful/Unsucessful completion.');
4275
4276 x_retcode := G_STATUS_SUCCESS;
4277
4278 EXCEPTION
4279 WHEN OTHERS THEN
4280 x_retcode := G_STATUS_ERROR;
4281 x_errbuff := SUBSTRB(SQLERRM, 1,240);
4282 Write_Debug('Item_Revs_Intf_Completion : EXCEPTION HAPPENED => '||x_errbuff);
4283 RAISE;
4284
4285 END Item_Revs_Intf_Completion;
4286
4287
4288 ----------------------------------------------------------
4289 -- Load Item or Item Revision User Defined Attributes --
4290 -- in User-Defined Attributes Interface Table --
4291 ----------------------------------------------------------
4292
4293 PROCEDURE load_itm_or_rev_usrattr_intf
4294 (
4295 p_resultfmt_usage_id IN NUMBER,
4296 p_data_set_id IN NUMBER,
4297 x_errbuff OUT NOCOPY VARCHAR2,
4298 x_retcode OUT NOCOPY VARCHAR2
4299 ) IS
4300 -- Start OF comments
4301 -- API name : Populate Item User-Defined Attr Interfance Lines
4302 -- TYPE : Public
4303 -- Pre-reqs : None
4304 -- FUNCTION : Load Item User-Defined Attributes interfance lines.
4305 -- Loads Item User-Defined Attribute Values
4306 -- Errors are populated in MTL_INTERFACE_ERRORS
4307
4308 ------------------------------------------------------------------------------
4309 -- To retrieve Attribute group codes, for given Result Format Usage ID.
4310 ------------------------------------------------------------------------------
4311 CURSOR c_user_attr_group_codes (c_resultfmt_usage_id IN NUMBER) IS
4312 SELECT DISTINCT To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) attr_group_id
4313 FROM ego_results_fmt_usages
4314 WHERE resultfmt_usage_id = c_resultfmt_usage_id
4315 AND attribute_code LIKE '%$$%'
4316 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) IN --attr_group_id
4317 ------------------------------------------------------------------------------
4321 SELECT attr_group_id
4318 -- Fixed in 11.5.10. Ensuring only the Item User-Defined Attrs are processed.
4319 ------------------------------------------------------------------------------
4320 (
4322 FROM ego_attr_groups_v
4323 WHERE attr_group_type in (G_IUD_ATTR_GROUP_TYPE, G_GTN_SNG_ATTR_GROUP_TYPE, G_GTN_MUL_ATTR_GROUP_TYPE)
4324 AND application_id = G_APPLICATION_ID
4325 )
4326 ;
4327
4328 ------------------------------------------------------------------------------
4329 -- To get the Attribute Group and Attribute Internal Names.
4330 -- NOTE: Joined extra attributes ATTR_GROUP_TYPE and APPLICATION_ID
4331 -- To hit the index.
4332 ------------------------------------------------------------------------------
4333 CURSOR c_attr_grp_details(p_attr_id IN NUMBER) IS
4334 SELECT attr_group_name, attr_name, attr_group_type,
4335 DECODE(data_type_code,'A','C'
4336 ,'X','D'
4337 ,'Y','D'
4338 ,data_type_code) data_type_code,
4339 uom_class -- R12C UOM Change
4340 FROM ego_attrs_v
4341 WHERE attr_id = p_attr_id
4342 AND attr_group_type in (G_IUD_ATTR_GROUP_TYPE, G_GTN_SNG_ATTR_GROUP_TYPE, G_GTN_MUL_ATTR_GROUP_TYPE)
4343 AND application_id = G_APPLICATION_ID;
4344
4345 --------------------------------------------------------------------------------
4346 -- Defn includes a subset of EGO_USER_ATTRS_DATA_PVT.LOCAL_USER_ATTR_DATA_REC
4347 -- plus few User-Defined Attr Table related fields.
4348 --------------------------------------------------------------------------------
4349 TYPE L_USER_ATTR_REC_TYPE IS RECORD
4350 (
4351 DATA_SET_ID NUMBER(15)
4352 ,TRANSACTION_ID NUMBER(15)
4353 ,TRANSACTION_TYPE VARCHAR2(10)--Bug:5088831
4354 ,INVENTORY_ITEM_ID NUMBER(15)
4355 ,ORGANIZATION_ID NUMBER(15)
4356 ,REVISION_ID NUMBER(15)
4357 ,ITEM_NUMBER VARCHAR2(1000)
4358 ,ORGANIZATION_CODE VARCHAR2(10)
4359 ,REVISION VARCHAR2(10)
4360 ,ROW_IDENTIFIER NUMBER(15)
4361 ,ATTR_GROUP_NAME VARCHAR2(30)
4362 ,ATTR_NAME VARCHAR2(30)
4363 ,ATTR_DATATYPE_CODE VARCHAR2(1) --Valid Vals: C / N / D
4364 ,ATTR_VALUE_STR VARCHAR2(1000)
4365 ,ATTR_VALUE_NUM NUMBER --BugFix 4256503
4366 ,ATTR_VALUE_DATE DATE
4367 ,ATTR_DISP_VALUE VARCHAR2(1000)
4368 ,INTF_COLUMN_NAME VARCHAR2(30)
4369 ,SOURCE_SYSTEM_ID NUMBER
4370 ,SOURCE_SYSTEM_REFERENCE VARCHAR2(255)
4371 ,ATTR_GROUP_TYPE VARCHAR2(40)--Bug Fix 4630163(ISSUE2)
4372 ,DATA_LEVEL_ID NUMBER
4373 ,PK1_VALUE NUMBER
4374 ,PK2_VALUE NUMBER
4375 ,ATTR_UOM_DISP_VALUE VARCHAR2(25) -- R12C UOM Changes
4376 ,ATTR_VALUE_UOM VARCHAR2(3) -- R12C UOM Changes
4377 );
4378
4379 ---------------------------------------------------------------------
4380 -- Type Declarations
4381 ---------------------------------------------------------------------
4382 TYPE L_USER_ATTR_TBL_TYPE IS TABLE OF L_USER_ATTR_REC_TYPE
4383 INDEX BY BINARY_INTEGER;
4384
4385 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
4386 INDEX BY BINARY_INTEGER;
4387
4388 -------------------------
4389 -- local variables --
4390 -------------------------
4391 l_api_name VARCHAR2(32) := 'load_itm_or_rev_usrattr_intf()';
4392 l_prod_col_name_tbl VARCHAR_TBL_TYPE;
4393 l_intf_col_name_tbl VARCHAR_TBL_TYPE;
4394
4395 l_attr_id_table DBMS_SQL.VARCHAR2_TABLE; -- R12C UOM Change
4396 --DBMS_SQL.NUMBER_TABLE;
4397 l_intf_col_name_table DBMS_SQL.VARCHAR2_TABLE;
4398 l_data_level_id_table DBMS_SQL.NUMBER_TABLE;
4399
4400 l_usr_attr_data_tbl L_USER_ATTR_TBL_TYPE;
4401
4402 l_item_id_char VARCHAR(15);
4403 l_org_id_char VARCHAR(15);
4404 l_item_rev_id_char VARCHAR(15);
4405 l_item_num_char VARCHAR(1000);
4406 l_org_code_char VARCHAR(10);
4407 l_item_rev_code_char VARCHAR(10);
4408 l_source_system_id NUMBER;
4409 l_source_system_ref VARCHAR2(255);
4410
4411 l_count NUMBER(5);
4412 l_data_type_code VARCHAR2(2);
4413 l_transaction_id NUMBER(15);
4414 l_transaction_type VARCHAR2(10);
4415 l_uom_class VARCHAR2(10); -- R12C UOM Change
4416 l_uom_meaning VARCHAR2(150); -- R12C UOM Change
4417
4418 l_attr_group_int_name EGO_ATTRS_V.ATTR_GROUP_NAME%TYPE;
4419 l_attr_int_name EGO_ATTRS_V.ATTR_NAME%TYPE;
4420 l_attr_data_type EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4421 l_attr_group_type EGO_ATTRS_V.ATTR_GROUP_TYPE%TYPE;--Bug Fix 4630163(ISSUE2)
4422
4423 ---------------------------------------------------------
4427 l_number_example NUMBER;
4424 -- Example Data Types to be used in Bind Variable.
4425 ---------------------------------------------------------
4426 l_varchar_example VARCHAR2(10000);
4428 l_date_example DATE;
4429
4430 --------------------------------------------------------------------
4431 -- Actual Data to store corresponding data type value.
4432 -- NOTE: for fixing Bug# 3808455, changed the size of l_varchar_data
4433 -- to 10,000 chars. This is because, if there are 1000 Single
4434 -- Quotes in the String Attr Value, then the Escaped value
4435 -- becomes of Size 2000. So, for all better reasons, changing
4436 -- to a huge size.
4437 --------------------------------------------------------------------
4438 l_varchar_data VARCHAR2(10000);
4439 l_number_data NUMBER;
4440 l_date_data DATE;
4441
4442 ---------------------------------------------------------
4443 -- DBMS_SQL Open Cursor integers.
4444 ---------------------------------------------------------
4445 l_cursor_select INTEGER;
4446 l_cursor_execute INTEGER;
4447 l_cursor_attr_id_val INTEGER;
4448
4449 ---------------------------------------------------------
4450 -- Used for indexes.
4451 ---------------------------------------------------------
4452 l_temp NUMBER(10) := 1;
4453 l_actual_userattr_indx NUMBER(15);
4454 l_indx NUMBER(15);
4455 l_rows_per_attr_grp_indx NUMBER(15);
4456 l_save_indx NUMBER(15);
4457 l_attr_grp_has_data BOOLEAN;
4458
4459 l_attr_group_data_level VARCHAR2(30);
4460
4461 ---------------------------------------------------------
4462 -- Long Dynamic SQL Strings
4463 ---------------------------------------------------------
4464 l_dyn_sql VARCHAR2(10000);
4465 l_dyn_attr_id_val_sql VARCHAR2(10000);
4466
4467 ---------------------------------------------------------
4468 -- To Number the Attribute Group Data Rows Uniquely.
4469 ---------------------------------------------------------
4470
4471 -- Bug fix 6219349: 5 digits was prone to overflow,
4472 -- causing defaulting to a value that had already been
4473 -- used.
4474 L_ATTR_GRP_ROW_IDENT NUMBER(18);
4475
4476 ---------------------------------------------------------
4477 -- Token tables to log errors, through Error_Handler
4478 ---------------------------------------------------------
4479 l_token_tbl_two Error_Handler.Token_Tbl_Type;
4480 l_token_tbl_one Error_Handler.Token_Tbl_Type;
4481
4482 l_gdsn_attrs_exist VARCHAR2(1);
4483 l_dummy_char VARCHAR2(1000);
4484 l_dummy NUMBER;
4485 l_supplier_name_col VARCHAR2(30);
4486 l_supplier_number_col VARCHAR2(20);
4487 l_supplier_site_name_col VARCHAR2(30);
4488 -- l_supplier_name VARCHAR2(30); --abedajna Bug 611802
4489 l_supplier_name VARCHAR2(320);
4490 l_supplier_number VARCHAR2(20);
4491 -- l_supplier_site_name VARCHAR2(30); --abedajna Bug 611802
4492 l_supplier_site_name VARCHAR2(320);
4493 l_supplier_id NUMBER;
4494 l_supplier_site_id NUMBER;
4495 l_site_org_id NUMBER;
4496 l_row_id_incr NUMBER;
4497
4498 BEGIN
4499
4500
4501 Write_Debug(l_api_name || 'BEGIN ');
4502 ---------------------------------------------------------
4503 -- Initializing the Row Identifier.
4504 ---------------------------------------------------------
4505 BEGIN
4506 SELECT NVL(MAX(ROW_IDENTIFIER),0)
4507 INTO L_ATTR_GRP_ROW_IDENT
4508 FROM EGO_ITM_USR_ATTR_INTRFC
4509 WHERE DATA_SET_ID = p_data_set_id;
4510 EXCEPTION
4511 WHEN OTHERS THEN
4512
4513 Write_Debug(l_api_name || 'ERROR: Couldn''t generate next row identifier');
4514
4515 -- SSARNOBA: What if we come here a second time?
4516 -- We're going to get a unique constraint violation.
4517 L_ATTR_GRP_ROW_IDENT := 0;
4518 END;
4519
4520 BEGIN
4521 SELECT INTF_COLUMN_NAME
4522 INTO l_supplier_name_col
4523 FROM EGO_RESULTS_FMT_USAGES
4524 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4525 AND ATTRIBUTE_CODE NOT LIKE '%$$%'
4526 AND CUSTOMIZATION_APPLICATION_ID = 431
4527 AND REGION_APPLICATION_ID = 431
4528 AND ATTRIBUTE_CODE = 'SUPPLIER_NAME';
4529 EXCEPTION
4530 WHEN NO_DATA_FOUND THEN
4531 l_supplier_name_col := NULL;
4532 END;
4533
4534 BEGIN
4535 SELECT INTF_COLUMN_NAME
4536 INTO l_supplier_number_col
4537 FROM EGO_RESULTS_FMT_USAGES
4538 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4539 AND ATTRIBUTE_CODE NOT LIKE '%$$%'
4540 AND CUSTOMIZATION_APPLICATION_ID = 431
4541 AND REGION_APPLICATION_ID = 431
4542 AND ATTRIBUTE_CODE = 'SUPPLIER_NUMBER';
4543 EXCEPTION
4544 WHEN NO_DATA_FOUND THEN
4545 l_supplier_number_col := NULL;
4546 END;
4547
4548 BEGIN
4549 SELECT INTF_COLUMN_NAME
4550 INTO l_supplier_site_name_col
4551 FROM EGO_RESULTS_FMT_USAGES
4552 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
4553 AND ATTRIBUTE_CODE NOT LIKE '%$$%'
4554 AND CUSTOMIZATION_APPLICATION_ID = 431
4555 AND REGION_APPLICATION_ID = 431
4556 AND ATTRIBUTE_CODE = 'SUPPLIER_SITE';
4560 END;
4557 EXCEPTION
4558 WHEN NO_DATA_FOUND THEN
4559 l_supplier_site_name_col := NULL;
4561
4562 --------------------------------------------------------------------
4563 -- Loop to process per Attribute Group of User-Defined Attributes.
4564 --------------------------------------------------------------------
4565 <<LIORUI_attr_groups_loop>>
4566 FOR c_attr_grp_rec IN c_user_attr_group_codes(p_resultfmt_usage_id) LOOP
4567
4568 Write_Debug(l_api_name || 'LIORUI_attr_groups_loop - Attribute Group'
4569 || c_attr_grp_rec.attr_group_id);
4570
4571 --------------------------------------------------------------------
4572 -- Added for BugFix 4114928 : We need to check for the data level --
4573 -- of the atr group and populate the REVISION_ID only if the AG --
4574 -- revision level. --
4575 --------------------------------------------------------------------
4576 SELECT DATA_LEVEL_INT_NAME INTO l_attr_group_data_level
4577 FROM EGO_OBJ_ATTR_GRP_ASSOCS_V
4578 WHERE ATTR_GROUP_TYPE in (G_IUD_ATTR_GROUP_TYPE, G_GTN_SNG_ATTR_GROUP_TYPE, G_GTN_MUL_ATTR_GROUP_TYPE)
4579 AND ATTR_GROUP_ID = c_attr_grp_rec.attr_group_id
4580 AND OBJECT_NAME = G_EGO_ITEM_OBJ_NAME
4581 AND ROWNUM = 1;-- The AG cannot have associations at Item level and Revision Level for different Catalogs.
4582
4583 --------------------------------------------------------------------
4584 -- Fetch Organization ID, Item Number in Temp PLSQL tables.
4585 --------------------------------------------------------------------
4586 --- R12C UOM Change. Removing to_Num conversion . Now attrId$$UOM will also go into l_attr_id_table
4587 -- old code l_dyn_sql := ' SELECT To_Number(SUBSTR(attribute_code, INSTR(attribute_code, ''$$'')+2)) attr_id, intf_column_name, DATA_LEVEL_ID ';
4588
4589 l_dyn_sql := ' SELECT SUBSTR(attribute_code, INSTR(attribute_code, ''$$'')+2) attr_id, intf_column_name, DATA_LEVEL_ID ';
4590 l_dyn_sql := l_dyn_sql || ' FROM ego_results_fmt_usages ';
4591 l_dyn_sql := l_dyn_sql || ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID';
4592 l_dyn_sql := l_dyn_sql || ' AND attribute_code LIKE :ATTRIBUTE_CODE ';
4593 l_dyn_sql := l_dyn_sql || ' ORDER BY DISPLAY_SEQUENCE '; --- R12C UOM Change.so that UOM col comes next to corresponding number col
4594
4595 Write_Debug(l_api_name || l_dyn_sql);
4596
4597 l_cursor_select := DBMS_SQL.OPEN_CURSOR;
4598 DBMS_SQL.PARSE(l_cursor_select, l_dyn_sql, DBMS_SQL.NATIVE);
4599 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 1,l_attr_id_table,2500, l_temp);
4600 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 2,l_intf_col_name_table,2500, l_temp);
4601 DBMS_SQL.DEFINE_ARRAY(l_cursor_select, 3,l_data_level_id_table,2500, l_temp);
4602
4603 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
4604 DBMS_SQL.BIND_VARIABLE(l_cursor_select,':ATTRIBUTE_CODE', c_attr_grp_rec.attr_group_id||'$$%');
4605 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_select);
4606 Write_Debug(l_api_name || 'About to start the Loop to fetch Rows');
4607 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_select);
4608 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 1, l_attr_id_table);
4609 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 2, l_intf_col_name_table);
4610 DBMS_SQL.COLUMN_VALUE(l_cursor_select, 3, l_data_level_id_table);
4611
4612 Write_Debug(l_api_name || 'Retrieved rows => '||To_char(l_count));
4613 DBMS_SQL.CLOSE_CURSOR(l_cursor_select);
4614
4615 --------------------------------------------------------------------
4616 -- New DBMS_SQL Cursor for Select Attr Values.
4617 --------------------------------------------------------------------
4618 l_cursor_attr_id_val := DBMS_SQL.OPEN_CURSOR;
4619 l_dyn_attr_id_val_sql := ' SELECT ';
4620 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' TRANSACTION_ID , ';
4621 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' UPPER(TRANSACTION_TYPE) , ';
4622 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' INSTANCE_PK1_VALUE , ';
4623 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' INSTANCE_PK2_VALUE , ';
4624 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' INSTANCE_PK3_VALUE , ';
4625 --------------------------------------------------------------------
4626 -- Added the fix to fetch these cols also, as in case of New Item
4627 -- Instance PK1 Value might not have been retrieved.
4628 --------------------------------------------------------------------
4629 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||G_ITEM_NUMBER_EBI_COL ||' , ';
4630 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||G_ORG_CODE_EBI_COL ||' , ';
4631 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||G_REVISION_CODE_EBI_COL ||' , ';
4632 --------------------------------------------------------------------
4633 -- R12
4634 -- Adding the source system id and source system reference columns
4635 --------------------------------------------------------------------
4636 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' TO_NUMBER(C_FIX_COLUMN11) , ';
4637 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' C_FIX_COLUMN12 , ';
4638
4639 ----------------------------------------------------
4640 --R12C adding the suppplier/supplier site columns
4641 ----------------------------------------------------
4642 IF(l_supplier_name_col IS NOT NULL) THEN
4643 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||l_supplier_name_col ||' , ';
4644 END IF;
4645 IF(l_supplier_number_col IS NOT NULL) THEN
4646 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||l_supplier_number_col ||' , ';
4647 END IF;
4651
4648 IF(l_supplier_site_name_col IS NOT NULL) THEN
4649 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql ||l_supplier_site_name_col ||' , ';
4650 END IF;
4652 --------------------------------------------------------------------
4653 -- Loop to Update the Inventory Item IDs.
4654 --------------------------------------------------------------------
4655 <<LIORUI_update_item_ids_loop>>
4656 FOR i IN 1..l_attr_id_table.COUNT LOOP
4657 Write_Debug(l_api_name || 'LIORUI_update_item_ids_loop - '||i);
4658 Write_Debug(l_api_name || 'Attr ID : '||To_char(l_attr_id_table(i)));
4659 Write_Debug(l_api_name || 'Intf Col Name : '||l_intf_col_name_table(i));
4660 IF (i <> l_attr_id_table.COUNT) THEN
4661 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || l_intf_col_name_table(i) || ', ';
4662 ELSE
4663 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || l_intf_col_name_table(i) ;
4664 END IF;
4665 END LOOP LIORUI_update_item_ids_loop; --end: FOR i IN 1..l_attr_id_table.COUNT LOOP
4666
4667 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' FROM EGO_BULKLOAD_INTF ' ;
4668 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
4669 l_dyn_attr_id_val_sql := l_dyn_attr_id_val_sql || ' AND PROCESS_STATUS = :PROCESS_STATUS ';
4670 Write_Debug(l_api_name || l_dyn_attr_id_val_sql);
4671
4672 DBMS_SQL.PARSE(l_cursor_attr_id_val, l_dyn_attr_id_val_sql, DBMS_SQL.NATIVE);
4673 --------------------------------------------------------------------
4674 --Setting Data Type for Trasaction ID
4675 --------------------------------------------------------------------
4676 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 1, l_number_example);
4677
4678 --------------------------------------------------------------------
4679 --Setting Data Type for Trasaction Type
4680 --------------------------------------------------------------------
4681 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 2, l_varchar_example,10);
4682
4683 --------------------------------------------------------------------
4684 --Setting Data Type for INSTANCE_PK1_VALUE (Item ID)
4685 --------------------------------------------------------------------
4686 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 3, l_varchar_example, 1000);
4687
4688 --------------------------------------------------------------------
4689 --Setting Data Type for INSTANCE_PK2_VALUE (Org ID)
4690 --------------------------------------------------------------------
4691 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 4, l_varchar_example, 1000);
4692
4693 --------------------------------------------------------------------
4694 --Setting Data Type for INSTANCE_PK3_VALUE (Revision ID)
4695 --------------------------------------------------------------------
4696 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 5, l_varchar_example, 1000);
4697
4698 --------------------------------------------------------------------
4699 --Setting Data Type for Item Num
4700 --------------------------------------------------------------------
4701 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 6, l_varchar_example, 1000);
4702
4703 --------------------------------------------------------------------
4704 --Setting Data Type for Org Code
4705 --------------------------------------------------------------------
4706 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 7, l_varchar_example, 1000);
4707
4708 --------------------------------------------------------------------
4709 --Setting Data Type for Revision Code
4710 --------------------------------------------------------------------
4711 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 8, l_varchar_example, 1000);
4712
4713 --------------------------------------------------------------------
4714 --Setting Data Type for Source System Id
4715 --------------------------------------------------------------------
4716 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 9, l_number_example);
4717
4718 --------------------------------------------------------------------
4719 --Setting Data Type for Source System Reference
4720 --------------------------------------------------------------------
4721 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 10, l_varchar_example, 1000);
4722
4723 ---------------------------------------------------------------
4724 --R12C setting data type for suppplier/supplier site columns
4725 ---------------------------------------------------------------
4726 l_dummy := 0;
4727 IF(l_supplier_name_col IS NOT NULL) THEN
4728 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 11 + l_dummy, l_varchar_example, 1000);
4729 l_dummy := l_dummy +1;
4730 END IF;
4731 IF(l_supplier_number_col IS NOT NULL) THEN
4732 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 11 + l_dummy, l_varchar_example, 1000);
4733 l_dummy := l_dummy +1;
4734 END IF;
4735 IF(l_supplier_site_name_col IS NOT NULL) THEN
4736 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, 11 + l_dummy, l_varchar_example, 1000);
4737 l_dummy := l_dummy +1;
4738 END IF;
4739
4740 --------------------------------------------------------------------
4741 -- Loop to Bind the Data Types for the SELECT Columns.
4742 --------------------------------------------------------------------
4743 <<LIORUI_data_types_loop_1>>
4744 FOR i IN 1..l_attr_id_table.COUNT LOOP
4745
4746 Write_Debug(l_api_name || 'LIORUI_data_types_loop_1 - '||i);
4747
4748 ------------------------------------------------------------------------
4749 -- Since TRANSACTION_ID, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE,
4750 -- INSTANCE_PK3_VALUE are added to the SELECT before the User-Defined
4754
4751 -- Attrs, we need to adjust the index as follows.
4752 ------------------------------------------------------------------------
4753 l_actual_userattr_indx := i + 10 + l_dummy;
4755 l_data_type_code := SUBSTR (l_intf_col_name_table(i), 1, 1);
4756 ------------------------------------------------------------------------
4757 -- Based on the Data Type of the attribute, define the column
4758 ------------------------------------------------------------------------
4759
4760 IF (l_data_type_code = 'C') THEN
4761 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_varchar_example, 1000);
4762 ELSIF (l_data_type_code = 'U') THEN -- R12C UOM Changes
4763 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_varchar_example, 150);
4764 ELSIF (l_data_type_code = 'N') THEN
4765 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_number_example);
4766 ELSE --IF (l_data_type_code = 'D') THEN
4767 DBMS_SQL.DEFINE_COLUMN(l_cursor_attr_id_val, l_actual_userattr_indx, l_date_example);
4768 END IF; --IF (l_data_type_code = 'C') THEN
4769
4770 END LOOP LIORUI_data_types_loop_1; --FOR i IN 1..l_attr_id_table.COUNT LOOP
4771
4772
4773 DBMS_SQL.BIND_VARIABLE(l_cursor_attr_id_val,':RESULTFMT_USAGE_ID',p_resultfmt_usage_id);
4774
4775 write_debug(l_api_name || 'Binding the PROCESS_STATUS = '||G_INTF_STATUS_TOBE_PROCESS);
4776 DBMS_SQL.BIND_VARIABLE(l_cursor_attr_id_val,':PROCESS_STATUS',G_INTF_STATUS_TOBE_PROCESS);
4777 ------------------------------------------------------------------------
4778 -- Execute to get the Item User-Defined Attr values.
4779 ------------------------------------------------------------------------
4780 l_cursor_execute := DBMS_SQL.EXECUTE(l_cursor_attr_id_val);
4781
4782 l_rows_per_attr_grp_indx := 0;
4783 ------------------------------------------------------------------------
4784 -- Loop for each row found in EBI
4785 ------------------------------------------------------------------------
4786 <<LIORUI_ebi_rows_loop>>
4787 LOOP --LOOP FOR CURSOR_ATTR_ID_VAL
4788
4789 Write_Debug(l_api_name || 'LIORUI_ebi_rows_loop - begin');
4790
4791
4792 IF DBMS_SQL.FETCH_ROWS(l_cursor_attr_id_val)>0 THEN
4793
4794 ------------------------------------------------------------------------
4795 --Increment Row Identifier per (Attribute Group + Row) Combination.
4796 ------------------------------------------------------------------------
4797 L_ATTR_GRP_ROW_IDENT := L_ATTR_GRP_ROW_IDENT + 20;
4798
4799 Write_Debug(l_api_name || 'ROW_FOUND : '||L_ATTR_GRP_ROW_IDENT);
4800
4801 ------------------------------------------------------------------------
4802 -- First column is Transaction ID.
4803 ------------------------------------------------------------------------
4804 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 1, l_transaction_id);
4805 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 2, l_transaction_type);
4806 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 3, l_item_id_char);
4807 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 4, l_org_id_char);
4808 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 5, l_item_rev_id_char);
4809 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 6, l_item_num_char);
4810 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 7, l_org_code_char);
4811 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 8, l_item_rev_code_char);
4812 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 9, l_source_system_id);
4813 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 10, l_source_system_ref);
4814
4815 l_dummy := 0;
4816 l_supplier_site_id := NULL;
4817 l_supplier_id := NULL;
4818 l_supplier_name := NULL;
4819 l_supplier_number := NULL;
4820 l_supplier_site_name := NULL;
4821
4822 IF(l_supplier_name_col IS NOT NULL) THEN
4823 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 11 + l_dummy, l_supplier_name);
4824 l_dummy := l_dummy +1;
4825
4826 IF(l_supplier_name IS NOT NULL) THEN
4827 BEGIN
4828 SELECT VENDOR_ID
4829 INTO l_supplier_id
4830 FROM AP_SUPPLIERS
4831 WHERE VENDOR_NAME = l_supplier_name;
4832 EXCEPTION
4833 WHEN NO_DATA_FOUND THEN
4834 l_supplier_id:= NULL;
4835 END;
4836 END IF;
4837 END IF;
4838
4839 IF(l_supplier_number_col IS NOT NULL) THEN
4840 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 11 + l_dummy, l_supplier_number);
4841 l_dummy := l_dummy +1;
4842 IF(l_supplier_number IS NOT NULL) THEN
4843 BEGIN
4844 SELECT VENDOR_ID
4845 INTO l_supplier_id
4846 FROM AP_SUPPLIERS
4847 WHERE SEGMENT1 = l_supplier_number;
4848 EXCEPTION
4849 WHEN NO_DATA_FOUND THEN
4850 l_supplier_id:= NULL;
4851 END;
4852 END IF;
4853 END IF;
4854
4855 IF(l_supplier_site_name_col IS NOT NULL) THEN
4856 l_dummy := l_dummy +1;
4857 END IF;
4858 ------------------------------------------------------------------------
4859 -- Loop to Bind the Data Types for the SELECT Columns.
4860 ------------------------------------------------------------------------
4861 <<LIORUI_data_types_loop_2>>
4865
4862 FOR i IN 1..l_attr_id_table.COUNT LOOP
4863
4864 Write_Debug(l_api_name || 'LIORUI_data_types_loop_2 - '||i);
4866 IF ( INSTR(l_attr_id_table(i),'$$UOM') = 0 ) THEN -- R12C UOM change: avoiding UOM entry here
4867
4868 OPEN c_attr_grp_details(To_Number(l_attr_id_table(i)));
4869 FETCH c_attr_grp_details INTO
4870 l_attr_group_int_name, l_attr_int_name,l_attr_group_type,l_attr_data_type,l_uom_class;--Bug Fix 4630163(ISSUE2)
4871
4872 Write_Debug(l_api_name || i||'=>'||l_attr_group_int_name||':'||l_attr_int_name||':'||l_attr_group_type);--Bug Fix 4630163(ISSUE2)
4873
4874 l_attr_grp_has_data := FALSE;
4875
4876 ------------------------------------------------------------------------
4877 -- If one more Attribute found for the Attribute Group.
4878 ------------------------------------------------------------------------
4879 IF c_attr_grp_details%FOUND THEN
4880
4881 IF(l_supplier_site_name_col IS NOT NULL) THEN
4882 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, 11 + l_dummy -1, l_supplier_site_name);
4883 IF(l_supplier_site_name IS NOT NULL AND l_supplier_id IS NOT NULL) THEN
4884 BEGIN
4885
4886 l_site_org_id := FND_PROFILE.VALUE('ORG_ID');
4887 SELECT VENDOR_SITE_ID
4888 INTO l_supplier_site_id
4889 FROM AP_SUPPLIER_SITES_ALL
4890 WHERE VENDOR_SITE_CODE = l_supplier_site_name
4891 AND ORG_ID = l_site_org_id
4892 AND VENDOR_ID = l_supplier_id;
4893 EXCEPTION
4894 WHEN NO_DATA_FOUND THEN
4895 l_supplier_site_id:= NULL;
4896 END;
4897 END IF;
4898 END IF;
4899
4900 l_row_id_incr := 0;
4901 IF (l_data_level_id_table(i) IS NOT NULL AND l_data_level_id_table(i) <> 0) THEN
4902 l_row_id_incr := l_data_level_id_table(i)-43100;
4903 END IF;
4904 l_rows_per_attr_grp_indx := l_rows_per_attr_grp_indx + 1;
4905 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).DATA_SET_ID := p_data_set_id;
4906 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).TRANSACTION_ID := l_transaction_id;
4907 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).TRANSACTION_TYPE := l_transaction_type;
4908 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).INVENTORY_ITEM_ID := FND_NUMBER.CANONICAL_TO_NUMBER(l_item_id_char);
4909 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ORGANIZATION_ID := FND_NUMBER.CANONICAL_TO_NUMBER(l_org_id_char);
4910 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ITEM_NUMBER := l_item_num_char;
4911 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ORGANIZATION_CODE := l_org_code_char;
4912 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ROW_IDENTIFIER := L_ATTR_GRP_ROW_IDENT + l_row_id_incr;
4913 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DATATYPE_CODE := l_attr_data_type;
4914 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_GROUP_NAME := l_attr_group_int_name;
4915 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_NAME := l_attr_int_name;
4916 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_GROUP_TYPE := l_attr_group_type;--Bug Fix 4630163(ISSUE2)
4917
4918 -- Populate the REVISION Columns only if the Data Level of the AG is Revision
4919 IF ( l_data_level_id_table(i) = 43106 ) THEN
4920 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION := l_item_rev_code_char;
4921 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION_ID := FND_NUMBER.CANONICAL_TO_NUMBER(l_item_rev_id_char);
4922 ELSE
4923 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION := null;
4924 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).REVISION_ID := null;
4925 END IF;
4926
4927 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
4928 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK1_VALUE := l_supplier_id;
4929 ELSE
4930 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK1_VALUE := null;
4931 END IF;
4932 IF (l_data_level_id_table(i) = 43104 OR l_data_level_id_table(i) = 43105) THEN
4933 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK2_VALUE := l_supplier_site_id;
4934 ELSE
4935 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).PK2_VALUE := null;
4936 END IF;
4937
4938 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).SOURCE_SYSTEM_ID := l_source_system_id;
4939 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).SOURCE_SYSTEM_REFERENCE := l_source_system_ref;
4940 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).DATA_LEVEL_ID := l_data_level_id_table(i);
4941 ------------------------------------------------------------------------
4942 -- Since TRANSACTION_ID, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE,
4943 -- INSTANCE_PK3_VALUE are added to the SELECT before User-Defined
4944 -- Attrs, we need to adjust the index as follows.
4945 ------------------------------------------------------------------------
4946 l_actual_userattr_indx := i + 10 + l_dummy;
4947
4948 Write_Debug(l_api_name || 'BEGIN: To Retrieve Attr Value at Position :'||l_actual_userattr_indx);
4949
4950 ------------------------------------------------------------------------
4951 -- Depending upon the Data Type, populate corresponding field in the
4952 -- User-Defined Attribute Data record.
4956 -- User-Defined Attribute Data record.
4953 ------------------------------------------------------------------------
4954 ------------------------------------------------------------------------
4955 -- Depending upon the Data Type, populate corresponding field in the
4957 ------------------------------------------------------------------------
4958 -- bug: 5001315 Explicitly Nulling out the data columns. (this incorporates the fix for 4673865)
4959 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR := NULL;
4960 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_NUM := NULL;
4961 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_DATE := NULL;
4962 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := NULL;--bugfix:6346771
4963 l_varchar_data := NULL;
4964 l_number_data := NULL;
4965 l_date_data := NULL;
4966 l_dummy_char := SUBSTR (l_intf_col_name_table(i), 1, 1);
4967
4968 IF l_dummy_char = 'C' THEN
4969 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_varchar_data);
4970 IF l_dummy_char = l_attr_data_type THEN
4971 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR := l_varchar_data;
4972 ELSE
4973 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := l_varchar_data;
4974 END IF;
4975 Write_Debug(l_api_name || 'String Value =>'||l_varchar_data);
4976 ELSIF l_dummy_char = 'N' THEN
4977 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_number_data);
4978 IF l_dummy_char = l_attr_data_type THEN
4979 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_NUM := l_number_data;
4980 ELSE
4981 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := l_number_data;
4982 END IF;
4983 Write_Debug(l_api_name || 'Number Value =>'||l_number_data);
4984 ELSE --IF (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DATATYPE_CODE = 'D') THEN
4985 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_date_data);
4986 IF l_dummy_char = l_attr_data_type THEN
4987 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_DATE := l_date_data;
4988 ELSE
4989 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE := l_date_data;
4990 END IF;
4991 Write_Debug(l_api_name || 'Date Value =>'||l_date_data);
4992 END IF; --end: IF (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DATATYPE_CODE = 'C') THEN
4993
4994 Write_Debug(l_api_name || 'END: Retrieved Attr Value');
4995
4996 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).INTF_COLUMN_NAME := l_intf_col_name_table(i);
4997
4998 ------------------------------------------------------------------------
4999 -- Bug: 3025778 Modified If statment.
5000 -- Donot populate NULL Attribute value in the User-Defined Attrs
5001 -- Interface table.
5002 ------------------------------------------------------------------------
5003 IF ((l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR IS NULL) AND
5004 (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_NUM IS NULL) AND
5005 (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_DATE IS NULL) AND
5006 (l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_DISP_VALUE IS NULL)
5007 ) THEN
5008 ------------------------------------------------------------------------
5009 -- If all attribute values are NULL value, then delete
5010 -- the row from PLSQL table.
5011 ------------------------------------------------------------------------
5012 l_usr_attr_data_tbl.DELETE(l_rows_per_attr_grp_indx);
5013 l_rows_per_attr_grp_indx := l_rows_per_attr_grp_indx - 1;
5014 Write_Debug(l_api_name || 'Due to NULL Att data, resetting back the PLSQL table index to : '||l_rows_per_attr_grp_indx);
5015
5016 END IF; --end: IF ((l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_STR...
5017
5018 END IF; --end: IF c_attr_grp_details%FOUND THEN
5019
5020 CLOSE c_attr_grp_details;
5021 ELSE -- R12C UOM Changes:if uom column comes, previous row was the number col. so not increasing index
5022
5023 l_varchar_data := null;
5024 l_actual_userattr_indx := l_actual_userattr_indx +1 ;
5025 DBMS_SQL.COLUMN_VALUE(l_cursor_attr_id_val, l_actual_userattr_indx, l_uom_meaning);
5026
5027 IF (l_uom_class IS NOT NULL AND l_uom_meaning IS NOT NULL) THEN --BugFix:6271824
5028 SELECT UOM_CODE
5029 INTO l_varchar_data
5030 FROM MTL_UNITS_OF_MEASURE_VL
5031 WHERE UOM_CLASS = l_uom_class
5032 AND UNIT_OF_MEASURE_TL = l_uom_meaning; -- Bug 6397849
5033 END IF;
5034
5035 l_usr_attr_data_tbl(l_rows_per_attr_grp_indx).ATTR_VALUE_UOM := l_varchar_data;
5036 Write_Debug(l_api_name || 'UOM CODE set ' || l_varchar_data || ' at index ' || l_rows_per_attr_grp_indx);
5037
5038 END IF ; -- end IF ( INSTR(l_attr_id_table(i),'$$UOM') = 0 ) -- R12C UOM Changes:
5039
5040 END LOOP LIORUI_data_types_loop_2; --end: FOR i IN 1..l_attr_id_table.COUNT LOOP
5041
5042 ELSE --end: IF DBMS_SQL.FETCH_ROWS(l_cursor_attr_id_val)>0 THEN
5043
5044 Write_Debug(l_api_name || 'Nothing Found (or) Done.');
5045 EXIT;
5046
5050
5047 END IF; --IF DBMS_SQL.FETCH_ROWS(l_cursor_attr_id_val)>0 THEN
5048
5049 END LOOP LIORUI_ebi_rows_loop; --END: LOOP FOR CURSOR_ATTR_ID_VAL
5051 l_attr_id_table.DELETE;
5052 l_intf_col_name_table.DELETE;
5053 l_data_level_id_table.DELETE;
5054
5055 DBMS_SQL.CLOSE_CURSOR(l_cursor_attr_id_val);
5056
5057 -------------------------------------------------------------------
5058 -- Loop for all the rows to be inserted per Attribute Group.
5059 -------------------------------------------------------------------
5060 <<LIORUI_attrs_loop>>
5061 FOR i IN 1..l_rows_per_attr_grp_indx LOOP
5062
5063 Write_Debug(l_api_name || 'LIORUI_attrs_loop - ' || i);
5064
5065 -------------------------------------------------------------------------
5066 -- Fix for Bug# 3808455. To avoid the following error:
5067 -- ORA-01401: inserted value too large for column
5068 -- [This is done because ATTR_DISP_VALUE size is 1000 Chars]
5069 -------------------------------------------------------------------------
5070 IF ( LENGTH(l_usr_attr_data_tbl(i).ATTR_VALUE_STR) > 1000 ) THEN
5071 l_token_tbl_one(1).token_name := 'VALUE';
5072 l_token_tbl_one(1).token_value := l_usr_attr_data_tbl(i).ATTR_VALUE_STR;
5073
5074 Error_Handler.Add_Error_Message
5075 ( p_message_name => 'EGO_STR_ATTR_LEN_GT1000_ERR'
5076 , p_application_id => 'EGO'
5077 , p_message_text => NULL
5078 , p_token_tbl => l_token_tbl_one
5079 , p_message_type => 'E'
5080 , p_row_identifier => l_usr_attr_data_tbl(i).TRANSACTION_ID
5081 , p_table_name => G_ERROR_TABLE_NAME
5082 , p_entity_id => NULL
5083 , p_entity_index => NULL
5084 , p_entity_code => G_ERROR_ENTITY_CODE
5085 );
5086
5087 ---------------------------------------------------------------------------
5088 -- Put multiple ELSIF <<condition>> here, to report Errors with the Data.
5089 -- Finally, ELSE condition below means that Data is ~Error Free~ and ready
5090 -- to be Inserted.
5091 ---------------------------------------------------------------------------
5092
5093 ELSE --IF ( LENGTH(l_usr_attr_data_tbl(i)..
5094
5095 ------------------------------------------------------------------------
5096 -- Populate l_varchar_data, to later populate in ATTR_DISP_VALUE
5097 ------------------------------------------------------------------------
5098 -- 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
5099 -- l_varchar_data := l_usr_attr_data_tbl(i).ATTR_VALUE_STR;
5100 -- ELSE
5101 -- l_varchar_data := NULL;
5102 -- END IF;
5103 IF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'C') THEN
5104 -- 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
5105 l_varchar_data := NVL(l_usr_attr_data_tbl(i).ATTR_VALUE_STR,l_usr_attr_data_tbl(i).ATTR_DISP_VALUE);
5106 -- END IF;
5107 ELSIF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'N') THEN
5108 -- 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
5109 l_varchar_data := NVL(To_char(l_usr_attr_data_tbl(i).ATTR_VALUE_NUM),l_usr_attr_data_tbl(i).ATTR_DISP_VALUE);
5110 BEGIN
5111 IF (TO_NUMBER(l_varchar_data) = EGO_ITEM_PUB.G_INTF_NULL_NUM) THEN
5112 l_varchar_data := EGO_USER_ATTRS_BULK_PVT.G_NULL_NUM_VAL_STR;
5113 END IF;
5114 EXCEPTION
5115 WHEN OTHERS THEN
5116 -- the value needs to be checked against value set
5117 NULL;
5118 END;
5119 Write_Debug(l_api_name || 'l_varchar_data => ' || l_varchar_data);
5120 -- END IF;
5121 ELSIF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'D') THEN
5122 IF (l_usr_attr_data_tbl(i).ATTR_VALUE_DATE = G_EXCEL_NULL_DATE) THEN
5123 l_varchar_data := To_Char(EGO_ITEM_PUB.G_INTF_NULL_DATE,G_DATE_FORMAT);
5124 ELSE
5125 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);
5126 END IF;
5127 END IF; --end: IF (l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE = 'C') THEN
5128
5129 -----------------------------------------------------------------------------------
5130 -- Checking for the transaction_type, if CREATE/UPDATE populate
5131 -- EGO_ITM_USR_ATTR_INTRFC with SYNC else the user-given Transaction_type is passed
5132 -----------------------------------------------------------------------------------
5133 l_transaction_type := l_usr_attr_data_tbl(i).TRANSACTION_TYPE;
5134 IF (l_transaction_type = G_CREATE OR l_transaction_type = G_UPDATE) THEN
5135 l_transaction_type := G_SYNC;
5136 END IF; --transaction_type check (Bug5201097)
5137
5138 ----------------------------------------------------------------------
5139 -- 1)
5140 -- The User-Defined Attrs BO has some validation changes, which
5141 -- mandates users to pass in the display value, so that BO does the
5142 -- conversion to internal value. To support that change, I need to
5143 -- populate ATTR_DISP_VALUE instead of internal columns :
5144 -- ATTR_VALUE_STR, ATTR_VALUE_DATE, ATTR_VALUE_NUM.
5145 -- Above change to populate ATTR_DISP_VALUE was advised by DAARENA
5146 -- (Dylan Arena)
5147 --
5151 ----------------------------------------------------------------------
5148 -- 2)
5149 -- TRANSACTION_TYPE, PROCESS_STATUS need *not* be populated as they
5150 -- are defaulted by the User Attrs PLSQL Program
5152
5153 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
5154 (
5155 DATA_SET_ID ,
5156 TRANSACTION_ID ,
5157 TRANSACTION_TYPE ,
5158 INVENTORY_ITEM_ID ,
5159 ORGANIZATION_ID ,
5160 REVISION_ID ,
5161 ITEM_NUMBER ,
5162 ORGANIZATION_CODE ,
5163 REVISION ,
5164 ROW_IDENTIFIER ,
5165 ATTR_GROUP_INT_NAME ,
5166 ATTR_INT_NAME ,
5167 ATTR_DISP_VALUE ,
5168 PROCESS_STATUS ,
5169 SOURCE_SYSTEM_ID ,
5170 SOURCE_SYSTEM_REFERENCE,
5171 ATTR_GROUP_TYPE, --Bug Fix 4630163(ISSUE2)
5172 ITEM_CATALOG_GROUP_ID, --Bug Fix 5179741
5173 DATA_LEVEL_ID ,
5174 PK1_VALUE ,
5175 PK2_VALUE ,
5176 ATTR_VALUE_UOM --R12C UOM Changes
5177 )
5178 VALUES
5179 (
5180 l_usr_attr_data_tbl(i).DATA_SET_ID,
5181 l_usr_attr_data_tbl(i).TRANSACTION_ID,
5182 l_transaction_type, --l_usr_attr_data_tbl(i).TRANSACTION_TYPE,
5183 l_usr_attr_data_tbl(i).INVENTORY_ITEM_ID,
5184 l_usr_attr_data_tbl(i).ORGANIZATION_ID,
5185 l_usr_attr_data_tbl(i).REVISION_ID,
5186 l_usr_attr_data_tbl(i).ITEM_NUMBER,
5187 l_usr_attr_data_tbl(i).ORGANIZATION_CODE,
5188 l_usr_attr_data_tbl(i).REVISION,
5189 l_usr_attr_data_tbl(i).ROW_IDENTIFIER,
5190 l_usr_attr_data_tbl(i).ATTR_GROUP_NAME,
5191 l_usr_attr_data_tbl(i).ATTR_NAME,
5192 l_varchar_data, -- ATTR_DISP_VALUE
5193 G_PROCESS_STATUS,
5194 l_usr_attr_data_tbl(i).SOURCE_SYSTEM_ID,
5195 l_usr_attr_data_tbl(i).SOURCE_SYSTEM_REFERENCE,
5196 l_usr_attr_data_tbl(i).ATTR_GROUP_TYPE, --Bug Fix 4630163(ISSUE2)
5197 G_CATALOG_GROUP_ID, --Bug Fix 5179741
5198 l_usr_attr_data_tbl(i).DATA_LEVEL_ID,
5199 l_usr_attr_data_tbl(i).PK1_VALUE,
5200 l_usr_attr_data_tbl(i).PK2_VALUE,
5201 l_usr_attr_data_tbl(i).ATTR_VALUE_UOM --R12C UOM Changes
5202 );
5203
5204 Write_Debug(l_api_name || 'DataSetID ['||l_usr_attr_data_tbl(i).DATA_SET_ID||'] '||G_NEWLINE||
5205 l_api_name || 'TransactionID ['||l_usr_attr_data_tbl(i).TRANSACTION_ID||'] '||G_NEWLINE||
5206 l_api_name || 'TransactionType ['||l_usr_attr_data_tbl(i).TRANSACTION_TYPE||'] '||G_NEWLINE||
5207 l_api_name || 'InventoryItemID ['||l_usr_attr_data_tbl(i).INVENTORY_ITEM_ID||'] '||G_NEWLINE||
5208 l_api_name || 'OrganizationID ['||l_usr_attr_data_tbl(i).ORGANIZATION_ID||'] '||G_NEWLINE||
5209 l_api_name || 'RevisionID ['||l_usr_attr_data_tbl(i).REVISION_ID||'] '||G_NEWLINE||
5210 l_api_name || 'ItemNumber ['||l_usr_attr_data_tbl(i).ITEM_NUMBER||'] '||G_NEWLINE||
5211 l_api_name || 'OrganizationCode['||l_usr_attr_data_tbl(i).ORGANIZATION_CODE||'] '||G_NEWLINE||
5212 l_api_name || 'Revision ['||l_usr_attr_data_tbl(i).REVISION||'] '||G_NEWLINE||
5213 l_api_name || 'RowIdentifier ['||l_usr_attr_data_tbl(i).ROW_IDENTIFIER||'] '||G_NEWLINE||
5214 l_api_name || 'AttrGroupType ['||l_usr_attr_data_tbl(i).ATTR_GROUP_TYPE||'] '||G_NEWLINE||--Bug Fix 4630163(ISSUE2)
5215 l_api_name || 'AttrGroupName ['||l_usr_attr_data_tbl(i).ATTR_GROUP_NAME||'] '||G_NEWLINE||
5216 l_api_name || 'AttrName ['||l_usr_attr_data_tbl(i).ATTR_NAME||'] '||G_NEWLINE||
5217 l_api_name || ': Populated ATTR_DISP_VALUE of DataType['||l_usr_attr_data_tbl(i).ATTR_DATATYPE_CODE||'] => '||l_varchar_data||G_NEWLINE||
5218 l_api_name || ' Catalog Group ID ['||G_CATALOG_GROUP_ID||']');
5219
5220 END IF; --end: IF ( LENGTH(l_usr_attr_data_tbl(i)..
5221
5222 END LOOP LIORUI_attrs_loop; --FOR i IN 1..l_usr_attr_data_tbl.COUNT LOOP
5223
5224 Write_Debug(l_api_name || 'EIAI: Populated the Item / Item-Revision User-Defined Attr Values for Attribute Group : '||l_attr_group_int_name);
5225
5226 END LOOP LIORUI_attr_groups_loop; --FOR c_attr_grp_rec IN c_user_attr_group_codes
5227
5228 Write_Debug(l_api_name || 'EIAI: DONE Populating the Item / Item-Revision User-Defined Attr Values');
5229
5230 Write_Debug(l_api_name || 'END load_itm_or_rev_usrattr_intf()');
5231
5232
5233 EXCEPTION
5234 WHEN OTHERS THEN
5235 x_retcode := G_STATUS_ERROR;
5236 x_errbuff := SUBSTRB(SQLERRM, 1,240);
5237 Write_Debug(l_api_name || 'Load_itm_or_rev_usrattr_intf : EXCEPTION HAPPENED => '||x_errbuff);
5238 RAISE;
5239
5240 END load_itm_or_rev_usrattr_intf;
5241
5242 --================================================================================--
5243 -- 11.5.10 New Functionality: Item Operational Attributes Bulkload (bug# 3293098) --
5244 -- PPEDDAMA (1/31/2004) --
5245 --================================================================================--
5246
5247 ---------------------------------------------------------------
5248 --This method populates Item Operational attributes in MSII.
5249 ---------------------------------------------------------------
5250
5251 PROCEDURE load_item_oper_attr_values
5252 (
5256 -- Start OF comments
5253 p_resultfmt_usage_id IN NUMBER
5254 ) IS
5255
5257 -- API name : Populate MSII Item Interface Lines
5258 -- Pre-reqs : None
5259 -- FUNCTION : Populate and Loads Item operational attribute values in MSII.
5260 -- These operational attributes made available in Item Search Results
5261 -- through User-Defined Attributes framework.
5262 --
5263 -- Errors are populated in MTL_INTERFACE_ERRORS
5264 --
5265
5266 ------------------------------------------------------------------------
5267 -- To get the count of Item Operational Attr Groups Result Format. --
5268 ------------------------------------------------------------------------
5269 CURSOR c_item_oper_attr_grp_count (c_resultfmt_usage_id IN NUMBER) IS
5270 SELECT count(distinct(To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1))))
5271 FROM ego_results_fmt_usages
5272 WHERE resultfmt_usage_id = c_resultfmt_usage_id
5273 AND attribute_code LIKE '%$$%'
5274 -- Following statement fetches the Attribute Group Id --
5275 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) IN
5276 (
5277 SELECT ATTR_GROUP_ID
5278 FROM EGO_ATTR_GROUPS_V
5279 WHERE ATTR_GROUP_TYPE = G_ERP_ATTR_GROUP_TYPE
5280 AND APPLICATION_ID = G_APPLICATION_ID
5281 );
5282
5283 ------------------------------------------------------------------------
5284 -- To get the Item Operational Attr Groups in the Result Format. --
5285 ------------------------------------------------------------------------
5286 CURSOR c_item_oper_attr_grp_ids (c_resultfmt_usage_id IN NUMBER) IS
5287 SELECT distinct(To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1))) OPER_ATTR_GRP_ID
5288 FROM ego_results_fmt_usages
5289 WHERE resultfmt_usage_id = c_resultfmt_usage_id
5290 AND attribute_code LIKE '%$$%'
5291 -- Following statement fetches the Attribute Group Id --
5292 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) IN
5293 (
5294 SELECT ATTR_GROUP_ID
5295 FROM EGO_ATTR_GROUPS_V
5296 WHERE ATTR_GROUP_TYPE = G_ERP_ATTR_GROUP_TYPE
5297 AND APPLICATION_ID = G_APPLICATION_ID
5298 );
5299
5300 ---------------------------------------------------------------
5301 -- To get the Item Operational attr columns in the Result Format.
5302 ---------------------------------------------------------------
5303 CURSOR c_item_oper_attr_intf_cols ( c_resultfmt_usage_id IN NUMBER
5304 ,c_attr_group_id IN NUMBER
5305 ) IS
5306 -- First column is the Attibute Id --
5307 SELECT To_Number(SUBSTR(attribute_code, INSTR(attribute_code, '$$')+2))
5308 , intf_column_name
5309 FROM ego_results_fmt_usages
5310 WHERE resultfmt_usage_id = c_resultfmt_usage_id
5311 AND INSTR(attribute_code, '$$UOM') = 0 -- R12C UOM Change : ignoring uom columns in this case:
5312 AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, '$$') - 1)) = c_attr_group_id;
5313
5314 l_item_oper_attr_sql VARCHAR2(1000) :=
5315 ' SELECT To_Number(SUBSTR(attribute_code, INSTR(attribute_code, ''$$'')+2)) '
5316 || ' , intf_column_name '
5317 || ' FROM ego_results_fmt_usages '
5318 || ' WHERE resultfmt_usage_id = :RESULTFMT_USAGE_ID '
5319 || ' AND INSTR(attribute_code, ''$$UOM'') = 0 ' -- R12C UOM Change : ignoring uom columns in this case:
5320 || ' AND To_Number(SUBSTR(attribute_code, 1, INSTR(attribute_code, ''$$'') - 1)) = :ATTR_GROUP_ID ';
5321
5322 -------------------------------------------------------------------------
5323 -- To get the Attribute Name (Table performs better than EGO_ATTRS_V) --
5324 -------------------------------------------------------------------------
5325 CURSOR c_attr_name ( c_attr_id IN NUMBER) IS
5326 SELECT ext.application_column_name , TL.FORM_LEFT_PROMPT
5327 FROM ego_fnd_df_col_usgs_ext ext, FND_DESCR_FLEX_COL_USAGE_TL TL
5328 WHERE ext.attr_id = c_attr_id
5329 AND TL.LANGUAGE = USERENV('LANG')
5330 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = TL.DESCRIPTIVE_FLEXFIELD_NAME
5331 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = TL.DESCRIPTIVE_FLEX_CONTEXT_CODE
5332 AND EXT.APPLICATION_COLUMN_NAME = TL.APPLICATION_COLUMN_NAME
5333 AND EXT.APPLICATION_ID = TL.APPLICATION_ID; -- Bug 6531938
5334
5335 -----------------------------------------------------------
5336 -- local objects and object variables --
5337 -----------------------------------------------------------
5338
5339 l_attr_metadata_table EGO_ATTR_METADATA_TABLE;
5340 l_attr_metadata_obj EGO_ATTR_METADATA_OBJ;
5341 l_user_attr_data_obj EGO_USER_ATTR_DATA_OBJ;
5342 l_user_attr_data_table EGO_USER_ATTR_DATA_TABLE;
5343 l_attr_group_metadata_obj EGO_ATTR_GROUP_METADATA_OBJ;
5344 l_ext_table_metadata_obj EGO_EXT_TABLE_METADATA_OBJ;
5345 l_pk_column_name_value_pairs EGO_COL_NAME_VALUE_PAIR_ARRAY;
5346
5347 ----------------------------------------
5348 -- local variables --
5349 ----------------------------------------
5350
5351 l_item_oper_attr_grp_count NUMBER;
5352 l_item_oper_attr_grp_id NUMBER;
5353 l_count NUMBER(5);
5354 l_indx NUMBER(15);
5355 l_transaction_id NUMBER(15);
5356 l_object_id NUMBER(5);
5357
5361 l_trans_type_char VARCHAR2(15);
5358 l_dyn_sql VARCHAR2(10000);
5359 l_item_id_char VARCHAR2(15);
5360 l_org_id_char VARCHAR2(15);
5362 l_attr_name VARCHAR2(100);
5363
5364 l_attr_id_table DBMS_SQL.NUMBER_TABLE;
5365 l_attr_disp_name_table DBMS_SQL.VARCHAR2_TABLE;
5366 l_intf_col_table DBMS_SQL.VARCHAR2_TABLE;
5367 l_attr_disp_val_table DBMS_SQL.VARCHAR2_TABLE;
5368 l_attr_int_val_table DBMS_SQL.VARCHAR2_TABLE;
5369 l_msii_col_table DBMS_SQL.VARCHAR2_TABLE;
5370
5371 -- Example Data Types to be used in Bind Variable. --
5372 l_varchar_example VARCHAR2(1000);
5373 l_number_example NUMBER;
5374 l_date_example DATE;
5375
5376 -- Actual Data to store corresponding data type value. --
5377 l_varchar_data VARCHAR2(1000);
5378 l_number_data NUMBER;
5379
5380 -- DBMS_SQL Open Cursor integers. --
5381 l_cursor_oper_attr INTEGER;
5382 l_execute INTEGER;
5383
5384 --API return parameters
5385 l_retcode VARCHAR2(10);
5386 l_errbuff VARCHAR2(2000);
5387 l_ebi_err_msg VARCHAR2(2000);
5388 l_dyn_sql_ebi VARCHAR2(2000);
5389
5390 BEGIN
5391
5392 --------------------------------------------------------------------------------
5393 -- Fetch the Object Id. If not found, SQL exception gets thrown. --
5394 --------------------------------------------------------------------------------
5395 SELECT OBJECT_ID
5396 INTO l_object_id
5397 FROM FND_OBJECTS
5398 WHERE OBJ_NAME = G_EGO_ITEM_OBJ_NAME;
5399
5400 l_ext_table_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Get_Ext_Table_Metadata (l_object_id);
5401
5402 --------------------------------------------------------------------------------
5403 -- Fetch the count of Operational Attribute Groups in the Result Format --
5404 --------------------------------------------------------------------------------
5405 OPEN c_item_oper_attr_grp_count(p_resultfmt_usage_id);
5406 FETCH c_item_oper_attr_grp_count INTO l_item_oper_attr_grp_count;
5407 IF c_item_oper_attr_grp_count%NOTFOUND THEN
5408 ----------------------------------------------------------------------------
5409 -- There are *no* operational attribute groups to load. Hence return. --
5410 ----------------------------------------------------------------------------
5411 Write_Debug('load_item_oper_attr_values: There are *NO* Operational Attribute Groups to load! Hence RETURNing!!');
5412 RETURN;
5413
5414 END IF;
5415 CLOSE c_item_oper_attr_grp_count;
5416
5417 IF (l_item_oper_attr_grp_count > 0) THEN
5418
5419 FOR attr_grp_id_rec IN c_item_oper_attr_grp_ids(p_resultfmt_usage_id)
5420 LOOP
5421 IF (attr_grp_id_rec.OPER_ATTR_GRP_ID IS NOT NULL) THEN
5422
5423 ------------------------------------------------------------------------------
5424 -- Deleting all the earlier retrieved rows from these temp PLSQL tables,
5425 -- and Starting afresh.
5426 -- NOTE: l_attr_id_table.COUNT will be >0, only from second exec of the loop.
5427 ------------------------------------------------------------------------------
5428 IF (l_attr_id_table.COUNT > 0) THEN
5429 l_attr_id_table.DELETE;
5430 l_intf_col_table.DELETE;
5431 END IF; --end: IF (l_attr_id_table.COUNT > 0)
5432
5433 ----------------------------------------------------------------------------
5434 -- Fetch the Attr Group Meta Data object. --
5435 -- Object will be retained until per Attr Group operational attribute --
5436 -- values for all rows are processed. --
5437 ----------------------------------------------------------------------------
5438 l_attr_group_metadata_obj :=
5439 EGO_USER_ATTRS_COMMON_PVT.Get_Attr_Group_Metadata (
5440 p_attr_group_id => attr_grp_id_rec.OPER_ATTR_GRP_ID
5441 ,p_application_id => G_APPLICATION_ID
5442 ,p_attr_group_type => G_ERP_ATTR_GROUP_TYPE
5443 );
5444
5445 ----------------------------------------------------------------------------
5446 -- Fetch the Attr Group Meta Data table. --
5447 -- Table will be retained until per Attr Group operational attribute --
5448 -- values for all rows are processed. --
5449 ----------------------------------------------------------------------------
5450 l_attr_metadata_table := l_attr_group_metadata_obj.attr_metadata_table;
5451
5452 ----------------------------------------------------------------------------
5453 -- Fetch the Oper Attrs IDs, Intf Column names. --
5454 ----------------------------------------------------------------------------
5455 Write_Debug(l_item_oper_attr_sql);
5456
5457 l_cursor_oper_attr := DBMS_SQL.OPEN_CURSOR;
5458 DBMS_SQL.PARSE(l_cursor_oper_attr, l_item_oper_attr_sql, DBMS_SQL.NATIVE);
5459 DBMS_SQL.DEFINE_ARRAY(
5460 c => l_cursor_oper_attr -- cursor --
5461 , position => 1 -- select position --
5462 , n_tab => l_attr_id_table -- table of numbers --
5466 DBMS_SQL.DEFINE_ARRAY(
5463 , cnt => 2500 -- rows requested --
5464 , lower_bound => 1 -- start at --
5465 );
5467 c => l_cursor_oper_attr -- cursor --
5468 , position => 2 -- select position --
5469 , c_tab => l_intf_col_table -- table of varchar --
5470 , cnt => 2500 -- rows requested --
5471 , lower_bound => 1 -- start at --
5472 );
5473
5474 DBMS_SQL.BIND_VARIABLE(l_cursor_oper_attr,':RESULTFMT_USAGE_ID', p_resultfmt_usage_id);
5475 DBMS_SQL.BIND_VARIABLE(l_cursor_oper_attr,':ATTR_GROUP_ID', attr_grp_id_rec.OPER_ATTR_GRP_ID);
5476 Write_Debug('Binding :RESULTFMT_USAGE_ID to => '||p_resultfmt_usage_id);
5477 Write_Debug('Binding :ATTR_GROUP_ID to => '||attr_grp_id_rec.OPER_ATTR_GRP_ID);
5478
5479 l_execute := DBMS_SQL.EXECUTE(l_cursor_oper_attr);
5480 l_count := DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr);
5481 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 1, l_attr_id_table);
5482 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 2, l_intf_col_table);
5483
5484 Write_Debug('load_item_oper_attr_values: Retrieved rows => '||To_char(l_count));
5485 DBMS_SQL.CLOSE_CURSOR(l_cursor_oper_attr);
5486
5487 ----------------------------------------------------------------------------
5488 -- Fetch the Oper Attrs values from EGO_BULKLOAD_INTF. --
5489 ----------------------------------------------------------------------------
5490
5491 l_cursor_oper_attr := DBMS_SQL.OPEN_CURSOR;
5492 l_dyn_sql := ' SELECT ';
5493 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
5494 l_dyn_sql := l_dyn_sql || ' UPPER(TRANSACTION_TYPE) , ';
5495 l_dyn_sql := l_dyn_sql || ' INSTANCE_PK1_VALUE , ';
5496 l_dyn_sql := l_dyn_sql || ' INSTANCE_PK2_VALUE , ';
5497 FOR i in 1..l_attr_id_table.COUNT LOOP
5498 IF (i <> l_attr_id_table.COUNT) THEN
5499 l_dyn_sql := l_dyn_sql || l_intf_col_table(i) || ' , ';
5500 ELSE
5501 l_dyn_sql := l_dyn_sql || l_intf_col_table(i) || ' ';
5502 END IF;
5503 END LOOP; --FOR (i in 1..l_attr_id_table.COUNT) LOOP
5504 l_dyn_sql := l_dyn_sql || ' FROM EGO_BULKLOAD_INTF ';
5505 l_dyn_sql := l_dyn_sql || ' WHERE RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
5506 l_dyn_sql := l_dyn_sql || ' AND PROCESS_STATUS = 1 ';
5507
5508 Write_Debug(l_dyn_sql);
5509 DBMS_SQL.PARSE(l_cursor_oper_attr, l_dyn_sql, DBMS_SQL.NATIVE);
5510
5511 ----------------------------------------------------------------------------
5512 -- Setting the Data type for Oper Attrs values before Select. --
5513 ----------------------------------------------------------------------------
5514 -- Setting Data Type for Trasaction ID --
5515 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 1, l_number_example);
5516 -- Setting Data Type for Transaction Type --
5517 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 2, l_varchar_example, 1000);
5518 --Setting Data Type for INSTANCE_PK1_VALUE (Item ID)
5519 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 3, l_varchar_example, 1000);
5520 --Setting Data Type for INSTANCE_PK2_VALUE (Org ID)
5521 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, 4, l_varchar_example, 1000);
5522 FOR i in 1..l_attr_id_table.COUNT LOOP
5523 ------------------------------------------------------------------------------------
5524 -- Since TRANSACTION_ID, TRANSACTION_TYPE, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE --
5525 -- are added to the SELECT before we need to adjust the index as follows. --
5526 ------------------------------------------------------------------------------------
5527 l_indx := i + 4;
5528 DBMS_SQL.DEFINE_COLUMN(l_cursor_oper_attr, l_indx, l_varchar_example, 1000);
5529 END LOOP; --2nd: FOR (i in 1..l_attr_id_table.COUNT) LOOP
5530
5531 ----------------------------------------------------------------------------
5532 -- Binding the ResultFmtUsageId and Executing the Query. --
5533 ----------------------------------------------------------------------------
5534 DBMS_SQL.BIND_VARIABLE(l_cursor_oper_attr,':RESULTFMT_USAGE_ID',p_resultfmt_usage_id);
5535 l_execute := DBMS_SQL.EXECUTE(l_cursor_oper_attr);
5536
5537 LOOP --Loop for l_cursor_oper_attr
5538
5539 IF DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr)>0 THEN
5540
5541 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 1, l_transaction_id);
5542 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 2, l_trans_type_char);
5543 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 3, l_item_id_char);
5544 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, 4, l_org_id_char);
5545
5546 Write_Debug('load_item_oper_attr_values: l_trans_type_char => '||l_trans_type_char);
5547 ------------------------------------------------------------------------------------
5548 -- Prepare Primary Key Name Value pair object. --
5549 -- In case of CREATE, pass in a blank object. --
5550 ------------------------------------------------------------------------------------
5551 l_pk_column_name_value_pairs := EGO_COL_NAME_VALUE_PAIR_ARRAY
5552 (
5553 EGO_COL_NAME_VALUE_PAIR_OBJ('INVENTORY_ITEM_ID', l_item_id_char)
5557 --------------------------------------------------------------------------------
5554 ,EGO_COL_NAME_VALUE_PAIR_OBJ('ORGANIZATION_ID', l_org_id_char)
5555 );
5556
5558 -- Create a table of Usr Attr Data objects that will be used for --
5559 -- Display to Internal value conversions. --
5560 --------------------------------------------------------------------------------
5561 l_user_attr_data_table := EGO_USER_ATTR_DATA_TABLE();
5562
5563 -- bug 4699499 deleting the msii column table
5564 IF (l_msii_col_table.COUNT > 0) THEN
5565 Write_Debug('load_item_oper_attr_values: Deleting msii col table ');
5566 l_msii_col_table.DELETE;
5567 END IF; --end: IF (l_msii_col_table.COUNT > 0)
5568
5569 FOR i in 1..l_attr_id_table.COUNT LOOP
5570 ------------------------------------------------------------------------------------
5571 -- Since TRANSACTION_ID, TRANSACTION_TYPE, INSTANCE_PK1_VALUE, INSTANCE_PK2_VALUE --
5572 -- are added to the SELECT before we need to adjust the index as follows. --
5573 ------------------------------------------------------------------------------------
5574 l_indx := i + 4;
5575 DBMS_SQL.COLUMN_VALUE(l_cursor_oper_attr, l_indx, l_varchar_data);
5576 Write_Debug('load_item_oper_attr_values: String Value =>'||l_varchar_data);
5577
5578 -- store the Display values in a plsql table --
5579 l_attr_disp_val_table(i) := l_varchar_data;
5580
5581 --------------------------------------------------------------------------------
5582 -- Fetch the Attribute name based on the attribute id. --
5583 --------------------------------------------------------------------------------
5584 OPEN c_attr_name(l_attr_id_table(i));
5585 FETCH c_attr_name INTO l_attr_name, l_attr_disp_name_table(i);
5586 IF c_attr_name%NOTFOUND THEN
5587
5588 ----------------------------------------------------------------------------
5589 -- This shouldnot happen. All Oper Attr Ids should map to Attr names. --
5590 -- Print the following debug statement and RETURN. --
5591 ----------------------------------------------------------------------------
5592 Write_Debug('load_item_oper_attr_values: Houston we have a problem! No Attr Name found!!!');
5593 RETURN;
5594 END IF; -- IF c_attr_name%NOTFOUND THEN
5595 CLOSE c_attr_name;
5596 Write_Debug('load_item_oper_attr_values: l_attr_name => '||l_attr_name);
5597
5598 --------------------------------------------------------------------------------
5599 -- The Attribute name is the MSII DB Column name. --
5600 --------------------------------------------------------------------------------
5601 l_msii_col_table(i) := l_attr_name;
5602
5603 ------------------------------------------------------------------------------------
5604 -- Prepare a table of l_user_attr_data_objects. --
5605 -- Dylan's mail below on, why we need to get all the objects into the table --
5606 -- l_user_attr_data_objects, before we start any disp-to-int value processing: -- --
5607 -- --
5608 -- Dylan's mail (Dated: 1/30/2004) --
5609 -- It occurred to me that adding Attrs one by one as we go might not prove to be --
5610 -- sufficient, because there's no guarantee we'll be processing the Attrs in --
5611 -- their correct order: for e.g. If Attr2 required Attr1 for its ValueSet query, --
5612 -- what if we ended up processing Attr2 before Attr1? In such a case, even if --
5613 -- the user passed Attr1's value, our one by one method of adding elements to our --
5614 -- data table wouldn't work. --
5615 -- So it will probably be better to --
5616 -- 1. Pull all Attrs for an AG --
5617 -- 2. Fetch their AG metadata (with call to EGO_USER_ATTRS_COMMON_PVT) --
5618 -- 3. Create Attr data elems for all passed values and add them to table --
5619 -- 4. Then process Attrs in the AG --
5620 ------------------------------------------------------------------------------------
5621 l_user_attr_data_obj := EGO_USER_ATTR_DATA_OBJ(
5622 1 --ROW_IDENTIFIER
5623 ,l_attr_name --ATTR_INT_NAME
5624 ,null --ATTR_VALUE_STR
5625 ,null --ATTR_VALUE_NUM
5626 ,null --ATTR_VALUE_DATE
5627 ,l_attr_disp_val_table(i) --ATTR_DISP_VALUE
5628 ,null --ATTR_UNIT_OF_MEASURE
5629 ,l_transaction_id --TRANSACTION_ID
5633 l_user_attr_data_table(l_user_attr_data_table.LAST) := l_user_attr_data_obj;
5630 );
5631
5632 l_user_attr_data_table.EXTEND();
5634
5635 END LOOP; --FOR (i in 1..l_attr_id_table.COUNT) LOOP
5636
5637 --------------------------------------------------------------------------------
5638 -- Create a table of internal values for attributes that will be used to --
5639 -- uploading into the MSII. --
5640 --------------------------------------------------------------------------------
5641 FOR i in 1..l_attr_id_table.COUNT LOOP
5642
5643 ------------------------------------------------------------------------------------
5644 -- Get the Attribute Metadata Object, that will be used to check if the --
5645 -- attribute needs Display to Internal value conversion. --
5646 ------------------------------------------------------------------------------------
5647 l_attr_metadata_obj := EGO_USER_ATTRS_COMMON_PVT.Find_Metadata_For_Attr
5648 (
5649 p_attr_metadata_table => l_attr_metadata_table
5650 ,p_attr_id => l_attr_id_table(i)
5651 );
5652
5653 ------------------------------------------------------------------------------------
5654 -- Derive the internal value by passing all the objects created above. --
5655 -- Following is to check if there is a need for conversion. --
5656 ------------------------------------------------------------------------------------
5657 IF (l_attr_metadata_obj.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_TABLE_VALIDATION_CODE OR
5658 l_attr_metadata_obj.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_TRANS_IND_VALIDATION_CODE OR
5659 l_attr_metadata_obj.VALIDATION_CODE = EGO_EXT_FWK_PUB.G_INDEPENDENT_VALIDATION_CODE) THEN
5660
5661 l_attr_int_val_table(i) :=
5662 EGO_USER_ATTRS_DATA_PVT.Get_Int_Val_For_Disp_Val
5663 (
5664 l_attr_metadata_obj --EGO_ATTR_METADATA_OBJ
5665 ,l_user_attr_data_table(i) --EGO_USER_ATTR_DATA_OBJ
5666 ,l_attr_group_metadata_obj --EGO_ATTR_GROUP_METADATA_OBJ
5667 ,l_ext_table_metadata_obj --EGO_EXT_TABLE_METADATA_OBJ
5668 ,l_pk_column_name_value_pairs --EGO_COL_NAME_VALUE_PAIR_ARRAY
5669 -- following is used in case of Revisions. --
5670 ,NULL --EGO_COL_NAME_VALUE_PAIR_ARRAY (p_data_level_name_value_pairs)
5671 ,G_ENTITY_ID --p_entity_id
5672 ,NULL --p_entity_index
5673 ,G_ENTITY_CODE --p_entity_code
5674 ,l_user_attr_data_table --EGO_USER_ATTR_DATA_TABLE
5675 );
5676
5677 IF l_attr_disp_val_table(i) IS NOT NULL AND l_attr_int_val_table(i) IS NULL THEN
5678 IF l_attr_metadata_obj.data_type_code = 'C' AND
5679 l_attr_disp_val_table(i) = EGO_ITEM_PUB.G_INTF_NULL_CHAR THEN
5680 l_attr_int_val_table(i) := EGO_ITEM_PUB.G_INTF_NULL_CHAR;
5681 ELSIF l_attr_metadata_obj.data_type_code = 'N' THEN
5682 BEGIN
5683 IF (l_attr_disp_val_table(i) = EGO_ITEM_PUB.G_INTF_NULL_CHAR OR
5684 TO_NUMBER(l_attr_disp_val_table(i)) = EGO_ITEM_PUB.G_INTF_NULL_NUM
5685 ) THEN
5686 l_attr_int_val_table(i) := EGO_ITEM_PUB.G_INTF_NULL_NUM;
5687 END IF;
5688 EXCEPTION
5689 WHEN OTHERS THEN
5690 -- the value needs to be checked against value set
5691 NULL;
5692 END;
5693 ELSIF l_attr_metadata_obj.data_type_code IN ('X','Y') THEN
5694 BEGIN
5695 IF (l_attr_disp_val_table(i) = EGO_ITEM_PUB.G_INTF_NULL_CHAR OR
5696 TO_DATE(l_attr_disp_val_table(i),G_DATE_FORMAT) = EGO_ITEM_PUB.G_INTF_NULL_DATE
5697 ) THEN
5698 l_attr_int_val_table(i) := EGO_ITEM_PUB.G_INTF_NULL_DATE;
5699 END IF;
5700 EXCEPTION
5701 WHEN OTHERS THEN
5702 -- the value needs to be checked against value set
5703 NULL;
5704 END;
5705 END IF;
5706 END IF;
5707 ELSE
5708 -- Value passed by user is Internal value --
5709 l_attr_int_val_table(i) := l_attr_disp_val_table(i);
5710 END IF; --IF (l_attr_metadata_obj.VALIDATION_CODE ...
5711 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));
5712 END LOOP; --FOR (i in 1..l_attr_id_table.COUNT) LOOP
5713
5714 --------------------------------------------------------------------------------
5715 -- Update MSII with the internal values derived above for the row. --
5716 -- Update that particular row using Transaction ID. --
5720 l_dyn_sql := l_dyn_sql || ' SET ';
5717 --------------------------------------------------------------------------------
5718
5719 l_dyn_sql := 'UPDATE MTL_SYSTEM_ITEMS_INTERFACE ';
5721
5722 FOR i in 1..l_msii_col_table.COUNT LOOP
5723 -- flash errors where int val is not correct
5724 IF l_attr_disp_val_table(i) IS NOT NULL AND l_attr_int_val_table(i) IS NULL THEN
5725 l_dyn_sql := l_dyn_sql || ' process_flag = '||G_VS_INVALID_ERR_STS;
5726 l_dyn_sql := l_dyn_sql || ' , request_id = '||G_REQUEST_ID;
5727 FND_MESSAGE.set_name('EGO', 'EGO_IPI_INVALID_VALUE');
5728 FND_MESSAGE.set_token('NAME', l_attr_disp_name_table(i));
5729 FND_MESSAGE.set_token('VALUE',NVL(l_attr_disp_val_table(i),l_attr_int_val_table(i)));
5730 l_ebi_err_msg := fnd_message.get();
5731 l_dyn_sql_ebi := ' UPDATE ego_bulkload_intf ' ||
5732 ' SET '|| G_VAL_SET_CONV_ERR_COL ||' = '''||l_ebi_err_msg||''''||
5733 ' WHERE TRANSACTION_ID = ' || l_transaction_id;
5734 EXECUTE IMMEDIATE l_dyn_sql_ebi;
5735 EXIT;
5736 ELSE
5737 IF (i <> l_msii_col_table.COUNT) THEN
5738 l_dyn_sql := l_dyn_sql || l_msii_col_table(i) ||' = ''' || l_attr_int_val_table(i) || ''' , ';
5739 ELSE
5740 l_dyn_sql := l_dyn_sql || l_msii_col_table(i) ||' = ''' || l_attr_int_val_table(i) || '''';
5741 END IF;
5742 END IF;
5743 END LOOP; --FOR (i in 1..l_attr_id_table.COUNT) LOOP
5744 l_dyn_sql := l_dyn_sql || ' WHERE TRANSACTION_ID = ' || l_transaction_id;
5745
5746 Write_Debug(l_dyn_sql);
5747
5748 EXECUTE IMMEDIATE l_dyn_sql;
5749
5750 ELSE --IF DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr)>0 THEN
5751 -------------------------------------------------------------------
5752 -- Exit loop as there are no more rows available for processing. --
5753 -------------------------------------------------------------------
5754 Write_Debug('load_item_oper_attr_values: No more rows found !');
5755 EXIT;
5756 END IF; --IF DBMS_SQL.FETCH_ROWS(l_cursor_oper_attr)>0 THEN
5757
5758 END LOOP; --END: Loop for l_cursor_oper_attr
5759 -- Bug : 4099546
5760 DBMS_SQL.CLOSE_CURSOR(l_cursor_oper_attr);
5761 END IF; --IF (attr_grp_id_rec.OPER_ATTR_GRP_ID IS NOT NULL) THEN
5762
5763 -------------------------------------------------------------------
5764 -- Before proceeding to process the next Attribute Group rows, --
5765 -- delete the attrs table. --
5766 -------------------------------------------------------------------
5767 l_user_attr_data_table.DELETE;
5768
5769 END LOOP; -- FOR attr_grp_id_rec IN c_item_oper_attr_grp_ids
5770
5771 END IF; --IF (l_item_oper_attr_grp_count > 0) THEN
5772
5773 -----------------------------------------------------------------------
5774 --Insert the Value Set error messages.
5775 -----------------------------------------------------------------------
5776 l_dyn_sql := '';
5777 l_dyn_sql := l_dyn_sql || 'INSERT INTO MTL_INTERFACE_ERRORS ';
5778 l_dyn_sql := l_dyn_sql || '( ';
5779 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID ';
5780 l_dyn_sql := l_dyn_sql || ', UNIQUE_ID ';
5781 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_DATE ';
5782 l_dyn_sql := l_dyn_sql || ', LAST_UPDATED_BY ';
5783 l_dyn_sql := l_dyn_sql || ', CREATION_DATE ';
5784 l_dyn_sql := l_dyn_sql || ', CREATED_BY ';
5785 l_dyn_sql := l_dyn_sql || ', LAST_UPDATE_LOGIN ';
5786 l_dyn_sql := l_dyn_sql || ', TABLE_NAME ';
5787 l_dyn_sql := l_dyn_sql || ', MESSAGE_NAME ';
5788 l_dyn_sql := l_dyn_sql || ', COLUMN_NAME ';
5789 l_dyn_sql := l_dyn_sql || ', REQUEST_ID ';
5790 l_dyn_sql := l_dyn_sql || ', PROGRAM_APPLICATION_ID ';
5791 l_dyn_sql := l_dyn_sql || ', PROGRAM_ID ';
5792 l_dyn_sql := l_dyn_sql || ', PROGRAM_UPDATE_DATE ';
5793 l_dyn_sql := l_dyn_sql || ', ERROR_MESSAGE ';
5794 l_dyn_sql := l_dyn_sql || ', TRANSACTION_ID ';
5795 l_dyn_sql := l_dyn_sql || ', ENTITY_IDENTIFIER ';
5796 l_dyn_sql := l_dyn_sql || ', BO_IDENTIFIER ';
5797 l_dyn_sql := l_dyn_sql || ') ';
5798 l_dyn_sql := l_dyn_sql || 'SELECT ';
5799 l_dyn_sql := l_dyn_sql || ' -1 ';
5800 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
5801 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
5802 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID ;
5803 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
5804 l_dyn_sql := l_dyn_sql || ', '||G_USER_ID;
5805 l_dyn_sql := l_dyn_sql || ', '||G_LOGIN_ID;
5806 l_dyn_sql := l_dyn_sql || ', ''MTL_SYSTEM_ITEMS_INTERFACE'' ';
5807 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
5808 l_dyn_sql := l_dyn_sql || G_VS_INVALID_ERR_STS||', ''EGO_IPI_INVALID_VALUE''';
5809 l_dyn_sql := l_dyn_sql || ' ) ';
5810 l_dyn_sql := l_dyn_sql || ', NULL ';
5811 l_dyn_sql := l_dyn_sql || ', '||G_REQUEST_ID ;
5812 l_dyn_sql := l_dyn_sql || ', '||G_PROG_APPID ;
5813 l_dyn_sql := l_dyn_sql || ', '||G_PROG_ID ;
5814 l_dyn_sql := l_dyn_sql || ', SYSDATE ';
5815 l_dyn_sql := l_dyn_sql || ', DECODE(MSII.PROCESS_FLAG, ';
5816 l_dyn_sql := l_dyn_sql || G_VS_INVALID_ERR_STS||', EBI.'||G_VAL_SET_CONV_ERR_COL;
5817 l_dyn_sql := l_dyn_sql || ' ) ';
5818 l_dyn_sql := l_dyn_sql || ', MSII.TRANSACTION_ID ';
5819 l_dyn_sql := l_dyn_sql || ', NULL ';
5820 l_dyn_sql := l_dyn_sql || ', NULL ';
5824 l_dyn_sql := l_dyn_sql || ' ( ';
5821 l_dyn_sql := l_dyn_sql || 'FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_BULKLOAD_INTF EBI ';
5822 l_dyn_sql := l_dyn_sql || 'WHERE MSII.TRANSACTION_ID = EBI.TRANSACTION_ID ';
5823 l_dyn_sql := l_dyn_sql || ' AND MSII.PROCESS_FLAG IN ';
5825 l_dyn_sql := l_dyn_sql || G_VS_INVALID_ERR_STS; --take care of invalid value set
5826 l_dyn_sql := l_dyn_sql || ' ) ';
5827 l_dyn_sql := l_dyn_sql || ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID ';
5828 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
5829
5830 Write_Debug(l_dyn_sql);
5831 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
5832
5833 Write_Debug(' All Value Set value errors populated.');
5834 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5835 SET PROCESS_FLAG = G_INTF_STATUS_ERROR
5836 WHERE PROCESS_FLAG IN
5837 (
5838 G_VS_INVALID_ERR_STS
5839 )
5840 AND TRANSACTION_ID IN
5841 (
5842 SELECT TRANSACTION_ID
5843 FROM EGO_BULKLOAD_INTF
5844 WHERE RESULTFMT_USAGE_ID = p_resultfmt_usage_id
5845 );
5846
5847 EXCEPTION
5848 WHEN OTHERS THEN
5849 l_retcode := G_STATUS_ERROR;
5850 l_errbuff := SUBSTRB(SQLERRM, 1,240);
5851 Write_Debug('Load_item_oper_attr_values : EXCEPTION HAPPENED => '||l_errbuff);
5852 RAISE;
5853
5854 END load_item_oper_attr_values;
5855
5856 --===================================================================================
5857 --END: 11.5.10 New Functionality: Item Operational Attributes Bulkload (bug# 3293098)
5858 --===================================================================================
5859
5860
5861 --------------------------------------------------------------------
5862 -- Fix for Bug# 3864813
5863 -- Process Net Weight (i.e. Unit Weights) for the Items based on the
5864 -- Trade Item Descriptor value.
5865 --
5866 -- NOTE: Net Weight can only have a value if Trade Item Descriptor
5867 -- is "Base Unit Or Each", else it will be NULL (i.e. it will be
5868 -- derived value).
5869 --------------------------------------------------------------------
5870 PROCEDURE process_netweights
5871 (
5872 p_resultfmt_usage_id IN NUMBER,
5873 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE ,
5874 x_errbuff OUT NOCOPY VARCHAR2,
5875 x_retcode OUT NOCOPY VARCHAR2
5876 ) IS
5877
5878 -- Start OF comments
5879 -- API name : Process Net Weight values for the Items
5880 -- TYPE : Public (called by oracle.apps.ego.item.cp.EgoItemConcurrentProgram)
5881 -- Pre-reqs : None
5882 -- FUNCTION : Process and update the Net Weight (i.e. Unit Weight).
5883 -- values for the Item.
5884 --
5885
5886 ------------------------------------------------------
5887 -- Local Variables
5888 ------------------------------------------------------
5889
5890 CURSOR c_err_logfile (c_resultfmt_usage_id IN NUMBER) IS
5891 SELECT C_INTF_ATTR239
5892 FROM EGO_BULKLOAD_INTF
5893 WHERE RESULTFMT_USAGE_ID = c_resultfmt_usage_id
5894 AND C_INTF_ATTR239 IS NOT NULL;
5895
5896 -- Long Dynamic SQL String
5897 l_dyn_sql VARCHAR2(10000);
5898 l_err_logfile_fullpath VARCHAR2(1000);
5899 l_is_debug BOOLEAN := FALSE;
5900
5901 l_log_dir VARCHAR2(1000);
5902 l_log_file VARCHAR2(1000);
5903
5904 --API return parameters
5905 l_retcode VARCHAR2(10);
5906 l_errbuff VARCHAR2(2000);
5907
5908 BEGIN
5909
5910 OPEN c_err_logfile(p_resultfmt_usage_id);
5911 FETCH c_err_logfile INTO l_err_logfile_fullpath;
5912 IF c_err_logfile%FOUND THEN
5913 l_is_debug := TRUE;
5914 END IF;
5915 -- Bug : 4099546
5916 CLOSE c_err_logfile;
5917 ------------------------------------------------------------
5918 -- If the Debug is TRUE, then log these statements in the
5919 -- Debug file, that has been opened before.
5920 ------------------------------------------------------------
5921 IF (l_is_debug) THEN
5922
5923 l_log_dir := SUBSTR(l_err_logfile_fullpath, 0, INSTR(l_err_logfile_fullpath, 'EGO_BULKLOAD_INTF') - 1);
5924 l_log_file := SUBSTR(l_err_logfile_fullpath, INSTR(l_err_logfile_fullpath, 'EGO_BULKLOAD_INTF'));
5925
5926 -----------------------------------------------------------------------
5927 -- To open the Debug Session to write the Debug Log. --
5928 -- This sets Debug value so that Error_Handler.Get_Debug returns 'Y' --
5929 -----------------------------------------------------------------------
5930 Error_Handler.Open_Debug_Session(
5931 p_debug_filename => l_log_file
5932 ,p_output_dir => l_log_dir
5933 ,x_return_status => l_retcode
5934 ,x_error_mesg => l_errbuff
5935 );
5936
5937 END IF;
5938
5939 Write_Debug('-----------------------------------------------------------------');
5940 Write_Debug('POST-PROCESSING After IOI + User-Def + UCCnet Attts processing');
5941 Write_Debug('-----------------------------------------------------------------');
5942
5943 l_dyn_sql :=
5944 ' UPDATE MTL_SYSTEM_ITEMS_B MSIB ' ||
5945 ' SET (MSIB.UNIT_WEIGHT, MSIB.WEIGHT_UOM_CODE) = ' ||
5946 ' ( ' ||
5947 ' DECODE(MSIB.TRADE_ITEM_DESCRIPTOR, ''BASE_UNIT_OR_EACH'', MSIB.UNIT_WEIGHT, NULL), ' ||
5948 ' DECODE(MSIB.TRADE_ITEM_DESCRIPTOR, ''BASE_UNIT_OR_EACH'', MSIB.WEIGHT_UOM_CODE, NULL) ' ||
5952 ' SELECT ''X'' ' ||
5949 ' ) ' ||
5950 ' WHERE EXISTS ' ||
5951 ' ( ' ||
5953 ' FROM EGO_BULKLOAD_INTF EBI ' ||
5954 ' WHERE FND_NUMBER.CANONICAL_TO_NUMBER(EBI.INSTANCE_PK1_VALUE) = MSIB.INVENTORY_ITEM_ID ' ||
5955 ' AND FND_NUMBER.CANONICAL_TO_NUMBER(EBI.INSTANCE_PK2_VALUE) = MSIB.ORGANIZATION_ID ' ||
5956 ' AND EBI.PROCESS_STATUS = 7 ' || -- Successful Rows Only
5957 ' AND EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID_2 ' ||
5958 ' ) ';
5959
5960 Write_Debug(l_dyn_sql);
5961 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
5962 Write_Debug('MSIB: Updated the Net Weights.');
5963
5964 -------------------------------------------------------------
5965 -- Commit at the end.
5966 -------------------------------------------------------------
5967 IF (p_commit = FND_API.G_TRUE) THEN
5968 COMMIT;
5969 END IF;
5970
5971 ------------------------------------------------------------
5972 -- Close the Debug session.
5973 ------------------------------------------------------------
5974 IF (l_is_debug) THEN
5975 Close_Debug_Session;
5976 END IF;
5977
5978 x_retcode := G_STATUS_SUCCESS;
5979
5980 EXCEPTION
5981 WHEN OTHERS THEN
5982 x_retcode := G_STATUS_ERROR;
5983 x_errbuff := SUBSTRB(SQLERRM, 1,240);
5984 Write_Debug('process_netweights : EXCEPTION HAPPENED => '||x_errbuff);
5985 -- RAISE; --Donot raise, just return back the values.
5986 ------------------------------------------------------------
5987 -- Close the Debug session.
5988 ------------------------------------------------------------
5989 IF (l_is_debug) THEN
5990 Close_Debug_Session;
5991 END IF;
5992
5993 END process_netweights;
5994
5995
5996 ----------------------------------------------------------
5997 -- Process Item and Item Revision Interface Lines
5998 --
5999 -- Main API called by the Concurrent Program.
6000 ----------------------------------------------------------
6001 PROCEDURE process_item_interface_lines
6002 (
6003 p_resultfmt_usage_id IN NUMBER,
6004 p_user_id IN NUMBER,
6005 p_conc_request_id IN NUMBER,
6006 p_language_code IN VARCHAR2,
6007 p_caller_identifier IN VARCHAR2 DEFAULT EGO_ITEM_BULKLOAD_PKG.G_ITEM,
6008 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE ,
6009 x_errbuff OUT NOCOPY VARCHAR2,
6010 x_retcode OUT NOCOPY VARCHAR2,
6011 p_start_upload IN VARCHAR2 DEFAULT FND_API.G_TRUE ,
6012 p_data_set_id IN NUMBER DEFAULT NULL
6013 ) IS
6014
6015 -- Start OF comments
6016 -- API name : Process Item Interface Lines
6017 -- TYPE : Public (called by Concurrent Program Wrapper API)
6018 -- Pre-reqs : None
6019 -- FUNCTION : Process and Load Item interfance lines.
6020 -- Loads Item Attr Values + Item User-Defined Attr Values
6021 -- Errors are populated in MTL_INTERFACE_ERRORS
6022 --
6023
6024 CURSOR c_resultfmt_info (c_resultfmt_usage_id IN NUMBER) IS
6025 SELECT Nvl(fmt.data_level, G_ITEM_DATA_LEVEL)
6026 ---------------------------------------------------------------------------------
6027 --Fix for Bug# 3681711. (JCGEORGE)
6028 -- CLASSIFICATION_CODE in EGO_RESULTS_FMT_USAGES, now stores the **current**
6029 -- Item Catalog Group ID for the selected Import Format.
6030 ---------------------------------------------------------------------------------
6031 --, Decode(fmt.classification1, -1, NULL, fmt.classification1)
6032 , Decode(fmt_usg.classification_code, -1, NULL, fmt_usg.classification_code)
6033 FROM ego_results_fmt_usages fmt_usg, ego_results_format_v fmt
6034 WHERE fmt_usg.resultfmt_usage_id = c_resultfmt_usage_id
6035 AND fmt.customization_application_id = fmt_usg.customization_application_id
6036 AND fmt.customization_code = fmt_usg.customization_code
6037 AND fmt.region_application_id = fmt_usg.region_application_id
6038 AND fmt.region_code = fmt_usg.region_code;
6039
6040 CURSOR c_revision_code_exists (c_resultfmt_usage_id IN NUMBER) IS
6041 SELECT 'x'
6042 FROM ego_results_fmt_usages
6043 WHERE resultfmt_usage_id = c_resultfmt_usage_id
6044 AND attribute_code = G_REV_CODE_ATTR_CODE;
6045
6046 CURSOR c_mtl_intf_err_row_exists IS
6047 SELECT 'x'
6048 FROM mtl_interface_errors
6049 WHERE request_id = FND_GLOBAL.conc_request_id;
6050
6051
6052 --Long Dynamic SQL String
6053 l_dyn_sql VARCHAR2(10000);
6054 l_msii_set_process_id NUMBER;
6055 l_usrattr_data_set_id NUMBER;
6056
6057 l_item_ioi_commit NUMBER;
6058
6059 l_return_code VARCHAR2(10);
6060 l_err_text VARCHAR2(2000);
6061 l_temp_txt VARCHAR2(2000);
6062 l_data_level VARCHAR2(50);
6063 l_catalog_group_id VARCHAR2(50);
6064 l_rev_base_attrs_count NUMBER;
6065 l_revision_code_exists VARCHAR2(5);
6066 ----------------------------------------------------------------
6067 -- Introduced in 11.5.10, to set appropriate Debug Level to
6068 -- call the User-Defined Attrs API.
6069 ----------------------------------------------------------------
6073 l_retcode VARCHAR2(10);
6070 l_debug_level NUMBER;
6071
6072 --API return parameters
6074 l_errbuff VARCHAR2(2000);
6075
6076 --Concurrent Request Status Boolean flag
6077 l_conc_status BOOLEAN;
6078
6079 BEGIN
6080
6081 IF (NVL(fnd_profile.value('CONC_REQUEST_ID'), 0) <> 0) THEN
6082 g_concReq_valid_flag := TRUE;
6083 END IF;
6084
6085 -----------------------------------------------------------------------
6086 --IF (g_concReq_valid_flag ) THEN
6087 -- FND_FILE.put_line(FND_FILE.LOG, ' ******** New Log ******** ');
6088 --END IF;
6089 -----------------------------------------------------------------------
6090
6091 -----------------------------------------------------
6092 -- Open Error Handler Debug Session.
6093 -----------------------------------------------------
6094 Open_Debug_Session;
6095
6096 Developer_Debug('Completely Reformatted EGO_ITEM_BULKLOAD_PKG with Error Handler Changes');
6097
6098 Developer_Debug('After Open_Debug_Session');
6099 SetGobals();
6100 G_LANGUAGE_CODE := p_language_code;
6101
6102 -----------------------------------------------------------------------
6103 -- Providing the Errors Link in the Concurrent Log file.
6104 -----------------------------------------------------------------------
6105 FND_MESSAGE.SET_NAME('EGO','EGO_ITEM_BULK_ERRS_LINKTXT1');
6106 FND_FILE.put_line(FND_FILE.LOG, FND_MESSAGE.GET);
6107
6108 FND_MESSAGE.SET_NAME('EGO','EGO_ITEMBULK_HOSTANDPORT');
6109 l_temp_txt := FND_MESSAGE.GET;
6110
6111 FND_MESSAGE.SET_NAME('EGO','EGO_ITEM_BULK_ERRS_LINK');
6112 FND_MESSAGE.SET_TOKEN('HOST_AND_PORT', l_temp_txt);
6113 FND_MESSAGE.SET_TOKEN('CONC_REQ_ID', G_REQUEST_ID);
6114 FND_FILE.put_line(FND_FILE.LOG, FND_MESSAGE.GET);
6115
6116 Developer_Debug('G_USER_ID : '||To_char(G_USER_ID));
6117 Developer_Debug('G_PROG_ID : '||To_char(G_PROG_ID));
6118 Developer_Debug('G_REQUEST_ID : '||To_char(G_REQUEST_ID));
6119 Developer_Debug('P_RESULT_FMT_USAGE_ID : '||To_char(p_resultfmt_usage_id));
6120
6121 -----------------------------------------------------------------------
6122 -- This is the Result Format Usage ID for the Current Upload. --
6123 -----------------------------------------------------------------------
6124 G_RESULTFMT_USAGE_ID := p_resultfmt_usage_id;
6125
6126 -----------------------------------------------------------------------
6127 -- Delete all the earlier loads from the same spreadsheet.
6128 -- And also setup the Error Log file in the EBI, to be picked up by
6129 -- Java portion of the Conc Program later.
6130 -----------------------------------------------------------------------
6131 setup_buffer_intf_table(p_resultfmt_usage_id);
6132
6133 -----------------------------------------------------------------------
6134 -- If the process id is passed, we will be using this throughout the program
6135 -- So setting this to the global variable here itself.
6136 -----------------------------------------------------------------------
6137 IF (p_data_set_id IS NOT NULL) THEN
6138 G_MSII_SET_PROCESS_ID := p_data_set_id;
6139 END IF;
6140
6141 -----------------------------------------------------------------------
6142 -- If the process id is passed, we need to store the information is a
6143 -- PDH batch or not
6144 -----------------------------------------------------------------------
6145
6146 IF (p_data_set_id IS NOT NULL) THEN
6147 setup_batch_info();
6148 END IF;
6149
6150 -------------------------------------------------------------------------------
6151 -- --
6152 --If the caller is G_ITEM, then the import format can have 2 levels : --
6153 -- 1. Item 2. Item Revision. --
6154 -- Hence need to call appropriate populate interface table procedure. --
6155 -- --
6156 -------------------------------------------------------------------------------
6157 IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM) THEN
6158
6159 OPEN c_resultfmt_info(p_resultfmt_usage_id);
6160 FETCH c_resultfmt_info INTO l_data_level, l_catalog_group_id;
6161 Developer_Debug('Result Format Data Level =>'||l_data_level);
6162
6163 -------------------------------------------------------------------
6164 --This Global Catalog Group variable is useful during imports. --
6165 -------------------------------------------------------------------
6166 IF (l_catalog_group_id IS NOT NULL) THEN
6167 G_CATALOG_GROUP_ID := l_catalog_group_id;
6168 Developer_Debug('G_CATALOG_GROUP_ID : '||G_CATALOG_GROUP_ID);
6169 END IF;
6170 IF c_resultfmt_info%FOUND THEN
6171 --IF (l_data_level = G_ITEM_DATA_LEVEL) THEN
6172 --------------------------------------------------------------------
6173 -- Since the Data Level is ITEM, need to setup the Item Interface --
6174 -- table. --
6175 --------------------------------------------------------------------
6176 Developer_Debug(' Calling Internal Setup_Item_interface ');
6177 Setup_Item_interface(
6178 p_resultfmt_usage_id => p_resultfmt_usage_id
6179 ,p_set_process_id => p_data_set_id
6180 ,x_set_process_id => l_msii_set_process_id
6184 );
6181 ,p_caller_identifier => p_caller_identifier
6182 ,x_errbuff => l_errbuff
6183 ,x_retcode => l_retcode
6185 Developer_Debug(' Returning Internal Setup_Item_interface '|| l_retcode);
6186
6187 FND_FILE.put_line(FND_FILE.LOG, '*Importing Items*. SET_PROCESS_ID : '||l_msii_set_process_id);
6188
6189 -------------------------------------------------------------------
6190 -- New procedure introduced in 11.5.10 to load the operational --
6191 -- attributes using User-Def attrs framework. (PPEDDAMA) --
6192 -------------------------------------------------------------------
6193 load_item_oper_attr_values(p_resultfmt_usage_id);
6194
6195 Developer_Debug('process_item_interface_lines: Done loading the Item operational attributes');
6196
6197 delete_records_from_MSII(p_data_set_id);
6198
6199 Write_Debug('Deleting unwanted records from MSII');
6200
6201 -------------------------------------------------------------------
6202 -- Fix for Bug# 3403455. (PPEDDAMA) --
6203 -- Setup Item Rev Interface only if Revision Base attrs exist. --
6204 -------------------------------------------------------------------
6205
6206 SELECT count(*)
6207 INTO l_rev_base_attrs_count
6208 FROM ego_results_fmt_usages
6209 WHERE resultfmt_usage_id = p_resultfmt_usage_id
6210 AND attribute_code NOT LIKE '%$$%'
6211 ---------------------------------------------------------------------------
6212 -- Added NOT LIKE 'GTIN_%' to filter out Dummy Attrs for Attr Group: "GTIN"
6213 ---------------------------------------------------------------------------
6214 AND attribute_code NOT LIKE 'GTIN_%'
6215 AND attribute_code IN --Segregating Item Revision Base Attrs using this clause
6216 (
6217 select LOOKUP_CODE CODE
6218 from FND_LOOKUP_VALUES
6219 where LOOKUP_TYPE = 'EGO_ITEM_REV_HDR_ATTR_GRP'
6220 AND LANGUAGE = USERENV('LANG')
6221 AND ENABLED_FLAG = 'Y'
6222 );
6223
6224 Developer_Debug('process_item_interface_lines.l_rev_base_attrs_count : '||l_rev_base_attrs_count);
6225 --------------------------------------------------------------------
6226 -- Changed from >0 to >1 because, only if other attributes apart --
6227 -- from REVISION exist, then setup Item Revision interface. --
6228 --------------------------------------------------------------------
6229
6230 IF (l_rev_base_attrs_count > 1) THEN
6231
6232 OPEN c_revision_code_exists(p_resultfmt_usage_id);
6233 FETCH c_revision_code_exists INTO l_revision_code_exists;
6234 IF c_revision_code_exists%FOUND THEN
6235 Developer_Debug('process_item_interface_lines.l_revision_code_exists : '||l_revision_code_exists ||'. Calling Setup_ItemRev_interface');
6236
6237 --------------------------------------------------------------------
6238 -- Now that Revisions show up as a part of Item Search Results, --
6239 -- calling Setup Revisions Interface as a part of Item Bulkload --
6240 --------------------------------------------------------------------
6241 Setup_ItemRev_interface(
6242 p_resultfmt_usage_id => p_resultfmt_usage_id
6243 ,p_caller_identifier => p_caller_identifier
6244 ,p_data_level => G_ITEM_DATA_LEVEL
6245 ,p_set_process_id => p_data_set_id
6246 ,x_set_process_id => l_msii_set_process_id
6247 ,x_errbuff => l_errbuff
6248 ,x_retcode => l_retcode
6249 );
6250
6251 END IF; --IF c_revision_code_exists%FOUND THEN
6252 -- Bug : 4099546
6253 CLOSE c_revision_code_exists;
6254 END IF; --IF (l_rev_base_attrs_count > 0) THEN
6255 -------------------------------------------------------------------
6256 -- End: Fix for Bug# 3403455. (PPEDDAMA) --
6257 -- Setup Item Rev Interface only if Revision Base attrs exist. --
6258 -------------------------------------------------------------------
6259 EGO_ITEM_BULKLOAD_PKG.load_intersections_interface
6260 (
6261 p_resultfmt_usage_id =>p_resultfmt_usage_id,
6262 p_set_process_id =>p_data_set_id,
6263 x_set_process_id =>l_msii_set_process_id,
6264 x_errbuff =>x_errbuff,
6265 x_retcode =>x_retcode
6266 );
6267 write_debug('Done with EGO_ITEM_BULKLOAD_PKG.load_intersections_interface ---x_retcode-'||x_retcode);
6268 --ELSE --G_ITEM_REV_DATA_LEVEL
6269 /*
6270 ---------------------------------------------------------------------------------
6271 -- Now that Revisions show up as a part of Item Search Results,
6272 -- adding new parameter p_data_level, to distinguish that this Setup Revisions
6273 -- Interface is called from 'Import Revisions' (through Revision Import Format)
6274 ---------------------------------------------------------------------------------
6275 Setup_ItemRev_interface(
6276 p_resultfmt_usage_id => p_resultfmt_usage_id
6277 ,p_caller_identifier => p_caller_identifier
6281 ,x_errbuff => l_errbuff
6278 ,p_data_level => G_ITEM_REV_DATA_LEVEL
6279 ,p_set_process_id => p_data_set_id
6280 ,x_set_process_id => l_msii_set_process_id
6282 ,x_retcode => l_retcode
6283 );
6284 FND_FILE.put_line(FND_FILE.LOG, '*Importing Item Revisions*. SET_PROCESS_ID : '||l_msii_set_process_id);
6285
6286 END IF; --end: IF (l_data_level = G_ITEM_DATA_LEVEL) THEN
6287 */
6288 END IF; --end: IF c_resultfmt_info%FOUND THEN
6289
6290 CLOSE c_resultfmt_info;
6291
6292 ELSIF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_BOM) THEN
6293
6294 --------------------------------------------------------------
6295 -- BOM called the Bulkload code, hence setup Item and Item
6296 -- Revision Interface tables appropriately.
6297 --------------------------------------------------------------
6298
6299 Developer_Debug('CALLER IDENTIFIER : '|| p_caller_identifier);
6300
6301 Setup_item_interface(
6302 p_resultfmt_usage_id => p_resultfmt_usage_id
6303 ,p_set_process_id => p_data_set_id
6304 ,x_set_process_id => l_msii_set_process_id
6305 ,p_caller_identifier => p_caller_identifier
6306 ,x_errbuff => l_errbuff
6307 ,x_retcode => l_retcode
6308 );
6309
6310 -------------------------------------------------------------------
6311 -- New procedure introduced in 11.5.10 to load the operational --
6312 -- attributes using User-Def attrs framework. (HGELLI) --
6313 -------------------------------------------------------------------
6314 load_item_oper_attr_values(p_resultfmt_usage_id);
6315
6316 Developer_Debug('process_item_interface_lines: Done loading the Item operational attributes');
6317
6318 --------------------------------------------------------------
6319 -- Check to see if Revision Code exists, before calling to
6320 -- to set up the Revisions Interface table.
6321 --------------------------------------------------------------
6322 OPEN c_revision_code_exists(p_resultfmt_usage_id);
6323 FETCH c_revision_code_exists INTO l_revision_code_exists;
6324 IF c_revision_code_exists%FOUND THEN
6325 Developer_Debug('process_item_interface_lines.l_revision_code_exists : '||l_revision_code_exists ||'. Calling Setup_ItemRev_interface');
6326
6327 --Now that Revisions show up as a part of Item Search Results,
6328 --calling Setup Revisions Interface as a part of Item Bulkload
6329 Setup_ItemRev_interface(
6330 p_resultfmt_usage_id => p_resultfmt_usage_id
6331 ,p_caller_identifier => p_caller_identifier
6332 ,p_data_level => G_ITEM_DATA_LEVEL
6333 ,p_set_process_id => p_data_set_id
6334 ,x_set_process_id => l_msii_set_process_id
6335 ,x_errbuff => l_errbuff
6336 ,x_retcode => l_retcode
6337 );
6338
6339 END IF; --IF c_revision_code_exists%FOUND THEN
6340 -- Bug : 4099546
6341 CLOSE c_revision_code_exists;
6342 FND_FILE.put_line(FND_FILE.LOG, '*Importing Items*. SET_PROCESS_ID : '||l_msii_set_process_id);
6343
6344 ELSE
6345 --------------------------------------------------------------
6346 -- This ELSE condition should never be reached.
6347 --------------------------------------------------------------
6348 Developer_Debug('INVALID CALLER IDENTIFIER : '|| p_caller_identifier);
6349
6350 END IF;--IF (p_caller_identifier = EGO_ITEM_BULKLOAD_PKG.G_ITEM)
6351
6352 --R12
6353 ----------------------------------------------------------------
6354 -- Call for User Attributes Bulk Processing, to load the
6355 -- Interface table: EGO_ITM_USR_ATTR_INTRFC
6356 ----------------------------------------------------------------
6357 Developer_Debug('Before calling load_itm_or_rev_usrattr_intf ');
6358 load_itm_or_rev_usrattr_intf
6359 (
6360 p_resultfmt_usage_id => p_resultfmt_usage_id
6361 ,p_data_set_id => l_msii_set_process_id
6362 ,x_errbuff => l_errbuff
6363 ,x_retcode => l_retcode
6364 );
6365
6366 Developer_Debug('UsrAttr_Populate_Process: done. l_retcode = ' || l_retcode);
6367 Developer_Debug('UsrAttr_Populate_Process: l_errbuff = ' || l_errbuff);
6368
6369 /* Bug 7578350. Moved this DELETE statement from load_item_revs_interface() function,
6370 by addubg NOT EXITS condition in WHERE caluse, so that we delete the rows from MTL_ITEM_REVISIONS_INTERFACE
6371 only if there are no Revision Level Attributes provided. */
6372
6373 DELETE MTL_ITEM_REVISIONS_INTERFACE MIRI
6374 WHERE revision IS NULL
6375 AND revision_id IS NULL
6376 AND implementation_date IS NULL
6377 AND effectivity_date IS NULL
6378 AND description IS NULL
6379 AND revision_label IS NULL
6380 AND revision_reason IS NULL
6381 AND current_phase_id IS NULL
6382 AND EXISTS (SELECT 'X'
6383 FROM EGO_BULKLOAD_INTF EBI
6384 WHERE EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id
6385 AND EBI.TRANSACTION_ID = MIRI.TRANSACTION_ID
6386 AND EBI.PROCESS_STATUS = 1
6387 )
6388 AND NOT EXISTS (SELECT 'X'
6392 AND EIUAT.DATA_LEVEL_ID=43106);
6389 FROM EGO_ITM_USR_ATTR_INTRFC EIUAT
6390 WHERE EIUAT.TRANSACTION_ID = MIRI.TRANSACTION_ID
6391 AND EIUAT.PROCESS_STATUS = 1
6393
6394 -------------------------------------------------------------
6395 -- Log Errors only to MTL_INTERFACE_ERRORS table.
6396 -------------------------------------------------------------
6397 Error_Handler.Log_Error(
6398 p_write_err_to_inttable => 'Y',
6399 p_write_err_to_debugfile => 'Y'
6400 );
6401 ------------------------------------------------------------------------
6402 -- In case the Error Reporting Page has problems, following
6403 -- SQL helps debugging.
6404 -- NOTE: This is only for *Printing* purposes, hence adding NEWLINE
6405 -- character at the end.
6406 ------------------------------------------------------------------------
6407 l_dyn_sql := 'SELECT MIERR.REQUEST_ID REQUEST_ID, '||G_NEWLINE;
6408 l_dyn_sql := l_dyn_sql || 'EBI.C_INTF_ATTR240 ITEM_NUMBER, '||G_NEWLINE;
6409 l_dyn_sql := l_dyn_sql || 'EBI.C_INTF_ATTR241 ORGANIZATION_CODE, '||G_NEWLINE;
6410 l_dyn_sql := l_dyn_sql || 'EBI.C_INTF_ATTR242 REVISION_CODE, '||G_NEWLINE;
6411 l_dyn_sql := l_dyn_sql || 'MIERR.ERROR_MESSAGE '||G_NEWLINE;
6412 l_dyn_sql := l_dyn_sql || 'FROM MTL_INTERFACE_ERRORS MIERR, '||G_NEWLINE;
6413 l_dyn_sql := l_dyn_sql || 'EGO_BULKLOAD_INTF EBI '||G_NEWLINE;
6414 l_dyn_sql := l_dyn_sql || 'WHERE MIERR.TRANSACTION_ID = EBI.TRANSACTION_ID '||G_NEWLINE;
6415 l_dyn_sql := l_dyn_sql || 'AND MIERR.request_id = '||G_REQUEST_ID||G_NEWLINE;
6416 Developer_Debug('In Case Error Reporting page has problems, Execute the following SQL to fetch the Concurrent Program CUMULATIVE Errors: ');
6417 Developer_Debug(l_dyn_sql);
6418
6419 -------------------------------------------------------------
6420 -- Commit at the end.
6421 -------------------------------------------------------------
6422 IF (p_commit = FND_API.G_TRUE) THEN
6423 COMMIT;
6424 Developer_Debug('COMMITing at the end.');
6425 END IF;
6426
6427 ------------------------------------------------------------
6428 -- Check to See if Errors exist in MTL_INTERFACE_ERRORS.
6429 -- If Exists, then set the Status as Completed w/ Warnings.
6430 ------------------------------------------------------------
6431 OPEN c_mtl_intf_err_row_exists;
6432 FETCH c_mtl_intf_err_row_exists INTO l_temp_txt;
6433 IF c_mtl_intf_err_row_exists%FOUND THEN
6434 Developer_Debug('Errors exist in MTL_INTERFACE_ERRORS.');
6435 l_conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('WARNING', --Status
6436 'Completed with Warnings' --Message
6437 );
6438 x_retcode := Error_Handler.G_STATUS_WARNING;
6439 ELSE
6440 Developer_Debug('*NO* Errors exist in MTL_INTERFACE_ERRORS.');
6441 x_retcode := G_STATUS_SUCCESS;
6442 END IF;
6443 CLOSE c_mtl_intf_err_row_exists;
6444
6445 -----------------------------------------------------------
6446 -- Add log messages for all successfully created items
6447 -----------------------------------------------------------
6448 -- 5653266 commenting out the call to Log_Created_items
6449 -- IF (G_REQUEST_ID <> -1 ) THEN
6450 -- Log_created_Items(G_REQUEST_ID);
6451 -- END IF;
6452
6453 -----------------------------------------------------
6454 -- Close Error Handler Debug Session.
6455 -----------------------------------------------------
6456
6457 Close_Debug_Session;
6458
6459 -----------------------------------------------------------------
6460 -- Main EXCEPTION Block, that handles all underlying Procedures'
6461 -- Exceptions. This also sets the PROCESS_STATUS value of the
6462 -- EBI Rows, to indicate Error.
6463 -----------------------------------------------------------------
6464 EXCEPTION
6465
6466 WHEN OTHERS THEN
6467 Developer_Debug('Exception encountered processing one of the procedures in Process_Item_Interface_lines.');
6468 Developer_Debug('error code : '|| to_char(SQLCODE));
6469 Developer_Debug('error text : '|| SQLERRM);
6470 x_errbuff := 'Error : '||to_char(SQLCODE)||'---'||SQLERRM;
6471 x_retcode := Error_Handler.G_STATUS_ERROR;
6472 Developer_Debug('Returning x_retcode : '|| x_retcode);
6473 l_conc_status := FND_CONCURRENT.SET_COMPLETION_STATUS('ERROR', --Status
6474 to_char(SQLCODE) --Message
6475 );
6476 Developer_Debug('Setting all the *Unprocessed* rows (PROCESS_STATUS = 1) in EGO_BULKLOAD_INTF to PROCESS_STATUS = 3.');
6477
6478 -----------------------------------------------------------------------------------------------
6479 -- Update all the lines in EGO_BULKLOAD_INTF as ERROR.
6480 -- This will ensure that the next submission of the Same excel doesnt throw
6481 -- IOI error:
6482 -- Item <Item#> already exists in the organization V1. Please use a different item name/number.
6483 -----------------------------------------------------------------------------------------------
6484 UPDATE EGO_BULKLOAD_INTF EBI
6485 SET EBI.PROCESS_STATUS = G_INTF_STATUS_ERROR
6486 WHERE EBI.PROCESS_STATUS = G_INTF_STATUS_TOBE_PROCESS
6487 AND EBI.RESULTFMT_USAGE_ID = p_resultfmt_usage_id;
6488
6489 COMMIT;
6493 -- Close Error Handler Debug Session.
6490 Developer_Debug('COMMITing the error statuses for EBI Rows.');
6491
6492 -----------------------------------------------------
6494 -----------------------------------------------------
6495 Close_Debug_Session;
6496
6497 --Exception block ends.
6498 ------------------------------------------------------------------
6499
6500 END Process_item_interface_lines;
6501
6502 /*
6503 ** Added by Ssingal - This procedure gets the Trade ItemDescriptor for a given
6504 ** Inventory_item_id and organization Id.
6505 ** Bug Fix 4001661
6506 */
6507
6508
6509 PROCEDURE get_Trade_Item_Descriptor (
6510 p_inventory_item_id IN VARCHAR2,
6511 p_organization_id IN VARCHAR2,
6512 x_tradeItemDescriptor OUT NOCOPY VARCHAR2
6513 ) IS
6514 l_tradeItemDescriptor VARCHAR2(100);
6515 BEGIN
6516
6517 SELECT TRADE_ITEM_DESCRIPTOR INTO x_tradeItemDescriptor
6518 FROM MTL_SYSTEM_ITEMS_B
6519 WHERE INVENTORY_ITEM_ID = to_number(p_inventory_item_id)
6520 AND ORGANIZATION_ID = to_number(p_organization_id);
6521
6522
6523 EXCEPTION
6524 WHEN OTHERS THEN
6525 Write_Debug('EGO BULK LOAD Gtin Attributes get_Trade_Item_Descriptor :GTID is null for an Item EXCEPTION HAPPENED => '|| SUBSTR ( SQLERRM , 0 ,240 ));
6526 Write_Debug('EGO BULK LOAD Gtin Attributes get_Trade_Item_Descriptor GTID Is null for => '|| p_inventory_item_id || ' , org Id ' || p_organization_id);
6527 END get_Trade_Item_Descriptor;
6528
6529
6530 /*
6531 ** Added by Ssingal - For clearing the attribute values for an Item
6532 ** taking into consideration the Trade Item Descriptor
6533 ** Bug Fix 4001661
6534 */
6535
6536
6537 PROCEDURE Clear_Gtin_Attrs
6538 (
6539 p_resultfmt_usage_id IN NUMBER ,
6540 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE,
6541 x_errbuff OUT NOCOPY VARCHAR2 ,
6542 x_ret_code OUT NOCOPY VARCHAR2
6543 )
6544 IS
6545 CURSOR c_errLogFile ( c_resultfmt_usage_id IN NUMBER) IS
6546 SELECT C_INTF_ATTR239
6547 FROM EGO_BULKLOAD_INTF
6548 WHERE C_INTF_ATTR239 IS NOT NULL
6549 AND RESULTFMT_USAGE_ID = c_resultfmt_usage_id
6550 AND ROWNUM < 2;
6551
6552 CURSOR c_itemId_OrgId (c_resultfmt_usage_id IN NUMBER) IS
6553 SELECT INSTANCE_PK1_VALUE , INSTANCE_PK2_VALUE
6554 FROM EGO_BULKLOAD_INTF
6555 WHERE RESULTFMT_USAGE_ID = c_resultfmt_usage_id
6556 AND PROCESS_STATUS = 7;
6557
6558 CURSOR c_gtid (c_inventory_itemId IN NUMBER , c_organization_Id IN NUMBER) IS
6559 SELECT TRADE_ITEM_DESCRIPTOR
6560 FROM MTL_SYSTEM_ITEMS_B
6561 WHERE INVENTORY_ITEM_ID = c_inventory_itemId
6562 AND ORGANIZATION_ID = c_organization_Id ;
6563
6564 /* Editable at root
6565 Attribute Values to be cleared for Leaf
6566 these attributes are _B table attributes
6567 We need to to pass Single/Multi attribute group type */
6568 CURSOR c_leafAttrs_bTable ( c_attr_group_type IN VARCHAR2 , c_edit_in_hcR IN VARCHAR2 , c_data_type_codeA IN VARCHAR2) IS
6569 SELECT DATABASE_COLUMN ,
6570 EDIT_IN_HIERARCHY_CODE ,
6571 DATA_TYPE_CODE
6572 FROM EGO_ATTRS_V
6573 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6574 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcR ) -- ( 'L' , 'LP', 'A' , 'AP')
6575 AND DATA_TYPE_CODE not in ( c_data_type_codeA );
6576
6577 /* Editable at leaf
6578 Attribute Values to be cleared for Root
6579 these attributes are _B table attributes
6580 We need to to pass Single/Multi attribute group type */
6581 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
6582 SELECT DATABASE_COLUMN ,
6583 EDIT_IN_HIERARCHY_CODE ,
6584 DATA_TYPE_CODE
6585 FROM EGO_ATTRS_V
6586 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6587 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcL , c_edit_in_hcLP ) -- ( 'L' , 'LP', 'A' , 'AP')
6588 AND DATA_TYPE_CODE not in ( c_data_type_codeA ) ;
6589
6590 /* Editable at root
6591 Attribute Values to be cleared for Leaf
6592 these attributes are _TL table attributes
6593 We need to to pass Single/Multi attribute group type */
6594 CURSOR c_leafAttrs_tlTable ( c_attr_group_type IN VARCHAR2 , c_edit_in_hcR IN VARCHAR2 , c_data_type_codeA IN VARCHAR2) is
6595 SELECT DATABASE_COLUMN ,
6596 EDIT_IN_HIERARCHY_CODE ,
6597 DATA_TYPE_CODE
6598 FROM EGO_ATTRS_V
6599 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6600 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcR ) -- ( 'L' , 'LP', 'A' , 'AP')
6601 AND DATA_TYPE_CODE in ( c_data_type_codeA ) ;
6602
6603 /* Editable at leaf
6604 Attribute Values to be cleared for Root
6605 these attributes are _TL table attributes
6606 We need to to pass Single/Multi attribute group type */
6607 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
6608 SELECT DATABASE_COLUMN ,
6609 EDIT_IN_HIERARCHY_CODE ,
6610 DATA_TYPE_CODE
6611 FROM EGO_ATTRS_V
6612 WHERE ATTR_GROUP_TYPE = c_attr_group_type -- 'EGO_ITEM_GTIN_ATTRS'
6613 AND EDIT_IN_HIERARCHY_CODE IN ( c_edit_in_hcL , c_edit_in_hcLP ) -- ( 'L' , 'LP', 'A' , 'AP')
6614 AND DATA_TYPE_CODE in ( c_data_type_codeA ) ;
6615
6616 TYPE ATTR_METADATA_REC IS RECORD ( DATABASE_COLUMN VARCHAR2(30),
6617 EDIT_IN_HIERARCHY_CODE VARCHAR2(30),
6618 DATA_TYPE_CODE VARCHAR2(30)
6619 );
6620 /*TYPE ATTR_METADATA_TABLE IS TABLE OF ATTR_METADATA_REC INDEX BY BINARY_INTEGER;*/
6621
6622 l_is_Debug BOOLEAN := FALSE ;
6623 l_err_log_file VARCHAR2(1000);
6624 l_err_log_file_name VARCHAR2(1000);
6625 l_err_log_file_dir VARCHAR2(1000);
6626 l_dyn_sql VARCHAR2(20000);
6627 l_inventory_item_id NUMBER ;
6628 l_organization_id NUMBER ;
6629 l_hierarchyExists VARCHAR2(20);
6630 l_gtid VARCHAR2(100);
6631 l_return_status VARCHAR2(100);
6632 l_msg_count NUMBER ;
6633 l_msg_data fnd_new_messages.message_text%TYPE;
6634 l_retCode VARCHAR2(10);
6635 l_errbuff VARCHAR2(20000);
6636 l_err_code NUMBER;
6637 -- l_attr_table ATTR_METADATA_TABLE ;
6638 l_attr_rec ATTR_METADATA_REC ;
6639 l_used_in_structure VARCHAR2(100) ;
6640
6641 l_leafAttrs_bTable_dbCol VARCHAR2(5000);
6642 l_leafAttrs_MulBTable_dbCol VARCHAR2(5000);
6643 l_rootAttrs_bTable_dbCol VARCHAR2(5000);
6644 l_rootAttrs_MulBTable_dbCol VARCHAR2(5000);
6645 l_leafAttrs_tlTable_dbCol VARCHAR2(5000);
6646 l_leafAttrs_MulTlTable_dbCol VARCHAR2(5000);
6647 l_rootAttrs_TlTable_dbCol VARCHAR2(5000);
6648 l_rootAttrs_MulTlTable_dbCol VARCHAR2(5000);
6649
6650 l_leafAttrs_bTable_value VARCHAR2(5000);
6651 l_leafAttrs_MulBTable_value VARCHAR2(5000);
6652 l_rootAttrs_bTable_value VARCHAR2(5000);
6653 l_rootAttrs_MulBTable_value VARCHAR2(5000);
6654 l_leafAttrs_tlTable_value VARCHAR2(5000);
6655 l_leafAttrs_MulTlTable_value VARCHAR2(5000);
6656 l_rootAttrs_TlTable_value VARCHAR2(5000);
6657 l_rootAttrs_MulTlTable_value VARCHAR2(5000);
6658
6659
6660 --API return parameters
6661
6662 BEGIN
6663
6664 OPEN c_errLogFile ( p_resultfmt_usage_id );
6665 FETCH c_errLogFile INTO l_err_log_file;
6666 IF c_errLogFile%FOUND THEN
6667 l_is_Debug := TRUE ;
6668 END IF;
6669 -- Bug : 4099546
6670 CLOSE c_errLogFile;
6671 Write_Debug('-----------------------------------------------------------------');
6672 Write_Debug('Clear_Gtin_Attrs : ');
6673 Write_Debug('-----------------------------------------------------------------');
6674
6675 IF (l_is_Debug ) THEN
6676 l_err_log_file_dir := SUBSTR (l_err_log_file , 0 , INSTR (l_err_log_file , 'EGO_BULKLOAD_INTF' ) - 1 );
6677 l_err_log_file_name := SUBSTR (l_err_log_file , INSTR ( l_err_log_file , 'EGO_BULKLOAD_INTF' )-1 );
6678 -----------------------------------------------------------------------
6679 -- To open the Debug Session to write the Debug Log. --
6680 -- This sets Debug value so that Error_Handler.Get_Debug returns 'Y' --
6681 -----------------------------------------------------------------------
6685 ,x_return_status => l_retCode
6682 Error_Handler.Open_Debug_Session(
6683 p_debug_filename => l_err_log_file_name
6684 ,p_output_dir => l_err_log_file_dir
6686 ,x_error_mesg => l_errbuff
6687 );
6688
6689 END IF;
6690
6691 -- Fetch the metadata now for Uccnet attributes
6692 Write_Debug('Clear_Gtin_Attrs : Getting metadata');
6693
6694 OPEN c_leafAttrs_bTable ('EGO_ITEM_GTIN_ATTRS', 'R' , 'A') ;
6695 LOOP
6696 FETCH c_leafAttrs_bTable INTO l_attr_rec ;
6697 EXIT WHEN c_leafAttrs_bTable%NOTFOUND;
6698 l_leafAttrs_bTable_dbCol := l_leafAttrs_bTable_dbCol || ' , ' || l_attr_rec.DATABASE_COLUMN ;
6699 l_leafAttrs_bTable_value := l_leafAttrs_bTable_value || ' , NULL ' ;
6700 END LOOP;
6701 CLOSE c_leafAttrs_bTable;
6702 l_leafAttrs_bTable_dbCol := SUBSTR ( l_leafAttrs_bTable_dbCol , INSTR( l_leafAttrs_bTable_dbCol , ',')+1 ) ;
6703 l_leafAttrs_bTable_value := SUBSTR ( l_leafAttrs_bTable_value , INSTR( l_leafAttrs_bTable_value , ',')+1 ) ;
6704
6705 OPEN c_leafAttrs_bTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'R' , 'A') ;
6706 LOOP
6707 FETCH c_leafAttrs_bTable INTO l_attr_rec ;
6708 EXIT WHEN c_leafAttrs_bTable%NOTFOUND ;
6709 l_leafAttrs_MulBTable_dbCol := l_leafAttrs_MulBTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6710 l_leafAttrs_MulBTable_value := l_leafAttrs_MulBTable_value || ' , NULL ' ;
6711 END LOOP;
6712 CLOSE c_leafAttrs_bTable;
6713 l_leafAttrs_MulBTable_dbCol := SUBSTR ( l_leafAttrs_MulBTable_dbCol , INSTR( l_leafAttrs_MulBTable_dbCol , ',')+1 ) ;
6714 l_leafAttrs_MulBTable_value := SUBSTR ( l_leafAttrs_MulBTable_value , INSTR( l_leafAttrs_MulBTable_value , ',')+1 ) ;
6715
6716 OPEN c_rootAttrs_bTable ('EGO_ITEM_GTIN_ATTRS', 'L' ,'LP' , 'A') ;
6717 LOOP
6718 FETCH c_rootAttrs_bTable INTO l_attr_rec ;
6719 EXIT WHEN c_rootAttrs_bTable%NOTFOUND ;
6720 l_rootAttrs_bTable_dbCol := l_rootAttrs_bTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6721 l_rootAttrs_bTable_value := l_rootAttrs_bTable_value || ' , NULL ' ;
6722 END LOOP;
6723 CLOSE c_rootAttrs_bTable;
6724 l_rootAttrs_bTable_dbCol := SUBSTR ( l_rootAttrs_bTable_dbCol , INSTR( l_rootAttrs_bTable_dbCol , ',')+1 ) ;
6725 l_rootAttrs_bTable_value := SUBSTR ( l_rootAttrs_bTable_value , INSTR( l_rootAttrs_bTable_value , ',')+1 ) ;
6726
6727 OPEN c_rootAttrs_bTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'L' ,'LP' , 'A') ;
6728 LOOP
6729 FETCH c_rootAttrs_bTable INTO l_attr_rec ;
6730 EXIT WHEN c_rootAttrs_bTable%NOTFOUND ;
6731 l_rootAttrs_MulBTable_dbCol := l_rootAttrs_MulBTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6732 l_rootAttrs_MulBTable_value := l_rootAttrs_MulBTable_value || ' , NULL ' ;
6733 END LOOP;
6734 CLOSE c_rootAttrs_bTable;
6735 l_rootAttrs_MulBTable_dbCol := SUBSTR ( l_rootAttrs_MulBTable_dbCol , INSTR( l_rootAttrs_MulBTable_dbCol , ',')+1 ) ;
6736 l_rootAttrs_MulBTable_value := SUBSTR ( l_rootAttrs_MulBTable_value , INSTR( l_rootAttrs_MulBTable_value , ',')+1 ) ;
6737
6738 OPEN c_leafAttrs_tlTable ('EGO_ITEM_GTIN_ATTRS', 'R' , 'A') ;
6739 LOOP
6740 FETCH c_leafAttrs_tlTable INTO l_attr_rec ;
6741 EXIT WHEN c_leafAttrs_tlTable%NOTFOUND ;
6742 l_leafAttrs_tlTable_dbCol := l_leafAttrs_tlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6743 l_leafAttrs_tlTable_value := l_leafAttrs_tlTable_value || ' , NULL ' ;
6744 END LOOP;
6745 CLOSE c_leafAttrs_tlTable;
6746 l_leafAttrs_tlTable_dbCol := SUBSTR ( l_leafAttrs_tlTable_dbCol , INSTR( l_leafAttrs_tlTable_dbCol , ',')+1 ) ;
6747 l_leafAttrs_tlTable_value := SUBSTR ( l_leafAttrs_tlTable_value , INSTR( l_leafAttrs_tlTable_value , ',')+1 ) ;
6748
6749 OPEN c_leafAttrs_tlTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'R' , 'A') ;
6750 LOOP
6751 FETCH c_leafAttrs_tlTable INTO l_attr_rec ;
6752 EXIT WHEN c_leafAttrs_tlTable%NOTFOUND ;
6753 l_leafAttrs_MultlTable_dbCol := l_leafAttrs_MulTlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6754 l_leafAttrs_MultlTable_value := l_leafAttrs_MultlTable_value || ' , NULL ';
6755 END LOOP;
6756 CLOSE c_leafAttrs_tlTable;
6757 l_leafAttrs_MultlTable_dbCol := SUBSTR ( l_leafAttrs_MultlTable_dbCol , INSTR( l_leafAttrs_MultlTable_dbCol , ',')+1 ) ;
6758 l_leafAttrs_MultlTable_value := SUBSTR ( l_leafAttrs_MultlTable_value , INSTR( l_leafAttrs_MultlTable_value , ',')+1 ) ;
6759
6760 OPEN c_rootAttrs_tlTable ('EGO_ITEM_GTIN_ATTRS', 'L' ,'LP' , 'A') ;
6761 LOOP
6762 FETCH c_rootAttrs_tlTable INTO l_attr_rec ;
6763 EXIT WHEN c_rootAttrs_tlTable%NOTFOUND ;
6764 l_rootAttrs_TlTable_dbCol := l_rootAttrs_TlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6765 l_rootAttrs_TlTable_value := l_rootAttrs_TlTable_value || ' , NULL ' ;
6766 END LOOP;
6767 CLOSE c_rootAttrs_tlTable;
6768 l_rootAttrs_TlTable_dbCol := SUBSTR ( l_rootAttrs_TlTable_dbCol , INSTR( l_rootAttrs_TlTable_dbCol , ',')+1 ) ;
6769 l_rootAttrs_TlTable_value := SUBSTR ( l_rootAttrs_TlTable_value , INSTR( l_rootAttrs_TlTable_value , ',')+1 ) ;
6770
6771 OPEN c_rootAttrs_tlTable ('EGO_ITEM_GTIN_MULTI_ATTRS', 'L' ,'LP' , 'A') ;
6772 LOOP
6773 FETCH c_rootAttrs_tlTable INTO l_attr_rec ;
6774 EXIT WHEN c_rootAttrs_tlTable%NOTFOUND ;
6775 l_rootAttrs_MulTlTable_dbCol := l_rootAttrs_MulTlTable_dbCol || ' , '|| l_attr_rec.DATABASE_COLUMN ;
6776 l_rootAttrs_MulTlTable_value := l_rootAttrs_MulTlTable_value || ' , NULL ' ;
6777 END LOOP;
6778 CLOSE c_rootAttrs_tlTable;
6782 Write_Debug('Clear_Gtin_Attrs : Fetched the metadata');
6779 l_rootAttrs_MulTlTable_dbCol := SUBSTR ( l_rootAttrs_MulTlTable_dbCol , INSTR( l_rootAttrs_MulTlTable_dbCol , ',')+1 ) ;
6780 l_rootAttrs_MulTlTable_value := SUBSTR ( l_rootAttrs_MulTlTable_value , INSTR( l_rootAttrs_MulTlTable_value , ',')+1 ) ;
6781
6783
6784 OPEN c_itemId_OrgId (p_resultfmt_usage_id) ;
6785 LOOP
6786 FETCH c_itemId_OrgId into l_inventory_item_id , l_organization_id ;
6787 EXIT WHEN c_itemId_OrgId%NOTFOUND ;
6788 /*
6789 * GTID can be changed only if the Item is not having a
6790 * packaging hierarchy.So we will clear the attributes
6791 * only if the packaging hierarcy does not exist.
6792 */
6793
6794 EXECUTE IMMEDIATE ' BEGIN BOM_IMPLODER_PUB.IMPLODER_USEREXIT (
6795 SEQUENCE_ID => NULL ,
6796 ENG_MFG_FLAG => :1 ,
6797 ORG_ID => :2 ,
6798 IMPL_FLAG => :3 ,
6799 DISPLAY_OPTION => :4 ,
6800 LEVELS_TO_IMPLODE => :5 ,
6801 OBJ_NAME => :6 ,
6802 PK1_VALUE => :7 ,
6803 PK2_VALUE => :8 ,
6804 PK3_VALUE => NULL ,
6805 PK4_VALUE => NULL ,
6806 PK5_VALUE => NULL ,
6807 IMPL_DATE => :9,
6808 UNIT_NUMBER_FROM => :10 ,
6809 UNIT_NUMBER_TO => :11 ,
6810 ERR_MSG => :12 ,
6811 ERR_CODE => :13 ,
6812 ORGANIZATION_OPTION => :14 ,
6813 ORGANIZATION_HIERARCHY => NULL ,
6814 SERIAL_NUMBER_FROM => NULL ,
6815 SERIAL_NUMBER_TO => NULL ,
6816 STRUCT_TYPE => :15 ,
6817 PREFERRED_ONLY => :16 ,
6818 USED_IN_STRUCTURE => :17
6819 ); END ; '
6820 USING IN 2, IN l_organization_id, IN 2, IN 1, IN 60, IN 'EGO_ITEM',
6821 IN l_inventory_item_id, IN l_organization_id, IN to_char(SYSDATE,'YYYY/MM/DD HH24:MI:SS') ,
6822 IN 'N', IN 'Y', OUT l_errbuff, OUT l_err_code, IN 1,
6823 IN 'Packaging Hierarchy', IN 2, OUT l_used_in_structure ;
6824
6825
6826 IF (l_used_in_structure <> 'T') THEN
6827 OPEN c_gtid ( l_inventory_item_id , l_organization_id );
6828 FETCH c_gtid INTO l_gtid;
6829 -- Bug : 4099546
6830 CLOSE c_gtid;
6831 IF (l_gtid = 'BASE_UNIT_OR_EACH' )THEN
6832
6833 IF ( length(l_leafAttrs_bTable_dbCol) > 0 ) THEN
6834
6835 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_B SET ( '|| l_leafAttrs_bTable_dbCol ||
6836 ' ) = ( SELECT '|| l_leafAttrs_bTable_value ||
6837 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id '||
6838 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6839
6840 END IF;
6841
6842 IF ( length(l_leafAttrs_tlTable_dbCol) > 0 ) THEN
6843
6844 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_TL SET ( '|| l_leafAttrs_tlTable_dbCol ||
6845 ' ) = ( SELECT '|| l_leafAttrs_tlTable_value ||
6846 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
6847 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6848 END IF;
6849
6850 IF ( length(l_leafAttrs_MulBTable_dbCol) > 0 ) THEN
6851
6852 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_B SET ( ' || l_leafAttrs_MulBTable_dbCol||
6853 ' ) = ( SELECT ' || l_leafAttrs_MulBTable_value ||
6854 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
6855 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6856 END IF;
6857 IF ( length(l_leafAttrs_MultlTable_dbCol) > 0 ) THEN
6858 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_TL SET ( ' || l_leafAttrs_MultlTable_dbCol||
6859 ' ) = ( SELECT ' || l_leafAttrs_MultlTable_value ||
6860 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id' ||
6861 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6862 END IF;
6863
6864 EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES (p_inventory_item_id => l_inventory_item_id ,
6865 p_organization_id => l_organization_id ,
6869 x_msg_data => l_msg_data );
6866 p_update_reg => 'Y' ,
6867 x_return_status => l_return_status ,
6868 x_msg_count => l_msg_count,
6870 IF l_return_status <> 'S' THEN
6871 Write_Debug('GTIN : Clear_Gtin_Attrs. :: Exception from EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES ');
6872 Write_Debug('GTIN : Clear_Gtin_Attrs. ::message ' || l_msg_data );
6873 END IF;
6874
6875 ELSE
6876
6877 IF ( length(l_rootAttrs_bTable_dbCol) > 0 ) THEN
6878
6879 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_B SET ( '|| l_rootAttrs_bTable_dbCol ||
6880 ' ) = ( SELECT'|| l_rootAttrs_bTable_value ||
6881 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id '||
6882 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6883 END IF;
6884 IF ( length(l_rootAttrs_tlTable_dbCol) > 0 ) THEN
6885
6886 EXECUTE IMMEDIATE ' UPDATE EGO_ITEM_GTN_ATTRS_TL SET ( '|| l_rootAttrs_tlTable_dbCol ||
6887 ' ) = ( SELECT'|| l_rootAttrs_tlTable_value ||
6888 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
6889 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6890 END IF;
6891 IF ( length(l_rootAttrs_MulBTable_dbCol) > 0 ) THEN
6892
6893 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_B SET ( '|| l_rootAttrs_MulBTable_dbCol ||
6894 ' ) = ( SELECT '|| l_rootAttrs_MulBTable_value ||
6895 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
6896 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6897 END IF;
6898 IF ( length(l_rootAttrs_MultlTable_dbCol) > 0 ) THEN
6899
6900 EXECUTE IMMEDIATE ' UPDATE EGO_ITM_GTN_MUL_ATTRS_TL SET ( '||l_rootAttrs_MultlTable_dbCol ||
6901 ' ) = ( SELECT '|| l_rootAttrs_MultlTable_value ||
6902 ' FROM DUAL ) WHERE INVENTORY_ITEM_ID = :inventory_item_id ' ||
6903 ' AND ORGANIZATION_ID = :organization_id ' USING l_inventory_item_id , l_organization_id;
6904 END IF;
6905
6906 EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES (p_inventory_item_id => l_inventory_item_id ,
6907 p_organization_id => l_organization_id ,
6908 p_update_reg => 'N' ,
6909 x_return_status => l_return_status,
6910 x_msg_count => l_msg_count,
6911 x_msg_data => l_msg_data );
6912 IF l_return_status <> 'S' THEN
6913 Write_Debug('GTIN : Clear_Gtin_Attrs. :: Exception from EGO_GTIN_PVT.UPDATE_REG_PUB_UPDATE_DATES ');
6914 Write_Debug('GTIN : Clear_Gtin_Attrs. ::message ' || l_msg_data );
6915 END IF;
6916
6917 END IF; --GTID is Each / non-Each
6918
6919 END IF; -- If the Item is not having a Packaging Hierarchy
6920
6921 END LOOP;
6922 close c_itemId_OrgId;
6923
6924 Write_Debug('GTIN : Clear_Gtin_Attrs.');
6925
6926 -------------------------------------------------------------
6927 -- Commit at the end.
6928 -------------------------------------------------------------
6929 IF (p_commit = FND_API.G_TRUE) THEN
6930 COMMIT;
6931 END IF;
6932
6933 IF (l_is_debug) THEN
6934 Close_Debug_Session;
6935 END IF;
6936
6937 x_ret_code := G_STATUS_SUCCESS;
6938
6939 EXCEPTION
6940 WHEN OTHERS THEN
6941 x_ret_code := G_STATUS_ERROR;
6942 x_errbuff := SUBSTRB(SQLERRM, 1,240);
6943 Write_Debug('Clear_Gtin_Attrs : EXCEPTION HAPPENED => '||x_errbuff);
6944
6945 IF c_errLogFile%ISOPEN THEN
6946 close c_errLogFile;
6947 END IF;
6948
6949 IF c_itemId_OrgId%ISOPEN THEN
6950 close c_itemId_OrgId ;
6951 END IF;
6952
6953 IF c_gtid%ISOPEN THEN
6954 close c_gtid ;
6955 END IF;
6956
6957 IF c_leafAttrs_bTable%ISOPEN THEN
6958 close c_leafAttrs_bTable ;
6959 END IF;
6960
6961 IF c_rootAttrs_bTable%ISOPEN THEN
6962 close c_rootAttrs_bTable ;
6963 END IF;
6964
6965 IF c_leafAttrs_tlTable%ISOPEN THEN
6966 close c_leafAttrs_tlTable ;
6967 END IF;
6968
6969 IF c_rootAttrs_tlTable%ISOPEN THEN
6970 close c_rootAttrs_tlTable ;
6971 END IF;
6972
6973 IF (l_is_debug) THEN
6974 Close_Debug_Session;
6975 END IF;
6976
6977 END Clear_Gtin_Attrs ;
6978
6979 -- ============================================================================
6983 -- to populate the item numbers for all the sequence generated items.
6980 -- API Name : Populate_Seq_Gen_Item_Nums
6981 -- Description : This procedure will be called from IOI
6982 -- (after org and catalog category details are resolved)
6984 -- ============================================================================
6985 PROCEDURE Populate_Seq_Gen_Item_Nums
6986 (p_set_id IN NUMBER
6987 ,p_org_id IN NUMBER
6988 ,p_all_org IN NUMBER
6989 ,p_rec_status IN NUMBER
6990 ,x_return_status OUT NOCOPY VARCHAR2
6991 ,x_msg_count OUT NOCOPY NUMBER
6992 ,x_msg_data OUT NOCOPY VARCHAR2) IS
6993
6994 TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
6995
6996 l_cc_id_table num_tbl_type;
6997 l_trans_id_table num_tbl_type;
6998 l_org_id_table DBMS_SQL.VARCHAR2_TABLE;
6999 l_ss_id_table num_tbl_type;
7000 l_ss_ref_table EGO_VARCHAR_TBL_TYPE;
7001 l_item_num_table EGO_VARCHAR_TBL_TYPE;
7002 l_old_item_num_table EGO_VARCHAR_TBL_TYPE; --Added R12C
7003 l_sql VARCHAR2(10000);
7004 l_cc_rows_processed NUMBER;
7005 l_item_rows_processed NUMBER;
7006 l_xset_id NUMBER;
7007
7008 BEGIN
7009 Write_Debug (' started with params p_set_id: '||p_set_id||' p_org_id: '||p_org_id||' p_all_org: '||p_all_org);
7010 x_return_status := FND_API.G_RET_STS_SUCCESS;
7011 x_msg_count := 0;
7012 x_msg_data := NULL;
7013
7014 --Only Item Row has p_set_id, setting batch id for the rest
7015 l_xset_id := p_set_id-5000000000000;
7016
7017 --Removing Item Num NULL clause - R12C
7018 SELECT DISTINCT item_catalog_group_id
7019 BULK COLLECT INTO l_cc_id_table
7020 FROM MTL_SYSTEM_ITEMS_INTERFACE
7021 WHERE set_process_id = p_set_id
7022 AND (organization_id = p_org_id OR p_all_org = 1)
7023 AND process_flag = p_rec_status
7024 AND transaction_type = 'CREATE';
7025
7026 l_cc_rows_processed := SQL%ROWCOUNT;
7027 IF l_cc_rows_processed = 0 THEN
7028 RETURN;
7029 END IF;
7030
7031 FOR cc_row_index in 1..l_cc_rows_processed LOOP
7032 Write_Debug (' CC being processed '||cc_row_index);
7033
7034 --Removing Item Num NULL clause - R12C
7035 SELECT TO_CHAR(organization_id), item_number,
7036 transaction_id, source_system_id,
7037 source_system_reference
7038 BULK COLLECT INTO l_org_id_table, l_old_item_num_table,
7039 l_trans_id_table, l_ss_id_table,
7040 l_ss_ref_table
7041 FROM MTL_SYSTEM_ITEMS_INTERFACE
7042 WHERE set_process_id = p_set_id
7043 AND (organization_id = p_org_id OR p_all_org = 1)
7044 AND item_catalog_group_id = l_cc_id_table(cc_row_index)
7045 AND process_flag = p_rec_status
7046 AND transaction_type = 'CREATE';
7047
7048 l_item_rows_processed := SQL%ROWCOUNT;
7049 IF (l_item_rows_processed > 0) THEN
7050 EGO_ITEM_PVT.Get_Seq_Gen_Item_Nums
7051 (
7052 p_item_catalog_group_id => l_cc_id_table(cc_row_index)
7053 ,p_org_id_tbl => l_org_id_table
7054 ,x_item_num_tbl => l_item_num_table
7055 );
7056
7057 -- for item interface table
7058 FORALL item_num_row_index IN 1..l_item_rows_processed
7059 UPDATE mtl_system_items_interface
7060 SET item_number = l_item_num_table(item_num_row_index),
7061 SEGMENT1 = NULL,
7062 SEGMENT2 = NULL,
7063 SEGMENT3 = NULL,
7064 SEGMENT4 = NULL,
7065 SEGMENT5 = NULL,
7066 SEGMENT6 = NULL,
7067 SEGMENT7 = NULL,
7068 SEGMENT8 = NULL,
7069 SEGMENT9 = NULL,
7070 SEGMENT10 = NULL,
7071 SEGMENT11 = NULL,
7072 SEGMENT12 = NULL,
7073 SEGMENT13 = NULL,
7074 SEGMENT14 = NULL,
7075 SEGMENT15 = NULL,
7076 SEGMENT16 = NULL,
7077 SEGMENT17 = NULL,
7078 SEGMENT18 = NULL,
7079 SEGMENT19 = NULL,
7080 SEGMENT20 = NULL
7081 WHERE set_process_id IN (p_set_id, l_xset_id) /*bug 6158936 child records are in l_xset_id*/
7082 AND process_flag IN (p_rec_status, 60001) /*bug 6158936 child records are in process_flag + 60000*/
7083 AND source_system_id = l_ss_id_table(item_num_row_index)
7084 AND ( item_number = l_old_item_num_table(item_num_row_index) OR
7085 source_system_reference = l_ss_ref_table(item_num_row_index));
7086
7087 -- for item revisions interface table
7088 FORALL rev_row_index IN 1..l_item_rows_processed
7089 UPDATE mtl_item_revisions_interface
7090 SET item_number = l_item_num_table(rev_row_index)
7091 WHERE set_process_id = l_xset_id
7092 AND source_system_id = l_ss_id_table(rev_row_index)
7093 AND process_flag = p_rec_status
7094 AND ( item_number = l_old_item_num_table(rev_row_index) OR
7095 source_system_reference = l_ss_ref_table(rev_row_index));
7096
7097 -- for category assignments interface table
7101 WHERE set_process_id = l_xset_id
7098 FORALL item_cat_row_index IN 1..l_item_rows_processed
7099 UPDATE mtl_item_categories_interface
7100 SET item_number = l_item_num_table(item_cat_row_index)
7102 AND source_system_id = l_ss_id_table(item_cat_row_index)
7103 AND process_flag = p_rec_status
7104 AND ( item_number = l_old_item_num_table(item_cat_row_index) OR
7105 source_system_reference = l_ss_ref_table(item_cat_row_index));
7106
7107 -- for user attrs interface table
7108 FORALL usr_attr_row_index IN 1..l_item_rows_processed
7109 UPDATE ego_itm_usr_attr_intrfc
7110 SET item_number = l_item_num_table(usr_attr_row_index)
7111 WHERE data_set_id = l_xset_id
7112 AND source_system_id = l_ss_id_table(usr_attr_row_index)
7113 AND process_status = p_rec_status
7114 AND ( item_number = l_old_item_num_table(usr_attr_row_index) OR
7115 source_system_reference = l_ss_ref_table(usr_attr_row_index));
7116
7117 -- item people interface table
7118 FORALL ss_id_row_index IN 1..l_item_rows_processed
7119 UPDATE ego_item_people_intf
7120 SET item_number = l_item_num_table(ss_id_row_index)
7121 WHERE data_set_id = l_xset_id
7122 AND source_system_id = l_ss_id_table(ss_id_row_index)
7123 AND process_status = p_rec_status
7124 AND ( item_number = l_old_item_num_table(ss_id_row_index) OR
7125 source_system_reference = l_ss_ref_table(ss_id_row_index));
7126
7127 -- aml interface table
7128 FORALL ss_id_row_index IN 1..l_item_rows_processed
7129 UPDATE ego_aml_intf
7130 SET item_number = l_item_num_table(ss_id_row_index)
7131 WHERE data_set_id = l_xset_id
7132 AND source_system_id = l_ss_id_table(ss_id_row_index)
7133 AND process_flag = p_rec_status
7134 AND ( item_number = l_old_item_num_table(ss_id_row_index) OR
7135 source_system_reference = l_ss_ref_table(ss_id_row_index));
7136
7137 --BOM interface tables R12C
7138 FORALL bill_id_row_index IN 1..l_item_rows_processed
7139 UPDATE bom_bill_of_mtls_interface
7140 SET item_number = l_item_num_table(bill_id_row_index)
7141 WHERE process_flag = p_rec_status
7142 AND batch_id = l_xset_id
7143 AND ( item_number = l_old_item_num_table(bill_id_row_index) OR
7144 source_system_reference = l_ss_ref_table(bill_id_row_index));
7145
7146 FORALL bom_inv_id_row_index IN 1..l_item_rows_processed
7147 UPDATE BOM_INVENTORY_COMPS_INTERFACE
7148 SET component_item_number = l_item_num_table(bom_inv_id_row_index)
7149 WHERE process_flag = p_rec_status
7150 AND batch_id = l_xset_id
7151 AND ( component_item_number = l_old_item_num_table(bom_inv_id_row_index) OR
7152 comp_source_system_reference = l_ss_ref_table(bom_inv_id_row_index));
7153
7154 FORALL bom_par_id_row_index IN 1..l_item_rows_processed
7155 UPDATE BOM_INVENTORY_COMPS_INTERFACE
7156 SET assembly_item_number = l_item_num_table(bom_par_id_row_index)
7157 WHERE process_flag = p_rec_status
7158 AND batch_id = l_xset_id
7159 AND ( assembly_item_number = l_old_item_num_table(bom_par_id_row_index) OR
7160 parent_source_system_reference = l_ss_ref_table(bom_par_id_row_index));
7161
7162 FORALL bom_sub_id_row_index IN 1..l_item_rows_processed
7163 UPDATE BOM_SUB_COMPS_INTERFACE
7164 SET assembly_item_number = l_item_num_table(bom_sub_id_row_index)
7165 WHERE process_flag = p_rec_status
7166 AND batch_id = l_xset_id
7167 AND ( assembly_item_number = l_old_item_num_table(bom_sub_id_row_index) OR
7168 parent_source_system_reference = l_ss_ref_table(bom_sub_id_row_index));
7169
7170 FORALL bom_sub_id_row_index IN 1..l_item_rows_processed
7171 UPDATE BOM_SUB_COMPS_INTERFACE
7172 SET component_item_number = l_item_num_table(bom_sub_id_row_index)
7173 WHERE process_flag = p_rec_status
7174 AND batch_id = l_xset_id
7175 AND ( component_item_number = l_old_item_num_table(bom_sub_id_row_index) OR
7176 comp_source_system_reference = l_ss_ref_table(bom_sub_id_row_index));
7177
7178 FORALL bom_sub_id_row_index IN 1..l_item_rows_processed
7179 UPDATE BOM_SUB_COMPS_INTERFACE
7180 SET substitute_comp_number = l_item_num_table(bom_sub_id_row_index)
7181 WHERE process_flag = p_rec_status
7182 AND batch_id = l_xset_id
7183 AND ( substitute_comp_number = l_old_item_num_table(bom_sub_id_row_index) OR
7184 subcom_source_system_reference = l_ss_ref_table(bom_sub_id_row_index));
7185
7186 FORALL bom_ref_id_row_index IN 1..l_item_rows_processed
7187 UPDATE BOM_REF_DESGS_INTERFACE
7188 SET assembly_item_number = l_item_num_table(bom_ref_id_row_index)
7189 WHERE process_flag = p_rec_status
7190 AND batch_id = l_xset_id
7191 AND ( assembly_item_number = l_old_item_num_table(bom_ref_id_row_index) OR
7192 parent_source_system_reference = l_ss_ref_table(bom_ref_id_row_index));
7193
7194 FORALL bom_ref_id_row_index IN 1..l_item_rows_processed
7195 UPDATE BOM_REF_DESGS_INTERFACE
7196 SET component_item_number = l_item_num_table(bom_ref_id_row_index)
7197 WHERE process_flag = p_rec_status
7198 AND batch_id = l_xset_id
7202 FORALL bom_comp_id_row_index IN 1..l_item_rows_processed
7199 AND ( component_item_number = l_old_item_num_table(bom_ref_id_row_index) OR
7200 comp_source_system_reference = l_ss_ref_table(bom_ref_id_row_index));
7201
7203 UPDATE BOM_COMPONENT_OPS_INTERFACE
7204 SET assembly_item_number = l_item_num_table(bom_comp_id_row_index)
7205 WHERE process_flag = p_rec_status
7206 AND batch_id = l_xset_id
7207 AND ( assembly_item_number = l_old_item_num_table(bom_comp_id_row_index) OR
7208 parent_source_system_reference = l_ss_ref_table(bom_comp_id_row_index));
7209
7210 FORALL bom_comp_id_row_index IN 1..l_item_rows_processed
7211 UPDATE BOM_COMPONENT_OPS_INTERFACE
7212 SET component_item_number = l_item_num_table(bom_comp_id_row_index)
7213 WHERE process_flag = p_rec_status
7214 AND batch_id = l_xset_id
7215 AND ( component_item_number = l_old_item_num_table(bom_comp_id_row_index) OR
7216 comp_source_system_reference = l_ss_ref_table(bom_comp_id_row_index));
7217
7218 END IF; --end: IF (l_org_id_rows_cnt > 0) THEN
7219
7220 END LOOP; -- for cc_row_identifier in 1..l_rows_processed
7221
7222 EXCEPTION
7223 WHEN OTHERS THEN
7224 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7225 FND_MESSAGE.Set_Name('EGO', 'EGO_PLSQL_ERR');
7226 FND_MESSAGE.Set_Token('PKG_NAME', 'EGO_ITEM_BULKLOAD_PKG');
7227 FND_MESSAGE.Set_Token('API_NAME', 'Populate_Seq_Gen_Item_Nums');
7228 FND_MESSAGE.Set_Token('SQL_ERR_MSG', SQLERRM);
7229 FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE
7230 ,p_count => x_msg_count
7231 ,p_data => x_msg_data);
7232 END Populate_Seq_Gen_Item_Nums;
7233
7234
7235
7236 -- ============================================================================
7237 -- API Name : load_intersections_interface
7238 -- Description : This procedure will be called to load the intersection
7239 -- interface table ego_item_associations_intf with the required data
7240 -- ============================================================================
7241 PROCEDURE load_intersections_interface
7242 (
7243 p_resultfmt_usage_id IN NUMBER,
7244 p_set_process_id IN NUMBER,
7245 x_set_process_id OUT NOCOPY NUMBER,
7246 x_errbuff OUT NOCOPY VARCHAR2,
7247 x_retcode OUT NOCOPY VARCHAR2
7248 ) IS
7249
7250
7251 ------------------------------------------------------------------------------------------
7252 -- To get the Item intersection attr columns in the Result Format.
7253 ------------------------------------------------------------------------------------------
7254 CURSOR c_item_intersection_intf_cols (c_resultfmt_usage_id IN NUMBER) IS
7255 SELECT attribute_code, intf_column_name, data_level_id
7256 FROM ego_results_fmt_usages
7257 WHERE resultfmt_usage_id = c_resultfmt_usage_id
7258 /* AND DATA_LEVEL_ID in (SELECT DATA_LEVEL_ID
7259 FROM EGO_DATA_LEVEL_B
7260 WHERE DATA_LEVEL_NAME IN ('ITEM_SUP','ITEM_ORG','ITEM_SUP_SITE')
7261 AND APPLICATION_ID = 431
7262 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
7263 )*/;
7264
7265 ---------------------------------------------------------------------
7266 -- Type Declarations
7267 ---------------------------------------------------------------------
7268 TYPE VARCHAR_TBL_TYPE IS TABLE OF VARCHAR2(256)
7269 INDEX BY BINARY_INTEGER;
7270
7271 -------------------------
7272 -- local variables --
7273 -------------------------
7274 l_prod_col_name VARCHAR2(256);
7275 l_intf_col_name VARCHAR2(256);
7276
7277 ---------------------------------------------------------------------
7278 -- Assuming that the column name will not be more than 30 chars.
7279 ---------------------------------------------------------------------
7280 l_supplier_name_col VARCHAR2(30);
7281 l_org_code_col VARCHAR2(30);
7282 l_supplier_site_col VARCHAR2(30);
7283 l_supplier_site_name_col VARCHAR2(30);
7284 l_supplier_site_prim_flag_col VARCHAR2(30);
7285 l_supplier_site_status_col VARCHAR2(30);
7286 l_sup_site_store_status_col VARCHAR2(30);
7287 l_supplier_number_col VARCHAR2(30);
7288
7289 l_msii_set_process_id NUMBER;
7290 i NUMBER;
7291 l_data_level_id NUMBER;
7292 l_item_number_col VARCHAR2(30);
7293 l_supplier_prim_flag_col VARCHAR2(30);
7294 l_supplier_status_col VARCHAR2(30);
7295 l_data_level_id_1 VARCHAR2(30);
7296
7297 l_yes_meaning VARCHAR2(20);
7298 l_no_meaning VARCHAR2(20);
7299 l_active_meaning VARCHAR2(20);
7300 l_inactive_meaning VARCHAR2(20);
7301 l_has_sup_sit_org_col VARCHAR2(1);
7302
7303 --------------------------------------------
7304 -- Long Dynamic SQL String
7305 --------------------------------------------
7306 l_dyn_sql VARCHAR2(10000);
7307
7308 BEGIN
7309 Write_Debug('*Item Intersections Interface*');
7310
7314 IF p_set_process_id IS NULL THEN
7311 Write_Debug('Retrieving the Display and INTF cols');
7312 i := 0;
7313
7315 SELECT mtl_system_items_intf_sets_s.NEXTVAL
7316 INTO l_msii_set_process_id
7317 FROM dual;
7318 ELSE
7319 l_msii_set_process_id := p_set_process_id;
7320 END IF;
7321
7322 l_has_sup_sit_org_col := 'N';
7323 --------------------------------------------------------------------
7324 -- Saving the column names in local table for easy retrieval later.
7325 -- Also save important columns such as Item ID, Org ID etc.,
7326 --------------------------------------------------------------------
7327 FOR c_item_rev_attr_intf_rec IN c_item_intersection_intf_cols
7328 (
7329 p_resultfmt_usage_id
7330 )
7331 LOOP
7332
7333 l_prod_col_name := c_item_rev_attr_intf_rec.attribute_code;
7334 l_intf_col_name := c_item_rev_attr_intf_rec.intf_column_name;
7335 l_data_level_id := c_item_rev_attr_intf_rec.data_level_id;
7336
7337 -- bedajna bug 6491762
7338 -- IF(l_data_level_id = 43105) THEN
7339 IF((l_data_level_id = 43105) OR (l_prod_col_name = 'SUPPLIERSITE_STORE_STATUS')) THEN
7340 l_has_sup_sit_org_col := 'Y';
7341 END IF;
7342 --------------------------------------------------------------------
7343 -- Store the Item Number column name in the Generic Interface
7344 --------------------------------------------------------------------
7345 IF (l_prod_col_name = G_ITEM_NUMBER) THEN
7346 l_item_number_col := l_intf_col_name;
7347 Write_Debug('Item Number : '||l_item_number_col);
7348
7349 --------------------------------------------------------------------
7350 -- Store the Organization Code column name in the Generic Interface
7351 --------------------------------------------------------------------
7352 ELSIF (l_prod_col_name = G_ORG_CODE) THEN
7353 l_org_code_col := l_intf_col_name;
7354 Write_Debug('Organization Code : '||l_org_code_col);
7355
7356 --------------------------------------------------------------------
7357 -- Store the Supplier Name column name in the Generic Interface
7358 --------------------------------------------------------------------
7359 ELSIF (l_prod_col_name = 'SUPPLIER_NAME') THEN
7360 l_supplier_name_col := l_intf_col_name;
7361 Write_Debug('Supplier Name : '||l_supplier_name_col);
7362
7363 --------------------------------------------------------------------
7364 -- Store the Supplier Number column name in the Generic Interface
7365 --------------------------------------------------------------------
7366 ELSIF (l_prod_col_name = 'SUPPLIER_NUMBER') THEN
7367 l_supplier_number_col := l_intf_col_name;
7368 Write_Debug('Supplier Number : '||l_supplier_name_col);
7369
7370
7371 --------------------------------------------------------------------
7372 -- Store the Supplier Name column name in the Generic Interface
7373 --------------------------------------------------------------------
7374 ELSIF (l_prod_col_name = 'SUPPLIER_PRIMARY') THEN
7375 l_supplier_prim_flag_col := l_intf_col_name;
7376 Write_Debug('Supplier Primary flag : '||l_supplier_name_col);
7377
7378 --------------------------------------------------------------------
7379 -- Store the Supplier Status column name in the Generic Interface
7380 --------------------------------------------------------------------
7381 ELSIF (l_prod_col_name = 'SUPPLIER_STATUS') THEN
7382 l_supplier_status_col := l_intf_col_name;
7383 Write_Debug('Supplier Status : '||l_supplier_status_col);
7384
7385 --------------------------------------------------------------------
7386 -- Store the Supplier Site Name column name in the Generic Interface
7387 --------------------------------------------------------------------
7388 ELSIF (l_prod_col_name = 'SUPPLIER_SITE') THEN
7389 l_supplier_site_name_col := l_intf_col_name;
7390 Write_Debug('Supplier Site Name : '||l_supplier_site_name_col);
7391
7392 --------------------------------------------------------------------
7393 -- Store the Supplier Name column name in the Generic Interface
7394 --------------------------------------------------------------------
7395 ELSIF (l_prod_col_name = 'SUPPLIERSITE_PRIMARY') THEN
7396 l_supplier_site_prim_flag_col := l_intf_col_name;
7397 Write_Debug('Supplier Primary flag : '||l_supplier_site_prim_flag_col);
7398
7399 --------------------------------------------------------------------
7400 -- Store the Supplier Status column name in the Generic Interface
7401 --------------------------------------------------------------------
7402 ELSIF (l_prod_col_name = 'SUPPLIERSITE_STATUS') THEN
7403 l_supplier_site_status_col := l_intf_col_name;
7404 Write_Debug('Supplier site Status : '||l_supplier_site_status_col);
7405
7406 ELSIF (l_prod_col_name = 'SUPPLIERSITE_STORE_STATUS') THEN
7407 l_sup_site_store_status_col := l_intf_col_name;
7408 Write_Debug('Supplier site store Status : '||l_sup_site_store_status_col);
7409
7410 END IF; --IF (l_prod_col_name = G_ITEM_NUMBER) THEN
7411
7412 END LOOP; --FOR c_item_rev_attr_intf_rec
7413
7414 SELECT MEANING
7415 INTO l_yes_meaning
7416 FROM FND_LOOKUP_VALUES_VL
7417 WHERE LOOKUP_TYPE = 'EGO_YES_NO'
7418 AND LOOKUP_CODE = 'Y';
7419
7420 SELECT MEANING
7424 AND LOOKUP_CODE = 'N';
7421 INTO l_no_meaning
7422 FROM FND_LOOKUP_VALUES_VL
7423 WHERE LOOKUP_TYPE = 'EGO_YES_NO'
7425
7426 SELECT MEANING
7427 INTO l_active_meaning
7428 FROM FND_LOOKUP_VALUES_VL
7429 WHERE LOOKUP_TYPE = 'EGO_ASSOCIATION_STATUS'
7430 AND LOOKUP_CODE = '1';
7431
7432 SELECT MEANING
7433 INTO l_inactive_meaning
7434 FROM FND_LOOKUP_VALUES_VL
7435 WHERE LOOKUP_TYPE = 'EGO_ASSOCIATION_STATUS'
7436 AND LOOKUP_CODE = '2';
7437
7438 ----------------------------------------------------------------------
7439 -- Inserting rows in the intersection interface table for supplier
7440 -- intersection ...
7441 ----------------------------------------------------------------------
7442 IF(l_supplier_name_col IS NOT NULL OR
7443 l_supplier_number_col IS NOT NULL) THEN
7444
7445 SELECT DATA_LEVEL_ID
7446 INTO l_data_level_id
7447 FROM EGO_DATA_LEVEL_B
7448 WHERE DATA_LEVEL_NAME = 'ITEM_SUP'
7449 AND APPLICATION_ID = 431
7450 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP';
7451
7452 l_dyn_sql := 'INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF ';
7453 l_dyn_sql := l_dyn_sql || '( ';
7454 l_dyn_sql := l_dyn_sql || ' BATCH_ID , ';
7455 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
7456 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
7457 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
7458 l_dyn_sql := l_dyn_sql || ' DATA_LEVEL_ID , ';
7459 l_dyn_sql := l_dyn_sql || ' PRIMARY_FLAG , ';
7460 l_dyn_sql := l_dyn_sql || ' STATUS_CODE , ';
7461 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NAME , ';
7462 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NUMBER , ';
7463 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
7464 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
7465 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG , ';
7466 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
7467 l_dyn_sql := l_dyn_sql || ' CREATED_BY , ';
7468 l_dyn_sql := l_dyn_sql || ' CREATION_DATE , ';
7469 l_dyn_sql := l_dyn_sql || ' LAST_UPDATED_BY , ';
7470 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_DATE , ';
7471 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_LOGIN , ';
7472 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
7473 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID , ';
7474 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
7475 l_dyn_sql := l_dyn_sql || ' PROGRAM_UPDATE_DATE , ';
7476 l_dyn_sql := l_dyn_sql || ' BUNDLE_ID , ';
7477 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID , ';
7478 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE , ';
7479 l_dyn_sql := l_dyn_sql || ' ASSOCIATION_ID ';
7480 l_dyn_sql := l_dyn_sql || ' ) ';
7481 l_dyn_sql := l_dyn_sql || 'SELECT ';
7482 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
7483 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
7484 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
7485 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
7486 --l_dyn_sql := l_dyn_sql || ' ''EGO_ITEM'' , ';
7487 l_dyn_sql := l_dyn_sql || l_data_level_id||' , ';
7488 IF(l_supplier_prim_flag_col IS NOT NULL) THEN
7489 -- bedajna bug 6429874
7490 -- l_dyn_sql := l_dyn_sql || 'DECODE (EBI.'||l_supplier_prim_flag_col||', '''||l_yes_meaning||''', ''Y'', '''||l_no_meaning||''', ''N'', NULL ) , ';
7491 l_dyn_sql := l_dyn_sql || 'DECODE (EBI.'||l_supplier_prim_flag_col||', '||':yes_meaning'||', ''Y'', '||':no_meaning'||', ''N'', NULL ) , ';
7492 ELSE
7493 l_dyn_sql := l_dyn_sql || ' NULL, ';
7494 END IF;
7495 IF(l_supplier_status_col IS NOT NULL) THEN
7496 -- bedajna bug 6429874
7497 -- l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_status_col||' , '''||l_active_meaning||''', ''1'', '''||l_inactive_meaning||''', ''2'', NULL) STATUS_CODE ,';
7498 l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_status_col||' , '||':active_meaning'||', ''1'', '||':inactive_meaning'||', ''2'', NULL) STATUS_CODE ,';
7499 ELSE
7500 l_dyn_sql := l_dyn_sql || ' NULL, ';
7501 END IF;
7502 IF(l_supplier_name_col IS NOT NULL)THEN
7503 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_name_col ||' , ';
7504 ELSE
7505 l_dyn_sql := l_dyn_sql || ' NULL, ';
7506 END IF;
7507 IF(l_supplier_number_col IS NOT NULL)THEN
7508 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_number_col ||' , ';
7509 ELSE
7510 l_dyn_sql := l_dyn_sql || ' NULL, ';
7511 END IF;
7512 l_dyn_sql := l_dyn_sql || 'EBI.'||l_org_code_col ||' , ';
7513 l_dyn_sql := l_dyn_sql || '''SYNC'' , ';
7514 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
7515 l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL , ';
7516 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATED_BY , ';
7517 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATION_DATE , ';
7518 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATED_BY , ';
7519 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_DATE , ';
7520 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_LOGIN , ';
7521 l_dyn_sql := l_dyn_sql || 'EBI.'||'REQUEST_ID , ';
7522 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_APPLICATION_ID , ';
7526 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
7523 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_ID , ';
7524 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_UPDATE_DATE , ';
7525 l_dyn_sql := l_dyn_sql || ' NULL , ';
7527 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
7528 l_dyn_sql := l_dyn_sql || ' NULL ';
7529 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
7530 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
7531 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
7532 IF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NOT NULL)THEN
7533 l_dyn_sql := l_dyn_sql || ' AND ( EBI.'||l_supplier_name_col||' IS NOT NULL ';
7534 l_dyn_sql := l_dyn_sql || ' OR EBI.'||l_supplier_number_col||' IS NOT NULL ) ';
7535 ELSIF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NULL) THEN
7536 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_name_col||' IS NOT NULL ';
7537 ELSIF(l_supplier_name_col IS NULL AND l_supplier_number_col IS NOT NULL) THEN
7538 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_number_col||' IS NOT NULL ';
7539 END IF;
7540
7541 Write_Debug(l_dyn_sql);
7542 -- bedajna bug 6429874
7543 -- EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
7544 IF ( (l_supplier_prim_flag_col IS NOT NULL) AND (l_supplier_status_col IS NOT NULL) ) then
7545 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7546 ELSIF ( (l_supplier_prim_flag_col IS NOT NULL) AND (l_supplier_status_col IS NULL) ) then
7547 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, p_resultfmt_usage_id;
7548 ELSIF ( (l_supplier_prim_flag_col IS NULL) AND (l_supplier_status_col IS NOT NULL) ) then
7549 EXECUTE IMMEDIATE l_dyn_sql USING l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7550 ELSIF ( (l_supplier_prim_flag_col IS NULL) AND (l_supplier_status_col IS NULL) ) then
7551 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id;
7552 end if;
7553
7554 Write_Debug('Item Revs Interface: Populated the Inv Item IDs, Org IDs.');
7555
7556 END IF;
7557 --------------------------------------------------------------------------
7558 -- Inserting rows in the intersection interface table for supplier Site --
7559 -- and supplier site store intersection ...
7560 --------------------------------------------------------------------------
7561 IF((l_supplier_name_col IS NOT NULL OR l_supplier_number_col IS NOT NULL)
7562 AND l_supplier_site_name_col IS NOT NULL) THEN
7563
7564 SELECT DATA_LEVEL_ID
7565 INTO l_data_level_id
7566 FROM EGO_DATA_LEVEL_B
7567 WHERE DATA_LEVEL_NAME = 'ITEM_SUP_SITE'
7568 AND APPLICATION_ID = 431
7569 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP';
7570
7571 SELECT DATA_LEVEL_ID
7572 INTO l_data_level_id_1
7573 FROM EGO_DATA_LEVEL_B
7574 WHERE DATA_LEVEL_NAME = 'ITEM_SUP_SITE_ORG'
7575 AND APPLICATION_ID = 431
7576 AND ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP';
7577
7578 l_dyn_sql := 'INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF ';
7579 l_dyn_sql := l_dyn_sql || '( ';
7580 l_dyn_sql := l_dyn_sql || ' TRANSACTION_ID , ';
7581 l_dyn_sql := l_dyn_sql || ' BATCH_ID , ';
7582 l_dyn_sql := l_dyn_sql || ' ITEM_NUMBER , ';
7583 l_dyn_sql := l_dyn_sql || ' INVENTORY_ITEM_ID , ';
7584 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_ID , ';
7585 --l_dyn_sql := l_dyn_sql || ' OBJ_NAME , ';
7586 l_dyn_sql := l_dyn_sql || ' DATA_LEVEL_ID , ';
7587 l_dyn_sql := l_dyn_sql || ' PRIMARY_FLAG , ';
7588 l_dyn_sql := l_dyn_sql || ' STATUS_CODE , ';
7589 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NAME , ';
7590 l_dyn_sql := l_dyn_sql || ' SUPPLIER_NUMBER , ';
7591 l_dyn_sql := l_dyn_sql || ' SUPPLIER_SITE_NAME , ';
7592 l_dyn_sql := l_dyn_sql || ' ORGANIZATION_CODE , ';
7593 l_dyn_sql := l_dyn_sql || ' TRANSACTION_TYPE , ';
7594 l_dyn_sql := l_dyn_sql || ' PROCESS_FLAG , ';
7595 l_dyn_sql := l_dyn_sql || ' CREATED_BY , ';
7596 l_dyn_sql := l_dyn_sql || ' CREATION_DATE , ';
7597 l_dyn_sql := l_dyn_sql || ' LAST_UPDATED_BY , ';
7598 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_DATE , ';
7599 l_dyn_sql := l_dyn_sql || ' LAST_UPDATE_LOGIN , ';
7600 l_dyn_sql := l_dyn_sql || ' REQUEST_ID , ';
7601 l_dyn_sql := l_dyn_sql || ' PROGRAM_APPLICATION_ID , ';
7602 l_dyn_sql := l_dyn_sql || ' PROGRAM_ID , ';
7603 l_dyn_sql := l_dyn_sql || ' PROGRAM_UPDATE_DATE , ';
7604 l_dyn_sql := l_dyn_sql || ' BUNDLE_ID , ';
7605 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_ID , ';
7606 l_dyn_sql := l_dyn_sql || ' SOURCE_SYSTEM_REFERENCE , ';
7607 l_dyn_sql := l_dyn_sql || ' ASSOCIATION_ID ';
7608 l_dyn_sql := l_dyn_sql || ' ) ';
7609 l_dyn_sql := l_dyn_sql || 'SELECT ';
7610 l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL , ';
7611 l_dyn_sql := l_dyn_sql || ' INTERSECTIONS.* ';
7612 l_dyn_sql := l_dyn_sql || ' FROM ( ';
7613
7614 l_dyn_sql := l_dyn_sql || 'SELECT ';
7615 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
7619 --l_dyn_sql := l_dyn_sql || ' ''EGO_ITEM'' , ';
7616 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
7617 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
7618 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
7620 l_dyn_sql := l_dyn_sql || l_data_level_id||' , ';
7621 IF(l_supplier_site_prim_flag_col IS NOT NULL) THEN
7622 -- bedajna bug 6429874
7623 -- l_dyn_sql := l_dyn_sql || ' DECODE(EBI.'||l_supplier_site_prim_flag_col||', '''||l_yes_meaning||''', ''Y'', '''||l_no_meaning||''',''N'' ) PRIMARY_FLAG , ';
7624 l_dyn_sql := l_dyn_sql || ' DECODE(EBI.'||l_supplier_site_prim_flag_col||', '||':yes_meaning'||', ''Y'', '||':no_meaning'||',''N'' ) PRIMARY_FLAG , ';
7625 ELSE
7626 l_dyn_sql := l_dyn_sql || ' NULL PRIMARY_FLAG , ';
7627 END IF;
7628 IF(l_supplier_site_status_col IS NOT NULL) THEN
7629 -- bedajna bug 6429874
7630 -- l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_site_status_col||' , '''||l_active_meaning||''', ''1'', '''||l_inactive_meaning||''', ''2'', NULL) STATUS_CODE,';
7631 l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_supplier_site_status_col||' , '||':active_meaning1'||', ''1'', '||':inactive_meaning1'||', ''2'', NULL) STATUS_CODE,';
7632 ELSE
7633 l_dyn_sql := l_dyn_sql || ' NULL STATUS_CODE , ';
7634 END IF;
7635 IF(l_supplier_name_col IS NOT NULL)THEN
7636 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_name_col ||' SUPPLIER_NAME, ';
7637 ELSE
7638 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NAME, ';
7639 END IF;
7640 IF(l_supplier_number_col IS NOT NULL)THEN
7641 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_number_col ||' SUPPLIER_NUMBER , ';
7642 ELSE
7643 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NUMBER , ';
7644 END IF;
7645 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_site_name_col ||' , ';
7646 l_dyn_sql := l_dyn_sql || 'EBI.'||l_org_code_col ||' , ';
7647 l_dyn_sql := l_dyn_sql || '''SYNC'' , ';
7648 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
7649 --l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL, ';
7650 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATED_BY , ';
7651 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATION_DATE , ';
7652 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATED_BY , ';
7653 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_DATE , ';
7654 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_LOGIN , ';
7655 l_dyn_sql := l_dyn_sql || 'EBI.'||'REQUEST_ID , ';
7656 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_APPLICATION_ID , ';
7657 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_ID , ';
7658 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_UPDATE_DATE , ';
7659 l_dyn_sql := l_dyn_sql || ' NULL BUNDLE_ID , ';
7660 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
7661 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
7662 l_dyn_sql := l_dyn_sql || ' NULL ASSOCIATION_ID ';
7663 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
7664 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
7665 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
7666 IF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NOT NULL)THEN
7667 l_dyn_sql := l_dyn_sql || ' AND ( EBI.'||l_supplier_name_col||' IS NOT NULL ';
7668 l_dyn_sql := l_dyn_sql || ' OR EBI.'||l_supplier_number_col||' IS NOT NULL ) ';
7669 ELSIF(l_supplier_name_col IS NOT NULL AND l_supplier_number_col IS NULL) THEN
7670 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_name_col||' IS NOT NULL ';
7671 ELSIF(l_supplier_name_col IS NULL AND l_supplier_number_col IS NOT NULL) THEN
7672 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_number_col||' IS NOT NULL ';
7673 END IF;
7674 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_site_name_col||' IS NOT NULL ';
7675 l_dyn_sql := l_dyn_sql || ' UNION ';
7676 l_dyn_sql := l_dyn_sql || ' SELECT ';
7677 l_dyn_sql := l_dyn_sql || To_char(l_msii_set_process_id)||' , ';
7678 l_dyn_sql := l_dyn_sql || ' EBI.'||l_item_number_col ||' , ';
7679 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK1_VALUE , ';
7680 l_dyn_sql := l_dyn_sql || ' EBI.INSTANCE_PK2_VALUE , ';
7681 --l_dyn_sql := l_dyn_sql || ' ''EGO_ITEM'' , ';
7682 l_dyn_sql := l_dyn_sql || l_data_level_id_1||' , ';
7683 --IF(l_supplier_site_prim_flag_col IS NOT NULL) THEN
7684 -- l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_site_prim_flag_col||' , ';
7685 --ELSE
7686 l_dyn_sql := l_dyn_sql || ' NULL PRIMARY_FLAG , ';
7687 --END IF;
7688
7689 IF(l_sup_site_store_status_col IS NOT NULL) THEN
7690 -- bedajna bug 6429874
7691 -- 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,';
7692 l_dyn_sql := l_dyn_sql || 'DECODE(EBI.'||l_sup_site_store_status_col||' , '||':active_meaning2'||', ''1'', '||':inactive_meaning2'||', ''2'', NULL) STATUS_CODE,';
7693 ELSE
7694 l_dyn_sql := l_dyn_sql || ' NULL STATUS_CODE , ';
7695 END IF;
7696 IF(l_supplier_name_col IS NOT NULL)THEN
7697 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_name_col ||' SUPPLIER_NAME , ';
7698 ELSE
7699 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NAME, ';
7700 END IF;
7701 IF(l_supplier_number_col IS NOT NULL)THEN
7702 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_number_col ||' SUPPLIER_NUMBER , ';
7703 ELSE
7704 l_dyn_sql := l_dyn_sql || ' NULL SUPPLIER_NUMBER , ';
7705 END IF;
7706 l_dyn_sql := l_dyn_sql || 'EBI.'||l_supplier_site_name_col ||' , ';
7707
7708 l_dyn_sql := l_dyn_sql || 'EBI.'||l_org_code_col ||' , ';
7709 l_dyn_sql := l_dyn_sql || '''SYNC'' , ';
7710 l_dyn_sql := l_dyn_sql || G_PROCESS_STATUS||' , ';
7711 --l_dyn_sql := l_dyn_sql || 'MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL, ';
7712 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATED_BY , ';
7713 l_dyn_sql := l_dyn_sql || 'EBI.'||'CREATION_DATE , ';
7714 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATED_BY , ';
7715 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_DATE , ';
7716 l_dyn_sql := l_dyn_sql || 'EBI.'||'LAST_UPDATE_LOGIN , ';
7717 l_dyn_sql := l_dyn_sql || 'EBI.'||'REQUEST_ID , ';
7718 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_APPLICATION_ID , ';
7719 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_ID , ';
7720 l_dyn_sql := l_dyn_sql || 'EBI.'||'PROGRAM_UPDATE_DATE , ';
7721 l_dyn_sql := l_dyn_sql || ' NULL BUNDLE_ID , ';
7722 l_dyn_sql := l_dyn_sql || ' TO_NUMBER(EBI.C_FIX_COLUMN11) , ';
7723 l_dyn_sql := l_dyn_sql || ' EBI.C_FIX_COLUMN12 , ';
7724 l_dyn_sql := l_dyn_sql || ' NULL ASSOCIATION_ID ';
7725 l_dyn_sql := l_dyn_sql || 'FROM EGO_BULKLOAD_INTF EBI ';
7726 l_dyn_sql := l_dyn_sql || ' WHERE EBI.RESULTFMT_USAGE_ID = :RESULTFMT_USAGE_ID';
7727 l_dyn_sql := l_dyn_sql || ' AND EBI.PROCESS_STATUS = 1 ';
7728 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_name_col||' IS NOT NULL ';
7729 l_dyn_sql := l_dyn_sql || ' AND ''Y'' = '''||l_has_sup_sit_org_col||''' ';
7730
7731 l_dyn_sql := l_dyn_sql || ' AND EBI.'||l_supplier_site_name_col||' IS NOT NULL ) INTERSECTIONS ';
7732
7733 Write_Debug(l_dyn_sql);
7734
7735 -- bedajna bug 6429874
7736 -- EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
7737 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
7741 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
7738 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;
7739 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
7740 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;
7742 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;
7743 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
7744 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;
7745 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
7746 EXECUTE IMMEDIATE l_dyn_sql USING l_yes_meaning, l_no_meaning, p_resultfmt_usage_id, p_resultfmt_usage_id;
7747 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
7748 EXECUTE IMMEDIATE l_dyn_sql USING l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id, p_resultfmt_usage_id;
7749 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
7750 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, l_active_meaning, l_inactive_meaning, p_resultfmt_usage_id;
7751 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
7752 EXECUTE IMMEDIATE l_dyn_sql USING p_resultfmt_usage_id, p_resultfmt_usage_id;
7753 end if;
7754
7755 Write_Debug('Item Revs Interface: Populated the Inv Item IDs, Org IDs.');
7756
7757 END IF;
7758
7759 x_retcode := G_STATUS_SUCCESS;
7760 x_set_process_id := l_msii_set_process_id;
7761
7762 END load_intersections_interface;
7763
7764
7765
7766
7767
7768 END EGO_ITEM_BULKLOAD_PKG;