1 PACKAGE BODY EGO_IMPORT_PVT AS
2 /* $Header: EGOVIMPB.pls 120.173 2007/11/09 03:04:37 mantyaku ship $ */
3
4 G_DEFAULT_ATTR_GROUP_TYPE CONSTANT VARCHAR2(30) := 'EGO_ITEMMGMT_GROUP';
5 -- G_IOI_STAMP_REQUEST_ID_FLAG CONSTANT NUMBER := -1;
6
7 G_TRANS_TYPE_CREATE CONSTANT VARCHAR2(10) := 'CREATE';
8 G_TRANS_TYPE_UPDATE CONSTANT VARCHAR2(10) := 'UPDATE';
9 G_TRANS_TYPE_DELETE CONSTANT VARCHAR2(10) := 'DELETE';
10 G_TRANS_TYPE_SYNC CONSTANT VARCHAR2(10) := 'SYNC';
11
12 TYPE UROWID_TABLE IS TABLE OF UROWID;
13 G_MSII_REIMPORT_ROWS UROWID_TABLE;
14
15 G_NEEDS_REQUEST_ID_STAMP CONSTANT NUMBER := -1;
16 G_NEED_TO_LOG_ERROR CONSTANT NUMBER := -3;
17
18 SUBTYPE MSII_ROW IS MTL_SYSTEM_ITEMS_INTERFACE%ROWTYPE;
19 TYPE COLUMN_NAMES IS TABLE OF ALL_TAB_COLUMNS.COLUMN_NAME%TYPE;
20 SUBTYPE EIUAI_ROW IS EGO_ITM_USR_ATTR_INTRFC%ROWTYPE;
21 TYPE EIUAI_ROWS IS TABLE OF EIUAI_ROW INDEX BY BINARY_INTEGER;
22 SUBTYPE IAssocs_Row IS EGO_ITEM_ASSOCIATIONS_INTF%ROWTYPE;
23 TYPE IAssocs_Rows IS TABLE OF IAssocs_Row INDEX BY BINARY_INTEGER;
24
25 G_PARTY_NAME VARCHAR2(100);
26
27 G_LOG_TIMESTAMP_FORMAT CONSTANT VARCHAR2( 30 ) := 'dd-mon-yyyy hh:mi:ss.ff';
28
29 G_EXCEL_MISS_DATE_VAL CONSTANT DATE := to_date( '9999-12-31', 'YYYY-MM-DD' );
30 G_EXCEL_MISS_DATE_STR CONSTANT VARCHAR2(50) := 'to_date(''9999-12-31'', ''YYYY-MM-DD'') ';
31
32 G_EXCEL_MISS_NUM_STR CONSTANT VARCHAR2(20) := EGO_USER_ATTRS_BULK_PVT.G_NULL_NUM_VAL;
33 G_EXCEL_MISS_CHAR_VAL CONSTANT VARCHAR2(30) := EGO_USER_ATTRS_BULK_PVT.G_NULL_CHAR_VAL;
34
35 G_EXCEL_MISS_VS_VAL CONSTANT VARCHAR2(30) := ''''||G_EXCEL_MISS_CHAR_VAL||'''';
36
37 -- Confirm Status Constants Available in package spec
38 G_DATE_TIME_DATA_TYPE CONSTANT FLAG := 'Y';
39
40 /*
41 * This method writes into concurrent program log
42 */
43 PROCEDURE Debug_Conc_Log( p_message IN VARCHAR2
44 , p_add_timestamp IN BOOLEAN DEFAULT TRUE )
45 IS
46 l_inv_debug_level NUMBER := INVPUTLI.get_debug_level; --Bug: 4667452
47 BEGIN
48 IF l_inv_debug_level IN(101, 102) THEN
49 INVPUTLI.info( ( CASE
50 WHEN p_add_timestamp THEN to_char( systimestamp, G_LOG_TIMESTAMP_FORMAT ) || ': '
51 ELSE ''
52 END )
53 || p_message );
54 END IF;
55 END Debug_Conc_Log;
56
57 /*
58 * Private method to return current party name string associated with current user
59 */
60 FUNCTION Get_Current_Party_Name RETURN VARCHAR2
61 IS
62 l_party_id NUMBER;
63 BEGIN
64 IF G_PARTY_NAME IS NULL THEN
65 BEGIN
66 SELECT PARTY_ID INTO l_party_id
67 FROM ego_user_v
68 WHERE USER_ID = FND_GLOBAL.USER_ID;
69 EXCEPTION WHEN OTHERS THEN
70 RETURN NULL;
71 END;
72
73 G_PARTY_NAME := 'HZ_PARTY:' || TO_CHAR(l_party_id);
74 RETURN G_PARTY_NAME;
75 ELSE
76 RETURN G_PARTY_NAME;
77 END IF;
78 END Get_Current_Party_Name;
79
80 /*This method errors out all those rows in interface tables which have
81 *NULL source System reference or have invalid source system id.
82 *
83 *For handling the case when user insert data through BackEnd and tries to import
84 *data using Import WorkBench.
85 *
86 *Done for Bug 5352143
87 */
88 PROCEDURE Err_null_ssxref_ssid( p_data_set_id IN NUMBER )
89 IS
90 l_msg_text VARCHAR2(4000);
91 l_err_text VARCHAR2(4000);
92 l_user_id NUMBER := FND_GLOBAL.USER_ID;
93 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
94 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
95 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
96 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
97 dumm_status VARCHAR2(100);
98
99 CURSOR c_ssxref_null_msii IS
100 SELECT
101 ORGANIZATION_ID,
102 TRANSACTION_ID,
103 PROCESS_FLAG
104 FROM MTL_SYSTEM_ITEMS_INTERFACE
105 WHERE SET_PROCESS_ID = p_data_set_id
106 AND PROCESS_FLAG IN (33379, 33389);
107
108 CURSOR c_ssxref_null_miri IS
109 SELECT
110 ORGANIZATION_ID,
111 TRANSACTION_ID,
112 PROCESS_FLAG
113 FROM MTL_ITEM_REVISIONS_INTERFACE
114 WHERE SET_PROCESS_ID = p_data_set_id
115 AND PROCESS_FLAG IN (33379, 33389);
116
117 CURSOR c_ssxref_null_mici IS
118 SELECT
119 ORGANIZATION_ID,
120 TRANSACTION_ID,
121 PROCESS_FLAG
122 FROM MTL_ITEM_CATEGORIES_INTERFACE
123 WHERE SET_PROCESS_ID = p_data_set_id
124 AND PROCESS_FLAG IN (33379, 33389);
125
126 CURSOR c_ssxref_null_eiuai IS
127 SELECT
128 ORGANIZATION_ID,
129 TRANSACTION_ID,
130 PROCESS_STATUS
131 FROM EGO_ITM_USR_ATTR_INTRFC
132 WHERE DATA_SET_ID = p_data_set_id
133 AND PROCESS_STATUS IN (33379, 33389);
134
135 CURSOR c_ssxref_null_eipi IS
136 SELECT
137 ORGANIZATION_ID,
138 TRANSACTION_ID,
139 PROCESS_STATUS
140 FROM EGO_ITEM_PEOPLE_INTF
141 WHERE DATA_SET_ID = p_data_set_id
142 AND PROCESS_STATUS IN (33379, 33389);
143
144 CURSOR c_ssxref_null_eai IS
145 SELECT
146 ORGANIZATION_ID,
147 TRANSACTION_ID,
148 PROCESS_FLAG
149 FROM EGO_AML_INTF
150 WHERE DATA_SET_ID = p_data_set_id
151 AND PROCESS_FLAG IN (33379, 33389);
152 --R12C:BEGIN
153 CURSOR c_ssxref_null_assocs IS
154 SELECT
155 ORGANIZATION_ID,
156 TRANSACTION_ID,
157 PROCESS_FLAG
158 FROM EGO_ITEM_ASSOCIATIONS_INTF
159 WHERE BATCH_ID = p_data_set_id
160 AND PROCESS_FLAG IN (33379, 33389);
161 --R12C:BEGIN
162 BEGIN
163 Debug_Conc_Log( 'Err_null_ssxref_ssid - Begin' );
164 -- MSII
165 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
166 SET PROCESS_FLAG = (CASE WHEN MSII.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
167 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
168 PROGRAM_APPLICATION_ID = l_prog_appid,
169 PROGRAM_ID = l_prog_id,
170 REQUEST_ID = l_request_id
171 WHERE SET_PROCESS_ID = p_data_set_id
172 AND PROCESS_FLAG = 0
173 AND (MSII.SOURCE_SYSTEM_REFERENCE IS NULL
174 OR MSII.SOURCE_SYSTEM_ID <>
175 (SELECT SOURCE_SYSTEM_ID
176 FROM EGO_IMPORT_BATCHES_B
177 WHERE BATCH_ID = MSII.SET_PROCESS_ID
178 )
179 );
180
181 -- MIRI
182 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
183 SET PROCESS_FLAG = (CASE WHEN MIRI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
184 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
185 PROGRAM_APPLICATION_ID = l_prog_appid,
186 PROGRAM_ID = l_prog_id,
187 REQUEST_ID = l_request_id
188 WHERE SET_PROCESS_ID = p_data_set_id
189 AND PROCESS_FLAG = 0
190 AND ( MIRI.SOURCE_SYSTEM_REFERENCE IS NULL
191 OR MIRI.SOURCE_SYSTEM_ID <>
192 (SELECT SOURCE_SYSTEM_ID
193 FROM EGO_IMPORT_BATCHES_B
194 WHERE BATCH_ID = MIRI.SET_PROCESS_ID
195 )
196 );
197
198 -- MICI
199 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
200 SET PROCESS_FLAG = (CASE WHEN MICI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
201 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
202 PROGRAM_APPLICATION_ID = l_prog_appid,
203 PROGRAM_ID = l_prog_id,
204 REQUEST_ID = l_request_id
205 WHERE SET_PROCESS_ID = p_data_set_id
206 AND PROCESS_FLAG = 0
207 AND (MICI.SOURCE_SYSTEM_REFERENCE IS NULL
208 OR MICI.SOURCE_SYSTEM_ID <>
209 (SELECT SOURCE_SYSTEM_ID
210 FROM EGO_IMPORT_BATCHES_B
211 WHERE BATCH_ID = MICI.SET_PROCESS_ID
212 )
213 );
214
215 -- EIUAI
216 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
217 SET PROCESS_STATUS = (CASE WHEN EIUAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
218 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
219 PROGRAM_APPLICATION_ID = l_prog_appid,
220 PROGRAM_ID = l_prog_id,
221 REQUEST_ID = l_request_id
222 WHERE DATA_SET_ID = p_data_set_id
223 AND PROCESS_STATUS = 0
224 AND (EIUAI.SOURCE_SYSTEM_REFERENCE IS NULL
225 OR EIUAI.SOURCE_SYSTEM_ID <>
226 (SELECT SOURCE_SYSTEM_ID
227 FROM EGO_IMPORT_BATCHES_B
228 WHERE BATCH_ID = EIUAI.DATA_SET_ID
229 )
230 );
231
232 -- EIPI
233 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
234 SET PROCESS_STATUS = (CASE WHEN EIPI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
235 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
236 PROGRAM_APPLICATION_ID = l_prog_appid,
237 PROGRAM_ID = l_prog_id,
238 REQUEST_ID = l_request_id
239 WHERE DATA_SET_ID = p_data_set_id
240 AND PROCESS_STATUS = 0
241 AND (EIPI.SOURCE_SYSTEM_REFERENCE IS NULL
242 OR EIPI.SOURCE_SYSTEM_ID <>
243 (SELECT SOURCE_SYSTEM_ID
244 FROM EGO_IMPORT_BATCHES_B
245 WHERE BATCH_ID = EIPI.DATA_SET_ID
246 )
247 );
248
249 -- EAI
250 UPDATE EGO_AML_INTF EAI
251 SET PROCESS_FLAG = (CASE WHEN EAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
252 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
253 PROGRAM_APPLICATION_ID = l_prog_appid,
254 PROGRAM_ID = l_prog_id,
255 REQUEST_ID = l_request_id
256 WHERE DATA_SET_ID = p_data_set_id
257 AND PROCESS_FLAG = 0
258 AND (EAI.SOURCE_SYSTEM_REFERENCE IS NULL
259 OR EAI.SOURCE_SYSTEM_ID <>
260 (SELECT SOURCE_SYSTEM_ID
261 FROM EGO_IMPORT_BATCHES_B
262 WHERE BATCH_ID = EAI.DATA_SET_ID
263 )
264 );
265
266 -- R12C:BEGIN ASSOCSINTF
267 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
268 SET PROCESS_FLAG = (CASE WHEN EIAI.SOURCE_SYSTEM_REFERENCE IS NULL THEN 33379 ELSE 33389 END),
269 TRANSACTION_ID = NVL(TRANSACTION_ID, MTL_SYSTEM_ITEMS_INTERFACE_S.NEXTVAL),
270 PROGRAM_APPLICATION_ID = l_prog_appid,
271 PROGRAM_ID = l_prog_id,
272 REQUEST_ID = l_request_id
273 WHERE BATCH_ID = p_data_set_id
274 AND PROCESS_FLAG = 0
275 AND (EIAI.SOURCE_SYSTEM_REFERENCE IS NULL
276 OR EIAI.SOURCE_SYSTEM_ID <>
277 (SELECT SOURCE_SYSTEM_ID
278 FROM EGO_IMPORT_BATCHES_B
279 WHERE BATCH_ID = EIAI.BATCH_ID
280 )
281 );
282 -- R12C:END ASSOCSINTF
283 Debug_Conc_Log( 'Err_null_ssxref_ssid - Completed updating rows having null SSxRef or invalid SSid' );
284 Debug_Conc_Log( 'Err_null_ssxref_ssid - Started inserting Errors' );
285 -- MSII
286 FOR i IN c_ssxref_null_msii LOOP
287 IF i.PROCESS_FLAG = 33379 THEN
288 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
289 l_msg_text := FND_MESSAGE.GET;
290 dumm_status := INVPUOPI.mtl_log_interface_err(
291 i.ORGANIZATION_ID
292 ,l_user_id
293 ,l_login_id
294 ,l_prog_appid
295 ,l_prog_id
296 ,l_request_id
297 ,i.TRANSACTION_ID
298 ,l_msg_text
299 ,'SOURCE_SYSTEM_REFERENCE'
300 ,'MTL_SYSTEM_ITEMS_INTERFACE'
301 ,'INV_IOI_ERR'
302 ,l_err_text);
303
304 ELSIF i.PROCESS_FLAG = 33389 THEN
305 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
306 l_msg_text := FND_MESSAGE.GET;
307 dumm_status := INVPUOPI.mtl_log_interface_err(
308 i.ORGANIZATION_ID
309 ,l_user_id
310 ,l_login_id
311 ,l_prog_appid
312 ,l_prog_id
313 ,l_request_id
314 ,i.TRANSACTION_ID
315 ,l_msg_text
316 ,'SOURCE_SYSTEM_ID'
317 ,'MTL_SYSTEM_ITEMS_INTERFACE'
318 ,'INV_IOI_ERR'
319 ,l_err_text);
320 END IF;
321 END LOOP;
322
323 -- MIRI
324 FOR i IN c_ssxref_null_miri LOOP
325 IF i.PROCESS_FLAG = 33379 THEN
326 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
327 l_msg_text := FND_MESSAGE.GET;
328 dumm_status := INVPUOPI.mtl_log_interface_err(
329 i.ORGANIZATION_ID
330 ,l_user_id
331 ,l_login_id
332 ,l_prog_appid
333 ,l_prog_id
334 ,l_request_id
335 ,i.TRANSACTION_ID
336 ,l_msg_text
337 ,'SOURCE_SYSTEM_REFERENCE'
338 ,'MTL_ITEM_REVISIONS_INTERFACE'
339 ,'INV_IOI_ERR'
340 ,l_err_text);
341 ELSIF i.PROCESS_FLAG = 33389 THEN
342 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
343 l_msg_text := FND_MESSAGE.GET;
344 dumm_status := INVPUOPI.mtl_log_interface_err(
345 i.ORGANIZATION_ID
346 ,l_user_id
347 ,l_login_id
348 ,l_prog_appid
349 ,l_prog_id
350 ,l_request_id
351 ,i.TRANSACTION_ID
352 ,l_msg_text
353 ,'SOURCE_SYSTEM_ID'
354 ,'MTL_ITEM_REVISIONS_INTERFACE'
355 ,'INV_IOI_ERR'
356 ,l_err_text);
357 END IF;
358 END LOOP;
359
360 -- MICI
361 FOR i IN c_ssxref_null_mici LOOP
362 IF i.PROCESS_FLAG = 33379 THEN
363 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
364 l_msg_text := FND_MESSAGE.GET;
365 dumm_status := INVPUOPI.mtl_log_interface_err(
366 i.ORGANIZATION_ID
367 ,l_user_id
368 ,l_login_id
369 ,l_prog_appid
370 ,l_prog_id
371 ,l_request_id
372 ,i.TRANSACTION_ID
373 ,l_msg_text
374 ,'SOURCE_SYSTEM_REFERENCE'
375 ,'MTL_ITEM_CATEGORIES_INTERFACE'
376 ,'INV_IOI_ERR'
377 ,l_err_text);
378 ELSIF i.PROCESS_FLAG = 33389 THEN
379 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
380 l_msg_text := FND_MESSAGE.GET;
381 dumm_status := INVPUOPI.mtl_log_interface_err(
382 i.ORGANIZATION_ID
383 ,l_user_id
384 ,l_login_id
385 ,l_prog_appid
386 ,l_prog_id
387 ,l_request_id
388 ,i.TRANSACTION_ID
389 ,l_msg_text
390 ,'SOURCE_SYSTEM_ID'
391 ,'MTL_ITEM_CATEGORIES_INTERFACE'
392 ,'INV_IOI_ERR'
393 ,l_err_text);
394 END IF;
395 END LOOP;
396
397 -- EIUAI
398 FOR i IN c_ssxref_null_eiuai LOOP
399 IF i.PROCESS_STATUS = 33379 THEN
400 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
401 l_msg_text := FND_MESSAGE.GET;
402 dumm_status := INVPUOPI.mtl_log_interface_err(
403 i.ORGANIZATION_ID
404 ,l_user_id
405 ,l_login_id
406 ,l_prog_appid
407 ,l_prog_id
408 ,l_request_id
409 ,i.TRANSACTION_ID
410 ,l_msg_text
411 ,'SOURCE_SYSTEM_REFERENCE'
412 ,'EGO_ITM_USR_ATTR_INTRFC'
413 ,'INV_IOI_ERR'
414 ,l_err_text);
415 ELSIF i.PROCESS_STATUS = 33389 THEN
416 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
417 l_msg_text := FND_MESSAGE.GET;
418 dumm_status := INVPUOPI.mtl_log_interface_err(
419 i.ORGANIZATION_ID
420 ,l_user_id
421 ,l_login_id
422 ,l_prog_appid
423 ,l_prog_id
424 ,l_request_id
425 ,i.TRANSACTION_ID
426 ,l_msg_text
427 ,'SOURCE_SYSTEM_ID'
428 ,'EGO_ITM_USR_ATTR_INTRFC'
429 ,'INV_IOI_ERR'
430 ,l_err_text);
431 END IF;
432 END LOOP;
433
434 -- EIPI
435 FOR i IN c_ssxref_null_eipi LOOP
436 IF i.PROCESS_STATUS = 33379 THEN
437 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
438 l_msg_text := FND_MESSAGE.GET;
439 dumm_status := INVPUOPI.mtl_log_interface_err(
440 i.ORGANIZATION_ID
441 ,l_user_id
442 ,l_login_id
443 ,l_prog_appid
444 ,l_prog_id
445 ,l_request_id
446 ,i.TRANSACTION_ID
447 ,l_msg_text
448 ,'SOURCE_SYSTEM_REFERENCE'
449 ,'EGO_ITEM_PEOPLE_INTF'
450 ,'INV_IOI_ERR'
451 ,l_err_text);
452 ELSIF i.PROCESS_STATUS = 33389 THEN
453 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
454 l_msg_text := FND_MESSAGE.GET;
455 dumm_status := INVPUOPI.mtl_log_interface_err(
456 i.ORGANIZATION_ID
457 ,l_user_id
458 ,l_login_id
459 ,l_prog_appid
460 ,l_prog_id
461 ,l_request_id
462 ,i.TRANSACTION_ID
463 ,l_msg_text
464 ,'SOURCE_SYSTEM_ID'
465 ,'EGO_ITEM_PEOPLE_INTF'
466 ,'INV_IOI_ERR'
467 ,l_err_text);
468 END IF;
469 END LOOP;
470
471 -- EAI
472 FOR i IN c_ssxref_null_eai LOOP
473 IF i.PROCESS_FLAG = 33379 THEN
474 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
475 l_msg_text := FND_MESSAGE.GET;
476 dumm_status := INVPUOPI.mtl_log_interface_err(
477 i.ORGANIZATION_ID
478 ,l_user_id
479 ,l_login_id
480 ,l_prog_appid
481 ,l_prog_id
482 ,l_request_id
483 ,i.TRANSACTION_ID
484 ,l_msg_text
485 ,'SOURCE_SYSTEM_REFERENCE'
486 ,'EGO_AML_INTF'
487 ,'INV_IOI_ERR'
488 ,l_err_text);
489 ELSIF i.PROCESS_FLAG = 33389 THEN
490 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
491 l_msg_text := FND_MESSAGE.GET;
492 dumm_status := INVPUOPI.mtl_log_interface_err(
493 i.ORGANIZATION_ID
494 ,l_user_id
495 ,l_login_id
496 ,l_prog_appid
497 ,l_prog_id
498 ,l_request_id
499 ,i.TRANSACTION_ID
500 ,l_msg_text
501 ,'SOURCE_SYSTEM_ID'
502 ,'EGO_AML_INTF'
503 ,'INV_IOI_ERR'
504 ,l_err_text);
505 END IF;
506 END LOOP;
507
508 -- R12C:BEGIN
509 FOR i IN c_ssxref_null_assocs LOOP
510 IF i.PROCESS_FLAG = 33379 THEN
511 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXREF_IS_NULL');
512 l_msg_text := FND_MESSAGE.GET;
513 dumm_status := INVPUOPI.mtl_log_interface_err(
514 i.ORGANIZATION_ID
515 ,l_user_id
516 ,l_login_id
517 ,l_prog_appid
518 ,l_prog_id
519 ,l_request_id
520 ,i.TRANSACTION_ID
521 ,l_msg_text
522 ,'SOURCE_SYSTEM_REFERENCE'
523 ,'EGO_ITEM_ASSOCIATIONS_INTF'
524 ,'INV_IOI_ERR'
525 ,l_err_text);
526 ELSIF i.PROCESS_FLAG = 33389 THEN
527 FND_MESSAGE.SET_NAME('EGO', 'EGO_SSXID_INVALID');
528 l_msg_text := FND_MESSAGE.GET;
529 dumm_status := INVPUOPI.mtl_log_interface_err(
530 i.ORGANIZATION_ID
531 ,l_user_id
532 ,l_login_id
533 ,l_prog_appid
534 ,l_prog_id
535 ,l_request_id
536 ,i.TRANSACTION_ID
537 ,l_msg_text
538 ,'SOURCE_SYSTEM_ID'
539 ,'EGO_ITEM_ASSOCIATIONS_INTF'
540 ,'INV_IOI_ERR'
541 ,l_err_text);
542 END IF;
543 END LOOP;
544 --R12C: END
545
546 Debug_Conc_Log( 'Err_null_ssxref_ssid - Finished inserting Errors' );
547
548 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
549 SET PROCESS_FLAG =3
550 WHERE PROCESS_FLAG IN (33379, 33389)
551 AND SET_PROCESS_ID = p_data_set_id;
552
553 UPDATE MTL_ITEM_REVISIONS_INTERFACE
554 SET PROCESS_FLAG =3
555 WHERE PROCESS_FLAG IN (33379, 33389)
556 AND SET_PROCESS_ID = p_data_set_id;
557
558 UPDATE MTL_ITEM_CATEGORIES_INTERFACE
559 SET PROCESS_FLAG =3
560 WHERE PROCESS_FLAG IN (33379, 33389)
561 AND SET_PROCESS_ID = p_data_set_id;
562
563 UPDATE EGO_ITM_USR_ATTR_INTRFC
564 SET PROCESS_STATUS =3
565 WHERE PROCESS_STATUS IN (33379, 33389)
566 AND DATA_SET_ID = p_data_set_id;
567
568 UPDATE EGO_ITEM_PEOPLE_INTF
569 SET PROCESS_STATUS =3
570 WHERE PROCESS_STATUS IN (33379, 33389)
571 AND DATA_SET_ID = p_data_set_id;
572
573 UPDATE EGO_AML_INTF
574 SET PROCESS_FLAG =3
575 WHERE PROCESS_FLAG IN (33379, 33389)
576 AND DATA_SET_ID = p_data_set_id;
577 --R12C: BEGIN
578 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
579 SET PROCESS_FLAG =3
580 WHERE PROCESS_FLAG IN (33379, 33389)
581 AND BATCH_ID = p_data_set_id;
582 --R12C:END
583 END Err_null_ssxref_ssid;
584
585 /*
586 * Method to get next item number for a sequence generated item
587 * This method is only for use in Resolve_Child_Entities
588 */
589 FUNCTION GET_NEXT_ITEM_NUMBER(p_catalog_group_id NUMBER) RETURN VARCHAR2 AS
590 l_seq_name MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_SEQ_NAME%TYPE;
591 l_prefix MTL_ITEM_CATALOG_GROUPS_B.PREFIX%TYPE;
592 l_suffix MTL_ITEM_CATALOG_GROUPS_B.SUFFIX%TYPE;
593 l_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
594 l_item_number VARCHAR2(2000);
595 l_sql VARCHAR2(2000);
596 BEGIN
597 SELECT ITEM_NUM_SEQ_NAME, PREFIX, SUFFIX, ITEM_NUM_GEN_METHOD
598 INTO l_seq_name, l_prefix, l_suffix, l_gen_method
599 FROM
600 (
601 SELECT ICC.ITEM_NUM_SEQ_NAME, ICC.PREFIX, ICC.SUFFIX, ICC.ITEM_NUM_GEN_METHOD
602 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
603 WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
604 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
605 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
606 START WITH ICC.ITEM_CATALOG_GROUP_ID = p_catalog_group_id
607 ORDER BY LEVEL ASC
608 )
609 WHERE ROWNUM = 1;
610
611 IF 'S' <> l_gen_method THEN
612 Debug_Conc_Log( 'GET_NEXT_ITEM_NUMBER for category-'||p_catalog_group_id||': Generation Method was ' || l_gen_method ||', not S.' );
613 RETURN NULL;
614 END IF;
615
616 l_sql := 'SELECT '''||l_prefix||'''||'||l_seq_name||'.NEXTVAL||'''||l_suffix||''' FROM DUAL';
617 EXECUTE IMMEDIATE l_sql INTO l_item_number;
618
619 RETURN l_item_number;
620 EXCEPTION WHEN OTHERS THEN
621 Debug_Conc_Log( 'Error in - GET_NEXT_ITEM_NUMBER for category-'||p_catalog_group_id||': '||SQLCODE||'-'|| SQLERRM );
622 RETURN NULL;
623 END GET_NEXT_ITEM_NUMBER;
624
625 /*
626 * This method gathers statistics on interface tables, if required
627 */
628 PROCEDURE Gather_Stats_For_Intf_Tables(p_data_set_id IN NUMBER) AS
629 l_records NUMBER;
630 l_status VARCHAR2(1000);
631 l_industry VARCHAR2(1000);
632 l_schema VARCHAR2(1000);
633 l_inv_installed BOOLEAN;
634 l_ego_installed BOOLEAN;
635 --6602290 : Stats gather through profile
636 l_stats_profile NUMBER := NVL(FND_PROFILE.VALUE('EGO_GATHER_STATS'),100);
637 BEGIN
638 Debug_Conc_Log('Starting Gather_Stats_For_Intf_Tables');
639 -- checking whether stats needs to be collected on MTL_SYSTEM_ITEMS_INTERFACE
640 SELECT COUNT(1) INTO l_records
641 FROM MTL_SYSTEM_ITEMS_INTERFACE
642 WHERE SET_PROCESS_ID = p_data_set_id;
643
644 l_inv_installed := FND_INSTALLATION.GET_APP_INFO('INV', l_status, l_industry, l_schema);
645 IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
646 FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_SYSTEM_ITEMS_INTERFACE');
647 Debug_Conc_Log('Collected Statistics on MTL_SYSTEM_ITEMS_INTERFACE');
648 END IF;
649
650 -- checking whether stats needs to be collected on MTL_ITEM_REVISIONS_INTERFACE
651 SELECT COUNT(1) INTO l_records
652 FROM MTL_ITEM_REVISIONS_INTERFACE
653 WHERE SET_PROCESS_ID = p_data_set_id;
654
655 IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
656 FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_REVISIONS_INTERFACE');
657 Debug_Conc_Log('Collected Statistics on MTL_ITEM_REVISIONS_INTERFACE');
658 END IF;
659
660 -- checking whether stats needs to be collected on MTL_ITEM_CATEGORIES_INTERFACE
661 SELECT COUNT(1) INTO l_records
662 FROM MTL_ITEM_CATEGORIES_INTERFACE
663 WHERE SET_PROCESS_ID = p_data_set_id;
664
665 IF (l_records > l_stats_profile) AND l_inv_installed AND l_schema IS NOT NULL THEN
666 FND_STATS.GATHER_TABLE_STATS(l_schema, 'MTL_ITEM_CATEGORIES_INTERFACE');
667 Debug_Conc_Log('Collected Statistics on MTL_ITEM_CATEGORIES_INTERFACE');
668 END IF;
669
670 l_ego_installed := FND_INSTALLATION.GET_APP_INFO('EGO', l_status, l_industry, l_schema);
671 -- checking whether stats needs to be collected on EGO_ITEM_PEOPLE_INTF
672 SELECT COUNT(1) INTO l_records
673 FROM EGO_ITEM_PEOPLE_INTF
674 WHERE DATA_SET_ID = p_data_set_id;
675
676 IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
677 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITEM_PEOPLE_INTF');
678 Debug_Conc_Log('Collected Statistics on EGO_ITEM_PEOPLE_INTF');
679 END IF;
680
681 -- checking whether stats needs to be collected on EGO_AML_INTF
682 SELECT COUNT(1) INTO l_records
683 FROM EGO_AML_INTF
684 WHERE DATA_SET_ID = p_data_set_id;
685
686 IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
687 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_AML_INTF');
688 Debug_Conc_Log('Collected Statistics on EGO_AML_INTF');
689 END IF;
690
691 -- checking whether stats needs to be collected on EGO_ITM_USR_ATTR_INTRFC
692 SELECT COUNT(1) INTO l_records
693 FROM EGO_ITM_USR_ATTR_INTRFC
694 WHERE DATA_SET_ID = p_data_set_id;
695
696 IF (l_records > (l_stats_profile*25)) AND l_ego_installed AND l_schema IS NOT NULL THEN
697 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITM_USR_ATTR_INTRFC');
698 Debug_Conc_Log('Collected Statistics on EGO_ITM_USR_ATTR_INTRFC');
699 END IF;
700
701 -- R12C: BEGIN
702 -- checking whether stats needs to be collected on EGO_ITEM_ASSOCIATIONS_INTF
703
704 SELECT COUNT(1) INTO l_records
705 FROM EGO_ITEM_ASSOCIATIONS_INTF
706 WHERE BATCH_ID = p_data_set_id;
707
708 IF (l_records > l_stats_profile) AND l_ego_installed AND l_schema IS NOT NULL THEN
709 FND_STATS.GATHER_TABLE_STATS(l_schema, 'EGO_ITEM_ASSOCIATIONS_INTF');
710 Debug_Conc_Log('Collected Statistics on EGO_ITEM_ASSOCIATIONS_INTF');
711 END IF;
712
713 --R12C: END
714 Debug_Conc_Log('Done Gather_Stats_For_Intf_Tables');
715 EXCEPTION WHEN OTHERS THEN
716 Debug_Conc_Log('Error in Gather_Stats_For_Intf_Tables-'||SQLERRM);
717 END Gather_Stats_For_Intf_Tables;
718
719 --=================================================================================================================--
720 --------------------------------------- Start of Merging Section ----------------------------------------------------
721 --=================================================================================================================--
722 /*
723 * The procedures in this section, both public and private, relate to the task of identifying the rows in various
724 * item interface tables that have the same keys and need to be merged - i.e. collapsed into one row. The result of
725 * the merging operation on a subset of the table should be that there is at most one row for any set of keys.
726 *
727 *
728 * All the MERGE_* procedures take the following arguments:
729 * p_batch_id IN NUMBER =>
730 * The batch identifier (MANDATORY).
731 * p_is_pdh_batch IN FLAG DEFAULT NULL =>
732 * Used to determine the set of keys to use for merging.
733 * - Pass FND_API.G_TRUE to indicate that the batch is a PIMDH batch
734 * - Pass FND_API.G_FALSE to indicate that the batch is a non-PIMDH batch
735 * - If not passed, the batch header will be used to determine whether or not
736 * the batch is a PIMDH batch (absence of a header implies that it is).
737 * p_master_org_id IN NUMBER DEFAULT NULL =>
738 * The ID of the default batch organization, to be used for rows for which neither
739 * ORGANIZATION_ID nor ORGANIZATION_CODE are provided.
740 * If not passed, the ORGANIZATION_ID in the batch header will be used.
741 *
742 * p_commit IN FLAG DEFAULT FND_API.G_FALSE =>
743 * Pass FND_API.G_TRUE to have a COMMIT issued at the end of the procedure.
744 */
745
746 PROCEDURE merge_params_from_batch_header( p_batch_id IN NUMBER
747 , x_is_pdh_batch OUT NOCOPY FLAG
748 , x_master_org_id OUT NOCOPY NUMBER
749 , x_ss_id OUT NOCOPY NUMBER
750 )
751 IS
752 l_org_id NUMBER := NULL;
753 l_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE := NULL;
754 BEGIN
755 Debug_Conc_Log( 'Attempting to resolve merge parameters from batch header for batch_id='
756 || to_char( p_batch_id ) );
757 BEGIN
758 SELECT MP.ORGANIZATION_ID,
759 BA.SOURCE_SYSTEM_ID
760 INTO l_org_id
761 , l_ss_id
762 FROM MTL_PARAMETERS MP
763 , EGO_IMPORT_BATCHES_B ba
764 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
765 AND BA.BATCH_ID = p_batch_id;
766 EXCEPTION
767 WHEN NO_DATA_FOUND THEN
768 Debug_Conc_Log( 'Batch header not found!' );
769 NULL;
770 END;
771
772 x_ss_id := l_ss_id;
773 Debug_Conc_Log( 'SS ID:' || x_ss_id );
774 x_is_pdh_batch := CASE l_ss_id
775 WHEN NULL THEN FND_API.G_TRUE
776 WHEN get_pdh_source_system_id THEN FND_API.G_TRUE
777 ELSE FND_API.G_FALSE
778 END;
779 Debug_Conc_Log( 'Is PDH Batch:' || x_is_pdh_batch );
780 x_master_org_id := l_org_id;
781 Debug_Conc_Log( 'Master Org ID:' || x_master_org_id );
782
783 Debug_Conc_Log( 'Done resolving merge parameters from batch header' );
784 END merge_params_from_batch_header;
785
786
787 PROCEDURE merge_rev_attrs ( p_batch_id IN NUMBER
788 , p_is_pdh_batch IN FLAG DEFAULT NULL
789 , p_ss_id IN NUMBER DEFAULT NULL
790 , p_master_org_id IN NUMBER DEFAULT NULL
791 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
792 )
793 IS
794 --6468564:Perf issue replacing EGO_ATTRS_V
795 CURSOR c_pdh_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
796 SELECT sub.*
797 ,EXT.DATA_TYPE DATA_TYPE_CODE
798 FROM
799 ( SELECT
800 EIUAI.ROWID rid
801 , COUNT( * ) OVER ( PARTITION BY
802 ITEM_NUMBER
803 , ATTR_GROUP_INT_NAME
804 , ATTR_INT_NAME
805 , COALESCE( EIUAI.ORGANIZATION_ID,
806 ( SELECT ORGANIZATION_ID
807 FROM MTL_PARAMETERS P
808 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
809 ),
810 ( SELECT ORGANIZATION_ID
811 FROM MTL_ITEM_REVISIONS_B R
812 WHERE R.REVISION_ID = EIUAI.REVISION_ID
813 ),
814 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
815 )
816 , NVL( eiuai.REVISION,
817 ( SELECT r.REVISION
818 FROM MTL_ITEM_REVISIONS_B r
819 WHERE r.REVISION_ID = eiuai.REVISION_ID
820 )
821 )
822 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
823 )
824 cnt
825 , RANK() OVER ( ORDER BY
826 ITEM_NUMBER
827 , ATTR_GROUP_INT_NAME
828 , ATTR_INT_NAME
829 , COALESCE( EIUAI.ORGANIZATION_ID,
830 ( SELECT ORGANIZATION_ID
831 FROM MTL_PARAMETERS P
832 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
833 ),
834 ( SELECT ORGANIZATION_ID
835 FROM MTL_ITEM_REVISIONS_B R
836 WHERE R.REVISION_ID = EIUAI.REVISION_ID
837 ),
838 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
839 )
840 , NVL( eiuai.REVISION,
841 ( SELECT r.REVISION
842 FROM MTL_ITEM_REVISIONS_B r
843 WHERE r.REVISION_ID = eiuai.REVISION_ID
844 )
845 )
846 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
847 )
848 rnk
849 , eiuai.*
850 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
851 WHERE DATA_SET_ID = p_batch_id
852 AND PROCESS_STATUS = 1
853 AND ITEM_NUMBER IS NOT NULL
854 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
855 AND FL_CTX_EXT.APPLICATION_ID = 431
856 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
857 AND FL_CTX_EXT.MULTI_ROW = 'N'
858 AND EXISTS( SELECT NULL
859 FROM EGO_ATTR_GROUP_DL A
860 WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
861 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
862 )
863 ) sub
864 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
865 ,EGO_FND_DF_COL_USGS_EXT EXT
866 WHERE sub.CNT > 1
867 AND FL_COL.APPLICATION_ID = 431
868 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
869 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
870 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
871 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
872 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
873 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
874 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
875 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
876
877 --6468564:Perf issue replacing EGO_ATTRS_V
878 CURSOR c_ss_target_rev_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE, cp_rev_dl_id NUMBER ) IS
879 SELECT sub.*
880 ,EXT.DATA_TYPE DATA_TYPE_CODE
881 FROM
882 ( SELECT
883 EIUAI.ROWID rid
884 , COUNT( * ) OVER ( PARTITION BY
885 SOURCE_SYSTEM_ID
886 , SOURCE_SYSTEM_REFERENCE
887 , ATTR_GROUP_INT_NAME
888 , ATTR_INT_NAME
889 , COALESCE( EIUAI.ORGANIZATION_ID,
890 ( SELECT ORGANIZATION_ID
891 FROM MTL_PARAMETERS P
892 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
893 ),
894 ( SELECT ORGANIZATION_ID
895 FROM MTL_ITEM_REVISIONS_B R
896 WHERE R.REVISION_ID = EIUAI.REVISION_ID
897 ),
898 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
899 )
900 , NVL( eiuai.REVISION,
901 ( SELECT r.REVISION
902 FROM MTL_ITEM_REVISIONS_B r
903 WHERE r.REVISION_ID = eiuai.REVISION_ID
904 )
905 )
906 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
907 )
908 cnt
909 , RANK() OVER ( ORDER BY
910 SOURCE_SYSTEM_ID
911 , SOURCE_SYSTEM_REFERENCE
912 , ATTR_GROUP_INT_NAME
913 , ATTR_INT_NAME
914 , COALESCE( EIUAI.ORGANIZATION_ID,
915 ( SELECT ORGANIZATION_ID
916 FROM MTL_PARAMETERS P
917 WHERE P.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE
918 ),
919 ( SELECT ORGANIZATION_ID
920 FROM MTL_ITEM_REVISIONS_B R
921 WHERE R.REVISION_ID = EIUAI.REVISION_ID
922 ),
923 NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
924 )
925 , NVL( eiuai.REVISION,
926 ( SELECT r.REVISION
927 FROM MTL_ITEM_REVISIONS_B r
928 WHERE r.REVISION_ID = eiuai.REVISION_ID
929 )
930 )
931 , NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
932 )
933 rnk
934 , eiuai.*
935 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
936 WHERE DATA_SET_ID = p_batch_id
937 AND PROCESS_STATUS = 0
938 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
939 AND FL_CTX_EXT.APPLICATION_ID = 431
940 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
941 AND FL_CTX_EXT.MULTI_ROW = 'N'
942 AND EXISTS( SELECT NULL
943 FROM EGO_ATTR_GROUP_DL A
944 WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
945 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
946 )
947 ) sub
948 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
949 ,EGO_FND_DF_COL_USGS_EXT EXT
950 WHERE sub.CNT > 1
951 AND FL_COL.APPLICATION_ID = 431
952 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
953 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
954 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
955 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
956 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
957 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
958 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
959 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
960
961 TYPE TARGET_ROWS IS TABLE OF c_pdh_target_rev_attrs%ROWTYPE;
962
963 l_merged_rows EIUAI_ROWS;
964 l_merge_base EIUAI_ROW;
965 l_old_rows TARGET_ROWS;
966 l_old_rowids UROWID_TABLE;
967
968 l_ss_id EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
969 l_ssr EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
970 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
971
972 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
973 l_mrow_ix PLS_INTEGER := 0;
974 l_is_pdh_batch BOOLEAN;
975
976 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
977
978 l_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
979 l_pdh_batch_flag FLAG := p_is_pdh_batch;
980 l_rev_dl_id NUMBER;
981
982 l_proc_log_prefix CONSTANT VARCHAR2(30) := ' merge_rev_attrs - ';
983 BEGIN
984 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
985 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
986 BEGIN
987 SELECT DATA_LEVEL_ID INTO l_rev_dl_id
988 FROM EGO_DATA_LEVEL_B
989 WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
990 AND APPLICATION_ID = 431
991 AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
992 EXCEPTION WHEN NO_DATA_FOUND THEN
993 RETURN;
994 END;
995 Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
996 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
997 merge_params_from_batch_header( p_batch_id => p_batch_id
998 , x_is_pdh_batch => l_pdh_batch_flag
999 , x_ss_id => l_ss_id
1000 , x_master_org_id => l_org_id
1001 );
1002 END IF;
1003 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: '|| l_org_id );
1004 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1005 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: '|| l_pdh_batch_flag );
1006
1007 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
1008 IF l_is_pdh_batch THEN
1009 -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1010 OPEN c_pdh_target_rev_attrs( l_org_id, l_rev_dl_id );
1011 FETCH c_pdh_target_rev_attrs BULK COLLECT INTO l_old_rows;
1012 CLOSE c_pdh_target_rev_attrs;
1013 ELSE
1014 -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1015 OPEN c_ss_target_rev_attrs( l_org_id, l_rev_dl_id );
1016 FETCH c_ss_target_rev_attrs BULK COLLECT INTO l_old_rows;
1017 CLOSE c_ss_target_rev_attrs;
1018 END IF;
1019
1020 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1021 IF 0 <> l_old_rows.COUNT THEN
1022 -- attributes common to every merged row
1023 l_merge_base.DATA_SET_ID := p_batch_id;
1024 l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1025
1026 l_old_rowids := UROWID_TABLE( );
1027 l_old_rowids.EXTEND( l_old_rows.COUNT );
1028
1029 -- process the item-level attrs
1030 FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1031 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1032
1033 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1034 l_cur_rank := l_old_rows( orow_ix ).RNK;
1035 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
1036 l_mrow_ix := l_mrow_ix + 1;
1037 l_merged_rows( l_mrow_ix ) := l_merge_base;
1038 IF NOT l_is_pdh_batch THEN
1039 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1040 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1041 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1042 END IF;
1043
1044 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1045 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_old_rows( orow_ix ).ATTR_INT_NAME;
1046 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1047 l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1048 Debug_Conc_Log( l_proc_log_prefix || ' AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1049 || ', Attr = ' || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1050 || ', AttrDataTypeCode = ' || l_data_type_code
1051 );
1052 ELSE
1053 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
1054 END IF;
1055
1056 -- Special Cases:
1057 -- Transaction type
1058 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1059
1060 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1061 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
1062 THEN
1063 -- CREATE > SYNC > UPDATE : order of case expression matters
1064 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1065 CASE
1066 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1067 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
1068 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1069 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
1070 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1071 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
1072 ELSE NULL -- INVALID transaction types encountered so far ...
1073 END;
1074 END IF;
1075
1076
1077 -- The following columns need to be treated as atomic groups
1078 -- 1. Item Identifier
1079 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
1080 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
1081 THEN
1082 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1083 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := l_old_rows( orow_ix ).ITEM_NUMBER;
1084 END IF;
1085
1086 -- 2. Organization
1087 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
1088 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
1089 THEN
1090 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1091 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1092 END IF;
1093
1094 -- 3. Revision
1095
1096 -- 4. The attribute value
1097 IF l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE IS NULL
1098 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR IS NULL
1099 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE IS NULL
1100 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM IS NULL
1101 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM IS NULL
1102 AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE IS NULL
1103 THEN
1104 CASE
1105 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
1106 IF l_old_rows( orow_ix ).ATTR_VALUE_STR IS NOT NULL
1107 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1108 THEN
1109 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1110 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1111 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1112 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1113 END IF;
1114 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
1115 IF l_old_rows( orow_ix ).ATTR_VALUE_DATE IS NOT NULL
1116 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1117 THEN
1118 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1119 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1120 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1121 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1122 END IF;
1123 WHEN l_data_type_code = 'N' THEN -- Num Attribute
1124 IF l_old_rows( orow_ix ).ATTR_VALUE_NUM IS NOT NULL
1125 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1126 THEN
1127 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1128 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1129 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1130 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1131 END IF;
1132 END CASE;
1133 END IF;
1134
1135 -- Non-special cased
1136 -- Start Generated Code
1137 /* Generated using:
1138 SET LINESIZE 200
1139 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
1140 FROM ALL_TAB_COLUMNS
1141 WHERE TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1142 AND COLUMN_NAME NOT IN
1143 ( -- special cases (for merge)
1144 'INVENTORY_ITEM_ID'
1145 , 'ITEM_NUMBER'
1146 , 'ORGANIZATION_ID'
1147 , 'ORGANIZATION_CODE'
1148 , 'TRANSACTION_TYPE'
1149 , 'ATTR_INT_NAME'
1150 , 'ATTR_GROUP_INT_NAME'
1151 , 'ATTR_DISP_VALUE'
1152 , 'ATTR_VALUE_STR'
1153 , 'ATTR_VALUE_DATE'
1154 , 'ATTR_VALUE_NUM'
1155 , 'ATTR_VALUE_UOM'
1156 , 'ATTR_UOM_DISP_VALUE'
1157 , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1158 -- special columns
1159 , 'DATA_SET_ID'
1160 , 'PROCESS_STATUS'
1161 , 'SOURCE_SYSTEM_ID'
1162 , 'SOURCE_SYSTEM_REFERENCE'
1163 , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1164 -- who columns
1165 , 'LAST_UPDATE_DATE'
1166 , 'CREATION_DATE'
1167 , 'CREATED_BY'
1168 , 'LAST_UPDATED_BY'
1169 , 'LAST_UPDATE_LOGIN'
1170 -- XXX: exclude concurrent processing columns?
1171 )
1172 ORDER BY COLUMN_NAME ASC
1173 */
1174 if l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE is null then l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE := l_old_rows( orow_ix ).ATTR_GROUP_TYPE; end if;
1175 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
1176 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := l_old_rows( orow_ix ).CHANGE_LINE_ID; end if;
1177 if l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID is null then l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := l_old_rows( orow_ix ).ITEM_CATALOG_GROUP_ID; end if;
1178 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
1179 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
1180 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
1181 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := l_old_rows( orow_ix ).REVISION; end if;
1182 if l_merged_rows( l_mrow_ix ).REVISION_ID is null then l_merged_rows( l_mrow_ix ).REVISION_ID := l_old_rows( orow_ix ).REVISION_ID; end if;
1183 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
1184 if l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER is null then l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_old_rows( orow_ix ).ROW_IDENTIFIER; end if;
1185 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
1186 -- End Generated Code
1187 END LOOP; -- loop over old rows
1188
1189 /*
1190 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1191 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1192 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1193 END IF;
1194 */
1195 IF l_merged_rows IS NOT NULL THEN
1196 -- delete
1197 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
1198 FORALL rid_ix IN INDICES OF l_old_rowids
1199 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1200 WHERE ROWID = l_old_rowids( rid_ix );
1201 -- insert
1202 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
1203 FORALL row_index IN INDICES OF l_merged_rows
1204 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1205 VALUES l_merged_rows( row_index );
1206 END IF;
1207 END IF; -- ENDS IF l_old_rows.count <> 0
1208
1209 IF p_commit = FND_API.G_TRUE THEN
1210 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1211 COMMIT;
1212 END IF;
1213 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1214 END merge_rev_attrs;
1215
1216 PROCEDURE merge_item_attrs ( p_batch_id IN NUMBER
1217 , p_is_pdh_batch IN FLAG DEFAULT NULL
1218 , p_ss_id IN NUMBER DEFAULT NULL
1219 , p_master_org_id IN NUMBER DEFAULT NULL
1220 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
1221 )
1222 IS
1223
1224 --6468564:Perf issue replacing EGO_ATTRS_V
1225 CURSOR c_pdh_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1226 SELECT sub.*
1227 ,EXT.DATA_TYPE DATA_TYPE_CODE
1228 FROM
1229 ( SELECT
1230 eiuai.ROWID rid
1231 , COUNT( * ) OVER ( PARTITION BY
1232 ITEM_NUMBER
1233 , ATTR_GROUP_INT_NAME
1234 , ATTR_INT_NAME
1235 , DATA_LEVEL_ID
1236 , PK1_VALUE
1237 , PK2_VALUE
1238 , PK3_VALUE
1239 , PK4_VALUE
1240 , PK5_VALUE
1241 , COALESCE ( eiuai.ORGANIZATION_ID
1242 , ( SELECT ORGANIZATION_ID
1243 FROM MTL_PARAMETERS p
1244 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1245 )
1246 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1247 )
1248 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1249 )
1250 cnt
1251 , RANK() OVER ( ORDER BY
1252 ITEM_NUMBER
1253 , ATTR_GROUP_INT_NAME
1254 , ATTR_INT_NAME
1255 , DATA_LEVEL_ID
1256 , PK1_VALUE
1257 , PK2_VALUE
1258 , PK3_VALUE
1259 , PK4_VALUE
1260 , PK5_VALUE
1261 , COALESCE ( eiuai.ORGANIZATION_ID
1262 , ( SELECT ORGANIZATION_ID
1263 FROM MTL_PARAMETERS p
1264 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1265 )
1266 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1267 )
1268 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1269 )
1270 rnk
1271 , eiuai.*
1272 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1273 WHERE DATA_SET_ID = p_batch_id
1274 AND PROCESS_STATUS = 1
1275 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1276 AND FL_CTX_EXT.APPLICATION_ID = 431
1277 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1278 AND FL_CTX_EXT.MULTI_ROW = 'N'
1279 AND EXISTS( SELECT NULL
1280 FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1281 WHERE DL.APPLICATION_ID = 431
1282 AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1283 AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1284 AND DL.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
1285 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
1286 )
1287 ) sub
1288 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1289 ,EGO_FND_DF_COL_USGS_EXT EXT
1290 WHERE sub.CNT > 1
1291 AND FL_COL.APPLICATION_ID = 431
1292 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1293 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
1294 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
1295 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
1296 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1297 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1298 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
1299 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1300
1301 --6468564 : Perf issue replacing EGO_ATTRS_V
1302 CURSOR c_ss_target_item_attrs( cp_master_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE ) IS
1303 SELECT sub.*
1304 ,EXT.DATA_TYPE DATA_TYPE_CODE
1305 FROM
1306 ( SELECT
1307 EIUAI.ROWID rid
1308 , COUNT( * ) OVER ( PARTITION BY
1309 SOURCE_SYSTEM_ID
1310 , SOURCE_SYSTEM_REFERENCE
1311 , ATTR_GROUP_INT_NAME
1312 , ATTR_INT_NAME
1313 , DATA_LEVEL_ID
1314 , PK1_VALUE
1315 , PK2_VALUE
1316 , PK3_VALUE
1317 , PK4_VALUE
1318 , PK5_VALUE
1319 , COALESCE ( eiuai.ORGANIZATION_ID
1320 , ( SELECT ORGANIZATION_ID
1321 FROM MTL_PARAMETERS p
1322 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1323 )
1324 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1325 )
1326 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1327 )
1328 cnt
1329 , RANK() OVER ( ORDER BY
1330 SOURCE_SYSTEM_ID
1331 , SOURCE_SYSTEM_REFERENCE
1332 , ATTR_GROUP_INT_NAME
1333 , ATTR_INT_NAME
1334 , DATA_LEVEL_ID
1335 , PK1_VALUE
1336 , PK2_VALUE
1337 , PK3_VALUE
1338 , PK4_VALUE
1339 , PK5_VALUE
1340 , COALESCE ( eiuai.ORGANIZATION_ID
1341 , ( SELECT ORGANIZATION_ID
1342 FROM MTL_PARAMETERS p
1343 WHERE p.ORGANIZATION_CODE = eiuai.ORGANIZATION_CODE
1344 )
1345 , NVL2( ORGANIZATION_CODE, cp_master_org_id, NULL )
1346 )
1347 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1348 )
1349 rnk
1350 , eiuai.*
1351 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
1352 WHERE DATA_SET_ID = p_batch_id
1353 AND PROCESS_STATUS = 0
1354 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
1355 AND FL_CTX_EXT.APPLICATION_ID = 431
1356 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
1357 AND FL_CTX_EXT.MULTI_ROW = 'N'
1358 AND EXISTS( SELECT NULL
1359 FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
1360 WHERE DL.APPLICATION_ID = 431
1361 AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
1362 AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
1363 AND DL.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
1364 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
1365 )
1366 ) sub
1367 ,FND_DESCR_FLEX_COLUMN_USAGES FL_COL
1368 ,EGO_FND_DF_COL_USGS_EXT EXT
1369 WHERE sub.CNT > 1
1370 AND FL_COL.APPLICATION_ID = 431
1371 AND FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE = sub.ATTR_GROUP_INT_NAME
1372 AND FL_COL.END_USER_COLUMN_NAME = sub.ATTR_INT_NAME
1373 AND FL_COL.DESCRIPTIVE_FLEXFIELD_NAME = SUB.ATTR_GROUP_TYPE
1374 AND EXT.APPLICATION_ID = FL_COL.APPLICATION_ID
1375 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = FL_COL.DESCRIPTIVE_FLEXFIELD_NAME
1376 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = FL_COL.DESCRIPTIVE_FLEX_CONTEXT_CODE
1377 AND EXT.APPLICATION_COLUMN_NAME = FL_COL.APPLICATION_COLUMN_NAME
1378 ORDER BY rnk, sub.last_update_date DESC, interface_table_unique_id DESC ;
1379
1380 TYPE TARGET_ROWS IS TABLE OF c_ss_target_item_attrs%ROWTYPE;
1381
1382 l_merged_rows EIUAI_ROWS;
1383 l_merge_base EIUAI_ROW;
1384 l_old_rows TARGET_ROWS;
1385 l_old_rowids UROWID_TABLE;
1386
1387 l_ss_id EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1388 l_ssr EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE;
1389 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
1390
1391 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
1392 l_mrow_ix PLS_INTEGER := 0;
1393 l_is_pdh_batch BOOLEAN;
1394
1395 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
1396 l_org_id EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE := p_master_org_id;
1397 l_pdh_batch_flag FLAG := p_is_pdh_batch;
1398
1399 l_proc_log_prefix CONSTANT VARCHAR2(30) := ' merge_item_attrs - ';
1400 BEGIN
1401 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1402 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1403 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1404 merge_params_from_batch_header( p_batch_id => p_batch_id
1405 , x_is_pdh_batch => l_pdh_batch_flag
1406 , x_master_org_id => l_org_id
1407 , x_ss_id => l_ss_id
1408 );
1409 END IF;
1410 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1411 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1412 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1413
1414 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
1415 IF l_is_pdh_batch THEN
1416 -- DBMS_OUTPUT.PUT_LINE( 'PDH Batch' );
1417 OPEN c_pdh_target_item_attrs( l_org_id );
1418 FETCH c_pdh_target_item_attrs BULK COLLECT INTO l_old_rows;
1419 CLOSE c_pdh_target_item_attrs;
1420 ELSE
1421 -- DBMS_OUTPUT.PUT_LINE( 'SS Batch' );
1422 OPEN c_ss_target_item_attrs( l_org_id );
1423 FETCH c_ss_target_item_attrs BULK COLLECT INTO l_old_rows;
1424 CLOSE c_ss_target_item_attrs;
1425 END IF;
1426
1427 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
1428 IF 0 <> l_old_rows.COUNT THEN
1429 -- attributes common to every merged row
1430 l_merge_base.DATA_SET_ID := p_batch_id;
1431 l_merge_base.PROCESS_STATUS := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1432
1433 l_old_rowids := UROWID_TABLE( );
1434 l_old_rowids.EXTEND( l_old_rows.COUNT );
1435
1436 -- process the item-level attrs
1437 FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
1438 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
1439
1440 IF( l_old_rows( orow_ix ).RNK <> l_cur_rank ) THEN
1441 l_cur_rank := l_old_rows( orow_ix ).RNK;
1442 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
1443 l_mrow_ix := l_mrow_ix + 1;
1444 l_merged_rows( l_mrow_ix ) := l_merge_base;
1445 IF NOT l_is_pdh_batch THEN
1446 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
1447 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
1448 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1449 END IF;
1450
1451 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_old_rows( orow_ix ).ATTR_GROUP_INT_NAME;
1452 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_old_rows( orow_ix ).ATTR_INT_NAME;
1453 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_old_rows( orow_ix ).DATA_LEVEL_ID;
1454 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_old_rows( orow_ix ).DATA_LEVEL_NAME;
1455 l_merged_rows( l_mrow_ix ).PK1_VALUE := l_old_rows( orow_ix ).PK1_VALUE;
1456 l_merged_rows( l_mrow_ix ).PK2_VALUE := l_old_rows( orow_ix ).PK2_VALUE;
1457 l_merged_rows( l_mrow_ix ).PK3_VALUE := l_old_rows( orow_ix ).PK3_VALUE;
1458 l_merged_rows( l_mrow_ix ).PK4_VALUE := l_old_rows( orow_ix ).PK4_VALUE;
1459 l_merged_rows( l_mrow_ix ).PK5_VALUE := l_old_rows( orow_ix ).PK5_VALUE;
1460 l_data_type_code := l_old_rows( orow_ix ).DATA_TYPE_CODE;
1461 Debug_Conc_Log( l_proc_log_prefix || ' AttrGroup = ' || l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME
1462 || ', Attr = ' || l_merged_rows( l_mrow_ix ).ATTR_INT_NAME
1463 || ', AttrDataTypeCode = ' || l_data_type_code
1464 );
1465 ELSE
1466 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
1467 END IF;
1468
1469 -- Special Cases:
1470 -- Transaction type
1471 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
1472
1473 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1474 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
1475 THEN
1476 -- CREATE > SYNC > UPDATE : order of case expression matters
1477 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1478 CASE
1479 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1480 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
1481 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1482 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
1483 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1484 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
1485 ELSE NULL -- INVALID transaction types encountered so far ...
1486 END;
1487 END IF;
1488
1489
1490 -- The following columns need to be treated as atomic groups
1491 -- 1. Item Identifier
1492 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
1493 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
1494 THEN
1495 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
1496 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := l_old_rows( orow_ix ).ITEM_NUMBER;
1497 END IF;
1498
1499 -- 2. Organization
1500 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
1501 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
1502 THEN
1503 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := l_old_rows( orow_ix ).ORGANIZATION_ID ;
1504 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := l_old_rows( orow_ix ).ORGANIZATION_CODE ;
1505 END IF;
1506
1507 -- 3. The attribute value
1508 IF l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE IS NULL
1509 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR IS NULL
1510 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE IS NULL
1511 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM IS NULL
1512 AND l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM IS NULL
1513 AND l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE IS NULL
1514 THEN
1515 CASE
1516 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
1517 IF l_old_rows( orow_ix ).ATTR_VALUE_STR IS NOT NULL
1518 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1519 THEN
1520 l_merged_rows( l_mrow_ix ).ATTR_VALUE_STR := l_old_rows( orow_ix ).ATTR_VALUE_STR;
1521 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1522 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1523 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1524 END IF;
1525 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
1526 IF l_old_rows( orow_ix ).ATTR_VALUE_DATE IS NOT NULL
1527 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1528 THEN
1529 l_merged_rows( l_mrow_ix ).ATTR_VALUE_DATE := l_old_rows( orow_ix ).ATTR_VALUE_DATE;
1530 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1531 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1532 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1533 END IF;
1534 WHEN l_data_type_code = 'N' THEN -- Num Attribute
1535 IF l_old_rows( orow_ix ).ATTR_VALUE_NUM IS NOT NULL
1536 OR l_old_rows( orow_ix ).ATTR_DISP_VALUE IS NOT NULL
1537 THEN
1538 l_merged_rows( l_mrow_ix ).ATTR_VALUE_NUM := l_old_rows( orow_ix ).ATTR_VALUE_NUM;
1539 l_merged_rows( l_mrow_ix ).ATTR_DISP_VALUE := l_old_rows( orow_ix ).ATTR_DISP_VALUE;
1540 l_merged_rows( l_mrow_ix ).ATTR_VALUE_UOM := l_old_rows( orow_ix ).ATTR_VALUE_UOM;
1541 l_merged_rows( l_mrow_ix ).ATTR_UOM_DISP_VALUE := l_old_rows( orow_ix ).ATTR_UOM_DISP_VALUE;
1542 END IF;
1543 END CASE;
1544 END IF;
1545
1546 -- Non-special cased
1547 -- Start Generated Code
1548 /* Generated using:
1549 SET LINESIZE 200
1550 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
1551 FROM ALL_TAB_COLUMNS
1552 WHERE TABLE_NAME = 'EGO_ITM_USR_ATTR_INTRFC'
1553 AND COLUMN_NAME NOT IN
1554 ( -- special cases (for merge)
1555 'INVENTORY_ITEM_ID'
1556 , 'ITEM_NUMBER'
1557 , 'ORGANIZATION_ID'
1558 , 'ORGANIZATION_CODE'
1559 , 'TRANSACTION_TYPE'
1560 , 'REVISION_ID' -- ignore for item-level attrs
1561 , 'REVISION' -- ignore for item-level attrs
1562 , 'ATTR_INT_NAME'
1563 , 'ATTR_GROUP_INT_NAME'
1564 , 'ATTR_DISP_VALUE'
1565 , 'ATTR_VALUE_STR'
1566 , 'ATTR_VALUE_DATE'
1567 , 'ATTR_VALUE_NUM'
1568 , 'ATTR_VALUE_UOM'
1569 , 'ATTR_UOM_DISP_VALUE'
1570 , 'ATTR_GROUP_ID' -- ignore; assume will be filled during processing
1571 -- special columns
1572 , 'DATA_SET_ID'
1573 , 'PROCESS_STATUS'
1574 , 'SOURCE_SYSTEM_ID'
1575 , 'SOURCE_SYSTEM_REFERENCE'
1576 , 'INTERFACE_TABLE_UNIQUE_ID' -- should be handled by INSERT trigger
1577 -- who columns
1578 , 'LAST_UPDATE_DATE'
1579 , 'CREATION_DATE'
1580 , 'CREATED_BY'
1581 , 'LAST_UPDATED_BY'
1582 , 'LAST_UPDATE_LOGIN'
1583 -- XXX: exclude concurrent processing columns?
1584 )
1585 ORDER BY COLUMN_NAME ASC
1586 */
1587 if l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE is null then l_merged_rows( l_mrow_ix ).ATTR_GROUP_TYPE := l_old_rows( orow_ix ).ATTR_GROUP_TYPE; end if;
1588 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
1589 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := l_old_rows( orow_ix ).CHANGE_LINE_ID; end if;
1590 if l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID is null then l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := l_old_rows( orow_ix ).ITEM_CATALOG_GROUP_ID; end if;
1591 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
1592 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
1593 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
1594 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
1595 if l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER is null then l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_old_rows( orow_ix ).ROW_IDENTIFIER; end if;
1596 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
1597 -- End Generated Code
1598 END LOOP; -- loop over old rows
1599
1600 /*
1601 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
1602 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
1603 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
1604 END IF;
1605 */
1606 IF l_merged_rows IS NOT NULL THEN
1607 -- delete
1608 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
1609 FORALL rid_ix IN INDICES OF l_old_rowids
1610 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
1611 WHERE ROWID = l_old_rowids( rid_ix );
1612 -- insert
1613 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
1614 FORALL row_index IN INDICES OF l_merged_rows
1615 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
1616 VALUES l_merged_rows( row_index );
1617 END IF;
1618 END IF; -- ENDS IF l_old_rows.count <> 0
1619
1620 IF p_commit = FND_API.G_TRUE THEN
1621 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
1622 COMMIT;
1623 END IF;
1624 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
1625 END merge_item_attrs;
1626
1627 PROCEDURE merge_items( p_batch_id IN NUMBER
1628 , p_is_pdh_batch IN FLAG
1629 , p_ss_id IN NUMBER DEFAULT NULL
1630 , p_master_org_id IN NUMBER DEFAULT NULL
1631 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
1632 )
1633 IS
1634 TYPE MSII_ROWS IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
1635
1636 /*
1637 * This cursor is never executed.
1638 * It's only used for type definition.
1639 */
1640 CURSOR c_target_rec_type IS
1641 SELECT ROWID rid
1642 , 0 cnt
1643 , 0 rnk
1644 , 'N' excluded_flag
1645 , msii.*
1646 FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
1647
1648 /*
1649 * Types for fetching the rows to merged.
1650 */
1651 TYPE MSII_CURSOR IS REF CURSOR;
1652 c_target_rows MSII_CURSOR;
1653 old_row c_target_rec_type%ROWTYPE;
1654
1655 l_merged_rows MSII_ROWS;
1656 l_merge_base MSII_ROW;
1657 l_old_rowids UROWID_TABLE;
1658
1659 l_ss_id MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
1660 l_ssr MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
1661 l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
1662
1663 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
1664 l_mrow_ix PLS_INTEGER := 0;
1665 l_is_pdh_batch BOOLEAN;
1666 l_excluded_flag VARCHAR2(1);
1667
1668 l_org_id MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
1669 l_pdh_batch_flag FLAG := p_is_pdh_batch;
1670 l_proc_log_prefix CONSTANT VARCHAR2( 30 ) := 'merge_items - ';
1671 BEGIN
1672 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
1673 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
1674 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
1675 merge_params_from_batch_header( p_batch_id => p_batch_id
1676 , x_is_pdh_batch => l_pdh_batch_flag
1677 , x_master_org_id => l_org_id
1678 , x_ss_id => l_ss_id
1679 );
1680 END IF;
1681 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
1682 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
1683 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
1684
1685 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
1686 IF l_is_pdh_batch THEN
1687 OPEN c_target_rows FOR
1688 SELECT *
1689 FROM
1690 ( SELECT
1691 ROWID rid,
1692 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER
1693 , ORGANIZATION_ID
1694 )
1695 cnt
1696 , RANK() OVER ( ORDER BY ITEM_NUMBER
1697 , ORGANIZATION_ID
1698 )
1699 rnk
1700 , null EXCLUDED_FLAG
1701 , msii.*
1702 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1703 WHERE PROCESS_FLAG = 1
1704 AND SET_PROCESS_ID = p_batch_id
1705 AND ( SOURCE_SYSTEM_ID IS NULL
1706 OR SOURCE_SYSTEM_ID = G_PDH_SOURCE_SYSTEM_ID
1707 )
1708 AND ITEM_NUMBER IS NOT NULL
1709 AND ORGANIZATION_ID IS NOT NULL
1710 AND EXISTS ( SELECT NULL
1711 FROM MTL_PARAMETERS mp
1712 WHERE mp.ORGANIZATION_ID = msii.ORGANIZATION_ID
1713 AND mp.MASTER_ORGANIZATION_ID = l_org_id
1714 )
1715 )
1716 sub
1717 WHERE sub.cnt > 1
1718 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1719 ELSE
1720 OPEN c_target_rows FOR
1721 SELECT *
1722 FROM
1723 ( SELECT
1724 ROWID rid,
1725 COUNT( * ) OVER ( PARTITION BY SOURCE_SYSTEM_ID
1726 , SOURCE_SYSTEM_REFERENCE
1727 , ORGANIZATION_ID
1728 )
1729 cnt
1730 , RANK() OVER ( ORDER BY SOURCE_SYSTEM_ID
1731 , SOURCE_SYSTEM_REFERENCE
1732 , ORGANIZATION_ID
1733 )
1734 rnk
1735 , ( SELECT 'Y' FROM DUAL
1736 WHERE EXISTS (
1737 SELECT NULL FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
1738 WHERE SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
1739 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
1740 )
1741 )
1742 EXCLUDED_FLAG
1743 , msii.*
1744 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
1745 WHERE PROCESS_FLAG = 0
1746 AND SET_PROCESS_ID = p_batch_id
1747 AND SOURCE_SYSTEM_ID = l_ss_id
1748 AND SOURCE_SYSTEM_REFERENCE IS NOT NULL
1749 AND ORGANIZATION_ID IS NOT NULL
1750 AND EXISTS ( SELECT NULL
1751 FROM MTL_PARAMETERS mp
1752 WHERE mp.ORGANIZATION_ID = msii.ORGANIZATION_ID
1753 AND mp.MASTER_ORGANIZATION_ID = l_org_id
1754 )
1755 )
1756 sub
1757 WHERE sub.cnt > 1
1758 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
1759 END IF;
1760
1761 -- attributes common to every merged row
1762 l_merge_base.SET_PROCESS_ID := p_batch_id;
1763 l_merge_base.PROCESS_FLAG := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
1764
1765 l_old_rowids := UROWID_TABLE( );
1766 LOOP
1767 FETCH c_target_rows INTO old_row;
1768 EXIT WHEN c_target_rows%NOTFOUND;
1769
1770 l_old_rowids.EXTEND;
1771 l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
1772
1773 IF( old_row.RNK <> l_cur_rank ) THEN
1774 IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch) THEN
1775 IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
1776 AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
1777 THEN
1778 l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
1779 END IF;
1780 IF( l_excluded_flag IS NOT NULL ) THEN
1781 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1782 END IF;
1783 END IF; --IF( l_cur_rank <> 0 AND NOT l_is_pdh_batch)
1784
1785 l_cur_rank := old_row.RNK;
1786 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
1787 l_mrow_ix := l_mrow_ix + 1;
1788 l_merged_rows( l_mrow_ix ) := l_merge_base;
1789 IF NOT l_is_pdh_batch THEN
1790 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := old_row.SOURCE_SYSTEM_ID;
1791 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := old_row.SOURCE_SYSTEM_REFERENCE;
1792 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference: ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
1793 END IF;
1794 ELSE
1795 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
1796 END IF;
1797
1798 -- Special Cases:
1799 -- Transaction type
1800 l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
1801 l_excluded_flag := old_row.EXCLUDED_FLAG;
1802
1803 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
1804 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
1805 THEN
1806 -- CREATE > SYNC > UPDATE : order of case expression matters
1807 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
1808 CASE
1809 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
1810 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
1811 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
1812 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
1813 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
1814 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
1815 ELSE NULL -- INVALID transaction types encountered so far ...
1816 END;
1817 END IF;
1818 Debug_Conc_Log('The Old - item columns are - ' || old_row.INVENTORY_ITEM_ID || ' -- ' || old_row.CONFIRM_STATUS );
1819
1820 -- The following columns need to be treated as atomic groups
1821 -- 1. Item Identifier
1822 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
1823 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
1824 AND l_merged_rows( l_mrow_ix ).SEGMENT1 IS NULL
1825 AND l_merged_rows( l_mrow_ix ).SEGMENT2 IS NULL
1826 AND l_merged_rows( l_mrow_ix ).SEGMENT3 IS NULL
1827 AND l_merged_rows( l_mrow_ix ).SEGMENT4 IS NULL
1828 AND l_merged_rows( l_mrow_ix ).SEGMENT5 IS NULL
1829 AND l_merged_rows( l_mrow_ix ).SEGMENT6 IS NULL
1830 AND l_merged_rows( l_mrow_ix ).SEGMENT7 IS NULL
1831 AND l_merged_rows( l_mrow_ix ).SEGMENT8 IS NULL
1832 AND l_merged_rows( l_mrow_ix ).SEGMENT9 IS NULL
1833 AND l_merged_rows( l_mrow_ix ).SEGMENT10 IS NULL
1834 AND l_merged_rows( l_mrow_ix ).SEGMENT11 IS NULL
1835 AND l_merged_rows( l_mrow_ix ).SEGMENT12 IS NULL
1836 AND l_merged_rows( l_mrow_ix ).SEGMENT13 IS NULL
1837 AND l_merged_rows( l_mrow_ix ).SEGMENT14 IS NULL
1838 AND l_merged_rows( l_mrow_ix ).SEGMENT15 IS NULL
1839 AND l_merged_rows( l_mrow_ix ).SEGMENT16 IS NULL
1840 AND l_merged_rows( l_mrow_ix ).SEGMENT17 IS NULL
1841 AND l_merged_rows( l_mrow_ix ).SEGMENT18 IS NULL
1842 AND l_merged_rows( l_mrow_ix ).SEGMENT19 IS NULL
1843 AND l_merged_rows( l_mrow_ix ).SEGMENT20 IS NULL
1844 THEN
1845 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := old_row.INVENTORY_ITEM_ID;
1846 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := old_row.ITEM_NUMBER;
1847 l_merged_rows( l_mrow_ix ).SEGMENT1 := old_row.SEGMENT1;
1848 l_merged_rows( l_mrow_ix ).SEGMENT2 := old_row.SEGMENT2;
1849 l_merged_rows( l_mrow_ix ).SEGMENT3 := old_row.SEGMENT3;
1850 l_merged_rows( l_mrow_ix ).SEGMENT4 := old_row.SEGMENT4;
1851 l_merged_rows( l_mrow_ix ).SEGMENT5 := old_row.SEGMENT5;
1852 l_merged_rows( l_mrow_ix ).SEGMENT6 := old_row.SEGMENT6;
1853 l_merged_rows( l_mrow_ix ).SEGMENT7 := old_row.SEGMENT7;
1854 l_merged_rows( l_mrow_ix ).SEGMENT8 := old_row.SEGMENT8;
1855 l_merged_rows( l_mrow_ix ).SEGMENT9 := old_row.SEGMENT9;
1856 l_merged_rows( l_mrow_ix ).SEGMENT10 := old_row.SEGMENT10;
1857 l_merged_rows( l_mrow_ix ).SEGMENT11 := old_row.SEGMENT11;
1858 l_merged_rows( l_mrow_ix ).SEGMENT12 := old_row.SEGMENT12;
1859 l_merged_rows( l_mrow_ix ).SEGMENT13 := old_row.SEGMENT13;
1860 l_merged_rows( l_mrow_ix ).SEGMENT14 := old_row.SEGMENT14;
1861 l_merged_rows( l_mrow_ix ).SEGMENT15 := old_row.SEGMENT15;
1862 l_merged_rows( l_mrow_ix ).SEGMENT16 := old_row.SEGMENT16;
1863 l_merged_rows( l_mrow_ix ).SEGMENT17 := old_row.SEGMENT17;
1864 l_merged_rows( l_mrow_ix ).SEGMENT18 := old_row.SEGMENT18;
1865 l_merged_rows( l_mrow_ix ).SEGMENT19 := old_row.SEGMENT19;
1866 l_merged_rows( l_mrow_ix ).SEGMENT20 := old_row.SEGMENT20;
1867 -- Copying Confirm Status
1868 -- If confirm_Status is fake make it real else copy the old confirm_status.
1869 IF( old_row.CONFIRM_STATUS = G_CONF_XREF_FAKE ) THEN
1870 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_XREF;
1871 ELSIF ( old_row.CONFIRM_STATUS = G_CONF_MATCH_FAKE ) THEN
1872 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH;
1873 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_MATCH_READY ) THEN
1874 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_CONF_MATCH_READY;
1875 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_SINGLE_MATCH_FAKE ) THEN
1876 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_SIGL_MATCH;
1877 ELSIF ( old_row.CONFIRM_STATUS = G_UNCONF_MULTI_MATCH_FAKE ) THEN
1878 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_UNCONF_MULT_MATCH;
1879 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_EXCLUDED ) THEN
1880 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
1881 ELSIF ( old_row.CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) THEN
1882 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := NULL;
1883 ELSE
1884 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1885 END IF;
1886 END IF;
1887
1888 Debug_Conc_Log('The merged - item columns are - ' || l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID || ' -- ' || l_merged_rows( l_mrow_ix ).CONFIRM_STATUS );
1889
1890 -- 2. Template Identifier
1891 IF l_merged_rows( l_mrow_ix ).TEMPLATE_ID IS NULL
1892 AND l_merged_rows( l_mrow_ix ).TEMPLATE_NAME IS NULL
1893 THEN
1894 l_merged_rows( l_mrow_ix ).TEMPLATE_ID := old_row.TEMPLATE_ID ;
1895 l_merged_rows( l_mrow_ix ).TEMPLATE_NAME := old_row.TEMPLATE_NAME ;
1896 END IF;
1897
1898 -- 3. Item Catalog Category
1899 IF l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID IS NULL
1900 AND l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME IS NULL
1901 THEN
1902 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_ID := old_row.ITEM_CATALOG_GROUP_ID ;
1903 l_merged_rows( l_mrow_ix ).ITEM_CATALOG_GROUP_NAME := old_row.ITEM_CATALOG_GROUP_NAME ;
1904 END IF;
1905
1906 -- 4. Primary UOM
1907 IF l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE IS NULL
1908 AND l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE IS NULL
1909 THEN
1910 l_merged_rows( l_mrow_ix ).PRIMARY_UOM_CODE := old_row.PRIMARY_UOM_CODE ;
1911 l_merged_rows( l_mrow_ix ).PRIMARY_UNIT_OF_MEASURE := old_row.PRIMARY_UNIT_OF_MEASURE ;
1912 END IF;
1913
1914 -- 5. Organization
1915 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
1916 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
1917 THEN
1918 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := old_row.ORGANIZATION_ID ;
1919 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := old_row.ORGANIZATION_CODE ;
1920 END IF;
1921
1922 -- 6. Copy Organization
1923 IF l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID IS NULL
1924 AND l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE IS NULL
1925 THEN
1926 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_ID := old_row.COPY_ORGANIZATION_ID ;
1927 l_merged_rows( l_mrow_ix ).COPY_ORGANIZATION_CODE := old_row.COPY_ORGANIZATION_CODE ;
1928 END IF;
1929
1930 -- 7. Merging StyleItemNumber and SytleItemFlag
1931 IF l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER IS NULL
1932 AND l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG IS NULL
1933 THEN
1934 l_merged_rows( l_mrow_ix ).STYLE_ITEM_NUMBER := old_row.STYLE_ITEM_NUMBER;
1935 l_merged_rows( l_mrow_ix ).STYLE_ITEM_FLAG := old_row.STYLE_ITEM_FLAG;
1936 END IF;
1937
1938 /* ELETUCHY: commented out due to the regressions this code would introduce
1939 --Bug.5336962 Begin (Nisar) -> Copy Confirm Status
1940 -- If old row that is to be merged is fake, we don't copy the ConfirmStatus or we make confirm status null
1941 -- If old row already have non fake ConfirmStatus we copy it as it is.
1942 IF l_merged_rows( l_mrow_ix ).CONFIRM_STATUS IS NULL
1943 AND old_row.CONFIRM_STATUS NOT IN ('CFC', 'CFM', 'FMR', 'UFS', 'UFM', 'FK', 'FEX')
1944 THEN
1945 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
1946 END IF;
1947 --Bug.5336962 End
1948 */
1949
1950 -- Non-special-cased
1951 -- Starting generated code
1952 /* generate using the following script:
1953 SET LINESIZE 200
1954 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := old_row.' || column_name || '; end if; '
1955 FROM ALL_TAB_COLUMNS
1956 WHERE TABLE_NAME = 'MTL_SYSTEM_ITEMS_INTERFACE'
1957 AND COLUMN_NAME NOT IN
1958 ( -- special cases (for merge)
1959 'INVENTORY_ITEM_ID'
1960 , 'ITEM_NUMBER'
1961 , 'SEGMENT1'
1962 , 'SEGMENT2'
1963 , 'SEGMENT3'
1964 , 'SEGMENT4'
1965 , 'SEGMENT5'
1966 , 'SEGMENT6'
1967 , 'SEGMENT7'
1968 , 'SEGMENT8'
1969 , 'SEGMENT9'
1970 , 'SEGMENT10'
1971 , 'SEGMENT11'
1972 , 'SEGMENT12'
1973 , 'SEGMENT13'
1974 , 'SEGMENT14'
1975 , 'SEGMENT15'
1976 , 'SEGMENT16'
1977 , 'SEGMENT17'
1978 , 'SEGMENT18'
1979 , 'SEGMENT19'
1980 , 'SEGMENT20'
1981 , 'TRANSACTION_TYPE'
1982 , 'TEMPLATE_ID'
1983 , 'TEMPLATE_NAME'
1984 , 'ITEM_CATALOG_GROUP_ID'
1985 , 'ITEM_CATALOG_GROUP_NAME'
1986 , 'PRIMARY_UOM_CODE'
1987 , 'PRIMARY_UNIT_OF_MEASURE'
1988 , 'ORGANIZATION_ID'
1989 , 'ORGANIZATION_CODE'
1990 , 'COPY_ORGANIZATION_ID'
1991 , 'COPY_ORGANIZATION_CODE'
1992 -- special columns
1993 , 'SET_PROCESS_ID'
1994 , 'PROCESS_FLAG'
1995 , 'SOURCE_SYSTEM_ID'
1996 , 'SOURCE_SYSTEM_REFERENCE'
1997 , 'INTERFACE_TABLE_UNIQUE_ID' -- handled by INSERT trigger
1998 , 'CONFIRM_STATUS' -- should always be left null after a MERGE is performed
1999 -- who columns
2000 , 'LAST_UPDATE_DATE'
2001 , 'CREATION_DATE'
2002 , 'CREATED_BY'
2003 , 'LAST_UPDATED_BY'
2004 , 'LAST_UPDATE_LOGIN'
2005 -- XXX: exclude concurrent processing columns?
2006 )
2007 order by column_name asc;
2008 */
2009 if l_merged_rows( l_mrow_ix ).ACCEPTABLE_EARLY_DAYS is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_EARLY_DAYS := old_row.ACCEPTABLE_EARLY_DAYS; end if;
2010 if l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_DECREASE is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_DECREASE := old_row.ACCEPTABLE_RATE_DECREASE; end if;
2011 if l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_INCREASE is null then l_merged_rows( l_mrow_ix ).ACCEPTABLE_RATE_INCREASE := old_row.ACCEPTABLE_RATE_INCREASE; end if;
2012 if l_merged_rows( l_mrow_ix ).ACCOUNTING_RULE_ID is null then l_merged_rows( l_mrow_ix ).ACCOUNTING_RULE_ID := old_row.ACCOUNTING_RULE_ID; end if;
2013 if l_merged_rows( l_mrow_ix ).ALLOWED_UNITS_LOOKUP_CODE is null then l_merged_rows( l_mrow_ix ).ALLOWED_UNITS_LOOKUP_CODE := old_row.ALLOWED_UNITS_LOOKUP_CODE; end if;
2014 if l_merged_rows( l_mrow_ix ).ALLOW_EXPRESS_DELIVERY_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_EXPRESS_DELIVERY_FLAG := old_row.ALLOW_EXPRESS_DELIVERY_FLAG; end if;
2015 if l_merged_rows( l_mrow_ix ).ALLOW_ITEM_DESC_UPDATE_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_ITEM_DESC_UPDATE_FLAG := old_row.ALLOW_ITEM_DESC_UPDATE_FLAG; end if;
2016 if l_merged_rows( l_mrow_ix ).ALLOW_SUBSTITUTE_RECEIPTS_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_SUBSTITUTE_RECEIPTS_FLAG := old_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG; end if;
2017 if l_merged_rows( l_mrow_ix ).ALLOW_UNORDERED_RECEIPTS_FLAG is null then l_merged_rows( l_mrow_ix ).ALLOW_UNORDERED_RECEIPTS_FLAG := old_row.ALLOW_UNORDERED_RECEIPTS_FLAG; end if;
2018 if l_merged_rows( l_mrow_ix ).ASN_AUTOEXPIRE_FLAG is null then l_merged_rows( l_mrow_ix ).ASN_AUTOEXPIRE_FLAG := old_row.ASN_AUTOEXPIRE_FLAG; end if;
2019 if l_merged_rows( l_mrow_ix ).ASSET_CATEGORY_ID is null then l_merged_rows( l_mrow_ix ).ASSET_CATEGORY_ID := old_row.ASSET_CATEGORY_ID; end if;
2020 if l_merged_rows( l_mrow_ix ).ASSET_CREATION_CODE is null then l_merged_rows( l_mrow_ix ).ASSET_CREATION_CODE := old_row.ASSET_CREATION_CODE; end if;
2021 if l_merged_rows( l_mrow_ix ).ATO_FORECAST_CONTROL is null then l_merged_rows( l_mrow_ix ).ATO_FORECAST_CONTROL := old_row.ATO_FORECAST_CONTROL; end if;
2022 if l_merged_rows( l_mrow_ix ).ATP_COMPONENTS_FLAG is null then l_merged_rows( l_mrow_ix ).ATP_COMPONENTS_FLAG := old_row.ATP_COMPONENTS_FLAG; end if;
2023 if l_merged_rows( l_mrow_ix ).ATP_FLAG is null then l_merged_rows( l_mrow_ix ).ATP_FLAG := old_row.ATP_FLAG; end if;
2024 if l_merged_rows( l_mrow_ix ).ATP_RULE_ID is null then l_merged_rows( l_mrow_ix ).ATP_RULE_ID := old_row.ATP_RULE_ID; end if;
2025 if l_merged_rows( l_mrow_ix ).ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
2026 if l_merged_rows( l_mrow_ix ).ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
2027 if l_merged_rows( l_mrow_ix ).ATTRIBUTE11 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
2028 if l_merged_rows( l_mrow_ix ).ATTRIBUTE12 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
2029 if l_merged_rows( l_mrow_ix ).ATTRIBUTE13 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
2030 if l_merged_rows( l_mrow_ix ).ATTRIBUTE14 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
2031 if l_merged_rows( l_mrow_ix ).ATTRIBUTE15 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
2032 if l_merged_rows( l_mrow_ix ).ATTRIBUTE16 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
2033 if l_merged_rows( l_mrow_ix ).ATTRIBUTE17 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
2034 if l_merged_rows( l_mrow_ix ).ATTRIBUTE18 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
2035 if l_merged_rows( l_mrow_ix ).ATTRIBUTE19 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
2036 if l_merged_rows( l_mrow_ix ).ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
2037 if l_merged_rows( l_mrow_ix ).ATTRIBUTE20 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
2038 if l_merged_rows( l_mrow_ix ).ATTRIBUTE21 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
2039 if l_merged_rows( l_mrow_ix ).ATTRIBUTE22 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
2040 if l_merged_rows( l_mrow_ix ).ATTRIBUTE23 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
2041 if l_merged_rows( l_mrow_ix ).ATTRIBUTE24 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
2042 if l_merged_rows( l_mrow_ix ).ATTRIBUTE25 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
2043 if l_merged_rows( l_mrow_ix ).ATTRIBUTE26 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
2044 if l_merged_rows( l_mrow_ix ).ATTRIBUTE27 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
2045 if l_merged_rows( l_mrow_ix ).ATTRIBUTE28 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
2046 if l_merged_rows( l_mrow_ix ).ATTRIBUTE29 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
2047 if l_merged_rows( l_mrow_ix ).ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
2048 if l_merged_rows( l_mrow_ix ).ATTRIBUTE30 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
2049 if l_merged_rows( l_mrow_ix ).ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
2050 if l_merged_rows( l_mrow_ix ).ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
2051 if l_merged_rows( l_mrow_ix ).ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
2052 if l_merged_rows( l_mrow_ix ).ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
2053 if l_merged_rows( l_mrow_ix ).ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
2054 if l_merged_rows( l_mrow_ix ).ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
2055 if l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY := old_row.ATTRIBUTE_CATEGORY; end if;
2056 if l_merged_rows( l_mrow_ix ).AUTO_CREATED_CONFIG_FLAG is null then l_merged_rows( l_mrow_ix ).AUTO_CREATED_CONFIG_FLAG := old_row.AUTO_CREATED_CONFIG_FLAG; end if;
2057 if l_merged_rows( l_mrow_ix ).AUTO_LOT_ALPHA_PREFIX is null then l_merged_rows( l_mrow_ix ).AUTO_LOT_ALPHA_PREFIX := old_row.AUTO_LOT_ALPHA_PREFIX; end if;
2058 if l_merged_rows( l_mrow_ix ).AUTO_REDUCE_MPS is null then l_merged_rows( l_mrow_ix ).AUTO_REDUCE_MPS := old_row.AUTO_REDUCE_MPS; end if;
2059 if l_merged_rows( l_mrow_ix ).AUTO_SERIAL_ALPHA_PREFIX is null then l_merged_rows( l_mrow_ix ).AUTO_SERIAL_ALPHA_PREFIX := old_row.AUTO_SERIAL_ALPHA_PREFIX; end if;
2060 if l_merged_rows( l_mrow_ix ).BACK_ORDERABLE_FLAG is null then l_merged_rows( l_mrow_ix ).BACK_ORDERABLE_FLAG := old_row.BACK_ORDERABLE_FLAG; end if;
2061 if l_merged_rows( l_mrow_ix ).BASE_ITEM_ID is null then l_merged_rows( l_mrow_ix ).BASE_ITEM_ID := old_row.BASE_ITEM_ID; end if;
2062 if l_merged_rows( l_mrow_ix ).BASE_WARRANTY_SERVICE_ID is null then l_merged_rows( l_mrow_ix ).BASE_WARRANTY_SERVICE_ID := old_row.BASE_WARRANTY_SERVICE_ID; end if;
2063 if l_merged_rows( l_mrow_ix ).BOM_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).BOM_ENABLED_FLAG := old_row.BOM_ENABLED_FLAG; end if;
2064 if l_merged_rows( l_mrow_ix ).BOM_ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).BOM_ITEM_TYPE := old_row.BOM_ITEM_TYPE; end if;
2065 if l_merged_rows( l_mrow_ix ).BUILD_IN_WIP_FLAG is null then l_merged_rows( l_mrow_ix ).BUILD_IN_WIP_FLAG := old_row.BUILD_IN_WIP_FLAG; end if;
2066 if l_merged_rows( l_mrow_ix ).BULK_PICKED_FLAG is null then l_merged_rows( l_mrow_ix ).BULK_PICKED_FLAG := old_row.BULK_PICKED_FLAG; end if;
2067 if l_merged_rows( l_mrow_ix ).BUYER_ID is null then l_merged_rows( l_mrow_ix ).BUYER_ID := old_row.BUYER_ID; end if;
2068 if l_merged_rows( l_mrow_ix ).CARRYING_COST is null then l_merged_rows( l_mrow_ix ).CARRYING_COST := old_row.CARRYING_COST; end if;
2069 if l_merged_rows( l_mrow_ix ).CAS_NUMBER is null then l_merged_rows( l_mrow_ix ).CAS_NUMBER := old_row.CAS_NUMBER; end if;
2070 if l_merged_rows( l_mrow_ix ).CATALOG_STATUS_FLAG is null then l_merged_rows( l_mrow_ix ).CATALOG_STATUS_FLAG := old_row.CATALOG_STATUS_FLAG; end if;
2071 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := old_row.CHANGE_ID; end if;
2072 if l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_LINE_ID := old_row.CHANGE_LINE_ID; end if;
2073 if l_merged_rows( l_mrow_ix ).CHARGE_PERIODICITY_CODE is null then l_merged_rows( l_mrow_ix ).CHARGE_PERIODICITY_CODE := old_row.CHARGE_PERIODICITY_CODE; end if;
2074 if l_merged_rows( l_mrow_ix ).CHECK_SHORTAGES_FLAG is null then l_merged_rows( l_mrow_ix ).CHECK_SHORTAGES_FLAG := old_row.CHECK_SHORTAGES_FLAG; end if;
2075 if l_merged_rows( l_mrow_ix ).CHILD_LOT_FLAG is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_FLAG := old_row.CHILD_LOT_FLAG; end if;
2076 if l_merged_rows( l_mrow_ix ).CHILD_LOT_PREFIX is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_PREFIX := old_row.CHILD_LOT_PREFIX; end if;
2077 if l_merged_rows( l_mrow_ix ).CHILD_LOT_STARTING_NUMBER is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_STARTING_NUMBER := old_row.CHILD_LOT_STARTING_NUMBER; end if;
2078 if l_merged_rows( l_mrow_ix ).CHILD_LOT_VALIDATION_FLAG is null then l_merged_rows( l_mrow_ix ).CHILD_LOT_VALIDATION_FLAG := old_row.CHILD_LOT_VALIDATION_FLAG; end if;
2079 if l_merged_rows( l_mrow_ix ).COLLATERAL_FLAG is null then l_merged_rows( l_mrow_ix ).COLLATERAL_FLAG := old_row.COLLATERAL_FLAG; end if;
2080 if l_merged_rows( l_mrow_ix ).COMMS_ACTIVATION_REQD_FLAG is null then l_merged_rows( l_mrow_ix ).COMMS_ACTIVATION_REQD_FLAG := old_row.COMMS_ACTIVATION_REQD_FLAG; end if;
2081 if l_merged_rows( l_mrow_ix ).COMMS_NL_TRACKABLE_FLAG is null then l_merged_rows( l_mrow_ix ).COMMS_NL_TRACKABLE_FLAG := old_row.COMMS_NL_TRACKABLE_FLAG; end if;
2082 if l_merged_rows( l_mrow_ix ).CONFIG_MATCH is null then l_merged_rows( l_mrow_ix ).CONFIG_MATCH := old_row.CONFIG_MATCH; end if;
2083 if l_merged_rows( l_mrow_ix ).CONFIG_MODEL_TYPE is null then l_merged_rows( l_mrow_ix ).CONFIG_MODEL_TYPE := old_row.CONFIG_MODEL_TYPE; end if;
2084 if l_merged_rows( l_mrow_ix ).CONFIG_ORGS is null then l_merged_rows( l_mrow_ix ).CONFIG_ORGS := old_row.CONFIG_ORGS; end if;
2085 if l_merged_rows( l_mrow_ix ).CONSIGNED_FLAG is null then l_merged_rows( l_mrow_ix ).CONSIGNED_FLAG := old_row.CONSIGNED_FLAG; end if;
2086 if l_merged_rows( l_mrow_ix ).CONTAINER_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).CONTAINER_ITEM_FLAG := old_row.CONTAINER_ITEM_FLAG; end if;
2087 if l_merged_rows( l_mrow_ix ).CONTAINER_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).CONTAINER_TYPE_CODE := old_row.CONTAINER_TYPE_CODE; end if;
2088 if l_merged_rows( l_mrow_ix ).CONTINOUS_TRANSFER is null then l_merged_rows( l_mrow_ix ).CONTINOUS_TRANSFER := old_row.CONTINOUS_TRANSFER; end if;
2089 if l_merged_rows( l_mrow_ix ).CONTRACT_ITEM_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).CONTRACT_ITEM_TYPE_CODE := old_row.CONTRACT_ITEM_TYPE_CODE; end if;
2090 if l_merged_rows( l_mrow_ix ).CONVERGENCE is null then l_merged_rows( l_mrow_ix ).CONVERGENCE := old_row.CONVERGENCE; end if;
2091 if l_merged_rows( l_mrow_ix ).COPY_ITEM_ID is null then l_merged_rows( l_mrow_ix ).COPY_ITEM_ID := old_row.COPY_ITEM_ID; end if;
2092 if l_merged_rows( l_mrow_ix ).COPY_ITEM_NUMBER is null then l_merged_rows( l_mrow_ix ).COPY_ITEM_NUMBER := old_row.COPY_ITEM_NUMBER; end if;
2093 if l_merged_rows( l_mrow_ix ).COPY_LOT_ATTRIBUTE_FLAG is null then l_merged_rows( l_mrow_ix ).COPY_LOT_ATTRIBUTE_FLAG := old_row.COPY_LOT_ATTRIBUTE_FLAG; end if;
2094 if l_merged_rows( l_mrow_ix ).COSTING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).COSTING_ENABLED_FLAG := old_row.COSTING_ENABLED_FLAG; end if;
2095 if l_merged_rows( l_mrow_ix ).COST_OF_SALES_ACCOUNT is null then l_merged_rows( l_mrow_ix ).COST_OF_SALES_ACCOUNT := old_row.COST_OF_SALES_ACCOUNT; end if;
2096 if l_merged_rows( l_mrow_ix ).COUPON_EXEMPT_FLAG is null then l_merged_rows( l_mrow_ix ).COUPON_EXEMPT_FLAG := old_row.COUPON_EXEMPT_FLAG; end if;
2097 if l_merged_rows( l_mrow_ix ).COVERAGE_SCHEDULE_ID is null then l_merged_rows( l_mrow_ix ).COVERAGE_SCHEDULE_ID := old_row.COVERAGE_SCHEDULE_ID; end if;
2098 if l_merged_rows( l_mrow_ix ).CREATE_SUPPLY_FLAG is null then l_merged_rows( l_mrow_ix ).CREATE_SUPPLY_FLAG := old_row.CREATE_SUPPLY_FLAG; end if;
2099 if l_merged_rows( l_mrow_ix ).CRITICAL_COMPONENT_FLAG is null then l_merged_rows( l_mrow_ix ).CRITICAL_COMPONENT_FLAG := old_row.CRITICAL_COMPONENT_FLAG; end if;
2100 if l_merged_rows( l_mrow_ix ).CUMULATIVE_TOTAL_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).CUMULATIVE_TOTAL_LEAD_TIME := old_row.CUMULATIVE_TOTAL_LEAD_TIME; end if;
2101 if l_merged_rows( l_mrow_ix ).CUM_MANUFACTURING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).CUM_MANUFACTURING_LEAD_TIME := old_row.CUM_MANUFACTURING_LEAD_TIME; end if;
2102 if l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID is null then l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID := old_row.CURRENT_PHASE_ID; end if;
2103 if l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_ENABLED_FLAG := old_row.CUSTOMER_ORDER_ENABLED_FLAG; end if;
2104 if l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).CUSTOMER_ORDER_FLAG := old_row.CUSTOMER_ORDER_FLAG; end if;
2105 if l_merged_rows( l_mrow_ix ).CYCLE_COUNT_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).CYCLE_COUNT_ENABLED_FLAG := old_row.CYCLE_COUNT_ENABLED_FLAG; end if;
2106 if l_merged_rows( l_mrow_ix ).DAYS_EARLY_RECEIPT_ALLOWED is null then l_merged_rows( l_mrow_ix ).DAYS_EARLY_RECEIPT_ALLOWED := old_row.DAYS_EARLY_RECEIPT_ALLOWED; end if;
2107 if l_merged_rows( l_mrow_ix ).DAYS_LATE_RECEIPT_ALLOWED is null then l_merged_rows( l_mrow_ix ).DAYS_LATE_RECEIPT_ALLOWED := old_row.DAYS_LATE_RECEIPT_ALLOWED; end if;
2108 if l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_SUPPLY is null then l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_SUPPLY := old_row.DAYS_MAX_INV_SUPPLY; end if;
2109 if l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_WINDOW is null then l_merged_rows( l_mrow_ix ).DAYS_MAX_INV_WINDOW := old_row.DAYS_MAX_INV_WINDOW; end if;
2110 if l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_SUPPLY is null then l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_SUPPLY := old_row.DAYS_TGT_INV_SUPPLY; end if;
2111 if l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_WINDOW is null then l_merged_rows( l_mrow_ix ).DAYS_TGT_INV_WINDOW := old_row.DAYS_TGT_INV_WINDOW; end if;
2112 if l_merged_rows( l_mrow_ix ).DEFAULT_GRADE is null then l_merged_rows( l_mrow_ix ).DEFAULT_GRADE := old_row.DEFAULT_GRADE; end if;
2113 if l_merged_rows( l_mrow_ix ).DEFAULT_INCLUDE_IN_ROLLUP_FLAG is null then l_merged_rows( l_mrow_ix ).DEFAULT_INCLUDE_IN_ROLLUP_FLAG := old_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG; end if;
2114 if l_merged_rows( l_mrow_ix ).DEFAULT_LOT_STATUS_ID is null then l_merged_rows( l_mrow_ix ).DEFAULT_LOT_STATUS_ID := old_row.DEFAULT_LOT_STATUS_ID; end if;
2115 if l_merged_rows( l_mrow_ix ).DEFAULT_SERIAL_STATUS_ID is null then l_merged_rows( l_mrow_ix ).DEFAULT_SERIAL_STATUS_ID := old_row.DEFAULT_SERIAL_STATUS_ID; end if;
2116 if l_merged_rows( l_mrow_ix ).DEFAULT_SHIPPING_ORG is null then l_merged_rows( l_mrow_ix ).DEFAULT_SHIPPING_ORG := old_row.DEFAULT_SHIPPING_ORG; end if;
2117 if l_merged_rows( l_mrow_ix ).DEFAULT_SO_SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).DEFAULT_SO_SOURCE_TYPE := old_row.DEFAULT_SO_SOURCE_TYPE; end if;
2118 if l_merged_rows( l_mrow_ix ).DEFECT_TRACKING_ON_FLAG is null then l_merged_rows( l_mrow_ix ).DEFECT_TRACKING_ON_FLAG := old_row.DEFECT_TRACKING_ON_FLAG; end if;
2119 if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_HEADER_ID is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_HEADER_ID := old_row.DEMAND_SOURCE_HEADER_ID; end if;
2120 if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_LINE is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_LINE := old_row.DEMAND_SOURCE_LINE; end if;
2121 if l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).DEMAND_SOURCE_TYPE := old_row.DEMAND_SOURCE_TYPE; end if;
2122 if l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_CODE := old_row.DEMAND_TIME_FENCE_CODE; end if;
2123 if l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).DEMAND_TIME_FENCE_DAYS := old_row.DEMAND_TIME_FENCE_DAYS; end if;
2124 if l_merged_rows( l_mrow_ix ).DESCRIPTION is null then l_merged_rows( l_mrow_ix ).DESCRIPTION := old_row.DESCRIPTION; end if;
2125 if l_merged_rows( l_mrow_ix ).DIMENSION_UOM_CODE is null then l_merged_rows( l_mrow_ix ).DIMENSION_UOM_CODE := old_row.DIMENSION_UOM_CODE; end if;
2126 if l_merged_rows( l_mrow_ix ).DIVERGENCE is null then l_merged_rows( l_mrow_ix ).DIVERGENCE := old_row.DIVERGENCE; end if;
2127 if l_merged_rows( l_mrow_ix ).DOWNLOADABLE_FLAG is null then l_merged_rows( l_mrow_ix ).DOWNLOADABLE_FLAG := old_row.DOWNLOADABLE_FLAG; end if;
2128 if l_merged_rows( l_mrow_ix ).DRP_PLANNED_FLAG is null then l_merged_rows( l_mrow_ix ).DRP_PLANNED_FLAG := old_row.DRP_PLANNED_FLAG; end if;
2129 if l_merged_rows( l_mrow_ix ).DUAL_UOM_CONTROL is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_CONTROL := old_row.DUAL_UOM_CONTROL; end if;
2130 if l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_HIGH is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_HIGH := old_row.DUAL_UOM_DEVIATION_HIGH; end if;
2131 if l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_LOW is null then l_merged_rows( l_mrow_ix ).DUAL_UOM_DEVIATION_LOW := old_row.DUAL_UOM_DEVIATION_LOW; end if;
2132 if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_CAUSE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_CAUSE_CODE := old_row.EAM_ACTIVITY_CAUSE_CODE; end if;
2133 if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_SOURCE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_SOURCE_CODE := old_row.EAM_ACTIVITY_SOURCE_CODE; end if;
2134 if l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_TYPE_CODE is null then l_merged_rows( l_mrow_ix ).EAM_ACTIVITY_TYPE_CODE := old_row.EAM_ACTIVITY_TYPE_CODE; end if;
2135 if l_merged_rows( l_mrow_ix ).EAM_ACT_NOTIFICATION_FLAG is null then l_merged_rows( l_mrow_ix ).EAM_ACT_NOTIFICATION_FLAG := old_row.EAM_ACT_NOTIFICATION_FLAG; end if;
2136 if l_merged_rows( l_mrow_ix ).EAM_ACT_SHUTDOWN_STATUS is null then l_merged_rows( l_mrow_ix ).EAM_ACT_SHUTDOWN_STATUS := old_row.EAM_ACT_SHUTDOWN_STATUS; end if;
2137 if l_merged_rows( l_mrow_ix ).EAM_ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).EAM_ITEM_TYPE := old_row.EAM_ITEM_TYPE; end if;
2138 if l_merged_rows( l_mrow_ix ).EFFECTIVITY_CONTROL is null then l_merged_rows( l_mrow_ix ).EFFECTIVITY_CONTROL := old_row.EFFECTIVITY_CONTROL; end if;
2139 if l_merged_rows( l_mrow_ix ).ELECTRONIC_FLAG is null then l_merged_rows( l_mrow_ix ).ELECTRONIC_FLAG := old_row.ELECTRONIC_FLAG; end if;
2140 if l_merged_rows( l_mrow_ix ).ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).ENABLED_FLAG := old_row.ENABLED_FLAG; end if;
2141 if l_merged_rows( l_mrow_ix ).ENCUMBRANCE_ACCOUNT is null then l_merged_rows( l_mrow_ix ).ENCUMBRANCE_ACCOUNT := old_row.ENCUMBRANCE_ACCOUNT; end if;
2142 if l_merged_rows( l_mrow_ix ).END_ASSEMBLY_PEGGING_FLAG is null then l_merged_rows( l_mrow_ix ).END_ASSEMBLY_PEGGING_FLAG := old_row.END_ASSEMBLY_PEGGING_FLAG; end if;
2143 if l_merged_rows( l_mrow_ix ).END_DATE_ACTIVE is null then l_merged_rows( l_mrow_ix ).END_DATE_ACTIVE := old_row.END_DATE_ACTIVE; end if;
2144 if l_merged_rows( l_mrow_ix ).ENFORCE_SHIP_TO_LOCATION_CODE is null then l_merged_rows( l_mrow_ix ).ENFORCE_SHIP_TO_LOCATION_CODE := old_row.ENFORCE_SHIP_TO_LOCATION_CODE; end if;
2145 if l_merged_rows( l_mrow_ix ).ENGINEERING_DATE is null then l_merged_rows( l_mrow_ix ).ENGINEERING_DATE := old_row.ENGINEERING_DATE; end if;
2146 if l_merged_rows( l_mrow_ix ).ENGINEERING_ECN_CODE is null then l_merged_rows( l_mrow_ix ).ENGINEERING_ECN_CODE := old_row.ENGINEERING_ECN_CODE; end if;
2147 if l_merged_rows( l_mrow_ix ).ENGINEERING_ITEM_ID is null then l_merged_rows( l_mrow_ix ).ENGINEERING_ITEM_ID := old_row.ENGINEERING_ITEM_ID; end if;
2148 if l_merged_rows( l_mrow_ix ).ENG_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).ENG_ITEM_FLAG := old_row.ENG_ITEM_FLAG; end if;
2149 if l_merged_rows( l_mrow_ix ).EQUIPMENT_TYPE is null then l_merged_rows( l_mrow_ix ).EQUIPMENT_TYPE := old_row.EQUIPMENT_TYPE; end if;
2150 if l_merged_rows( l_mrow_ix ).EVENT_FLAG is null then l_merged_rows( l_mrow_ix ).EVENT_FLAG := old_row.EVENT_FLAG; end if;
2151 if l_merged_rows( l_mrow_ix ).EXCLUDE_FROM_BUDGET_FLAG is null then l_merged_rows( l_mrow_ix ).EXCLUDE_FROM_BUDGET_FLAG := old_row.EXCLUDE_FROM_BUDGET_FLAG; end if;
2152 if l_merged_rows( l_mrow_ix ).EXPENSE_ACCOUNT is null then l_merged_rows( l_mrow_ix ).EXPENSE_ACCOUNT := old_row.EXPENSE_ACCOUNT; end if;
2153 if l_merged_rows( l_mrow_ix ).EXPENSE_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).EXPENSE_BILLABLE_FLAG := old_row.EXPENSE_BILLABLE_FLAG; end if;
2154 if l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_CODE is null then l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_CODE := old_row.EXPIRATION_ACTION_CODE; end if;
2155 if l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_INTERVAL is null then l_merged_rows( l_mrow_ix ).EXPIRATION_ACTION_INTERVAL := old_row.EXPIRATION_ACTION_INTERVAL; end if;
2156 if l_merged_rows( l_mrow_ix ).FINANCING_ALLOWED_FLAG is null then l_merged_rows( l_mrow_ix ).FINANCING_ALLOWED_FLAG := old_row.FINANCING_ALLOWED_FLAG; end if;
2157 if l_merged_rows( l_mrow_ix ).FIXED_DAYS_SUPPLY is null then l_merged_rows( l_mrow_ix ).FIXED_DAYS_SUPPLY := old_row.FIXED_DAYS_SUPPLY; end if;
2158 if l_merged_rows( l_mrow_ix ).FIXED_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).FIXED_LEAD_TIME := old_row.FIXED_LEAD_TIME; end if;
2159 if l_merged_rows( l_mrow_ix ).FIXED_LOT_MULTIPLIER is null then l_merged_rows( l_mrow_ix ).FIXED_LOT_MULTIPLIER := old_row.FIXED_LOT_MULTIPLIER; end if;
2160 if l_merged_rows( l_mrow_ix ).FIXED_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).FIXED_ORDER_QUANTITY := old_row.FIXED_ORDER_QUANTITY; end if;
2161 if l_merged_rows( l_mrow_ix ).FORECAST_HORIZON is null then l_merged_rows( l_mrow_ix ).FORECAST_HORIZON := old_row.FORECAST_HORIZON; end if;
2162 if l_merged_rows( l_mrow_ix ).FULL_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).FULL_LEAD_TIME := old_row.FULL_LEAD_TIME; end if;
2163 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE1 := old_row.GLOBAL_ATTRIBUTE1; end if;
2164 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE10 := old_row.GLOBAL_ATTRIBUTE10; end if;
2165 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE2 := old_row.GLOBAL_ATTRIBUTE2; end if;
2166 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE3 := old_row.GLOBAL_ATTRIBUTE3; end if;
2167 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE4 := old_row.GLOBAL_ATTRIBUTE4; end if;
2168 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE5 := old_row.GLOBAL_ATTRIBUTE5; end if;
2169 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE6 := old_row.GLOBAL_ATTRIBUTE6; end if;
2170 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE7 := old_row.GLOBAL_ATTRIBUTE7; end if;
2171 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE8 := old_row.GLOBAL_ATTRIBUTE8; end if;
2172 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE9 := old_row.GLOBAL_ATTRIBUTE9; end if;
2173 if l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).GLOBAL_ATTRIBUTE_CATEGORY := old_row.GLOBAL_ATTRIBUTE_CATEGORY; end if;
2174 if l_merged_rows( l_mrow_ix ).GLOBAL_TRADE_ITEM_NUMBER is null then l_merged_rows( l_mrow_ix ).GLOBAL_TRADE_ITEM_NUMBER := old_row.GLOBAL_TRADE_ITEM_NUMBER; end if;
2175 if l_merged_rows( l_mrow_ix ).GRADE_CONTROL_FLAG is null then l_merged_rows( l_mrow_ix ).GRADE_CONTROL_FLAG := old_row.GRADE_CONTROL_FLAG; end if;
2176 if l_merged_rows( l_mrow_ix ).GTIN_DESCRIPTION is null then l_merged_rows( l_mrow_ix ).GTIN_DESCRIPTION := old_row.GTIN_DESCRIPTION; end if;
2177 if l_merged_rows( l_mrow_ix ).HAZARDOUS_MATERIAL_FLAG is null then l_merged_rows( l_mrow_ix ).HAZARDOUS_MATERIAL_FLAG := old_row.HAZARDOUS_MATERIAL_FLAG; end if;
2178 if l_merged_rows( l_mrow_ix ).HAZARD_CLASS_ID is null then l_merged_rows( l_mrow_ix ).HAZARD_CLASS_ID := old_row.HAZARD_CLASS_ID; end if;
2179 if l_merged_rows( l_mrow_ix ).HOLD_DAYS is null then l_merged_rows( l_mrow_ix ).HOLD_DAYS := old_row.HOLD_DAYS; end if;
2180 if l_merged_rows( l_mrow_ix ).IB_ITEM_INSTANCE_CLASS is null then l_merged_rows( l_mrow_ix ).IB_ITEM_INSTANCE_CLASS := old_row.IB_ITEM_INSTANCE_CLASS; end if;
2181 if l_merged_rows( l_mrow_ix ).INDIVISIBLE_FLAG is null then l_merged_rows( l_mrow_ix ).INDIVISIBLE_FLAG := old_row.INDIVISIBLE_FLAG; end if;
2182 if l_merged_rows( l_mrow_ix ).INSPECTION_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).INSPECTION_REQUIRED_FLAG := old_row.INSPECTION_REQUIRED_FLAG; end if;
2183 if l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_ENABLED_FLAG := old_row.INTERNAL_ORDER_ENABLED_FLAG; end if;
2184 if l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).INTERNAL_ORDER_FLAG := old_row.INTERNAL_ORDER_FLAG; end if;
2185 if l_merged_rows( l_mrow_ix ).INTERNAL_VOLUME is null then l_merged_rows( l_mrow_ix ).INTERNAL_VOLUME := old_row.INTERNAL_VOLUME; end if;
2186 if l_merged_rows( l_mrow_ix ).INVENTORY_ASSET_FLAG is null then l_merged_rows( l_mrow_ix ).INVENTORY_ASSET_FLAG := old_row.INVENTORY_ASSET_FLAG; end if;
2187 if l_merged_rows( l_mrow_ix ).INVENTORY_CARRY_PENALTY is null then l_merged_rows( l_mrow_ix ).INVENTORY_CARRY_PENALTY := old_row.INVENTORY_CARRY_PENALTY; end if;
2188 if l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_FLAG := old_row.INVENTORY_ITEM_FLAG; end if;
2189 if l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_STATUS_CODE is null then l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_STATUS_CODE := old_row.INVENTORY_ITEM_STATUS_CODE; end if;
2190 if l_merged_rows( l_mrow_ix ).INVENTORY_PLANNING_CODE is null then l_merged_rows( l_mrow_ix ).INVENTORY_PLANNING_CODE := old_row.INVENTORY_PLANNING_CODE; end if;
2191 if l_merged_rows( l_mrow_ix ).INVOICEABLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).INVOICEABLE_ITEM_FLAG := old_row.INVOICEABLE_ITEM_FLAG; end if;
2192 if l_merged_rows( l_mrow_ix ).INVOICE_CLOSE_TOLERANCE is null then l_merged_rows( l_mrow_ix ).INVOICE_CLOSE_TOLERANCE := old_row.INVOICE_CLOSE_TOLERANCE; end if;
2193 if l_merged_rows( l_mrow_ix ).INVOICE_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).INVOICE_ENABLED_FLAG := old_row.INVOICE_ENABLED_FLAG; end if;
2194 if l_merged_rows( l_mrow_ix ).INVOICING_RULE_ID is null then l_merged_rows( l_mrow_ix ).INVOICING_RULE_ID := old_row.INVOICING_RULE_ID; end if;
2195 if l_merged_rows( l_mrow_ix ).ITEM_TYPE is null then l_merged_rows( l_mrow_ix ).ITEM_TYPE := old_row.ITEM_TYPE; end if;
2196 if l_merged_rows( l_mrow_ix ).LEAD_TIME_LOT_SIZE is null then l_merged_rows( l_mrow_ix ).LEAD_TIME_LOT_SIZE := old_row.LEAD_TIME_LOT_SIZE; end if;
2197 if l_merged_rows( l_mrow_ix ).LIFECYCLE_ID is null then l_merged_rows( l_mrow_ix ).LIFECYCLE_ID := old_row.LIFECYCLE_ID; end if;
2198 if l_merged_rows( l_mrow_ix ).LIST_PRICE_PER_UNIT is null then l_merged_rows( l_mrow_ix ).LIST_PRICE_PER_UNIT := old_row.LIST_PRICE_PER_UNIT; end if;
2199 if l_merged_rows( l_mrow_ix ).LOCATION_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).LOCATION_CONTROL_CODE := old_row.LOCATION_CONTROL_CODE; end if;
2200 if l_merged_rows( l_mrow_ix ).LONG_DESCRIPTION is null then l_merged_rows( l_mrow_ix ).LONG_DESCRIPTION := old_row.LONG_DESCRIPTION; end if;
2201 if l_merged_rows( l_mrow_ix ).LOT_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).LOT_CONTROL_CODE := old_row.LOT_CONTROL_CODE; end if;
2202 if l_merged_rows( l_mrow_ix ).LOT_DIVISIBLE_FLAG is null then l_merged_rows( l_mrow_ix ).LOT_DIVISIBLE_FLAG := old_row.LOT_DIVISIBLE_FLAG; end if;
2203 if l_merged_rows( l_mrow_ix ).LOT_MERGE_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_MERGE_ENABLED := old_row.LOT_MERGE_ENABLED; end if;
2204 if l_merged_rows( l_mrow_ix ).LOT_SPLIT_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_SPLIT_ENABLED := old_row.LOT_SPLIT_ENABLED; end if;
2205 if l_merged_rows( l_mrow_ix ).LOT_STATUS_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_STATUS_ENABLED := old_row.LOT_STATUS_ENABLED; end if;
2206 if l_merged_rows( l_mrow_ix ).LOT_SUBSTITUTION_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_SUBSTITUTION_ENABLED := old_row.LOT_SUBSTITUTION_ENABLED; end if;
2207 if l_merged_rows( l_mrow_ix ).LOT_TRANSLATE_ENABLED is null then l_merged_rows( l_mrow_ix ).LOT_TRANSLATE_ENABLED := old_row.LOT_TRANSLATE_ENABLED; end if;
2208 if l_merged_rows( l_mrow_ix ).MARKET_PRICE is null then l_merged_rows( l_mrow_ix ).MARKET_PRICE := old_row.MARKET_PRICE; end if;
2209 if l_merged_rows( l_mrow_ix ).MATERIAL_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).MATERIAL_BILLABLE_FLAG := old_row.MATERIAL_BILLABLE_FLAG; end if;
2210 if l_merged_rows( l_mrow_ix ).MATERIAL_COST is null then l_merged_rows( l_mrow_ix ).MATERIAL_COST := old_row.MATERIAL_COST; end if;
2211 if l_merged_rows( l_mrow_ix ).MATERIAL_OH_RATE is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_RATE := old_row.MATERIAL_OH_RATE; end if;
2212 if l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM := old_row.MATERIAL_OH_SUB_ELEM; end if;
2213 if l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM_ID is null then l_merged_rows( l_mrow_ix ).MATERIAL_OH_SUB_ELEM_ID := old_row.MATERIAL_OH_SUB_ELEM_ID; end if;
2214 if l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM is null then l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM := old_row.MATERIAL_SUB_ELEM; end if;
2215 if l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM_ID is null then l_merged_rows( l_mrow_ix ).MATERIAL_SUB_ELEM_ID := old_row.MATERIAL_SUB_ELEM_ID; end if;
2216 if l_merged_rows( l_mrow_ix ).MATURITY_DAYS is null then l_merged_rows( l_mrow_ix ).MATURITY_DAYS := old_row.MATURITY_DAYS; end if;
2217 if l_merged_rows( l_mrow_ix ).MAXIMUM_LOAD_WEIGHT is null then l_merged_rows( l_mrow_ix ).MAXIMUM_LOAD_WEIGHT := old_row.MAXIMUM_LOAD_WEIGHT; end if;
2218 if l_merged_rows( l_mrow_ix ).MAXIMUM_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).MAXIMUM_ORDER_QUANTITY := old_row.MAXIMUM_ORDER_QUANTITY; end if;
2219 if l_merged_rows( l_mrow_ix ).MAX_MINMAX_QUANTITY is null then l_merged_rows( l_mrow_ix ).MAX_MINMAX_QUANTITY := old_row.MAX_MINMAX_QUANTITY; end if;
2220 if l_merged_rows( l_mrow_ix ).MAX_WARRANTY_AMOUNT is null then l_merged_rows( l_mrow_ix ).MAX_WARRANTY_AMOUNT := old_row.MAX_WARRANTY_AMOUNT; end if;
2221 if l_merged_rows( l_mrow_ix ).MINIMUM_FILL_PERCENT is null then l_merged_rows( l_mrow_ix ).MINIMUM_FILL_PERCENT := old_row.MINIMUM_FILL_PERCENT; end if;
2222 if l_merged_rows( l_mrow_ix ).MINIMUM_LICENSE_QUANTITY is null then l_merged_rows( l_mrow_ix ).MINIMUM_LICENSE_QUANTITY := old_row.MINIMUM_LICENSE_QUANTITY; end if;
2223 if l_merged_rows( l_mrow_ix ).MINIMUM_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).MINIMUM_ORDER_QUANTITY := old_row.MINIMUM_ORDER_QUANTITY; end if;
2224 if l_merged_rows( l_mrow_ix ).MIN_MINMAX_QUANTITY is null then l_merged_rows( l_mrow_ix ).MIN_MINMAX_QUANTITY := old_row.MIN_MINMAX_QUANTITY; end if;
2225 if l_merged_rows( l_mrow_ix ).MODEL_CONFIG_CLAUSE_NAME is null then l_merged_rows( l_mrow_ix ).MODEL_CONFIG_CLAUSE_NAME := old_row.MODEL_CONFIG_CLAUSE_NAME; end if;
2226 if l_merged_rows( l_mrow_ix ).MRP_CALCULATE_ATP_FLAG is null then l_merged_rows( l_mrow_ix ).MRP_CALCULATE_ATP_FLAG := old_row.MRP_CALCULATE_ATP_FLAG; end if;
2227 if l_merged_rows( l_mrow_ix ).MRP_PLANNING_CODE is null then l_merged_rows( l_mrow_ix ).MRP_PLANNING_CODE := old_row.MRP_PLANNING_CODE; end if;
2228 if l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_CODE is null then l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_CODE := old_row.MRP_SAFETY_STOCK_CODE; end if;
2229 if l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_PERCENT is null then l_merged_rows( l_mrow_ix ).MRP_SAFETY_STOCK_PERCENT := old_row.MRP_SAFETY_STOCK_PERCENT; end if;
2230 if l_merged_rows( l_mrow_ix ).MTL_TRANSACTIONS_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).MTL_TRANSACTIONS_ENABLED_FLAG := old_row.MTL_TRANSACTIONS_ENABLED_FLAG; end if;
2231 if l_merged_rows( l_mrow_ix ).MUST_USE_APPROVED_VENDOR_FLAG is null then l_merged_rows( l_mrow_ix ).MUST_USE_APPROVED_VENDOR_FLAG := old_row.MUST_USE_APPROVED_VENDOR_FLAG; end if;
2232 if l_merged_rows( l_mrow_ix ).NEGATIVE_MEASUREMENT_ERROR is null then l_merged_rows( l_mrow_ix ).NEGATIVE_MEASUREMENT_ERROR := old_row.NEGATIVE_MEASUREMENT_ERROR; end if;
2233 if l_merged_rows( l_mrow_ix ).NEW_REVISION_CODE is null then l_merged_rows( l_mrow_ix ).NEW_REVISION_CODE := old_row.NEW_REVISION_CODE; end if;
2234 if l_merged_rows( l_mrow_ix ).ONT_PRICING_QTY_SOURCE is null then l_merged_rows( l_mrow_ix ).ONT_PRICING_QTY_SOURCE := old_row.ONT_PRICING_QTY_SOURCE; end if;
2235 if l_merged_rows( l_mrow_ix ).OPERATION_SLACK_PENALTY is null then l_merged_rows( l_mrow_ix ).OPERATION_SLACK_PENALTY := old_row.OPERATION_SLACK_PENALTY; end if;
2236 if l_merged_rows( l_mrow_ix ).ORDERABLE_ON_WEB_FLAG is null then l_merged_rows( l_mrow_ix ).ORDERABLE_ON_WEB_FLAG := old_row.ORDERABLE_ON_WEB_FLAG; end if;
2237 if l_merged_rows( l_mrow_ix ).ORDER_COST is null then l_merged_rows( l_mrow_ix ).ORDER_COST := old_row.ORDER_COST; end if;
2238 if l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_FLAG is null then l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_FLAG := old_row.OUTSIDE_OPERATION_FLAG; end if;
2239 if l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_UOM_TYPE is null then l_merged_rows( l_mrow_ix ).OUTSIDE_OPERATION_UOM_TYPE := old_row.OUTSIDE_OPERATION_UOM_TYPE; end if;
2240 if l_merged_rows( l_mrow_ix ).OUTSOURCED_ASSEMBLY is null then l_merged_rows( l_mrow_ix ).OUTSOURCED_ASSEMBLY := old_row.OUTSOURCED_ASSEMBLY; end if;
2241 if l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_TYPE is null then l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_TYPE := old_row.OVERCOMPLETION_TOLERANCE_TYPE; end if;
2242 if l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_VALUE is null then l_merged_rows( l_mrow_ix ).OVERCOMPLETION_TOLERANCE_VALUE := old_row.OVERCOMPLETION_TOLERANCE_VALUE; end if;
2243 if l_merged_rows( l_mrow_ix ).OVERRUN_PERCENTAGE is null then l_merged_rows( l_mrow_ix ).OVERRUN_PERCENTAGE := old_row.OVERRUN_PERCENTAGE; end if;
2244 if l_merged_rows( l_mrow_ix ).OVER_RETURN_TOLERANCE is null then l_merged_rows( l_mrow_ix ).OVER_RETURN_TOLERANCE := old_row.OVER_RETURN_TOLERANCE; end if;
2245 if l_merged_rows( l_mrow_ix ).OVER_SHIPMENT_TOLERANCE is null then l_merged_rows( l_mrow_ix ).OVER_SHIPMENT_TOLERANCE := old_row.OVER_SHIPMENT_TOLERANCE; end if;
2246 if l_merged_rows( l_mrow_ix ).PARENT_CHILD_GENERATION_FLAG is null then l_merged_rows( l_mrow_ix ).PARENT_CHILD_GENERATION_FLAG := old_row.PARENT_CHILD_GENERATION_FLAG; end if;
2247 if l_merged_rows( l_mrow_ix ).PAYMENT_TERMS_ID is null then l_merged_rows( l_mrow_ix ).PAYMENT_TERMS_ID := old_row.PAYMENT_TERMS_ID; end if;
2248 if l_merged_rows( l_mrow_ix ).PICKING_RULE_ID is null then l_merged_rows( l_mrow_ix ).PICKING_RULE_ID := old_row.PICKING_RULE_ID; end if;
2249 if l_merged_rows( l_mrow_ix ).PICK_COMPONENTS_FLAG is null then l_merged_rows( l_mrow_ix ).PICK_COMPONENTS_FLAG := old_row.PICK_COMPONENTS_FLAG; end if;
2250 if l_merged_rows( l_mrow_ix ).PLANNED_INV_POINT_FLAG is null then l_merged_rows( l_mrow_ix ).PLANNED_INV_POINT_FLAG := old_row.PLANNED_INV_POINT_FLAG; end if;
2251 if l_merged_rows( l_mrow_ix ).PLANNER_CODE is null then l_merged_rows( l_mrow_ix ).PLANNER_CODE := old_row.PLANNER_CODE; end if;
2252 if l_merged_rows( l_mrow_ix ).PLANNING_EXCEPTION_SET is null then l_merged_rows( l_mrow_ix ).PLANNING_EXCEPTION_SET := old_row.PLANNING_EXCEPTION_SET; end if;
2253 if l_merged_rows( l_mrow_ix ).PLANNING_MAKE_BUY_CODE is null then l_merged_rows( l_mrow_ix ).PLANNING_MAKE_BUY_CODE := old_row.PLANNING_MAKE_BUY_CODE; end if;
2254 if l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_CODE := old_row.PLANNING_TIME_FENCE_CODE; end if;
2255 if l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).PLANNING_TIME_FENCE_DAYS := old_row.PLANNING_TIME_FENCE_DAYS; end if;
2256 if l_merged_rows( l_mrow_ix ).POSITIVE_MEASUREMENT_ERROR is null then l_merged_rows( l_mrow_ix ).POSITIVE_MEASUREMENT_ERROR := old_row.POSITIVE_MEASUREMENT_ERROR; end if;
2257 if l_merged_rows( l_mrow_ix ).POSTPROCESSING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).POSTPROCESSING_LEAD_TIME := old_row.POSTPROCESSING_LEAD_TIME; end if;
2258 if l_merged_rows( l_mrow_ix ).PREPOSITION_POINT is null then l_merged_rows( l_mrow_ix ).PREPOSITION_POINT := old_row.PREPOSITION_POINT; end if;
2259 if l_merged_rows( l_mrow_ix ).PREPROCESSING_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).PREPROCESSING_LEAD_TIME := old_row.PREPROCESSING_LEAD_TIME; end if;
2260 if l_merged_rows( l_mrow_ix ).PREVENTIVE_MAINTENANCE_FLAG is null then l_merged_rows( l_mrow_ix ).PREVENTIVE_MAINTENANCE_FLAG := old_row.PREVENTIVE_MAINTENANCE_FLAG; end if;
2261 if l_merged_rows( l_mrow_ix ).PRICE_TOLERANCE_PERCENT is null then l_merged_rows( l_mrow_ix ).PRICE_TOLERANCE_PERCENT := old_row.PRICE_TOLERANCE_PERCENT; end if;
2262 if l_merged_rows( l_mrow_ix ).PRIMARY_SPECIALIST_ID is null then l_merged_rows( l_mrow_ix ).PRIMARY_SPECIALIST_ID := old_row.PRIMARY_SPECIALIST_ID; end if;
2263 if l_merged_rows( l_mrow_ix ).PROCESS_COSTING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_COSTING_ENABLED_FLAG := old_row.PROCESS_COSTING_ENABLED_FLAG; end if;
2264 if l_merged_rows( l_mrow_ix ).PROCESS_EXECUTION_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_EXECUTION_ENABLED_FLAG := old_row.PROCESS_EXECUTION_ENABLED_FLAG; end if;
2265 if l_merged_rows( l_mrow_ix ).PROCESS_QUALITY_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PROCESS_QUALITY_ENABLED_FLAG := old_row.PROCESS_QUALITY_ENABLED_FLAG; end if;
2266 if l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_LOCATOR_ID := old_row.PROCESS_SUPPLY_LOCATOR_ID; end if;
2267 if l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).PROCESS_SUPPLY_SUBINVENTORY := old_row.PROCESS_SUPPLY_SUBINVENTORY; end if;
2268 if l_merged_rows( l_mrow_ix ).PROCESS_YIELD_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).PROCESS_YIELD_LOCATOR_ID := old_row.PROCESS_YIELD_LOCATOR_ID; end if;
2269 if l_merged_rows( l_mrow_ix ).PROCESS_YIELD_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).PROCESS_YIELD_SUBINVENTORY := old_row.PROCESS_YIELD_SUBINVENTORY; end if;
2270 if l_merged_rows( l_mrow_ix ).PRODUCT_FAMILY_ITEM_ID is null then l_merged_rows( l_mrow_ix ).PRODUCT_FAMILY_ITEM_ID := old_row.PRODUCT_FAMILY_ITEM_ID; end if;
2271 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := old_row.PROGRAM_APPLICATION_ID; end if;
2272 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := old_row.PROGRAM_ID; end if;
2273 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := old_row.PROGRAM_UPDATE_DATE; end if;
2274 if l_merged_rows( l_mrow_ix ).PRORATE_SERVICE_FLAG is null then l_merged_rows( l_mrow_ix ).PRORATE_SERVICE_FLAG := old_row.PRORATE_SERVICE_FLAG; end if;
2275 if l_merged_rows( l_mrow_ix ).PURCHASING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).PURCHASING_ENABLED_FLAG := old_row.PURCHASING_ENABLED_FLAG; end if;
2276 if l_merged_rows( l_mrow_ix ).PURCHASING_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).PURCHASING_ITEM_FLAG := old_row.PURCHASING_ITEM_FLAG; end if;
2277 if l_merged_rows( l_mrow_ix ).PURCHASING_TAX_CODE is null then l_merged_rows( l_mrow_ix ).PURCHASING_TAX_CODE := old_row.PURCHASING_TAX_CODE; end if;
2278 if l_merged_rows( l_mrow_ix ).QTY_RCV_EXCEPTION_CODE is null then l_merged_rows( l_mrow_ix ).QTY_RCV_EXCEPTION_CODE := old_row.QTY_RCV_EXCEPTION_CODE; end if;
2279 if l_merged_rows( l_mrow_ix ).QTY_RCV_TOLERANCE is null then l_merged_rows( l_mrow_ix ).QTY_RCV_TOLERANCE := old_row.QTY_RCV_TOLERANCE; end if;
2280 if l_merged_rows( l_mrow_ix ).RECEIPT_DAYS_EXCEPTION_CODE is null then l_merged_rows( l_mrow_ix ).RECEIPT_DAYS_EXCEPTION_CODE := old_row.RECEIPT_DAYS_EXCEPTION_CODE; end if;
2281 if l_merged_rows( l_mrow_ix ).RECEIPT_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).RECEIPT_REQUIRED_FLAG := old_row.RECEIPT_REQUIRED_FLAG; end if;
2282 if l_merged_rows( l_mrow_ix ).RECEIVE_CLOSE_TOLERANCE is null then l_merged_rows( l_mrow_ix ).RECEIVE_CLOSE_TOLERANCE := old_row.RECEIVE_CLOSE_TOLERANCE; end if;
2283 if l_merged_rows( l_mrow_ix ).RECEIVING_ROUTING_ID is null then l_merged_rows( l_mrow_ix ).RECEIVING_ROUTING_ID := old_row.RECEIVING_ROUTING_ID; end if;
2284 if l_merged_rows( l_mrow_ix ).RECIPE_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).RECIPE_ENABLED_FLAG := old_row.RECIPE_ENABLED_FLAG; end if;
2285 if l_merged_rows( l_mrow_ix ).RECOVERED_PART_DISP_CODE is null then l_merged_rows( l_mrow_ix ).RECOVERED_PART_DISP_CODE := old_row.RECOVERED_PART_DISP_CODE; end if;
2286 if l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_CODE is null then l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_CODE := old_row.RELEASE_TIME_FENCE_CODE; end if;
2287 if l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_DAYS is null then l_merged_rows( l_mrow_ix ).RELEASE_TIME_FENCE_DAYS := old_row.RELEASE_TIME_FENCE_DAYS; end if;
2288 if l_merged_rows( l_mrow_ix ).REPAIR_LEADTIME is null then l_merged_rows( l_mrow_ix ).REPAIR_LEADTIME := old_row.REPAIR_LEADTIME; end if;
2289 if l_merged_rows( l_mrow_ix ).REPAIR_PROGRAM is null then l_merged_rows( l_mrow_ix ).REPAIR_PROGRAM := old_row.REPAIR_PROGRAM; end if;
2290 if l_merged_rows( l_mrow_ix ).REPAIR_YIELD is null then l_merged_rows( l_mrow_ix ).REPAIR_YIELD := old_row.REPAIR_YIELD; end if;
2291 if l_merged_rows( l_mrow_ix ).REPETITIVE_PLANNING_FLAG is null then l_merged_rows( l_mrow_ix ).REPETITIVE_PLANNING_FLAG := old_row.REPETITIVE_PLANNING_FLAG; end if;
2292 if l_merged_rows( l_mrow_ix ).REPLENISH_TO_ORDER_FLAG is null then l_merged_rows( l_mrow_ix ).REPLENISH_TO_ORDER_FLAG := old_row.REPLENISH_TO_ORDER_FLAG; end if;
2293 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := old_row.REQUEST_ID; end if;
2294 if l_merged_rows( l_mrow_ix ).RESERVABLE_TYPE is null then l_merged_rows( l_mrow_ix ).RESERVABLE_TYPE := old_row.RESERVABLE_TYPE; end if;
2295 if l_merged_rows( l_mrow_ix ).RESPONSE_TIME_PERIOD_CODE is null then l_merged_rows( l_mrow_ix ).RESPONSE_TIME_PERIOD_CODE := old_row.RESPONSE_TIME_PERIOD_CODE; end if;
2296 if l_merged_rows( l_mrow_ix ).RESPONSE_TIME_VALUE is null then l_merged_rows( l_mrow_ix ).RESPONSE_TIME_VALUE := old_row.RESPONSE_TIME_VALUE; end if;
2297 if l_merged_rows( l_mrow_ix ).RESTRICT_LOCATORS_CODE is null then l_merged_rows( l_mrow_ix ).RESTRICT_LOCATORS_CODE := old_row.RESTRICT_LOCATORS_CODE; end if;
2298 if l_merged_rows( l_mrow_ix ).RESTRICT_SUBINVENTORIES_CODE is null then l_merged_rows( l_mrow_ix ).RESTRICT_SUBINVENTORIES_CODE := old_row.RESTRICT_SUBINVENTORIES_CODE; end if;
2299 if l_merged_rows( l_mrow_ix ).RETEST_INTERVAL is null then l_merged_rows( l_mrow_ix ).RETEST_INTERVAL := old_row.RETEST_INTERVAL; end if;
2300 if l_merged_rows( l_mrow_ix ).RETURNABLE_FLAG is null then l_merged_rows( l_mrow_ix ).RETURNABLE_FLAG := old_row.RETURNABLE_FLAG; end if;
2301 if l_merged_rows( l_mrow_ix ).RETURN_INSPECTION_REQUIREMENT is null then l_merged_rows( l_mrow_ix ).RETURN_INSPECTION_REQUIREMENT := old_row.RETURN_INSPECTION_REQUIREMENT; end if;
2302 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := old_row.REVISION; end if;
2303 if l_merged_rows( l_mrow_ix ).REVISION_IMPORT_POLICY is null then l_merged_rows( l_mrow_ix ).REVISION_IMPORT_POLICY := old_row.REVISION_IMPORT_POLICY; end if;
2304 if l_merged_rows( l_mrow_ix ).REVISION_QTY_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).REVISION_QTY_CONTROL_CODE := old_row.REVISION_QTY_CONTROL_CODE; end if;
2305 if l_merged_rows( l_mrow_ix ).RFQ_REQUIRED_FLAG is null then l_merged_rows( l_mrow_ix ).RFQ_REQUIRED_FLAG := old_row.RFQ_REQUIRED_FLAG; end if;
2306 if l_merged_rows( l_mrow_ix ).ROUNDING_CONTROL_TYPE is null then l_merged_rows( l_mrow_ix ).ROUNDING_CONTROL_TYPE := old_row.ROUNDING_CONTROL_TYPE; end if;
2307 if l_merged_rows( l_mrow_ix ).ROUNDING_FACTOR is null then l_merged_rows( l_mrow_ix ).ROUNDING_FACTOR := old_row.ROUNDING_FACTOR; end if;
2308 if l_merged_rows( l_mrow_ix ).SAFETY_STOCK_BUCKET_DAYS is null then l_merged_rows( l_mrow_ix ).SAFETY_STOCK_BUCKET_DAYS := old_row.SAFETY_STOCK_BUCKET_DAYS; end if;
2309 if l_merged_rows( l_mrow_ix ).SALES_ACCOUNT is null then l_merged_rows( l_mrow_ix ).SALES_ACCOUNT := old_row.SALES_ACCOUNT; end if;
2310 if l_merged_rows( l_mrow_ix ).SECONDARY_DEFAULT_IND is null then l_merged_rows( l_mrow_ix ).SECONDARY_DEFAULT_IND := old_row.SECONDARY_DEFAULT_IND; end if;
2311 if l_merged_rows( l_mrow_ix ).SECONDARY_SPECIALIST_ID is null then l_merged_rows( l_mrow_ix ).SECONDARY_SPECIALIST_ID := old_row.SECONDARY_SPECIALIST_ID; end if;
2312 if l_merged_rows( l_mrow_ix ).SECONDARY_UOM_CODE is null then l_merged_rows( l_mrow_ix ).SECONDARY_UOM_CODE := old_row.SECONDARY_UOM_CODE; end if;
2313 if l_merged_rows( l_mrow_ix ).SERIAL_NUMBER_CONTROL_CODE is null then l_merged_rows( l_mrow_ix ).SERIAL_NUMBER_CONTROL_CODE := old_row.SERIAL_NUMBER_CONTROL_CODE; end if;
2314 if l_merged_rows( l_mrow_ix ).SERIAL_STATUS_ENABLED is null then l_merged_rows( l_mrow_ix ).SERIAL_STATUS_ENABLED := old_row.SERIAL_STATUS_ENABLED; end if;
2315 if l_merged_rows( l_mrow_ix ).SERVICEABLE_COMPONENT_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_COMPONENT_FLAG := old_row.SERVICEABLE_COMPONENT_FLAG; end if;
2316 if l_merged_rows( l_mrow_ix ).SERVICEABLE_ITEM_CLASS_ID is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_ITEM_CLASS_ID := old_row.SERVICEABLE_ITEM_CLASS_ID; end if;
2317 if l_merged_rows( l_mrow_ix ).SERVICEABLE_PRODUCT_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICEABLE_PRODUCT_FLAG := old_row.SERVICEABLE_PRODUCT_FLAG; end if;
2318 if l_merged_rows( l_mrow_ix ).SERVICE_DURATION is null then l_merged_rows( l_mrow_ix ).SERVICE_DURATION := old_row.SERVICE_DURATION; end if;
2319 if l_merged_rows( l_mrow_ix ).SERVICE_DURATION_PERIOD_CODE is null then l_merged_rows( l_mrow_ix ).SERVICE_DURATION_PERIOD_CODE := old_row.SERVICE_DURATION_PERIOD_CODE; end if;
2320 if l_merged_rows( l_mrow_ix ).SERVICE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).SERVICE_ITEM_FLAG := old_row.SERVICE_ITEM_FLAG; end if;
2321 if l_merged_rows( l_mrow_ix ).SERVICE_STARTING_DELAY is null then l_merged_rows( l_mrow_ix ).SERVICE_STARTING_DELAY := old_row.SERVICE_STARTING_DELAY; end if;
2322 if l_merged_rows( l_mrow_ix ).SERV_BILLING_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).SERV_BILLING_ENABLED_FLAG := old_row.SERV_BILLING_ENABLED_FLAG; end if;
2323 if l_merged_rows( l_mrow_ix ).SERV_IMPORTANCE_LEVEL is null then l_merged_rows( l_mrow_ix ).SERV_IMPORTANCE_LEVEL := old_row.SERV_IMPORTANCE_LEVEL; end if;
2324 if l_merged_rows( l_mrow_ix ).SERV_REQ_ENABLED_CODE is null then l_merged_rows( l_mrow_ix ).SERV_REQ_ENABLED_CODE := old_row.SERV_REQ_ENABLED_CODE; end if;
2325 if l_merged_rows( l_mrow_ix ).SET_ID is null then l_merged_rows( l_mrow_ix ).SET_ID := old_row.SET_ID; end if;
2326 if l_merged_rows( l_mrow_ix ).SHELF_LIFE_CODE is null then l_merged_rows( l_mrow_ix ).SHELF_LIFE_CODE := old_row.SHELF_LIFE_CODE; end if;
2327 if l_merged_rows( l_mrow_ix ).SHELF_LIFE_DAYS is null then l_merged_rows( l_mrow_ix ).SHELF_LIFE_DAYS := old_row.SHELF_LIFE_DAYS; end if;
2328 if l_merged_rows( l_mrow_ix ).SHIPPABLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).SHIPPABLE_ITEM_FLAG := old_row.SHIPPABLE_ITEM_FLAG; end if;
2329 if l_merged_rows( l_mrow_ix ).SHIP_MODEL_COMPLETE_FLAG is null then l_merged_rows( l_mrow_ix ).SHIP_MODEL_COMPLETE_FLAG := old_row.SHIP_MODEL_COMPLETE_FLAG; end if;
2330 if l_merged_rows( l_mrow_ix ).SHRINKAGE_RATE is null then l_merged_rows( l_mrow_ix ).SHRINKAGE_RATE := old_row.SHRINKAGE_RATE; end if;
2331 if l_merged_rows( l_mrow_ix ).SOURCE_ORGANIZATION_ID is null then l_merged_rows( l_mrow_ix ).SOURCE_ORGANIZATION_ID := old_row.SOURCE_ORGANIZATION_ID; end if;
2332 if l_merged_rows( l_mrow_ix ).SOURCE_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).SOURCE_SUBINVENTORY := old_row.SOURCE_SUBINVENTORY; end if;
2333 if l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC is null then l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := old_row.SOURCE_SYSTEM_REFERENCE_DESC; end if;
2334 if l_merged_rows( l_mrow_ix ).SOURCE_TYPE is null then l_merged_rows( l_mrow_ix ).SOURCE_TYPE := old_row.SOURCE_TYPE; end if;
2335 if l_merged_rows( l_mrow_ix ).SO_AUTHORIZATION_FLAG is null then l_merged_rows( l_mrow_ix ).SO_AUTHORIZATION_FLAG := old_row.SO_AUTHORIZATION_FLAG; end if;
2336 if l_merged_rows( l_mrow_ix ).SO_TRANSACTIONS_FLAG is null then l_merged_rows( l_mrow_ix ).SO_TRANSACTIONS_FLAG := old_row.SO_TRANSACTIONS_FLAG; end if;
2337 if l_merged_rows( l_mrow_ix ).START_AUTO_LOT_NUMBER is null then l_merged_rows( l_mrow_ix ).START_AUTO_LOT_NUMBER := old_row.START_AUTO_LOT_NUMBER; end if;
2338 if l_merged_rows( l_mrow_ix ).START_AUTO_SERIAL_NUMBER is null then l_merged_rows( l_mrow_ix ).START_AUTO_SERIAL_NUMBER := old_row.START_AUTO_SERIAL_NUMBER; end if;
2339 if l_merged_rows( l_mrow_ix ).START_DATE_ACTIVE is null then l_merged_rows( l_mrow_ix ).START_DATE_ACTIVE := old_row.START_DATE_ACTIVE; end if;
2340 if l_merged_rows( l_mrow_ix ).STD_LOT_SIZE is null then l_merged_rows( l_mrow_ix ).STD_LOT_SIZE := old_row.STD_LOT_SIZE; end if;
2341 if l_merged_rows( l_mrow_ix ).STOCK_ENABLED_FLAG is null then l_merged_rows( l_mrow_ix ).STOCK_ENABLED_FLAG := old_row.STOCK_ENABLED_FLAG; end if;
2342 if l_merged_rows( l_mrow_ix ).SUBCONTRACTING_COMPONENT is null then l_merged_rows( l_mrow_ix ).SUBCONTRACTING_COMPONENT := old_row.SUBCONTRACTING_COMPONENT; end if;
2343 if l_merged_rows( l_mrow_ix ).SUBSCRIPTION_DEPEND_FLAG is null then l_merged_rows( l_mrow_ix ).SUBSCRIPTION_DEPEND_FLAG := old_row.SUBSCRIPTION_DEPEND_FLAG; end if;
2344 if l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_CODE is null then l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_CODE := old_row.SUBSTITUTION_WINDOW_CODE; end if;
2345 if l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_DAYS is null then l_merged_rows( l_mrow_ix ).SUBSTITUTION_WINDOW_DAYS := old_row.SUBSTITUTION_WINDOW_DAYS; end if;
2346 if l_merged_rows( l_mrow_ix ).SUMMARY_FLAG is null then l_merged_rows( l_mrow_ix ).SUMMARY_FLAG := old_row.SUMMARY_FLAG; end if;
2347 if l_merged_rows( l_mrow_ix ).TAXABLE_FLAG is null then l_merged_rows( l_mrow_ix ).TAXABLE_FLAG := old_row.TAXABLE_FLAG; end if;
2348 if l_merged_rows( l_mrow_ix ).TAX_CODE is null then l_merged_rows( l_mrow_ix ).TAX_CODE := old_row.TAX_CODE; end if;
2349 if l_merged_rows( l_mrow_ix ).TIME_BILLABLE_FLAG is null then l_merged_rows( l_mrow_ix ).TIME_BILLABLE_FLAG := old_row.TIME_BILLABLE_FLAG; end if;
2350 if l_merged_rows( l_mrow_ix ).TRACKING_QUANTITY_IND is null then l_merged_rows( l_mrow_ix ).TRACKING_QUANTITY_IND := old_row.TRACKING_QUANTITY_IND; end if;
2351 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := old_row.TRANSACTION_ID; end if;
2352 if l_merged_rows( l_mrow_ix ).UNDER_RETURN_TOLERANCE is null then l_merged_rows( l_mrow_ix ).UNDER_RETURN_TOLERANCE := old_row.UNDER_RETURN_TOLERANCE; end if;
2353 if l_merged_rows( l_mrow_ix ).UNDER_SHIPMENT_TOLERANCE is null then l_merged_rows( l_mrow_ix ).UNDER_SHIPMENT_TOLERANCE := old_row.UNDER_SHIPMENT_TOLERANCE; end if;
2354 if l_merged_rows( l_mrow_ix ).UNIT_HEIGHT is null then l_merged_rows( l_mrow_ix ).UNIT_HEIGHT := old_row.UNIT_HEIGHT; end if;
2355 if l_merged_rows( l_mrow_ix ).UNIT_LENGTH is null then l_merged_rows( l_mrow_ix ).UNIT_LENGTH := old_row.UNIT_LENGTH; end if;
2356 if l_merged_rows( l_mrow_ix ).UNIT_OF_ISSUE is null then l_merged_rows( l_mrow_ix ).UNIT_OF_ISSUE := old_row.UNIT_OF_ISSUE; end if;
2357 if l_merged_rows( l_mrow_ix ).UNIT_VOLUME is null then l_merged_rows( l_mrow_ix ).UNIT_VOLUME := old_row.UNIT_VOLUME; end if;
2358 if l_merged_rows( l_mrow_ix ).UNIT_WEIGHT is null then l_merged_rows( l_mrow_ix ).UNIT_WEIGHT := old_row.UNIT_WEIGHT; end if;
2359 if l_merged_rows( l_mrow_ix ).UNIT_WIDTH is null then l_merged_rows( l_mrow_ix ).UNIT_WIDTH := old_row.UNIT_WIDTH; end if;
2360 if l_merged_rows( l_mrow_ix ).UN_NUMBER_ID is null then l_merged_rows( l_mrow_ix ).UN_NUMBER_ID := old_row.UN_NUMBER_ID; end if;
2361 if l_merged_rows( l_mrow_ix ).USAGE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).USAGE_ITEM_FLAG := old_row.USAGE_ITEM_FLAG; end if;
2362 if l_merged_rows( l_mrow_ix ).VARIABLE_LEAD_TIME is null then l_merged_rows( l_mrow_ix ).VARIABLE_LEAD_TIME := old_row.VARIABLE_LEAD_TIME; end if;
2363 if l_merged_rows( l_mrow_ix ).VEHICLE_ITEM_FLAG is null then l_merged_rows( l_mrow_ix ).VEHICLE_ITEM_FLAG := old_row.VEHICLE_ITEM_FLAG; end if;
2364 if l_merged_rows( l_mrow_ix ).VENDOR_WARRANTY_FLAG is null then l_merged_rows( l_mrow_ix ).VENDOR_WARRANTY_FLAG := old_row.VENDOR_WARRANTY_FLAG; end if;
2365 if l_merged_rows( l_mrow_ix ).VMI_FIXED_ORDER_QUANTITY is null then l_merged_rows( l_mrow_ix ).VMI_FIXED_ORDER_QUANTITY := old_row.VMI_FIXED_ORDER_QUANTITY; end if;
2366 if l_merged_rows( l_mrow_ix ).VMI_FORECAST_TYPE is null then l_merged_rows( l_mrow_ix ).VMI_FORECAST_TYPE := old_row.VMI_FORECAST_TYPE; end if;
2367 if l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_DAYS is null then l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_DAYS := old_row.VMI_MAXIMUM_DAYS; end if;
2368 if l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_UNITS is null then l_merged_rows( l_mrow_ix ).VMI_MAXIMUM_UNITS := old_row.VMI_MAXIMUM_UNITS; end if;
2369 if l_merged_rows( l_mrow_ix ).VMI_MINIMUM_DAYS is null then l_merged_rows( l_mrow_ix ).VMI_MINIMUM_DAYS := old_row.VMI_MINIMUM_DAYS; end if;
2370 if l_merged_rows( l_mrow_ix ).VMI_MINIMUM_UNITS is null then l_merged_rows( l_mrow_ix ).VMI_MINIMUM_UNITS := old_row.VMI_MINIMUM_UNITS; end if;
2371 if l_merged_rows( l_mrow_ix ).VOLUME_UOM_CODE is null then l_merged_rows( l_mrow_ix ).VOLUME_UOM_CODE := old_row.VOLUME_UOM_CODE; end if;
2372 if l_merged_rows( l_mrow_ix ).VOL_DISCOUNT_EXEMPT_FLAG is null then l_merged_rows( l_mrow_ix ).VOL_DISCOUNT_EXEMPT_FLAG := old_row.VOL_DISCOUNT_EXEMPT_FLAG; end if;
2373 if l_merged_rows( l_mrow_ix ).WARRANTY_VENDOR_ID is null then l_merged_rows( l_mrow_ix ).WARRANTY_VENDOR_ID := old_row.WARRANTY_VENDOR_ID; end if;
2374 if l_merged_rows( l_mrow_ix ).WEB_STATUS is null then l_merged_rows( l_mrow_ix ).WEB_STATUS := old_row.WEB_STATUS; end if;
2375 if l_merged_rows( l_mrow_ix ).WEIGHT_UOM_CODE is null then l_merged_rows( l_mrow_ix ).WEIGHT_UOM_CODE := old_row.WEIGHT_UOM_CODE; end if;
2376 if l_merged_rows( l_mrow_ix ).WH_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).WH_UPDATE_DATE := old_row.WH_UPDATE_DATE; end if;
2377 if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_LOCATOR_ID is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_LOCATOR_ID := old_row.WIP_SUPPLY_LOCATOR_ID; end if;
2378 if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_SUBINVENTORY is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_SUBINVENTORY := old_row.WIP_SUPPLY_SUBINVENTORY; end if;
2379 if l_merged_rows( l_mrow_ix ).WIP_SUPPLY_TYPE is null then l_merged_rows( l_mrow_ix ).WIP_SUPPLY_TYPE := old_row.WIP_SUPPLY_TYPE; end if;
2380 -- end generated code
2381 END LOOP; -- over old rows
2382 /*
2383 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2384 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2385 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2386 END IF;
2387 */
2388 --Changing the confirm status for the last group of merged items.
2389 IF( l_cur_rank > 0 AND NOT l_is_pdh_batch) THEN
2390 IF( l_merged_rows(l_mrow_ix).CONFIRM_STATUS NOT IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
2391 AND l_merged_rows(l_mrow_ix).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE )
2392 THEN
2393 l_merged_rows(l_mrow_ix).CONFIRM_STATUS := G_CONF_NEW;
2394 END IF;
2395 IF( l_excluded_flag IS NOT NULL) THEN
2396 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := G_EXCLUDED;
2397 END IF;
2398 END IF; --IF( l_cur_rank > 0 AND NOT l_is_pdh_batch)
2399
2400 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || c_target_rows%ROWCOUNT );
2401 IF c_target_rows%ISOPEN THEN
2402 CLOSE c_target_rows;
2403 END IF;
2404
2405 IF l_merged_rows IS NOT NULL THEN
2406 -- delete
2407 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2408 FORALL rid_ix IN INDICES OF l_old_rowids
2409 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
2410 WHERE ROWID = l_old_rowids( rid_ix );
2411 -- insert
2412 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2413 FORALL row_index IN INDICES OF l_merged_rows
2414 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
2415 VALUES l_merged_rows( row_index );
2416 END IF;
2417
2418 IF p_commit = FND_API.G_TRUE THEN
2419 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2420 COMMIT;
2421 END IF;
2422 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2423 END merge_items;
2424
2425 PROCEDURE merge_revs( p_batch_id IN NUMBER
2426 , p_is_pdh_batch IN FLAG
2427 , p_ss_id IN NUMBER DEFAULT NULL
2428 , p_master_org_id IN NUMBER DEFAULT NULL
2429 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
2430 )
2431 IS
2432 SUBTYPE MIRI_ROW IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
2433 TYPE MIRI_ROWS IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
2434
2435 /*
2436 * Note that the organization_id column is filled in from the organization_code and batch organization_id
2437 * as part of resolve_ssxref_on_data_load
2438 * revision column is filled in from the revision_id before this cursor is fetched.
2439 */
2440 CURSOR c_ss_target_revs( cp_ss_id MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
2441 , cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2442 SELECT
2443 rowid rid
2444 , FIRST_VALUE( ROWID ) OVER ( PARTITION BY
2445 source_system_id
2446 , source_system_reference
2447 , organization_id
2448 , revision
2449 ORDER BY
2450 last_update_date desc nulls last
2451 , interface_table_unique_id desc nulls last
2452 ) master_rid
2453 , RANK( ) OVER ( PARTITION BY
2454 source_system_id
2455 , source_system_reference
2456 , organization_id
2457 , revision
2458 ORDER BY
2459 last_update_date desc nulls last
2460 , interface_table_unique_id desc nulls last
2461 ) local_rank
2462 , sub.*
2463 FROM
2464 ( SELECT
2465 COUNT( * ) OVER ( PARTITION BY
2466 source_system_id
2467 , source_system_reference
2468 , organization_id
2469 , revision
2470 )
2471 cnt
2472 , miri.*
2473 FROM mtl_item_revisions_interface miri
2474 WHERE PROCESS_FLAG = 0
2475 and SET_PROCESS_ID = p_batch_id
2476 and SOURCE_SYSTEM_ID = cp_ss_id
2477 and SOURCE_SYSTEM_REFERENCE IS NOT NULL
2478 AND ORGANIZATION_ID IS NOT NULL
2479 and EXISTS ( SELECT null
2480 FROM mtl_parameters mp
2481 WHERE mp.ORGANIZATION_ID = miri.ORGANIZATION_ID
2482 and mp.MASTER_ORGANIZATION_ID = cp_master_org_id
2483 )
2484 )
2485 sub
2486 WHERE sub.cnt > 1
2487 ORDER BY master_rid, local_rank;
2488
2489 CURSOR c_pdh_target_revs( cp_master_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE ) IS
2490 SELECT
2491 rowid rid
2492 , first_value( rowid ) over ( PARTITION BY
2493 item_number
2494 , organization_id
2495 , revision
2496 ORDER BY
2497 last_update_date desc nulls last
2498 , interface_table_unique_id desc nulls last
2499 ) master_rid
2500 , rank( ) over ( PARTITION BY
2501 item_number
2502 , organization_id
2503 , revision
2504 ORDER BY
2505 last_update_date desc nulls last
2506 , interface_table_unique_id desc nulls last
2507 ) local_rank
2508 , sub.*
2509 FROM
2510 ( select
2511 count( * ) over ( PARTITION BY
2512 item_number
2513 , organization_id
2514 , revision
2515 )
2516 cnt
2517 , miri.*
2518 FROM MTL_ITEM_REVISIONS_INTERFACE miri
2519 WHERE PROCESS_FLAG = 1
2520 AND SET_PROCESS_ID = p_batch_id
2521 AND ITEM_NUMBER IS NOT NULL
2522 AND ORGANIZATION_ID IS NOT NULL
2523 AND ( SOURCE_SYSTEM_ID IS NULL
2524 OR SOURCE_SYSTEM_ID = G_PDH_SOURCE_SYSTEM_ID
2525 )
2526 AND EXISTS ( SELECT null
2527 FROM mtl_parameters mp
2528 WHERE mp.organization_id = miri.organization_id
2529 AND mp.master_organization_id = cp_master_org_id
2530 )
2531 )
2532 sub
2533 WHERE sub.cnt > 1
2534 ORDER BY master_rid, local_rank;
2535
2536 TYPE TARGET_ROWS IS TABLE OF c_ss_target_revs%ROWTYPE;
2537
2538 l_merged_rows MIRI_ROWS;
2539 l_merge_base MIRI_ROW;
2540 l_old_rows TARGET_ROWS;
2541 l_old_rowids UROWID_TABLE;
2542
2543 l_ss_id MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE := p_ss_id;
2544 l_ssr MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
2545 l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
2546
2547 l_cur_master_rid UROWID := NULL;
2548 l_mrow_ix PLS_INTEGER := 0;
2549 l_is_pdh_batch BOOLEAN;
2550
2551 l_org_id MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
2552 l_pdh_batch_flag FLAG := p_is_pdh_batch;
2553
2554 l_proc_log_prefix CONSTANT VARCHAR2(30) := 'merge_revs - ';
2555 BEGIN
2556 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
2557 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
2558 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
2559 merge_params_from_batch_header( p_batch_id => p_batch_id
2560 , x_is_pdh_batch => l_pdh_batch_flag
2561 , x_master_org_id => l_org_id
2562 , x_ss_id => l_ss_id
2563 );
2564 END IF;
2565 Debug_Conc_Log( l_proc_log_prefix || 'Master Org ID: ' || l_org_id );
2566 Debug_Conc_Log( l_proc_log_prefix || 'SS ID: ' || l_ss_id );
2567 Debug_Conc_Log( l_proc_log_prefix || 'Is PDH Batch?: ' || l_pdh_batch_flag );
2568
2569 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
2570 SET REVISION = NVL( ( SELECT r.REVISION
2571 FROM MTL_ITEM_REVISIONS_B r
2572 WHERE r.REVISION_ID = miri.REVISION_ID
2573 AND r.ORGANIZATION_ID = miri.ORGANIZATION_ID
2574 )
2575 , REVISION
2576 )
2577 WHERE REVISION_ID IS NOT NULL
2578 AND SET_PROCESS_ID = p_batch_id
2579 AND REVISION IS NULL;
2580
2581 l_is_pdh_batch := ( l_pdh_batch_flag = FND_API.G_TRUE );
2582 IF l_is_pdh_batch THEN
2583 OPEN c_pdh_target_revs( l_org_id );
2584 FETCH c_pdh_target_revs BULK COLLECT INTO l_old_rows;
2585 CLOSE c_pdh_target_revs;
2586 ELSE
2587 OPEN c_ss_target_revs( l_ss_id, l_org_id );
2588 FETCH c_ss_target_revs BULK COLLECT INTO l_old_rows;
2589 CLOSE c_ss_target_revs;
2590 END IF;
2591
2592 Debug_Conc_Log( l_proc_log_prefix || 'Rows requiring merging: ' || l_old_rows.COUNT );
2593 IF 0 <> l_old_rows.COUNT THEN
2594 -- attributes common to every merged row
2595 l_merge_base.SET_PROCESS_ID := p_batch_id;
2596 l_merge_base.PROCESS_FLAG := CASE WHEN l_is_pdh_batch THEN 1 ELSE 0 END;
2597
2598 l_old_rowids := UROWID_TABLE( );
2599 l_old_rowids.EXTEND( l_old_rows.COUNT );
2600
2601 FOR orow_ix IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
2602 l_old_rowids( orow_ix ) := l_old_rows( orow_ix ).RID;
2603
2604 IF( l_cur_master_rid IS NULL
2605 OR l_old_rows( orow_ix ).master_rid <> l_cur_master_rid )
2606 THEN
2607 l_cur_master_rid := l_old_rows( orow_ix ).master_rid;
2608 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; ROWID = '|| l_cur_master_rid );
2609 l_mrow_ix := l_mrow_ix + 1;
2610 l_merged_rows( l_mrow_ix ) := l_merge_base;
2611 IF NOT l_is_pdh_batch THEN
2612 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_old_rows( orow_ix ).SOURCE_SYSTEM_ID;
2613 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_old_rows( orow_ix ).SOURCE_SYSTEM_REFERENCE;
2614 Debug_Conc_Log( l_proc_log_prefix || ' Source System Reference = ' || l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE );
2615 END IF;
2616 ELSE
2617 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; ROWID = '
2618 || l_old_rows( orow_ix ).rid || '; master ROWID = '|| l_cur_master_rid );
2619 END IF;
2620
2621 -- Special Cases:
2622 -- Transaction type
2623 l_candidate_trans := UPPER( l_old_rows( orow_ix ).TRANSACTION_TYPE );
2624
2625 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL
2626 OR l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
2627 THEN
2628 -- CREATE > SYNC > UPDATE : order of case expression matters
2629 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE :=
2630 CASE
2631 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2632 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
2633 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2634 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
2635 WHEN l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2636 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
2637 ELSE NULL -- INVALID transaction types encountered ...
2638 END;
2639 END IF;
2640
2641 -- The following columns need to be treated as atomic groups
2642 -- 1. Item Identifier
2643 IF l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID IS NULL
2644 AND l_merged_rows( l_mrow_ix ).ITEM_NUMBER IS NULL
2645 THEN
2646 l_merged_rows( l_mrow_ix ).INVENTORY_ITEM_ID := l_old_rows( orow_ix ).INVENTORY_ITEM_ID;
2647 l_merged_rows( l_mrow_ix ).ITEM_NUMBER := l_old_rows( orow_ix ).ITEM_NUMBER;
2648 END IF;
2649
2650 -- 2. Organization
2651 IF l_merged_rows( l_mrow_ix ).ORGANIZATION_ID IS NULL
2652 AND l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE IS NULL
2653 THEN
2654 l_merged_rows( l_mrow_ix ).ORGANIZATION_ID := l_old_rows( orow_ix ).ORGANIZATION_ID;
2655 l_merged_rows( l_mrow_ix ).ORGANIZATION_CODE := l_old_rows( orow_ix ).ORGANIZATION_CODE;
2656 END IF;
2657
2658 -- Non-special cased
2659 -- Start Generated Code
2660 /* Generated using:
2661 SET LINESIZE 200
2662 SELECT 'if l_merged_rows( l_mrow_ix ).' ||column_name || ' is null then l_merged_rows( l_mrow_ix ).' || column_name || ' := l_old_rows( orow_ix ).' || column_name || '; end if; '
2663 FROM ALL_TAB_COLUMNS
2664 WHERE TABLE_NAME = 'MTL_ITEM_REVISIONS_INTERFACE'
2665 AND COLUMN_NAME NOT IN
2666 ( -- special cases (for merge)
2667 'INVENTORY_ITEM_ID'
2668 , 'ITEM_NUMBER'
2669 , 'ORGANIZATION_ID'
2670 , 'ORGANIZATION_CODE'
2671 , 'TRANSACTION_TYPE'
2672 -- special columns
2673 , 'SET_PROCESS_ID'
2674 , 'PROCESS_FLAG'
2675 , 'SOURCE_SYSTEM_ID'
2676 , 'SOURCE_SYSTEM_REFERENCE'
2677 , 'INTERFACE_TABLE_UNIQUE_ID'
2678 -- who columns
2679 , 'LAST_UPDATE_DATE'
2680 , 'CREATION_DATE'
2681 , 'CREATED_BY'
2682 , 'LAST_UPDATED_BY'
2683 , 'LAST_UPDATE_LOGIN'
2684 -- XXX: exclude concurrent processing columns?
2685 )
2686 ORDER BY COLUMN_NAME ASC
2687 */
2688 if l_merged_rows( l_mrow_ix ).ATTRIBUTE1 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE1 := l_old_rows( orow_ix ).ATTRIBUTE1; end if;
2689 if l_merged_rows( l_mrow_ix ).ATTRIBUTE10 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE10 := l_old_rows( orow_ix ).ATTRIBUTE10; end if;
2690 if l_merged_rows( l_mrow_ix ).ATTRIBUTE11 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE11 := l_old_rows( orow_ix ).ATTRIBUTE11; end if;
2691 if l_merged_rows( l_mrow_ix ).ATTRIBUTE12 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE12 := l_old_rows( orow_ix ).ATTRIBUTE12; end if;
2692 if l_merged_rows( l_mrow_ix ).ATTRIBUTE13 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE13 := l_old_rows( orow_ix ).ATTRIBUTE13; end if;
2693 if l_merged_rows( l_mrow_ix ).ATTRIBUTE14 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE14 := l_old_rows( orow_ix ).ATTRIBUTE14; end if;
2694 if l_merged_rows( l_mrow_ix ).ATTRIBUTE15 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE15 := l_old_rows( orow_ix ).ATTRIBUTE15; end if;
2695 if l_merged_rows( l_mrow_ix ).ATTRIBUTE2 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE2 := l_old_rows( orow_ix ).ATTRIBUTE2; end if;
2696 if l_merged_rows( l_mrow_ix ).ATTRIBUTE3 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE3 := l_old_rows( orow_ix ).ATTRIBUTE3; end if;
2697 if l_merged_rows( l_mrow_ix ).ATTRIBUTE4 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE4 := l_old_rows( orow_ix ).ATTRIBUTE4; end if;
2698 if l_merged_rows( l_mrow_ix ).ATTRIBUTE5 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE5 := l_old_rows( orow_ix ).ATTRIBUTE5; end if;
2699 if l_merged_rows( l_mrow_ix ).ATTRIBUTE6 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE6 := l_old_rows( orow_ix ).ATTRIBUTE6; end if;
2700 if l_merged_rows( l_mrow_ix ).ATTRIBUTE7 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE7 := l_old_rows( orow_ix ).ATTRIBUTE7; end if;
2701 if l_merged_rows( l_mrow_ix ).ATTRIBUTE8 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE8 := l_old_rows( orow_ix ).ATTRIBUTE8; end if;
2702 if l_merged_rows( l_mrow_ix ).ATTRIBUTE9 is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE9 := l_old_rows( orow_ix ).ATTRIBUTE9; end if;
2703 if l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY is null then l_merged_rows( l_mrow_ix ).ATTRIBUTE_CATEGORY := l_old_rows( orow_ix ).ATTRIBUTE_CATEGORY; end if;
2704 if l_merged_rows( l_mrow_ix ).CHANGE_ID is null then l_merged_rows( l_mrow_ix ).CHANGE_ID := l_old_rows( orow_ix ).CHANGE_ID; end if;
2705 if l_merged_rows( l_mrow_ix ).CHANGE_NOTICE is null then l_merged_rows( l_mrow_ix ).CHANGE_NOTICE := l_old_rows( orow_ix ).CHANGE_NOTICE; end if;
2706 if l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID is null then l_merged_rows( l_mrow_ix ).CURRENT_PHASE_ID := l_old_rows( orow_ix ).CURRENT_PHASE_ID; end if;
2707 if l_merged_rows( l_mrow_ix ).DESCRIPTION is null then l_merged_rows( l_mrow_ix ).DESCRIPTION := l_old_rows( orow_ix ).DESCRIPTION; end if;
2708 if l_merged_rows( l_mrow_ix ).ECN_INITIATION_DATE is null then l_merged_rows( l_mrow_ix ).ECN_INITIATION_DATE := l_old_rows( orow_ix ).ECN_INITIATION_DATE; end if;
2709 if l_merged_rows( l_mrow_ix ).EFFECTIVITY_DATE is null then l_merged_rows( l_mrow_ix ).EFFECTIVITY_DATE := l_old_rows( orow_ix ).EFFECTIVITY_DATE; end if;
2710 if l_merged_rows( l_mrow_ix ).IMPLEMENTATION_DATE is null then l_merged_rows( l_mrow_ix ).IMPLEMENTATION_DATE := l_old_rows( orow_ix ).IMPLEMENTATION_DATE; end if;
2711 if l_merged_rows( l_mrow_ix ).IMPLEMENTED_SERIAL_NUMBER is null then l_merged_rows( l_mrow_ix ).IMPLEMENTED_SERIAL_NUMBER := l_old_rows( orow_ix ).IMPLEMENTED_SERIAL_NUMBER; end if;
2712 if l_merged_rows( l_mrow_ix ).LIFECYCLE_ID is null then l_merged_rows( l_mrow_ix ).LIFECYCLE_ID := l_old_rows( orow_ix ).LIFECYCLE_ID; end if;
2713 if l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := l_old_rows( orow_ix ).PROGRAM_APPLICATION_ID; end if;
2714 if l_merged_rows( l_mrow_ix ).PROGRAM_ID is null then l_merged_rows( l_mrow_ix ).PROGRAM_ID := l_old_rows( orow_ix ).PROGRAM_ID; end if;
2715 if l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE is null then l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := l_old_rows( orow_ix ).PROGRAM_UPDATE_DATE; end if;
2716 if l_merged_rows( l_mrow_ix ).REQUEST_ID is null then l_merged_rows( l_mrow_ix ).REQUEST_ID := l_old_rows( orow_ix ).REQUEST_ID; end if;
2717 if l_merged_rows( l_mrow_ix ).REVISED_ITEM_SEQUENCE_ID is null then l_merged_rows( l_mrow_ix ).REVISED_ITEM_SEQUENCE_ID := l_old_rows( orow_ix ).REVISED_ITEM_SEQUENCE_ID; end if;
2718 if l_merged_rows( l_mrow_ix ).REVISION is null then l_merged_rows( l_mrow_ix ).REVISION := l_old_rows( orow_ix ).REVISION; end if;
2719 if l_merged_rows( l_mrow_ix ).REVISION_ID is null then l_merged_rows( l_mrow_ix ).REVISION_ID := l_old_rows( orow_ix ).REVISION_ID; end if;
2720 if l_merged_rows( l_mrow_ix ).REVISION_LABEL is null then l_merged_rows( l_mrow_ix ).REVISION_LABEL := l_old_rows( orow_ix ).REVISION_LABEL; end if;
2721 if l_merged_rows( l_mrow_ix ).REVISION_REASON is null then l_merged_rows( l_mrow_ix ).REVISION_REASON := l_old_rows( orow_ix ).REVISION_REASON; end if;
2722 if l_merged_rows( l_mrow_ix ).TRANSACTION_ID is null then l_merged_rows( l_mrow_ix ).TRANSACTION_ID := l_old_rows( orow_ix ).TRANSACTION_ID; end if;
2723 -- End Generated Code
2724
2725 END LOOP; -- loop over old rows
2726
2727 /*
2728 -- XXX: In case only null/invalid transaction types encountered, set transaction type to SYNC ?.
2729 IF l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE IS NULL THEN
2730 l_merged_rows( l_mrow_ix ).TRANSACTION_TYPE := G_TRANS_TYPE_SYNC;
2731 END IF;
2732 */
2733 IF l_merged_rows IS NOT NULL THEN
2734 -- delete
2735 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
2736 FORALL rid_ix IN INDICES OF l_old_rowids
2737 DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
2738 WHERE ROWID = l_old_rowids( rid_ix );
2739 -- insert
2740 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
2741 FORALL row_index IN INDICES OF l_merged_rows
2742 INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
2743 VALUES l_merged_rows( row_index );
2744 END IF;
2745 END IF; -- ENDS IF l_old_rows.count <> 0
2746 IF p_commit = FND_API.G_TRUE THEN
2747 Debug_Conc_Log( l_proc_log_prefix || 'Committing' );
2748 COMMIT;
2749 END IF;
2750 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
2751 END merge_revs;
2752
2753 -- Merging Item Associations.
2754 PROCEDURE Merge_Associations ( p_batch_id IN NUMBER
2755 , p_is_pdh_batch IN FLAG DEFAULT NULL
2756 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
2757 )
2758 IS
2759
2760 CURSOR pdh_candidate_assocs_rows_cur IS
2761 SELECT *
2762 FROM
2763 (
2764 SELECT
2765 ROWID rid,
2766 Count(*) OVER ( PARTITION BY ITEM_NUMBER,
2767 PK1_VALUE,
2768 PK2_VALUE,
2769 PK3_VALUE,
2770 PK4_VALUE,
2771 PK5_VALUE,
2772 BUNDLE_ID,
2773 DATA_LEVEL_ID,
2774 ORGANIZATION_ID )
2775 CNT,
2776 Rank() OVER ( ORDER BY ITEM_NUMBER,
2777 PK1_VALUE,
2778 PK2_VALUE,
2779 PK3_VALUE,
2780 PK4_VALUE,
2781 PK5_VALUE,
2782 BUNDLE_ID,
2783 DATA_LEVEL_ID,
2784 ORGANIZATION_ID )
2785 RNK,
2786 eiai.*
2787 FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2788 WHERE BATCH_ID = p_batch_id
2789 AND PROCESS_FLAG = 1
2790 )
2791 WHERE CNT > 1
2792 ORDER BY rnk, last_update_date DESC;
2793
2794 CURSOR ss_candidate_assocs_rows_cur IS
2795 SELECT *
2796 FROM
2797 (
2798 SELECT
2799 ROWID rid,
2800 Count(*) OVER ( PARTITION BY SOURCE_SYSTEM_ID,
2801 SOURCE_SYSTEM_REFERENCE,
2802 PK1_VALUE,
2803 PK2_VALUE,
2804 PK3_VALUE,
2805 PK4_VALUE,
2806 PK5_VALUE,
2807 BUNDLE_ID,
2808 DATA_LEVEL_ID,
2809 ORGANIZATION_ID )
2810 CNT,
2811 Rank() OVER ( ORDER BY SOURCE_SYSTEM_ID,
2812 SOURCE_SYSTEM_REFERENCE,
2813 PK1_VALUE,
2814 PK2_VALUE,
2815 PK3_VALUE,
2816 PK4_VALUE,
2817 PK5_VALUE,
2818 BUNDLE_ID,
2819 DATA_LEVEL_ID,
2820 ORGANIZATION_ID )
2821 RNK,
2822 eiai.*
2823 FROM EGO_ITEM_ASSOCIATIONS_INTF eiai
2824 WHERE BATCH_ID = p_batch_id
2825 AND PROCESS_FLAG = 0
2826 )
2827 WHERE CNT > 1
2828 ORDER BY rnk, last_update_date DESC;
2829
2830 TYPE Assocs_Rows_With_RowId IS TABLE OF ss_candidate_assocs_rows_cur%ROWTYPE;
2831
2832 l_current_rank_handled NUMBER;
2833 l_previous_rank_handled NUMBER;
2834 l_new_row_index NUMBER := 0;
2835 l_old_row_ids UROWID_TABLE;
2836 l_current_merged_tran_type VARCHAR2(10);
2837
2838 l_new_row IAssocs_Row;
2839 l_new_rows IAssocs_Rows;
2840 l_old_rows Assocs_Rows_With_RowId;
2841
2842 BEGIN
2843 Debug_Conc_Log( 'Calling Merge_Associations ');
2844 l_current_rank_handled := 0;
2845 l_previous_rank_handled := 0;
2846
2847 IF p_is_pdh_batch = FND_API.G_TRUE THEN
2848 -- 'PDH Batch'
2849 Debug_Conc_Log( 'Getting candidate rows for merging for PDH Batch ');
2850 OPEN pdh_candidate_assocs_rows_cur;
2851 FETCH pdh_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2852 CLOSE pdh_candidate_assocs_rows_cur;
2853 ELSE
2854 -- 'SS Batch'
2855 Debug_Conc_Log( 'Getting candidate rows for merging for Source System Batch ');
2856 OPEN ss_candidate_assocs_rows_cur;
2857 FETCH ss_candidate_assocs_rows_cur BULK COLLECT INTO l_old_rows;
2858 CLOSE ss_candidate_assocs_rows_cur;
2859 END IF;
2860
2861 Debug_Conc_Log( 'Merging '|| l_old_rows.COUNT || ' rows in associations table' );
2862
2863 IF l_old_rows.COUNT < 1 THEN
2864 RETURN;
2865 END IF;
2866
2867 l_old_row_ids := UROWID_TABLE( );
2868 l_old_row_ids.EXTEND( l_old_rows.COUNT );
2869
2870 FOR l_index IN l_old_rows.FIRST .. l_old_rows.LAST
2871 LOOP
2872 l_old_row_ids( l_index ) := l_old_rows( l_index ).RID;
2873 l_current_rank_handled := l_old_rows( l_index ).RNK;
2874 IF l_current_rank_handled <> l_previous_rank_handled THEN
2875 l_new_row_index := l_new_row_index + 1 ;
2876 l_new_rows( l_new_row_index ) := l_new_row;
2877 l_new_rows( l_new_row_index ).BATCH_ID := l_old_rows( l_index ).BATCH_ID;
2878 l_new_rows( l_new_row_index ).ORGANIZATION_ID := l_old_rows( l_index ).ORGANIZATION_ID;
2879 l_new_rows( l_new_row_index ).PK1_VALUE := l_old_rows( l_index ).PK1_VALUE;
2880 l_new_rows( l_new_row_index ).PK2_VALUE := l_old_rows( l_index ).PK2_VALUE;
2881 l_new_rows( l_new_row_index ).PK3_VALUE := l_old_rows( l_index ).PK3_VALUE;
2882 l_new_rows( l_new_row_index ).PK4_VALUE := l_old_rows( l_index ).PK4_VALUE;
2883 l_new_rows( l_new_row_index ).PK5_VALUE := l_old_rows( l_index ).PK5_VALUE;
2884 l_new_rows( l_new_row_index ).DATA_LEVEL_ID := l_old_rows( l_index ).DATA_LEVEL_ID;
2885 l_new_rows( l_new_row_index ).ORGANIZATION_CODE := l_old_rows( l_index ).ORGANIZATION_CODE;
2886 l_new_rows( l_new_row_index ).PROCESS_FLAG := l_old_rows( l_index ).PROCESS_FLAG;
2887 l_new_rows( l_new_row_index ).TRANSACTION_ID := l_old_rows( l_index ).TRANSACTION_ID;
2888 l_new_rows( l_new_row_index ).ASSOCIATION_ID := l_old_rows( l_index ).ASSOCIATION_ID;
2889 l_new_rows( l_new_row_index ).REQUEST_ID := l_old_rows( l_index ).REQUEST_ID;
2890 l_new_rows( l_new_row_index ).PROGRAM_APPLICATION_ID := l_old_rows( l_index ).PROGRAM_APPLICATION_ID;
2891 l_new_rows( l_new_row_index ).PROGRAM_ID := l_old_rows( l_index ).PROGRAM_ID;
2892 l_new_rows( l_new_row_index ).PROGRAM_UPDATE_DATE := l_old_rows( l_index ).PROGRAM_UPDATE_DATE;
2893 l_new_rows( l_new_row_index ).SUPPLIER_NAME := l_old_rows( l_index ).SUPPLIER_NAME;
2894 l_new_rows( l_new_row_index ).SUPPLIER_NUMBER := l_old_rows( l_index ).SUPPLIER_NUMBER;
2895 l_new_rows( l_new_row_index ).SUPPLIER_SITE_NAME := l_old_rows( l_index ).SUPPLIER_SITE_NAME;
2896 l_new_rows( l_new_row_index ).DATA_LEVEL_NAME := l_old_rows( l_index ).DATA_LEVEL_NAME;
2897 l_new_rows( l_new_row_index ).STYLE_ITEM_FLAG := l_old_rows( l_index ).STYLE_ITEM_FLAG;
2898 l_new_rows( l_new_row_index ).STYLE_ITEM_ID := l_old_rows( l_index ).STYLE_ITEM_ID;
2899 l_new_rows( l_new_row_index ).BUNDLE_ID := l_old_rows( l_index ).BUNDLE_ID;
2900 l_new_rows( l_new_row_index ).SOURCE_SYSTEM_ID := l_old_rows( l_index ).SOURCE_SYSTEM_ID;
2901 l_new_rows( l_new_row_index ).SOURCE_SYSTEM_REFERENCE := l_old_rows( l_index ).SOURCE_SYSTEM_REFERENCE;
2902 l_new_rows( l_new_row_index ).ITEM_NUMBER := l_old_rows( l_index ).ITEM_NUMBER;
2903 l_new_rows( l_new_row_index ).CREATED_BY := l_old_rows( l_index ).CREATED_BY;
2904 l_new_rows( l_new_row_index ).CREATION_DATE := l_old_rows( l_index ).CREATION_DATE;
2905 l_new_rows( l_new_row_index ).LAST_UPDATED_BY := l_old_rows( l_index ).LAST_UPDATED_BY;
2906 l_new_rows( l_new_row_index ).LAST_UPDATE_DATE := l_old_rows( l_index ).LAST_UPDATE_DATE;
2907 l_new_rows( l_new_row_index ).LAST_UPDATE_LOGIN := l_old_rows( l_index ).LAST_UPDATE_LOGIN;
2908 l_current_merged_tran_type := l_old_rows( l_index ).TRANSACTION_TYPE;
2909 END IF;
2910 IF l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID IS NULL THEN
2911 l_new_rows( l_new_row_index ).INVENTORY_ITEM_ID := l_old_rows( l_index ).INVENTORY_ITEM_ID;
2912 END IF;
2913 IF l_new_rows( l_new_row_index ).PRIMARY_FLAG IS NULL
2914 AND l_new_rows( l_new_row_index ).STATUS_CODE <> 2
2915 AND l_old_rows( l_index ).PRIMARY_FLAG <> 'Y' THEN
2916 l_new_rows( l_new_row_index ).PRIMARY_FLAG := l_old_rows( l_index ).PRIMARY_FLAG;
2917 END IF;
2918 IF l_new_rows( l_new_row_index ).STATUS_CODE IS NULL
2919 AND l_new_rows( l_new_row_index ).PRIMARY_FLAG <> 'Y'
2920 AND l_old_rows( l_index ).STATUS_CODE <> '2' THEN
2921 l_new_rows( l_new_row_index ).STATUS_CODE := l_old_rows( l_index ).STATUS_CODE;
2922 END IF;
2923 IF l_new_rows( l_new_row_index ).TRANSACTION_TYPE IS NULL
2924 OR l_new_rows( l_new_row_index ).TRANSACTION_TYPE <> l_current_merged_tran_type THEN
2925 l_new_rows( l_new_row_index ).TRANSACTION_TYPE :=
2926 CASE
2927 WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
2928 OR l_current_merged_tran_type = G_TRANS_TYPE_CREATE
2929 THEN G_TRANS_TYPE_CREATE
2930 WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
2931 OR l_current_merged_tran_type = G_TRANS_TYPE_SYNC
2932 THEN G_TRANS_TYPE_SYNC
2933 WHEN l_new_rows( l_new_row_index ).TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
2934 OR l_current_merged_tran_type = G_TRANS_TYPE_UPDATE
2935 THEN G_TRANS_TYPE_UPDATE
2936 ELSE NULL -- Transaction type is not valid.
2937 END;
2938 l_current_merged_tran_type := l_new_rows( l_new_row_index ).TRANSACTION_TYPE;
2939 END IF;
2940 l_previous_rank_handled := l_old_rows( l_index ).RNK;
2941 END LOOP;
2942
2943 -- Updating default values for primary_flag and status_code
2944 -- primary_flag null is defaulted with 'N'
2945 -- status_code null is defaulted with 1
2946 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
2947 SET PRIMARY_FLAG = 'N'
2948 WHERE PRIMARY_FLAG IS NULL
2949 AND BATCH_ID = p_batch_id;
2950
2951 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
2952 SET PRIMARY_FLAG = 'N'
2953 WHERE PRIMARY_FLAG IS NULL
2954 AND BATCH_ID = p_batch_id;
2955
2956 IF l_new_rows IS NOT NULL THEN
2957 -- Delete
2958 FORALL rid_ix IN INDICES OF l_old_row_ids
2959 DELETE FROM EGO_ITEM_ASSOCIATIONS_INTF
2960 WHERE ROWID = l_old_row_ids( rid_ix );
2961 -- Insert
2962 FORALL row_index IN INDICES OF l_new_rows
2963 INSERT INTO EGO_ITEM_ASSOCIATIONS_INTF
2964 VALUES l_new_rows( row_index );
2965 END IF;
2966 Debug_Conc_Log( 'End of Call to Merge_Associations ');
2967
2968 END merge_associations;
2969
2970
2971 PROCEDURE merge_batch ( p_batch_id IN NUMBER
2972 , p_is_pdh_batch IN FLAG DEFAULT NULL
2973 , p_ss_id IN NUMBER DEFAULT NULL
2974 , p_master_org_id IN NUMBER DEFAULT NULL
2975 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
2976 )
2977 IS
2978 l_org_id NUMBER := p_master_org_id;
2979 l_pdh_batch_flag FLAG := p_is_pdh_batch;
2980 l_ss_id NUMBER := p_ss_id;
2981 BEGIN
2982 Debug_Conc_Log( 'merge_batch: Starting for batch_id=' || TO_CHAR(p_batch_id) );
2983 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
2984 merge_params_from_batch_header( p_batch_id => p_batch_id
2985 , x_is_pdh_batch => l_pdh_batch_flag
2986 , x_ss_id => l_ss_id
2987 , x_master_org_id => l_org_id
2988 );
2989 END IF;
2990
2991 Debug_Conc_Log( 'merge_batch: Merging batch items' );
2992 MERGE_ITEMS( p_batch_id => p_batch_id
2993 , p_master_org_id => l_org_id
2994 , p_is_pdh_batch => l_pdh_batch_flag
2995 , p_ss_id => l_ss_id
2996 , p_commit => FND_API.G_FALSE
2997 );
2998 Debug_Conc_Log( 'merge_batch: Merging batch revisions' );
2999 MERGE_REVS ( p_batch_id => p_batch_id
3000 , p_master_org_id => l_org_id
3001 , p_is_pdh_batch => l_pdh_batch_flag
3002 , p_ss_id => l_ss_id
3003 , p_commit => FND_API.G_FALSE
3004 );
3005 Debug_Conc_Log( 'merge_batch: Merging Associations' );
3006 merge_associations( p_batch_id => p_batch_id
3007 , p_is_pdh_batch => l_pdh_batch_flag
3008 , p_commit => FND_API.G_FALSE
3009 );
3010
3011 Debug_Conc_Log( 'merge_batch: Merging batch extended attributes' );
3012 MERGE_ATTRS( p_batch_id => p_batch_id
3013 , p_master_org_id => l_org_id
3014 , p_is_pdh_batch => l_pdh_batch_flag
3015 , p_ss_id => l_ss_id
3016 , p_commit => FND_API.G_FALSE
3017 );
3018 IF p_commit = FND_API.G_TRUE THEN
3019 Debug_Conc_Log( 'merge_batch: Committing' );
3020 COMMIT;
3021 END IF;
3022 Debug_Conc_Log( 'merge_batch: Exiting' );
3023 END merge_batch;
3024
3025 PROCEDURE merge_attrs ( p_batch_id IN NUMBER
3026 , p_is_pdh_batch IN FLAG DEFAULT NULL
3027 , p_ss_id IN NUMBER DEFAULT NULL
3028 , p_master_org_id IN NUMBER DEFAULT NULL
3029 , p_commit IN FLAG DEFAULT FND_API.G_FALSE
3030 )
3031 IS
3032 l_org_id NUMBER := p_master_org_id;
3033 l_pdh_batch_flag FLAG := p_is_pdh_batch;
3034 l_ss_id NUMBER := p_ss_id;
3035 BEGIN
3036 Debug_Conc_Log( 'Starting merge_attrs for batch_id:' || to_char( p_batch_id ) );
3037 IF l_pdh_batch_flag IS NULL OR l_org_id IS NULL OR l_ss_id IS NULL THEN
3038 merge_params_from_batch_header( p_batch_id => p_batch_id
3039 , x_is_pdh_batch => l_pdh_batch_flag
3040 , x_ss_id => l_ss_id
3041 , x_master_org_id => l_org_id
3042 );
3043 END IF;
3044
3045 Debug_Conc_Log( 'merge_attrs: merging item-level extended attributes' );
3046 MERGE_ITEM_ATTRS ( p_batch_id => p_batch_id
3047 , p_master_org_id => l_org_id
3048 , p_is_pdh_batch => l_pdh_batch_flag
3049 , p_ss_id => l_ss_id
3050 , p_commit => FND_API.G_FALSE
3051 );
3052 Debug_Conc_Log( 'merge_attrs: merging revision-level extended attributes' );
3053 MERGE_REV_ATTRS( p_batch_id => p_batch_id
3054 , p_master_org_id => l_org_id
3055 , p_is_pdh_batch => l_pdh_batch_flag
3056 , p_ss_id => l_ss_id
3057 , p_commit => FND_API.G_FALSE
3058 );
3059 IF p_commit = FND_API.G_TRUE THEN
3060 Debug_Conc_Log( 'merge_attrs: Committing' );
3061 COMMIT;
3062 END IF;
3063 Debug_Conc_Log( 'merge_attrs: Exiting' );
3064 END merge_attrs;
3065
3066 --=================================================================================================================--
3067 --------------------------------------- End of Merging Section ----------------------------------------------------
3068 --=================================================================================================================--
3069
3070 --=================================================================================================================--
3071 --------------------------------- Start of Merging Section for Import -----------------------------------------------
3072 --=================================================================================================================--
3073 /*
3074 * All methods in this section does the following - For all the ready records in batch i.e. with process status = 1,
3075 * if more than one record found for same primary keys (for example ITEM_NUMBER, ORGANIZATION_ID, REVISION for
3076 * revisions interface table), then merge all the data to all the rows having same PKs. Then mark all other rows
3077 * with process status = 111 and keep only one row with process status = 1. This way only one record will get
3078 * processed and all the data from all the records will get processed. Later, after completion of all imports,
3079 * the rows with process status = 111 will get converted to success or failure depending on the status of row
3080 * that got processed.
3081 */
3082
3083 -- Merges item and org assignments
3084 PROCEDURE Merge_Items_For_Import( p_batch_id IN NUMBER
3085 , p_master_org_id IN NUMBER
3086 )
3087 IS
3088 /*
3089 * This cursor is never executed.
3090 * It's only used for type definition.
3091 */
3092 CURSOR c_target_rec_type IS
3093 SELECT ROWID rid
3094 , 0 cnt
3095 , 0 rnk
3096 , msii.*
3097 FROM MTL_SYSTEM_ITEMS_INTERFACE msii;
3098
3099 TYPE MSII_ROWS IS TABLE OF MSII_ROW INDEX BY BINARY_INTEGER;
3100 TYPE MSII_CURSOR IS REF CURSOR;
3101 c_target_rows MSII_CURSOR;
3102 old_row c_target_rec_type%ROWTYPE;
3103
3104 l_merged_rows MSII_ROWS;
3105 l_new_rows MSII_ROWS;
3106 l_merged_row MSII_ROW;
3107 l_old_rowids UROWID_TABLE;
3108
3109 l_candidate_trans MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_TYPE%TYPE;
3110
3111 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
3112 l_mrow_ix PLS_INTEGER := 0;
3113 l_new_row_idx PLS_INTEGER := 0;
3114
3115 l_org_id MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE := p_master_org_id;
3116 l_proc_log_prefix CONSTANT VARCHAR2( 30 ) := 'Merge_Items_For_Import - ';
3117 BEGIN
3118 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3119 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3120 -- making sure that item_number always has a value for ready records
3121 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
3122 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3123 FROM MTL_SYSTEM_ITEMS_KFV
3124 WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
3125 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
3126 WHERE SET_PROCESS_ID = p_batch_id
3127 AND PROCESS_FLAG = 1
3128 AND INVENTORY_ITEM_ID IS NOT NULL
3129 AND ITEM_NUMBER IS NULL;
3130
3131 OPEN c_target_rows FOR
3132 SELECT *
3133 FROM
3134 (SELECT
3135 ROWID rid,
3136 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID) cnt,
3137 RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID) rnk,
3138 msii.*
3139 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
3140 WHERE PROCESS_FLAG = 1
3141 AND SET_PROCESS_ID = p_batch_id
3142 AND ITEM_NUMBER IS NOT NULL
3143 AND ORGANIZATION_ID IS NOT NULL
3144 AND EXISTS
3145 (SELECT NULL
3146 FROM MTL_PARAMETERS mp
3147 WHERE mp.ORGANIZATION_ID = msii.ORGANIZATION_ID
3148 AND mp.MASTER_ORGANIZATION_ID = l_org_id
3149 )
3150 ) sub
3151 WHERE sub.cnt > 1
3152 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3153
3154 l_old_rowids := UROWID_TABLE( );
3155 l_new_row_idx := 0;
3156 LOOP
3157 FETCH c_target_rows INTO old_row;
3158 IF c_target_rows%NOTFOUND AND l_new_row_idx > 0 THEN
3159 FOR i IN 1..l_new_row_idx LOOP
3160 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
3161 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
3162 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ',' ||
3163 l_new_rows( i ).SOURCE_SYSTEM_ID);
3164 l_mrow_ix := l_mrow_ix + 1;
3165 l_merged_rows( l_mrow_ix ) := l_merged_row;
3166 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
3167 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
3168 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
3169 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3170 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3171 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := l_new_rows( i ).CONFIRM_STATUS;
3172 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
3173 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
3174 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3175 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3176 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3177 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
3178 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3179 END IF; --IF l_new_row_idx > 0 THEN
3180 EXIT WHEN c_target_rows%NOTFOUND;
3181
3182 l_old_rowids.EXTEND;
3183 l_old_rowids( l_old_rowids.LAST ) := old_row.RID;
3184
3185 IF( old_row.RNK <> l_cur_rank ) THEN
3186 -- check if already merged rows exists, then insert them into l_merged_rows
3187 -- when a final merged record is ready for one item-org then for each source system reference
3188 -- we will insert a merged record i.e. ssr, msii.merged_record
3189 IF l_new_row_idx > 0 THEN
3190 FOR i IN 1..l_new_row_idx LOOP
3191 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
3192 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3193 l_new_rows( i ).SOURCE_SYSTEM_ID);
3194 l_mrow_ix := l_mrow_ix + 1;
3195 l_merged_rows( l_mrow_ix ) := l_merged_row;
3196 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
3197 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
3198 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
3199 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3200 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE_DESC := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE_DESC;
3201 l_merged_rows( l_mrow_ix ).CONFIRM_STATUS := l_new_rows( i ).CONFIRM_STATUS;
3202 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
3203 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
3204 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3205 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3206 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3207 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
3208 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3209 END IF; --IF l_new_row_idx > 0 THEN
3210 l_cur_rank := old_row.RNK;
3211 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
3212 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID = ' ||
3213 old_row.ITEM_NUMBER || ',' ||
3214 old_row.ORGANIZATION_ID || ', ' ||
3215 old_row.INVENTORY_ITEM_ID);
3216 l_new_rows.DELETE;
3217 l_new_row_idx := 1;
3218 l_new_rows( l_new_row_idx ).PROCESS_FLAG := old_row.PROCESS_FLAG;
3219 -- initializing l_merged_row . This row will contain the current merged row for an item
3220 l_merged_row := NULL;
3221 l_merged_row.SET_PROCESS_ID := p_batch_id;
3222 l_merged_row.PROCESS_FLAG := old_row.PROCESS_FLAG;
3223 ELSE
3224 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
3225 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID = ' ||
3226 old_row.ITEM_NUMBER || ', ' ||
3227 old_row.ORGANIZATION_ID || ', ' ||
3228 old_row.INVENTORY_ITEM_ID);
3229 l_new_row_idx := l_new_row_idx + 1;
3230 l_new_rows( l_new_row_idx ).PROCESS_FLAG := 111;
3231 END IF;
3232
3233 l_new_rows( l_new_row_idx ).SET_PROCESS_ID := p_batch_id;
3234 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := old_row.SOURCE_SYSTEM_ID;
3235 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := old_row.SOURCE_SYSTEM_REFERENCE;
3236 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE_DESC := old_row.SOURCE_SYSTEM_REFERENCE_DESC;
3237 l_new_rows( l_new_row_idx ).CONFIRM_STATUS := old_row.CONFIRM_STATUS;
3238 l_new_rows( l_new_row_idx ).CREATED_BY := old_row.CREATED_BY;
3239 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := old_row.LAST_UPDATED_BY;
3240
3241 -- Special Cases:
3242 -- Transaction type
3243 l_candidate_trans := UPPER( old_row.TRANSACTION_TYPE );
3244
3245 IF l_merged_row.TRANSACTION_TYPE IS NULL
3246 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
3247 THEN
3248 -- CREATE > SYNC > UPDATE : order of case expression matters
3249 l_merged_row.TRANSACTION_TYPE :=
3250 CASE
3251 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3252 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
3253 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3254 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
3255 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3256 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
3257 ELSE NULL -- INVALID transaction types encountered so far ...
3258 END;
3259 END IF;
3260
3261 -- The following columns need to be treated as atomic groups
3262 -- 1. Item Identifier
3263 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
3264 AND l_merged_row.ITEM_NUMBER IS NULL
3265 AND l_merged_row.SEGMENT1 IS NULL
3266 AND l_merged_row.SEGMENT2 IS NULL
3267 AND l_merged_row.SEGMENT3 IS NULL
3268 AND l_merged_row.SEGMENT4 IS NULL
3269 AND l_merged_row.SEGMENT5 IS NULL
3270 AND l_merged_row.SEGMENT6 IS NULL
3271 AND l_merged_row.SEGMENT7 IS NULL
3272 AND l_merged_row.SEGMENT8 IS NULL
3273 AND l_merged_row.SEGMENT9 IS NULL
3274 AND l_merged_row.SEGMENT10 IS NULL
3275 AND l_merged_row.SEGMENT11 IS NULL
3276 AND l_merged_row.SEGMENT12 IS NULL
3277 AND l_merged_row.SEGMENT13 IS NULL
3278 AND l_merged_row.SEGMENT14 IS NULL
3279 AND l_merged_row.SEGMENT15 IS NULL
3280 AND l_merged_row.SEGMENT16 IS NULL
3281 AND l_merged_row.SEGMENT17 IS NULL
3282 AND l_merged_row.SEGMENT18 IS NULL
3283 AND l_merged_row.SEGMENT19 IS NULL
3284 AND l_merged_row.SEGMENT20 IS NULL
3285 THEN
3286 l_merged_row.INVENTORY_ITEM_ID := old_row.INVENTORY_ITEM_ID;
3287 l_merged_row.ITEM_NUMBER := old_row.ITEM_NUMBER;
3288 l_merged_row.SEGMENT1 := old_row.SEGMENT1;
3289 l_merged_row.SEGMENT2 := old_row.SEGMENT2;
3290 l_merged_row.SEGMENT3 := old_row.SEGMENT3;
3291 l_merged_row.SEGMENT4 := old_row.SEGMENT4;
3292 l_merged_row.SEGMENT5 := old_row.SEGMENT5;
3293 l_merged_row.SEGMENT6 := old_row.SEGMENT6;
3294 l_merged_row.SEGMENT7 := old_row.SEGMENT7;
3295 l_merged_row.SEGMENT8 := old_row.SEGMENT8;
3296 l_merged_row.SEGMENT9 := old_row.SEGMENT9;
3297 l_merged_row.SEGMENT10 := old_row.SEGMENT10;
3298 l_merged_row.SEGMENT11 := old_row.SEGMENT11;
3299 l_merged_row.SEGMENT12 := old_row.SEGMENT12;
3300 l_merged_row.SEGMENT13 := old_row.SEGMENT13;
3301 l_merged_row.SEGMENT14 := old_row.SEGMENT14;
3302 l_merged_row.SEGMENT15 := old_row.SEGMENT15;
3303 l_merged_row.SEGMENT16 := old_row.SEGMENT16;
3304 l_merged_row.SEGMENT17 := old_row.SEGMENT17;
3305 l_merged_row.SEGMENT18 := old_row.SEGMENT18;
3306 l_merged_row.SEGMENT19 := old_row.SEGMENT19;
3307 l_merged_row.SEGMENT20 := old_row.SEGMENT20;
3308 END IF;
3309
3310 -- 2. Template Identifier
3311 IF l_merged_row.TEMPLATE_ID IS NULL
3312 AND l_merged_row.TEMPLATE_NAME IS NULL
3313 THEN
3314 l_merged_row.TEMPLATE_ID := old_row.TEMPLATE_ID ;
3315 l_merged_row.TEMPLATE_NAME := old_row.TEMPLATE_NAME ;
3316 END IF;
3317
3318 -- 3. Item Catalog Category
3319 IF l_merged_row.ITEM_CATALOG_GROUP_ID IS NULL
3320 AND l_merged_row.ITEM_CATALOG_GROUP_NAME IS NULL
3321 THEN
3322 l_merged_row.ITEM_CATALOG_GROUP_ID := old_row.ITEM_CATALOG_GROUP_ID ;
3323 l_merged_row.ITEM_CATALOG_GROUP_NAME := old_row.ITEM_CATALOG_GROUP_NAME ;
3324 END IF;
3325
3326 -- 4. Primary UOM
3327 IF l_merged_row.PRIMARY_UOM_CODE IS NULL
3328 AND l_merged_row.PRIMARY_UNIT_OF_MEASURE IS NULL
3329 THEN
3330 l_merged_row.PRIMARY_UOM_CODE := old_row.PRIMARY_UOM_CODE ;
3331 l_merged_row.PRIMARY_UNIT_OF_MEASURE := old_row.PRIMARY_UNIT_OF_MEASURE ;
3332 END IF;
3333
3334 -- 5. Organization
3335 IF l_merged_row.ORGANIZATION_ID IS NULL
3336 AND l_merged_row.ORGANIZATION_CODE IS NULL
3337 THEN
3338 l_merged_row.ORGANIZATION_ID := old_row.ORGANIZATION_ID ;
3339 l_merged_row.ORGANIZATION_CODE := old_row.ORGANIZATION_CODE ;
3340 END IF;
3341
3342 -- 6. Copy Organization
3343 IF l_merged_row.COPY_ORGANIZATION_ID IS NULL
3344 AND l_merged_row.COPY_ORGANIZATION_CODE IS NULL
3345 THEN
3346 l_merged_row.COPY_ORGANIZATION_ID := old_row.COPY_ORGANIZATION_ID ;
3347 l_merged_row.COPY_ORGANIZATION_CODE := old_row.COPY_ORGANIZATION_CODE ;
3348 END IF;
3349
3350 if l_merged_row.ACCEPTABLE_EARLY_DAYS is null then l_merged_row.ACCEPTABLE_EARLY_DAYS := old_row.ACCEPTABLE_EARLY_DAYS; end if;
3351 if l_merged_row.ACCEPTABLE_RATE_DECREASE is null then l_merged_row.ACCEPTABLE_RATE_DECREASE := old_row.ACCEPTABLE_RATE_DECREASE; end if;
3352 if l_merged_row.ACCEPTABLE_RATE_INCREASE is null then l_merged_row.ACCEPTABLE_RATE_INCREASE := old_row.ACCEPTABLE_RATE_INCREASE; end if;
3353 if l_merged_row.ACCOUNTING_RULE_ID is null then l_merged_row.ACCOUNTING_RULE_ID := old_row.ACCOUNTING_RULE_ID; end if;
3354 if l_merged_row.ALLOWED_UNITS_LOOKUP_CODE is null then l_merged_row.ALLOWED_UNITS_LOOKUP_CODE := old_row.ALLOWED_UNITS_LOOKUP_CODE; end if;
3355 if l_merged_row.ALLOW_EXPRESS_DELIVERY_FLAG is null then l_merged_row.ALLOW_EXPRESS_DELIVERY_FLAG := old_row.ALLOW_EXPRESS_DELIVERY_FLAG; end if;
3356 if l_merged_row.ALLOW_ITEM_DESC_UPDATE_FLAG is null then l_merged_row.ALLOW_ITEM_DESC_UPDATE_FLAG := old_row.ALLOW_ITEM_DESC_UPDATE_FLAG; end if;
3357 if l_merged_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG is null then l_merged_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG := old_row.ALLOW_SUBSTITUTE_RECEIPTS_FLAG; end if;
3358 if l_merged_row.ALLOW_UNORDERED_RECEIPTS_FLAG is null then l_merged_row.ALLOW_UNORDERED_RECEIPTS_FLAG := old_row.ALLOW_UNORDERED_RECEIPTS_FLAG; end if;
3359 if l_merged_row.ASN_AUTOEXPIRE_FLAG is null then l_merged_row.ASN_AUTOEXPIRE_FLAG := old_row.ASN_AUTOEXPIRE_FLAG; end if;
3360 if l_merged_row.ASSET_CATEGORY_ID is null then l_merged_row.ASSET_CATEGORY_ID := old_row.ASSET_CATEGORY_ID; end if;
3361 if l_merged_row.ASSET_CREATION_CODE is null then l_merged_row.ASSET_CREATION_CODE := old_row.ASSET_CREATION_CODE; end if;
3362 if l_merged_row.ATO_FORECAST_CONTROL is null then l_merged_row.ATO_FORECAST_CONTROL := old_row.ATO_FORECAST_CONTROL; end if;
3363 if l_merged_row.ATP_COMPONENTS_FLAG is null then l_merged_row.ATP_COMPONENTS_FLAG := old_row.ATP_COMPONENTS_FLAG; end if;
3364 if l_merged_row.ATP_FLAG is null then l_merged_row.ATP_FLAG := old_row.ATP_FLAG; end if;
3365 if l_merged_row.ATP_RULE_ID is null then l_merged_row.ATP_RULE_ID := old_row.ATP_RULE_ID; end if;
3366 if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := old_row.ATTRIBUTE1; end if;
3367 if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := old_row.ATTRIBUTE10; end if;
3368 if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := old_row.ATTRIBUTE11; end if;
3369 if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := old_row.ATTRIBUTE12; end if;
3370 if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := old_row.ATTRIBUTE13; end if;
3371 if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := old_row.ATTRIBUTE14; end if;
3372 if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := old_row.ATTRIBUTE15; end if;
3373 if l_merged_row.ATTRIBUTE16 is null then l_merged_row.ATTRIBUTE16 := old_row.ATTRIBUTE16; end if;
3374 if l_merged_row.ATTRIBUTE17 is null then l_merged_row.ATTRIBUTE17 := old_row.ATTRIBUTE17; end if;
3375 if l_merged_row.ATTRIBUTE18 is null then l_merged_row.ATTRIBUTE18 := old_row.ATTRIBUTE18; end if;
3376 if l_merged_row.ATTRIBUTE19 is null then l_merged_row.ATTRIBUTE19 := old_row.ATTRIBUTE19; end if;
3377 if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := old_row.ATTRIBUTE2; end if;
3378 if l_merged_row.ATTRIBUTE20 is null then l_merged_row.ATTRIBUTE20 := old_row.ATTRIBUTE20; end if;
3379 if l_merged_row.ATTRIBUTE21 is null then l_merged_row.ATTRIBUTE21 := old_row.ATTRIBUTE21; end if;
3380 if l_merged_row.ATTRIBUTE22 is null then l_merged_row.ATTRIBUTE22 := old_row.ATTRIBUTE22; end if;
3381 if l_merged_row.ATTRIBUTE23 is null then l_merged_row.ATTRIBUTE23 := old_row.ATTRIBUTE23; end if;
3382 if l_merged_row.ATTRIBUTE24 is null then l_merged_row.ATTRIBUTE24 := old_row.ATTRIBUTE24; end if;
3383 if l_merged_row.ATTRIBUTE25 is null then l_merged_row.ATTRIBUTE25 := old_row.ATTRIBUTE25; end if;
3384 if l_merged_row.ATTRIBUTE26 is null then l_merged_row.ATTRIBUTE26 := old_row.ATTRIBUTE26; end if;
3385 if l_merged_row.ATTRIBUTE27 is null then l_merged_row.ATTRIBUTE27 := old_row.ATTRIBUTE27; end if;
3386 if l_merged_row.ATTRIBUTE28 is null then l_merged_row.ATTRIBUTE28 := old_row.ATTRIBUTE28; end if;
3387 if l_merged_row.ATTRIBUTE29 is null then l_merged_row.ATTRIBUTE29 := old_row.ATTRIBUTE29; end if;
3388 if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := old_row.ATTRIBUTE3; end if;
3389 if l_merged_row.ATTRIBUTE30 is null then l_merged_row.ATTRIBUTE30 := old_row.ATTRIBUTE30; end if;
3390 if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := old_row.ATTRIBUTE4; end if;
3391 if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := old_row.ATTRIBUTE5; end if;
3392 if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := old_row.ATTRIBUTE6; end if;
3393 if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := old_row.ATTRIBUTE7; end if;
3394 if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := old_row.ATTRIBUTE8; end if;
3395 if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := old_row.ATTRIBUTE9; end if;
3396 if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := old_row.ATTRIBUTE_CATEGORY; end if;
3397 if l_merged_row.AUTO_CREATED_CONFIG_FLAG is null then l_merged_row.AUTO_CREATED_CONFIG_FLAG := old_row.AUTO_CREATED_CONFIG_FLAG; end if;
3398 if l_merged_row.AUTO_LOT_ALPHA_PREFIX is null then l_merged_row.AUTO_LOT_ALPHA_PREFIX := old_row.AUTO_LOT_ALPHA_PREFIX; end if;
3399 if l_merged_row.AUTO_REDUCE_MPS is null then l_merged_row.AUTO_REDUCE_MPS := old_row.AUTO_REDUCE_MPS; end if;
3400 if l_merged_row.AUTO_SERIAL_ALPHA_PREFIX is null then l_merged_row.AUTO_SERIAL_ALPHA_PREFIX := old_row.AUTO_SERIAL_ALPHA_PREFIX; end if;
3401 if l_merged_row.BACK_ORDERABLE_FLAG is null then l_merged_row.BACK_ORDERABLE_FLAG := old_row.BACK_ORDERABLE_FLAG; end if;
3402 if l_merged_row.BASE_ITEM_ID is null then l_merged_row.BASE_ITEM_ID := old_row.BASE_ITEM_ID; end if;
3403 if l_merged_row.BASE_WARRANTY_SERVICE_ID is null then l_merged_row.BASE_WARRANTY_SERVICE_ID := old_row.BASE_WARRANTY_SERVICE_ID; end if;
3404 if l_merged_row.BOM_ENABLED_FLAG is null then l_merged_row.BOM_ENABLED_FLAG := old_row.BOM_ENABLED_FLAG; end if;
3405 if l_merged_row.BOM_ITEM_TYPE is null then l_merged_row.BOM_ITEM_TYPE := old_row.BOM_ITEM_TYPE; end if;
3406 if l_merged_row.BUILD_IN_WIP_FLAG is null then l_merged_row.BUILD_IN_WIP_FLAG := old_row.BUILD_IN_WIP_FLAG; end if;
3407 if l_merged_row.BULK_PICKED_FLAG is null then l_merged_row.BULK_PICKED_FLAG := old_row.BULK_PICKED_FLAG; end if;
3408 if l_merged_row.BUYER_ID is null then l_merged_row.BUYER_ID := old_row.BUYER_ID; end if;
3409 if l_merged_row.CARRYING_COST is null then l_merged_row.CARRYING_COST := old_row.CARRYING_COST; end if;
3410 if l_merged_row.CAS_NUMBER is null then l_merged_row.CAS_NUMBER := old_row.CAS_NUMBER; end if;
3411 if l_merged_row.CATALOG_STATUS_FLAG is null then l_merged_row.CATALOG_STATUS_FLAG := old_row.CATALOG_STATUS_FLAG; end if;
3412 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := old_row.CHANGE_ID; end if;
3413 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := old_row.CHANGE_LINE_ID; end if;
3414 if l_merged_row.CHARGE_PERIODICITY_CODE is null then l_merged_row.CHARGE_PERIODICITY_CODE := old_row.CHARGE_PERIODICITY_CODE; end if;
3415 if l_merged_row.CHECK_SHORTAGES_FLAG is null then l_merged_row.CHECK_SHORTAGES_FLAG := old_row.CHECK_SHORTAGES_FLAG; end if;
3416 if l_merged_row.CHILD_LOT_FLAG is null then l_merged_row.CHILD_LOT_FLAG := old_row.CHILD_LOT_FLAG; end if;
3417 if l_merged_row.CHILD_LOT_PREFIX is null then l_merged_row.CHILD_LOT_PREFIX := old_row.CHILD_LOT_PREFIX; end if;
3418 if l_merged_row.CHILD_LOT_STARTING_NUMBER is null then l_merged_row.CHILD_LOT_STARTING_NUMBER := old_row.CHILD_LOT_STARTING_NUMBER; end if;
3419 if l_merged_row.CHILD_LOT_VALIDATION_FLAG is null then l_merged_row.CHILD_LOT_VALIDATION_FLAG := old_row.CHILD_LOT_VALIDATION_FLAG; end if;
3420 if l_merged_row.COLLATERAL_FLAG is null then l_merged_row.COLLATERAL_FLAG := old_row.COLLATERAL_FLAG; end if;
3421 if l_merged_row.COMMS_ACTIVATION_REQD_FLAG is null then l_merged_row.COMMS_ACTIVATION_REQD_FLAG := old_row.COMMS_ACTIVATION_REQD_FLAG; end if;
3422 if l_merged_row.COMMS_NL_TRACKABLE_FLAG is null then l_merged_row.COMMS_NL_TRACKABLE_FLAG := old_row.COMMS_NL_TRACKABLE_FLAG; end if;
3423 if l_merged_row.CONFIG_MATCH is null then l_merged_row.CONFIG_MATCH := old_row.CONFIG_MATCH; end if;
3424 if l_merged_row.CONFIG_MODEL_TYPE is null then l_merged_row.CONFIG_MODEL_TYPE := old_row.CONFIG_MODEL_TYPE; end if;
3425 if l_merged_row.CONFIG_ORGS is null then l_merged_row.CONFIG_ORGS := old_row.CONFIG_ORGS; end if;
3426 if l_merged_row.CONSIGNED_FLAG is null then l_merged_row.CONSIGNED_FLAG := old_row.CONSIGNED_FLAG; end if;
3427 if l_merged_row.CONTAINER_ITEM_FLAG is null then l_merged_row.CONTAINER_ITEM_FLAG := old_row.CONTAINER_ITEM_FLAG; end if;
3428 if l_merged_row.CONTAINER_TYPE_CODE is null then l_merged_row.CONTAINER_TYPE_CODE := old_row.CONTAINER_TYPE_CODE; end if;
3429 if l_merged_row.CONTINOUS_TRANSFER is null then l_merged_row.CONTINOUS_TRANSFER := old_row.CONTINOUS_TRANSFER; end if;
3430 if l_merged_row.CONTRACT_ITEM_TYPE_CODE is null then l_merged_row.CONTRACT_ITEM_TYPE_CODE := old_row.CONTRACT_ITEM_TYPE_CODE; end if;
3431 if l_merged_row.CONVERGENCE is null then l_merged_row.CONVERGENCE := old_row.CONVERGENCE; end if;
3432 if l_merged_row.COPY_ITEM_ID is null then l_merged_row.COPY_ITEM_ID := old_row.COPY_ITEM_ID; end if;
3433 if l_merged_row.COPY_ITEM_NUMBER is null then l_merged_row.COPY_ITEM_NUMBER := old_row.COPY_ITEM_NUMBER; end if;
3434 if l_merged_row.COPY_LOT_ATTRIBUTE_FLAG is null then l_merged_row.COPY_LOT_ATTRIBUTE_FLAG := old_row.COPY_LOT_ATTRIBUTE_FLAG; end if;
3435 if l_merged_row.COSTING_ENABLED_FLAG is null then l_merged_row.COSTING_ENABLED_FLAG := old_row.COSTING_ENABLED_FLAG; end if;
3436 if l_merged_row.COST_OF_SALES_ACCOUNT is null then l_merged_row.COST_OF_SALES_ACCOUNT := old_row.COST_OF_SALES_ACCOUNT; end if;
3437 if l_merged_row.COUPON_EXEMPT_FLAG is null then l_merged_row.COUPON_EXEMPT_FLAG := old_row.COUPON_EXEMPT_FLAG; end if;
3438 if l_merged_row.COVERAGE_SCHEDULE_ID is null then l_merged_row.COVERAGE_SCHEDULE_ID := old_row.COVERAGE_SCHEDULE_ID; end if;
3439 if l_merged_row.CREATE_SUPPLY_FLAG is null then l_merged_row.CREATE_SUPPLY_FLAG := old_row.CREATE_SUPPLY_FLAG; end if;
3440 if l_merged_row.CRITICAL_COMPONENT_FLAG is null then l_merged_row.CRITICAL_COMPONENT_FLAG := old_row.CRITICAL_COMPONENT_FLAG; end if;
3441 if l_merged_row.CUMULATIVE_TOTAL_LEAD_TIME is null then l_merged_row.CUMULATIVE_TOTAL_LEAD_TIME := old_row.CUMULATIVE_TOTAL_LEAD_TIME; end if;
3442 if l_merged_row.CUM_MANUFACTURING_LEAD_TIME is null then l_merged_row.CUM_MANUFACTURING_LEAD_TIME := old_row.CUM_MANUFACTURING_LEAD_TIME; end if;
3443 if l_merged_row.CURRENT_PHASE_ID is null then l_merged_row.CURRENT_PHASE_ID := old_row.CURRENT_PHASE_ID; end if;
3444 if l_merged_row.CUSTOMER_ORDER_ENABLED_FLAG is null then l_merged_row.CUSTOMER_ORDER_ENABLED_FLAG := old_row.CUSTOMER_ORDER_ENABLED_FLAG; end if;
3445 if l_merged_row.CUSTOMER_ORDER_FLAG is null then l_merged_row.CUSTOMER_ORDER_FLAG := old_row.CUSTOMER_ORDER_FLAG; end if;
3446 if l_merged_row.CYCLE_COUNT_ENABLED_FLAG is null then l_merged_row.CYCLE_COUNT_ENABLED_FLAG := old_row.CYCLE_COUNT_ENABLED_FLAG; end if;
3447 if l_merged_row.DAYS_EARLY_RECEIPT_ALLOWED is null then l_merged_row.DAYS_EARLY_RECEIPT_ALLOWED := old_row.DAYS_EARLY_RECEIPT_ALLOWED; end if;
3448 if l_merged_row.DAYS_LATE_RECEIPT_ALLOWED is null then l_merged_row.DAYS_LATE_RECEIPT_ALLOWED := old_row.DAYS_LATE_RECEIPT_ALLOWED; end if;
3449 if l_merged_row.DAYS_MAX_INV_SUPPLY is null then l_merged_row.DAYS_MAX_INV_SUPPLY := old_row.DAYS_MAX_INV_SUPPLY; end if;
3450 if l_merged_row.DAYS_MAX_INV_WINDOW is null then l_merged_row.DAYS_MAX_INV_WINDOW := old_row.DAYS_MAX_INV_WINDOW; end if;
3451 if l_merged_row.DAYS_TGT_INV_SUPPLY is null then l_merged_row.DAYS_TGT_INV_SUPPLY := old_row.DAYS_TGT_INV_SUPPLY; end if;
3452 if l_merged_row.DAYS_TGT_INV_WINDOW is null then l_merged_row.DAYS_TGT_INV_WINDOW := old_row.DAYS_TGT_INV_WINDOW; end if;
3453 if l_merged_row.DEFAULT_GRADE is null then l_merged_row.DEFAULT_GRADE := old_row.DEFAULT_GRADE; end if;
3454 if l_merged_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG is null then l_merged_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG := old_row.DEFAULT_INCLUDE_IN_ROLLUP_FLAG; end if;
3455 if l_merged_row.DEFAULT_LOT_STATUS_ID is null then l_merged_row.DEFAULT_LOT_STATUS_ID := old_row.DEFAULT_LOT_STATUS_ID; end if;
3456 if l_merged_row.DEFAULT_SERIAL_STATUS_ID is null then l_merged_row.DEFAULT_SERIAL_STATUS_ID := old_row.DEFAULT_SERIAL_STATUS_ID; end if;
3457 if l_merged_row.DEFAULT_SHIPPING_ORG is null then l_merged_row.DEFAULT_SHIPPING_ORG := old_row.DEFAULT_SHIPPING_ORG; end if;
3458 if l_merged_row.DEFAULT_SO_SOURCE_TYPE is null then l_merged_row.DEFAULT_SO_SOURCE_TYPE := old_row.DEFAULT_SO_SOURCE_TYPE; end if;
3459 if l_merged_row.DEFECT_TRACKING_ON_FLAG is null then l_merged_row.DEFECT_TRACKING_ON_FLAG := old_row.DEFECT_TRACKING_ON_FLAG; end if;
3460 if l_merged_row.DEMAND_SOURCE_HEADER_ID is null then l_merged_row.DEMAND_SOURCE_HEADER_ID := old_row.DEMAND_SOURCE_HEADER_ID; end if;
3461 if l_merged_row.DEMAND_SOURCE_LINE is null then l_merged_row.DEMAND_SOURCE_LINE := old_row.DEMAND_SOURCE_LINE; end if;
3462 if l_merged_row.DEMAND_SOURCE_TYPE is null then l_merged_row.DEMAND_SOURCE_TYPE := old_row.DEMAND_SOURCE_TYPE; end if;
3463 if l_merged_row.DEMAND_TIME_FENCE_CODE is null then l_merged_row.DEMAND_TIME_FENCE_CODE := old_row.DEMAND_TIME_FENCE_CODE; end if;
3464 if l_merged_row.DEMAND_TIME_FENCE_DAYS is null then l_merged_row.DEMAND_TIME_FENCE_DAYS := old_row.DEMAND_TIME_FENCE_DAYS; end if;
3465 if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := old_row.DESCRIPTION; end if;
3466 if l_merged_row.DIMENSION_UOM_CODE is null then l_merged_row.DIMENSION_UOM_CODE := old_row.DIMENSION_UOM_CODE; end if;
3467 if l_merged_row.DIVERGENCE is null then l_merged_row.DIVERGENCE := old_row.DIVERGENCE; end if;
3468 if l_merged_row.DOWNLOADABLE_FLAG is null then l_merged_row.DOWNLOADABLE_FLAG := old_row.DOWNLOADABLE_FLAG; end if;
3469 if l_merged_row.DRP_PLANNED_FLAG is null then l_merged_row.DRP_PLANNED_FLAG := old_row.DRP_PLANNED_FLAG; end if;
3470 if l_merged_row.DUAL_UOM_CONTROL is null then l_merged_row.DUAL_UOM_CONTROL := old_row.DUAL_UOM_CONTROL; end if;
3471 if l_merged_row.DUAL_UOM_DEVIATION_HIGH is null then l_merged_row.DUAL_UOM_DEVIATION_HIGH := old_row.DUAL_UOM_DEVIATION_HIGH; end if;
3472 if l_merged_row.DUAL_UOM_DEVIATION_LOW is null then l_merged_row.DUAL_UOM_DEVIATION_LOW := old_row.DUAL_UOM_DEVIATION_LOW; end if;
3473 if l_merged_row.EAM_ACTIVITY_CAUSE_CODE is null then l_merged_row.EAM_ACTIVITY_CAUSE_CODE := old_row.EAM_ACTIVITY_CAUSE_CODE; end if;
3474 if l_merged_row.EAM_ACTIVITY_SOURCE_CODE is null then l_merged_row.EAM_ACTIVITY_SOURCE_CODE := old_row.EAM_ACTIVITY_SOURCE_CODE; end if;
3475 if l_merged_row.EAM_ACTIVITY_TYPE_CODE is null then l_merged_row.EAM_ACTIVITY_TYPE_CODE := old_row.EAM_ACTIVITY_TYPE_CODE; end if;
3476 if l_merged_row.EAM_ACT_NOTIFICATION_FLAG is null then l_merged_row.EAM_ACT_NOTIFICATION_FLAG := old_row.EAM_ACT_NOTIFICATION_FLAG; end if;
3477 if l_merged_row.EAM_ACT_SHUTDOWN_STATUS is null then l_merged_row.EAM_ACT_SHUTDOWN_STATUS := old_row.EAM_ACT_SHUTDOWN_STATUS; end if;
3478 if l_merged_row.EAM_ITEM_TYPE is null then l_merged_row.EAM_ITEM_TYPE := old_row.EAM_ITEM_TYPE; end if;
3479 if l_merged_row.EFFECTIVITY_CONTROL is null then l_merged_row.EFFECTIVITY_CONTROL := old_row.EFFECTIVITY_CONTROL; end if;
3480 if l_merged_row.ELECTRONIC_FLAG is null then l_merged_row.ELECTRONIC_FLAG := old_row.ELECTRONIC_FLAG; end if;
3481 if l_merged_row.ENABLED_FLAG is null then l_merged_row.ENABLED_FLAG := old_row.ENABLED_FLAG; end if;
3482 if l_merged_row.ENCUMBRANCE_ACCOUNT is null then l_merged_row.ENCUMBRANCE_ACCOUNT := old_row.ENCUMBRANCE_ACCOUNT; end if;
3483 if l_merged_row.END_ASSEMBLY_PEGGING_FLAG is null then l_merged_row.END_ASSEMBLY_PEGGING_FLAG := old_row.END_ASSEMBLY_PEGGING_FLAG; end if;
3484 if l_merged_row.END_DATE_ACTIVE is null then l_merged_row.END_DATE_ACTIVE := old_row.END_DATE_ACTIVE; end if;
3485 if l_merged_row.ENFORCE_SHIP_TO_LOCATION_CODE is null then l_merged_row.ENFORCE_SHIP_TO_LOCATION_CODE := old_row.ENFORCE_SHIP_TO_LOCATION_CODE; end if;
3486 if l_merged_row.ENGINEERING_DATE is null then l_merged_row.ENGINEERING_DATE := old_row.ENGINEERING_DATE; end if;
3487 if l_merged_row.ENGINEERING_ECN_CODE is null then l_merged_row.ENGINEERING_ECN_CODE := old_row.ENGINEERING_ECN_CODE; end if;
3488 if l_merged_row.ENGINEERING_ITEM_ID is null then l_merged_row.ENGINEERING_ITEM_ID := old_row.ENGINEERING_ITEM_ID; end if;
3489 if l_merged_row.ENG_ITEM_FLAG is null then l_merged_row.ENG_ITEM_FLAG := old_row.ENG_ITEM_FLAG; end if;
3490 if l_merged_row.EQUIPMENT_TYPE is null then l_merged_row.EQUIPMENT_TYPE := old_row.EQUIPMENT_TYPE; end if;
3491 if l_merged_row.EVENT_FLAG is null then l_merged_row.EVENT_FLAG := old_row.EVENT_FLAG; end if;
3492 if l_merged_row.EXCLUDE_FROM_BUDGET_FLAG is null then l_merged_row.EXCLUDE_FROM_BUDGET_FLAG := old_row.EXCLUDE_FROM_BUDGET_FLAG; end if;
3493 if l_merged_row.EXPENSE_ACCOUNT is null then l_merged_row.EXPENSE_ACCOUNT := old_row.EXPENSE_ACCOUNT; end if;
3494 if l_merged_row.EXPENSE_BILLABLE_FLAG is null then l_merged_row.EXPENSE_BILLABLE_FLAG := old_row.EXPENSE_BILLABLE_FLAG; end if;
3495 if l_merged_row.EXPIRATION_ACTION_CODE is null then l_merged_row.EXPIRATION_ACTION_CODE := old_row.EXPIRATION_ACTION_CODE; end if;
3496 if l_merged_row.EXPIRATION_ACTION_INTERVAL is null then l_merged_row.EXPIRATION_ACTION_INTERVAL := old_row.EXPIRATION_ACTION_INTERVAL; end if;
3497 if l_merged_row.FINANCING_ALLOWED_FLAG is null then l_merged_row.FINANCING_ALLOWED_FLAG := old_row.FINANCING_ALLOWED_FLAG; end if;
3498 if l_merged_row.FIXED_DAYS_SUPPLY is null then l_merged_row.FIXED_DAYS_SUPPLY := old_row.FIXED_DAYS_SUPPLY; end if;
3499 if l_merged_row.FIXED_LEAD_TIME is null then l_merged_row.FIXED_LEAD_TIME := old_row.FIXED_LEAD_TIME; end if;
3500 if l_merged_row.FIXED_LOT_MULTIPLIER is null then l_merged_row.FIXED_LOT_MULTIPLIER := old_row.FIXED_LOT_MULTIPLIER; end if;
3501 if l_merged_row.FIXED_ORDER_QUANTITY is null then l_merged_row.FIXED_ORDER_QUANTITY := old_row.FIXED_ORDER_QUANTITY; end if;
3502 if l_merged_row.FORECAST_HORIZON is null then l_merged_row.FORECAST_HORIZON := old_row.FORECAST_HORIZON; end if;
3503 if l_merged_row.FULL_LEAD_TIME is null then l_merged_row.FULL_LEAD_TIME := old_row.FULL_LEAD_TIME; end if;
3504 if l_merged_row.GLOBAL_ATTRIBUTE1 is null then l_merged_row.GLOBAL_ATTRIBUTE1 := old_row.GLOBAL_ATTRIBUTE1; end if;
3505 if l_merged_row.GLOBAL_ATTRIBUTE10 is null then l_merged_row.GLOBAL_ATTRIBUTE10 := old_row.GLOBAL_ATTRIBUTE10; end if;
3506 if l_merged_row.GLOBAL_ATTRIBUTE2 is null then l_merged_row.GLOBAL_ATTRIBUTE2 := old_row.GLOBAL_ATTRIBUTE2; end if;
3507 if l_merged_row.GLOBAL_ATTRIBUTE3 is null then l_merged_row.GLOBAL_ATTRIBUTE3 := old_row.GLOBAL_ATTRIBUTE3; end if;
3508 if l_merged_row.GLOBAL_ATTRIBUTE4 is null then l_merged_row.GLOBAL_ATTRIBUTE4 := old_row.GLOBAL_ATTRIBUTE4; end if;
3509 if l_merged_row.GLOBAL_ATTRIBUTE5 is null then l_merged_row.GLOBAL_ATTRIBUTE5 := old_row.GLOBAL_ATTRIBUTE5; end if;
3510 if l_merged_row.GLOBAL_ATTRIBUTE6 is null then l_merged_row.GLOBAL_ATTRIBUTE6 := old_row.GLOBAL_ATTRIBUTE6; end if;
3511 if l_merged_row.GLOBAL_ATTRIBUTE7 is null then l_merged_row.GLOBAL_ATTRIBUTE7 := old_row.GLOBAL_ATTRIBUTE7; end if;
3512 if l_merged_row.GLOBAL_ATTRIBUTE8 is null then l_merged_row.GLOBAL_ATTRIBUTE8 := old_row.GLOBAL_ATTRIBUTE8; end if;
3513 if l_merged_row.GLOBAL_ATTRIBUTE9 is null then l_merged_row.GLOBAL_ATTRIBUTE9 := old_row.GLOBAL_ATTRIBUTE9; end if;
3514 if l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY is null then l_merged_row.GLOBAL_ATTRIBUTE_CATEGORY := old_row.GLOBAL_ATTRIBUTE_CATEGORY; end if;
3515 if l_merged_row.GLOBAL_TRADE_ITEM_NUMBER is null then l_merged_row.GLOBAL_TRADE_ITEM_NUMBER := old_row.GLOBAL_TRADE_ITEM_NUMBER; end if;
3516 if l_merged_row.GRADE_CONTROL_FLAG is null then l_merged_row.GRADE_CONTROL_FLAG := old_row.GRADE_CONTROL_FLAG; end if;
3517 if l_merged_row.GTIN_DESCRIPTION is null then l_merged_row.GTIN_DESCRIPTION := old_row.GTIN_DESCRIPTION; end if;
3518 if l_merged_row.HAZARDOUS_MATERIAL_FLAG is null then l_merged_row.HAZARDOUS_MATERIAL_FLAG := old_row.HAZARDOUS_MATERIAL_FLAG; end if;
3519 if l_merged_row.HAZARD_CLASS_ID is null then l_merged_row.HAZARD_CLASS_ID := old_row.HAZARD_CLASS_ID; end if;
3520 if l_merged_row.HOLD_DAYS is null then l_merged_row.HOLD_DAYS := old_row.HOLD_DAYS; end if;
3521 if l_merged_row.IB_ITEM_INSTANCE_CLASS is null then l_merged_row.IB_ITEM_INSTANCE_CLASS := old_row.IB_ITEM_INSTANCE_CLASS; end if;
3522 if l_merged_row.INDIVISIBLE_FLAG is null then l_merged_row.INDIVISIBLE_FLAG := old_row.INDIVISIBLE_FLAG; end if;
3523 if l_merged_row.INSPECTION_REQUIRED_FLAG is null then l_merged_row.INSPECTION_REQUIRED_FLAG := old_row.INSPECTION_REQUIRED_FLAG; end if;
3524 if l_merged_row.INTERNAL_ORDER_ENABLED_FLAG is null then l_merged_row.INTERNAL_ORDER_ENABLED_FLAG := old_row.INTERNAL_ORDER_ENABLED_FLAG; end if;
3525 if l_merged_row.INTERNAL_ORDER_FLAG is null then l_merged_row.INTERNAL_ORDER_FLAG := old_row.INTERNAL_ORDER_FLAG; end if;
3526 if l_merged_row.INTERNAL_VOLUME is null then l_merged_row.INTERNAL_VOLUME := old_row.INTERNAL_VOLUME; end if;
3527 if l_merged_row.INVENTORY_ASSET_FLAG is null then l_merged_row.INVENTORY_ASSET_FLAG := old_row.INVENTORY_ASSET_FLAG; end if;
3528 if l_merged_row.INVENTORY_CARRY_PENALTY is null then l_merged_row.INVENTORY_CARRY_PENALTY := old_row.INVENTORY_CARRY_PENALTY; end if;
3529 if l_merged_row.INVENTORY_ITEM_FLAG is null then l_merged_row.INVENTORY_ITEM_FLAG := old_row.INVENTORY_ITEM_FLAG; end if;
3530 if l_merged_row.INVENTORY_ITEM_STATUS_CODE is null then l_merged_row.INVENTORY_ITEM_STATUS_CODE := old_row.INVENTORY_ITEM_STATUS_CODE; end if;
3531 if l_merged_row.INVENTORY_PLANNING_CODE is null then l_merged_row.INVENTORY_PLANNING_CODE := old_row.INVENTORY_PLANNING_CODE; end if;
3532 if l_merged_row.INVOICEABLE_ITEM_FLAG is null then l_merged_row.INVOICEABLE_ITEM_FLAG := old_row.INVOICEABLE_ITEM_FLAG; end if;
3533 if l_merged_row.INVOICE_CLOSE_TOLERANCE is null then l_merged_row.INVOICE_CLOSE_TOLERANCE := old_row.INVOICE_CLOSE_TOLERANCE; end if;
3534 if l_merged_row.INVOICE_ENABLED_FLAG is null then l_merged_row.INVOICE_ENABLED_FLAG := old_row.INVOICE_ENABLED_FLAG; end if;
3535 if l_merged_row.INVOICING_RULE_ID is null then l_merged_row.INVOICING_RULE_ID := old_row.INVOICING_RULE_ID; end if;
3536 if l_merged_row.ITEM_TYPE is null then l_merged_row.ITEM_TYPE := old_row.ITEM_TYPE; end if;
3537 if l_merged_row.LEAD_TIME_LOT_SIZE is null then l_merged_row.LEAD_TIME_LOT_SIZE := old_row.LEAD_TIME_LOT_SIZE; end if;
3538 if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := old_row.LIFECYCLE_ID; end if;
3539 if l_merged_row.LIST_PRICE_PER_UNIT is null then l_merged_row.LIST_PRICE_PER_UNIT := old_row.LIST_PRICE_PER_UNIT; end if;
3540 if l_merged_row.LOCATION_CONTROL_CODE is null then l_merged_row.LOCATION_CONTROL_CODE := old_row.LOCATION_CONTROL_CODE; end if;
3541 if l_merged_row.LONG_DESCRIPTION is null then l_merged_row.LONG_DESCRIPTION := old_row.LONG_DESCRIPTION; end if;
3542 if l_merged_row.LOT_CONTROL_CODE is null then l_merged_row.LOT_CONTROL_CODE := old_row.LOT_CONTROL_CODE; end if;
3543 if l_merged_row.LOT_DIVISIBLE_FLAG is null then l_merged_row.LOT_DIVISIBLE_FLAG := old_row.LOT_DIVISIBLE_FLAG; end if;
3544 if l_merged_row.LOT_MERGE_ENABLED is null then l_merged_row.LOT_MERGE_ENABLED := old_row.LOT_MERGE_ENABLED; end if;
3545 if l_merged_row.LOT_SPLIT_ENABLED is null then l_merged_row.LOT_SPLIT_ENABLED := old_row.LOT_SPLIT_ENABLED; end if;
3546 if l_merged_row.LOT_STATUS_ENABLED is null then l_merged_row.LOT_STATUS_ENABLED := old_row.LOT_STATUS_ENABLED; end if;
3547 if l_merged_row.LOT_SUBSTITUTION_ENABLED is null then l_merged_row.LOT_SUBSTITUTION_ENABLED := old_row.LOT_SUBSTITUTION_ENABLED; end if;
3548 if l_merged_row.LOT_TRANSLATE_ENABLED is null then l_merged_row.LOT_TRANSLATE_ENABLED := old_row.LOT_TRANSLATE_ENABLED; end if;
3549 if l_merged_row.MARKET_PRICE is null then l_merged_row.MARKET_PRICE := old_row.MARKET_PRICE; end if;
3550 if l_merged_row.MATERIAL_BILLABLE_FLAG is null then l_merged_row.MATERIAL_BILLABLE_FLAG := old_row.MATERIAL_BILLABLE_FLAG; end if;
3551 if l_merged_row.MATERIAL_COST is null then l_merged_row.MATERIAL_COST := old_row.MATERIAL_COST; end if;
3552 if l_merged_row.MATERIAL_OH_RATE is null then l_merged_row.MATERIAL_OH_RATE := old_row.MATERIAL_OH_RATE; end if;
3553 if l_merged_row.MATERIAL_OH_SUB_ELEM is null then l_merged_row.MATERIAL_OH_SUB_ELEM := old_row.MATERIAL_OH_SUB_ELEM; end if;
3554 if l_merged_row.MATERIAL_OH_SUB_ELEM_ID is null then l_merged_row.MATERIAL_OH_SUB_ELEM_ID := old_row.MATERIAL_OH_SUB_ELEM_ID; end if;
3555 if l_merged_row.MATERIAL_SUB_ELEM is null then l_merged_row.MATERIAL_SUB_ELEM := old_row.MATERIAL_SUB_ELEM; end if;
3556 if l_merged_row.MATERIAL_SUB_ELEM_ID is null then l_merged_row.MATERIAL_SUB_ELEM_ID := old_row.MATERIAL_SUB_ELEM_ID; end if;
3557 if l_merged_row.MATURITY_DAYS is null then l_merged_row.MATURITY_DAYS := old_row.MATURITY_DAYS; end if;
3558 if l_merged_row.MAXIMUM_LOAD_WEIGHT is null then l_merged_row.MAXIMUM_LOAD_WEIGHT := old_row.MAXIMUM_LOAD_WEIGHT; end if;
3559 if l_merged_row.MAXIMUM_ORDER_QUANTITY is null then l_merged_row.MAXIMUM_ORDER_QUANTITY := old_row.MAXIMUM_ORDER_QUANTITY; end if;
3560 if l_merged_row.MAX_MINMAX_QUANTITY is null then l_merged_row.MAX_MINMAX_QUANTITY := old_row.MAX_MINMAX_QUANTITY; end if;
3561 if l_merged_row.MAX_WARRANTY_AMOUNT is null then l_merged_row.MAX_WARRANTY_AMOUNT := old_row.MAX_WARRANTY_AMOUNT; end if;
3562 if l_merged_row.MINIMUM_FILL_PERCENT is null then l_merged_row.MINIMUM_FILL_PERCENT := old_row.MINIMUM_FILL_PERCENT; end if;
3563 if l_merged_row.MINIMUM_LICENSE_QUANTITY is null then l_merged_row.MINIMUM_LICENSE_QUANTITY := old_row.MINIMUM_LICENSE_QUANTITY; end if;
3564 if l_merged_row.MINIMUM_ORDER_QUANTITY is null then l_merged_row.MINIMUM_ORDER_QUANTITY := old_row.MINIMUM_ORDER_QUANTITY; end if;
3565 if l_merged_row.MIN_MINMAX_QUANTITY is null then l_merged_row.MIN_MINMAX_QUANTITY := old_row.MIN_MINMAX_QUANTITY; end if;
3566 if l_merged_row.MODEL_CONFIG_CLAUSE_NAME is null then l_merged_row.MODEL_CONFIG_CLAUSE_NAME := old_row.MODEL_CONFIG_CLAUSE_NAME; end if;
3567 if l_merged_row.MRP_CALCULATE_ATP_FLAG is null then l_merged_row.MRP_CALCULATE_ATP_FLAG := old_row.MRP_CALCULATE_ATP_FLAG; end if;
3568 if l_merged_row.MRP_PLANNING_CODE is null then l_merged_row.MRP_PLANNING_CODE := old_row.MRP_PLANNING_CODE; end if;
3569 if l_merged_row.MRP_SAFETY_STOCK_CODE is null then l_merged_row.MRP_SAFETY_STOCK_CODE := old_row.MRP_SAFETY_STOCK_CODE; end if;
3570 if l_merged_row.MRP_SAFETY_STOCK_PERCENT is null then l_merged_row.MRP_SAFETY_STOCK_PERCENT := old_row.MRP_SAFETY_STOCK_PERCENT; end if;
3571 if l_merged_row.MTL_TRANSACTIONS_ENABLED_FLAG is null then l_merged_row.MTL_TRANSACTIONS_ENABLED_FLAG := old_row.MTL_TRANSACTIONS_ENABLED_FLAG; end if;
3572 if l_merged_row.MUST_USE_APPROVED_VENDOR_FLAG is null then l_merged_row.MUST_USE_APPROVED_VENDOR_FLAG := old_row.MUST_USE_APPROVED_VENDOR_FLAG; end if;
3573 if l_merged_row.NEGATIVE_MEASUREMENT_ERROR is null then l_merged_row.NEGATIVE_MEASUREMENT_ERROR := old_row.NEGATIVE_MEASUREMENT_ERROR; end if;
3574 if l_merged_row.NEW_REVISION_CODE is null then l_merged_row.NEW_REVISION_CODE := old_row.NEW_REVISION_CODE; end if;
3575 if l_merged_row.ONT_PRICING_QTY_SOURCE is null then l_merged_row.ONT_PRICING_QTY_SOURCE := old_row.ONT_PRICING_QTY_SOURCE; end if;
3576 if l_merged_row.OPERATION_SLACK_PENALTY is null then l_merged_row.OPERATION_SLACK_PENALTY := old_row.OPERATION_SLACK_PENALTY; end if;
3577 if l_merged_row.ORDERABLE_ON_WEB_FLAG is null then l_merged_row.ORDERABLE_ON_WEB_FLAG := old_row.ORDERABLE_ON_WEB_FLAG; end if;
3578 if l_merged_row.ORDER_COST is null then l_merged_row.ORDER_COST := old_row.ORDER_COST; end if;
3579 if l_merged_row.OUTSIDE_OPERATION_FLAG is null then l_merged_row.OUTSIDE_OPERATION_FLAG := old_row.OUTSIDE_OPERATION_FLAG; end if;
3580 if l_merged_row.OUTSIDE_OPERATION_UOM_TYPE is null then l_merged_row.OUTSIDE_OPERATION_UOM_TYPE := old_row.OUTSIDE_OPERATION_UOM_TYPE; end if;
3581 if l_merged_row.OUTSOURCED_ASSEMBLY is null then l_merged_row.OUTSOURCED_ASSEMBLY := old_row.OUTSOURCED_ASSEMBLY; end if;
3582 if l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_TYPE := old_row.OVERCOMPLETION_TOLERANCE_TYPE; end if;
3583 if l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE is null then l_merged_row.OVERCOMPLETION_TOLERANCE_VALUE := old_row.OVERCOMPLETION_TOLERANCE_VALUE; end if;
3584 if l_merged_row.OVERRUN_PERCENTAGE is null then l_merged_row.OVERRUN_PERCENTAGE := old_row.OVERRUN_PERCENTAGE; end if;
3585 if l_merged_row.OVER_RETURN_TOLERANCE is null then l_merged_row.OVER_RETURN_TOLERANCE := old_row.OVER_RETURN_TOLERANCE; end if;
3586 if l_merged_row.OVER_SHIPMENT_TOLERANCE is null then l_merged_row.OVER_SHIPMENT_TOLERANCE := old_row.OVER_SHIPMENT_TOLERANCE; end if;
3587 if l_merged_row.PARENT_CHILD_GENERATION_FLAG is null then l_merged_row.PARENT_CHILD_GENERATION_FLAG := old_row.PARENT_CHILD_GENERATION_FLAG; end if;
3588 if l_merged_row.PAYMENT_TERMS_ID is null then l_merged_row.PAYMENT_TERMS_ID := old_row.PAYMENT_TERMS_ID; end if;
3589 if l_merged_row.PICKING_RULE_ID is null then l_merged_row.PICKING_RULE_ID := old_row.PICKING_RULE_ID; end if;
3590 if l_merged_row.PICK_COMPONENTS_FLAG is null then l_merged_row.PICK_COMPONENTS_FLAG := old_row.PICK_COMPONENTS_FLAG; end if;
3591 if l_merged_row.PLANNED_INV_POINT_FLAG is null then l_merged_row.PLANNED_INV_POINT_FLAG := old_row.PLANNED_INV_POINT_FLAG; end if;
3592 if l_merged_row.PLANNER_CODE is null then l_merged_row.PLANNER_CODE := old_row.PLANNER_CODE; end if;
3593 if l_merged_row.PLANNING_EXCEPTION_SET is null then l_merged_row.PLANNING_EXCEPTION_SET := old_row.PLANNING_EXCEPTION_SET; end if;
3594 if l_merged_row.PLANNING_MAKE_BUY_CODE is null then l_merged_row.PLANNING_MAKE_BUY_CODE := old_row.PLANNING_MAKE_BUY_CODE; end if;
3595 if l_merged_row.PLANNING_TIME_FENCE_CODE is null then l_merged_row.PLANNING_TIME_FENCE_CODE := old_row.PLANNING_TIME_FENCE_CODE; end if;
3596 if l_merged_row.PLANNING_TIME_FENCE_DAYS is null then l_merged_row.PLANNING_TIME_FENCE_DAYS := old_row.PLANNING_TIME_FENCE_DAYS; end if;
3597 if l_merged_row.POSITIVE_MEASUREMENT_ERROR is null then l_merged_row.POSITIVE_MEASUREMENT_ERROR := old_row.POSITIVE_MEASUREMENT_ERROR; end if;
3598 if l_merged_row.POSTPROCESSING_LEAD_TIME is null then l_merged_row.POSTPROCESSING_LEAD_TIME := old_row.POSTPROCESSING_LEAD_TIME; end if;
3599 if l_merged_row.PREPOSITION_POINT is null then l_merged_row.PREPOSITION_POINT := old_row.PREPOSITION_POINT; end if;
3600 if l_merged_row.PREPROCESSING_LEAD_TIME is null then l_merged_row.PREPROCESSING_LEAD_TIME := old_row.PREPROCESSING_LEAD_TIME; end if;
3601 if l_merged_row.PREVENTIVE_MAINTENANCE_FLAG is null then l_merged_row.PREVENTIVE_MAINTENANCE_FLAG := old_row.PREVENTIVE_MAINTENANCE_FLAG; end if;
3602 if l_merged_row.PRICE_TOLERANCE_PERCENT is null then l_merged_row.PRICE_TOLERANCE_PERCENT := old_row.PRICE_TOLERANCE_PERCENT; end if;
3603 if l_merged_row.PRIMARY_SPECIALIST_ID is null then l_merged_row.PRIMARY_SPECIALIST_ID := old_row.PRIMARY_SPECIALIST_ID; end if;
3604 if l_merged_row.PROCESS_COSTING_ENABLED_FLAG is null then l_merged_row.PROCESS_COSTING_ENABLED_FLAG := old_row.PROCESS_COSTING_ENABLED_FLAG; end if;
3605 if l_merged_row.PROCESS_EXECUTION_ENABLED_FLAG is null then l_merged_row.PROCESS_EXECUTION_ENABLED_FLAG := old_row.PROCESS_EXECUTION_ENABLED_FLAG; end if;
3606 if l_merged_row.PROCESS_QUALITY_ENABLED_FLAG is null then l_merged_row.PROCESS_QUALITY_ENABLED_FLAG := old_row.PROCESS_QUALITY_ENABLED_FLAG; end if;
3607 if l_merged_row.PROCESS_SUPPLY_LOCATOR_ID is null then l_merged_row.PROCESS_SUPPLY_LOCATOR_ID := old_row.PROCESS_SUPPLY_LOCATOR_ID; end if;
3608 if l_merged_row.PROCESS_SUPPLY_SUBINVENTORY is null then l_merged_row.PROCESS_SUPPLY_SUBINVENTORY := old_row.PROCESS_SUPPLY_SUBINVENTORY; end if;
3609 if l_merged_row.PROCESS_YIELD_LOCATOR_ID is null then l_merged_row.PROCESS_YIELD_LOCATOR_ID := old_row.PROCESS_YIELD_LOCATOR_ID; end if;
3610 if l_merged_row.PROCESS_YIELD_SUBINVENTORY is null then l_merged_row.PROCESS_YIELD_SUBINVENTORY := old_row.PROCESS_YIELD_SUBINVENTORY; end if;
3611 if l_merged_row.PRODUCT_FAMILY_ITEM_ID is null then l_merged_row.PRODUCT_FAMILY_ITEM_ID := old_row.PRODUCT_FAMILY_ITEM_ID; end if;
3612 if l_merged_row.PRORATE_SERVICE_FLAG is null then l_merged_row.PRORATE_SERVICE_FLAG := old_row.PRORATE_SERVICE_FLAG; end if;
3613 if l_merged_row.PURCHASING_ENABLED_FLAG is null then l_merged_row.PURCHASING_ENABLED_FLAG := old_row.PURCHASING_ENABLED_FLAG; end if;
3614 if l_merged_row.PURCHASING_ITEM_FLAG is null then l_merged_row.PURCHASING_ITEM_FLAG := old_row.PURCHASING_ITEM_FLAG; end if;
3615 if l_merged_row.PURCHASING_TAX_CODE is null then l_merged_row.PURCHASING_TAX_CODE := old_row.PURCHASING_TAX_CODE; end if;
3616 if l_merged_row.QTY_RCV_EXCEPTION_CODE is null then l_merged_row.QTY_RCV_EXCEPTION_CODE := old_row.QTY_RCV_EXCEPTION_CODE; end if;
3617 if l_merged_row.QTY_RCV_TOLERANCE is null then l_merged_row.QTY_RCV_TOLERANCE := old_row.QTY_RCV_TOLERANCE; end if;
3618 if l_merged_row.RECEIPT_DAYS_EXCEPTION_CODE is null then l_merged_row.RECEIPT_DAYS_EXCEPTION_CODE := old_row.RECEIPT_DAYS_EXCEPTION_CODE; end if;
3619 if l_merged_row.RECEIPT_REQUIRED_FLAG is null then l_merged_row.RECEIPT_REQUIRED_FLAG := old_row.RECEIPT_REQUIRED_FLAG; end if;
3620 if l_merged_row.RECEIVE_CLOSE_TOLERANCE is null then l_merged_row.RECEIVE_CLOSE_TOLERANCE := old_row.RECEIVE_CLOSE_TOLERANCE; end if;
3621 if l_merged_row.RECEIVING_ROUTING_ID is null then l_merged_row.RECEIVING_ROUTING_ID := old_row.RECEIVING_ROUTING_ID; end if;
3622 if l_merged_row.RECIPE_ENABLED_FLAG is null then l_merged_row.RECIPE_ENABLED_FLAG := old_row.RECIPE_ENABLED_FLAG; end if;
3623 if l_merged_row.RECOVERED_PART_DISP_CODE is null then l_merged_row.RECOVERED_PART_DISP_CODE := old_row.RECOVERED_PART_DISP_CODE; end if;
3624 if l_merged_row.RELEASE_TIME_FENCE_CODE is null then l_merged_row.RELEASE_TIME_FENCE_CODE := old_row.RELEASE_TIME_FENCE_CODE; end if;
3625 if l_merged_row.RELEASE_TIME_FENCE_DAYS is null then l_merged_row.RELEASE_TIME_FENCE_DAYS := old_row.RELEASE_TIME_FENCE_DAYS; end if;
3626 if l_merged_row.REPAIR_LEADTIME is null then l_merged_row.REPAIR_LEADTIME := old_row.REPAIR_LEADTIME; end if;
3627 if l_merged_row.REPAIR_PROGRAM is null then l_merged_row.REPAIR_PROGRAM := old_row.REPAIR_PROGRAM; end if;
3628 if l_merged_row.REPAIR_YIELD is null then l_merged_row.REPAIR_YIELD := old_row.REPAIR_YIELD; end if;
3629 if l_merged_row.REPETITIVE_PLANNING_FLAG is null then l_merged_row.REPETITIVE_PLANNING_FLAG := old_row.REPETITIVE_PLANNING_FLAG; end if;
3630 if l_merged_row.REPLENISH_TO_ORDER_FLAG is null then l_merged_row.REPLENISH_TO_ORDER_FLAG := old_row.REPLENISH_TO_ORDER_FLAG; end if;
3631 if l_merged_row.RESERVABLE_TYPE is null then l_merged_row.RESERVABLE_TYPE := old_row.RESERVABLE_TYPE; end if;
3632 if l_merged_row.RESPONSE_TIME_PERIOD_CODE is null then l_merged_row.RESPONSE_TIME_PERIOD_CODE := old_row.RESPONSE_TIME_PERIOD_CODE; end if;
3633 if l_merged_row.RESPONSE_TIME_VALUE is null then l_merged_row.RESPONSE_TIME_VALUE := old_row.RESPONSE_TIME_VALUE; end if;
3634 if l_merged_row.RESTRICT_LOCATORS_CODE is null then l_merged_row.RESTRICT_LOCATORS_CODE := old_row.RESTRICT_LOCATORS_CODE; end if;
3635 if l_merged_row.RESTRICT_SUBINVENTORIES_CODE is null then l_merged_row.RESTRICT_SUBINVENTORIES_CODE := old_row.RESTRICT_SUBINVENTORIES_CODE; end if;
3636 if l_merged_row.RETEST_INTERVAL is null then l_merged_row.RETEST_INTERVAL := old_row.RETEST_INTERVAL; end if;
3637 if l_merged_row.RETURNABLE_FLAG is null then l_merged_row.RETURNABLE_FLAG := old_row.RETURNABLE_FLAG; end if;
3638 if l_merged_row.RETURN_INSPECTION_REQUIREMENT is null then l_merged_row.RETURN_INSPECTION_REQUIREMENT := old_row.RETURN_INSPECTION_REQUIREMENT; end if;
3639 if l_merged_row.REVISION is null then l_merged_row.REVISION := old_row.REVISION; end if;
3640 if l_merged_row.REVISION_IMPORT_POLICY is null then l_merged_row.REVISION_IMPORT_POLICY := old_row.REVISION_IMPORT_POLICY; end if;
3641 if l_merged_row.REVISION_QTY_CONTROL_CODE is null then l_merged_row.REVISION_QTY_CONTROL_CODE := old_row.REVISION_QTY_CONTROL_CODE; end if;
3642 if l_merged_row.RFQ_REQUIRED_FLAG is null then l_merged_row.RFQ_REQUIRED_FLAG := old_row.RFQ_REQUIRED_FLAG; end if;
3643 if l_merged_row.ROUNDING_CONTROL_TYPE is null then l_merged_row.ROUNDING_CONTROL_TYPE := old_row.ROUNDING_CONTROL_TYPE; end if;
3644 if l_merged_row.ROUNDING_FACTOR is null then l_merged_row.ROUNDING_FACTOR := old_row.ROUNDING_FACTOR; end if;
3645 if l_merged_row.SAFETY_STOCK_BUCKET_DAYS is null then l_merged_row.SAFETY_STOCK_BUCKET_DAYS := old_row.SAFETY_STOCK_BUCKET_DAYS; end if;
3646 if l_merged_row.SALES_ACCOUNT is null then l_merged_row.SALES_ACCOUNT := old_row.SALES_ACCOUNT; end if;
3647 if l_merged_row.SECONDARY_DEFAULT_IND is null then l_merged_row.SECONDARY_DEFAULT_IND := old_row.SECONDARY_DEFAULT_IND; end if;
3648 if l_merged_row.SECONDARY_SPECIALIST_ID is null then l_merged_row.SECONDARY_SPECIALIST_ID := old_row.SECONDARY_SPECIALIST_ID; end if;
3649 if l_merged_row.SECONDARY_UOM_CODE is null then l_merged_row.SECONDARY_UOM_CODE := old_row.SECONDARY_UOM_CODE; end if;
3650 if l_merged_row.SERIAL_NUMBER_CONTROL_CODE is null then l_merged_row.SERIAL_NUMBER_CONTROL_CODE := old_row.SERIAL_NUMBER_CONTROL_CODE; end if;
3651 if l_merged_row.SERIAL_STATUS_ENABLED is null then l_merged_row.SERIAL_STATUS_ENABLED := old_row.SERIAL_STATUS_ENABLED; end if;
3652 if l_merged_row.SERVICEABLE_COMPONENT_FLAG is null then l_merged_row.SERVICEABLE_COMPONENT_FLAG := old_row.SERVICEABLE_COMPONENT_FLAG; end if;
3653 if l_merged_row.SERVICEABLE_ITEM_CLASS_ID is null then l_merged_row.SERVICEABLE_ITEM_CLASS_ID := old_row.SERVICEABLE_ITEM_CLASS_ID; end if;
3654 if l_merged_row.SERVICEABLE_PRODUCT_FLAG is null then l_merged_row.SERVICEABLE_PRODUCT_FLAG := old_row.SERVICEABLE_PRODUCT_FLAG; end if;
3655 if l_merged_row.SERVICE_DURATION is null then l_merged_row.SERVICE_DURATION := old_row.SERVICE_DURATION; end if;
3656 if l_merged_row.SERVICE_DURATION_PERIOD_CODE is null then l_merged_row.SERVICE_DURATION_PERIOD_CODE := old_row.SERVICE_DURATION_PERIOD_CODE; end if;
3657 if l_merged_row.SERVICE_ITEM_FLAG is null then l_merged_row.SERVICE_ITEM_FLAG := old_row.SERVICE_ITEM_FLAG; end if;
3658 if l_merged_row.SERVICE_STARTING_DELAY is null then l_merged_row.SERVICE_STARTING_DELAY := old_row.SERVICE_STARTING_DELAY; end if;
3659 if l_merged_row.SERV_BILLING_ENABLED_FLAG is null then l_merged_row.SERV_BILLING_ENABLED_FLAG := old_row.SERV_BILLING_ENABLED_FLAG; end if;
3660 if l_merged_row.SERV_IMPORTANCE_LEVEL is null then l_merged_row.SERV_IMPORTANCE_LEVEL := old_row.SERV_IMPORTANCE_LEVEL; end if;
3661 if l_merged_row.SERV_REQ_ENABLED_CODE is null then l_merged_row.SERV_REQ_ENABLED_CODE := old_row.SERV_REQ_ENABLED_CODE; end if;
3662 if l_merged_row.SET_ID is null then l_merged_row.SET_ID := old_row.SET_ID; end if;
3663 if l_merged_row.SHELF_LIFE_CODE is null then l_merged_row.SHELF_LIFE_CODE := old_row.SHELF_LIFE_CODE; end if;
3664 if l_merged_row.SHELF_LIFE_DAYS is null then l_merged_row.SHELF_LIFE_DAYS := old_row.SHELF_LIFE_DAYS; end if;
3665 if l_merged_row.SHIPPABLE_ITEM_FLAG is null then l_merged_row.SHIPPABLE_ITEM_FLAG := old_row.SHIPPABLE_ITEM_FLAG; end if;
3666 if l_merged_row.SHIP_MODEL_COMPLETE_FLAG is null then l_merged_row.SHIP_MODEL_COMPLETE_FLAG := old_row.SHIP_MODEL_COMPLETE_FLAG; end if;
3667 if l_merged_row.SHRINKAGE_RATE is null then l_merged_row.SHRINKAGE_RATE := old_row.SHRINKAGE_RATE; end if;
3668 if l_merged_row.SOURCE_ORGANIZATION_ID is null then l_merged_row.SOURCE_ORGANIZATION_ID := old_row.SOURCE_ORGANIZATION_ID; end if;
3669 if l_merged_row.SOURCE_SUBINVENTORY is null then l_merged_row.SOURCE_SUBINVENTORY := old_row.SOURCE_SUBINVENTORY; end if;
3670 if l_merged_row.SOURCE_TYPE is null then l_merged_row.SOURCE_TYPE := old_row.SOURCE_TYPE; end if;
3671 if l_merged_row.SO_AUTHORIZATION_FLAG is null then l_merged_row.SO_AUTHORIZATION_FLAG := old_row.SO_AUTHORIZATION_FLAG; end if;
3672 if l_merged_row.SO_TRANSACTIONS_FLAG is null then l_merged_row.SO_TRANSACTIONS_FLAG := old_row.SO_TRANSACTIONS_FLAG; end if;
3673 if l_merged_row.START_AUTO_LOT_NUMBER is null then l_merged_row.START_AUTO_LOT_NUMBER := old_row.START_AUTO_LOT_NUMBER; end if;
3674 if l_merged_row.START_AUTO_SERIAL_NUMBER is null then l_merged_row.START_AUTO_SERIAL_NUMBER := old_row.START_AUTO_SERIAL_NUMBER; end if;
3675 if l_merged_row.START_DATE_ACTIVE is null then l_merged_row.START_DATE_ACTIVE := old_row.START_DATE_ACTIVE; end if;
3676 if l_merged_row.STD_LOT_SIZE is null then l_merged_row.STD_LOT_SIZE := old_row.STD_LOT_SIZE; end if;
3677 if l_merged_row.STOCK_ENABLED_FLAG is null then l_merged_row.STOCK_ENABLED_FLAG := old_row.STOCK_ENABLED_FLAG; end if;
3678 if l_merged_row.SUBCONTRACTING_COMPONENT is null then l_merged_row.SUBCONTRACTING_COMPONENT := old_row.SUBCONTRACTING_COMPONENT; end if;
3679 if l_merged_row.SUBSCRIPTION_DEPEND_FLAG is null then l_merged_row.SUBSCRIPTION_DEPEND_FLAG := old_row.SUBSCRIPTION_DEPEND_FLAG; end if;
3680 if l_merged_row.SUBSTITUTION_WINDOW_CODE is null then l_merged_row.SUBSTITUTION_WINDOW_CODE := old_row.SUBSTITUTION_WINDOW_CODE; end if;
3681 if l_merged_row.SUBSTITUTION_WINDOW_DAYS is null then l_merged_row.SUBSTITUTION_WINDOW_DAYS := old_row.SUBSTITUTION_WINDOW_DAYS; end if;
3682 if l_merged_row.SUMMARY_FLAG is null then l_merged_row.SUMMARY_FLAG := old_row.SUMMARY_FLAG; end if;
3683 if l_merged_row.TAXABLE_FLAG is null then l_merged_row.TAXABLE_FLAG := old_row.TAXABLE_FLAG; end if;
3684 if l_merged_row.TAX_CODE is null then l_merged_row.TAX_CODE := old_row.TAX_CODE; end if;
3685 if l_merged_row.TIME_BILLABLE_FLAG is null then l_merged_row.TIME_BILLABLE_FLAG := old_row.TIME_BILLABLE_FLAG; end if;
3686 if l_merged_row.TRACKING_QUANTITY_IND is null then l_merged_row.TRACKING_QUANTITY_IND := old_row.TRACKING_QUANTITY_IND; end if;
3687 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := old_row.TRANSACTION_ID; end if;
3688 if l_merged_row.UNDER_RETURN_TOLERANCE is null then l_merged_row.UNDER_RETURN_TOLERANCE := old_row.UNDER_RETURN_TOLERANCE; end if;
3689 if l_merged_row.UNDER_SHIPMENT_TOLERANCE is null then l_merged_row.UNDER_SHIPMENT_TOLERANCE := old_row.UNDER_SHIPMENT_TOLERANCE; end if;
3690 if l_merged_row.UNIT_HEIGHT is null then l_merged_row.UNIT_HEIGHT := old_row.UNIT_HEIGHT; end if;
3691 if l_merged_row.UNIT_LENGTH is null then l_merged_row.UNIT_LENGTH := old_row.UNIT_LENGTH; end if;
3692 if l_merged_row.UNIT_OF_ISSUE is null then l_merged_row.UNIT_OF_ISSUE := old_row.UNIT_OF_ISSUE; end if;
3693 if l_merged_row.UNIT_VOLUME is null then l_merged_row.UNIT_VOLUME := old_row.UNIT_VOLUME; end if;
3694 if l_merged_row.UNIT_WEIGHT is null then l_merged_row.UNIT_WEIGHT := old_row.UNIT_WEIGHT; end if;
3695 if l_merged_row.UNIT_WIDTH is null then l_merged_row.UNIT_WIDTH := old_row.UNIT_WIDTH; end if;
3696 if l_merged_row.UN_NUMBER_ID is null then l_merged_row.UN_NUMBER_ID := old_row.UN_NUMBER_ID; end if;
3697 if l_merged_row.USAGE_ITEM_FLAG is null then l_merged_row.USAGE_ITEM_FLAG := old_row.USAGE_ITEM_FLAG; end if;
3698 if l_merged_row.VARIABLE_LEAD_TIME is null then l_merged_row.VARIABLE_LEAD_TIME := old_row.VARIABLE_LEAD_TIME; end if;
3699 if l_merged_row.VEHICLE_ITEM_FLAG is null then l_merged_row.VEHICLE_ITEM_FLAG := old_row.VEHICLE_ITEM_FLAG; end if;
3700 if l_merged_row.VENDOR_WARRANTY_FLAG is null then l_merged_row.VENDOR_WARRANTY_FLAG := old_row.VENDOR_WARRANTY_FLAG; end if;
3701 if l_merged_row.VMI_FIXED_ORDER_QUANTITY is null then l_merged_row.VMI_FIXED_ORDER_QUANTITY := old_row.VMI_FIXED_ORDER_QUANTITY; end if;
3702 if l_merged_row.VMI_FORECAST_TYPE is null then l_merged_row.VMI_FORECAST_TYPE := old_row.VMI_FORECAST_TYPE; end if;
3703 if l_merged_row.VMI_MAXIMUM_DAYS is null then l_merged_row.VMI_MAXIMUM_DAYS := old_row.VMI_MAXIMUM_DAYS; end if;
3704 if l_merged_row.VMI_MAXIMUM_UNITS is null then l_merged_row.VMI_MAXIMUM_UNITS := old_row.VMI_MAXIMUM_UNITS; end if;
3705 if l_merged_row.VMI_MINIMUM_DAYS is null then l_merged_row.VMI_MINIMUM_DAYS := old_row.VMI_MINIMUM_DAYS; end if;
3706 if l_merged_row.VMI_MINIMUM_UNITS is null then l_merged_row.VMI_MINIMUM_UNITS := old_row.VMI_MINIMUM_UNITS; end if;
3707 if l_merged_row.VOLUME_UOM_CODE is null then l_merged_row.VOLUME_UOM_CODE := old_row.VOLUME_UOM_CODE; end if;
3708 if l_merged_row.VOL_DISCOUNT_EXEMPT_FLAG is null then l_merged_row.VOL_DISCOUNT_EXEMPT_FLAG := old_row.VOL_DISCOUNT_EXEMPT_FLAG; end if;
3709 if l_merged_row.WARRANTY_VENDOR_ID is null then l_merged_row.WARRANTY_VENDOR_ID := old_row.WARRANTY_VENDOR_ID; end if;
3710 if l_merged_row.WEB_STATUS is null then l_merged_row.WEB_STATUS := old_row.WEB_STATUS; end if;
3711 if l_merged_row.WEIGHT_UOM_CODE is null then l_merged_row.WEIGHT_UOM_CODE := old_row.WEIGHT_UOM_CODE; end if;
3712 if l_merged_row.WH_UPDATE_DATE is null then l_merged_row.WH_UPDATE_DATE := old_row.WH_UPDATE_DATE; end if;
3713 if l_merged_row.WIP_SUPPLY_LOCATOR_ID is null then l_merged_row.WIP_SUPPLY_LOCATOR_ID := old_row.WIP_SUPPLY_LOCATOR_ID; end if;
3714 if l_merged_row.WIP_SUPPLY_SUBINVENTORY is null then l_merged_row.WIP_SUPPLY_SUBINVENTORY := old_row.WIP_SUPPLY_SUBINVENTORY; end if;
3715 if l_merged_row.WIP_SUPPLY_TYPE is null then l_merged_row.WIP_SUPPLY_TYPE := old_row.WIP_SUPPLY_TYPE; end if;
3716 -- end generated code
3717 END LOOP; -- over old rows
3718
3719 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || c_target_rows%ROWCOUNT );
3720 IF c_target_rows%ISOPEN THEN
3721 CLOSE c_target_rows;
3722 END IF;
3723
3724 IF l_merged_rows IS NOT NULL THEN
3725 -- delete
3726 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
3727 FORALL rid_ix IN INDICES OF l_old_rowids
3728 DELETE FROM MTL_SYSTEM_ITEMS_INTERFACE
3729 WHERE ROWID = l_old_rowids( rid_ix );
3730 -- insert
3731 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
3732 FORALL row_index IN INDICES OF l_merged_rows
3733 INSERT INTO MTL_SYSTEM_ITEMS_INTERFACE
3734 VALUES l_merged_rows( row_index );
3735 END IF;
3736 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
3737 EXCEPTION WHEN OTHERS THEN
3738 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
3739 IF c_target_rows%ISOPEN THEN
3740 CLOSE c_target_rows;
3741 END IF;
3742 RAISE;
3743 END Merge_Items_For_Import;
3744
3745 -- Merges Item Revision records
3746 PROCEDURE Merge_Revs_For_Import( p_batch_id IN NUMBER
3747 , p_master_org_id IN NUMBER
3748 )
3749 IS
3750 SUBTYPE MIRI_ROW IS MTL_ITEM_REVISIONS_INTERFACE%ROWTYPE;
3751 TYPE MIRI_ROWS IS TABLE OF MIRI_ROW INDEX BY BINARY_INTEGER;
3752
3753 /*
3754 * Note that the organization_id column is filled in from the organization_code and batch organization_id
3755 * as part of resolve_ssxref_on_data_load
3756 * revision column is filled in from the revision_id before this cursor is fetched.
3757 */
3758 CURSOR c_target_revs IS
3759 SELECT *
3760 FROM
3761 (SELECT
3762 ROWID rid,
3763 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) cnt,
3764 RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, REVISION ) rnk,
3765 miri.*
3766 FROM MTL_ITEM_REVISIONS_INTERFACE miri
3767 WHERE PROCESS_FLAG = 1
3768 AND SET_PROCESS_ID = p_batch_id
3769 AND ITEM_NUMBER IS NOT NULL
3770 AND ORGANIZATION_ID IS NOT NULL
3771 AND REVISION IS NOT NULL
3772 AND EXISTS
3773 (SELECT NULL
3774 FROM MTL_PARAMETERS mp
3775 WHERE mp.ORGANIZATION_ID = miri.ORGANIZATION_ID
3776 AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
3777 )
3778 ) sub
3779 WHERE sub.cnt > 1
3780 ORDER BY rnk, last_update_date DESC NULLS LAST, interface_table_unique_id DESC NULLS LAST;
3781
3782 TYPE TARGET_ROWS IS TABLE OF c_target_revs%ROWTYPE;
3783
3784 l_merged_rows MIRI_ROWS;
3785 l_new_rows MIRI_ROWS;
3786 l_merged_row MIRI_ROW;
3787 l_old_rows TARGET_ROWS;
3788 l_old_rowids UROWID_TABLE;
3789
3790 l_candidate_trans MTL_ITEM_REVISIONS_INTERFACE.TRANSACTION_TYPE%TYPE;
3791
3792 l_mrow_ix PLS_INTEGER := 0;
3793 l_new_row_idx PLS_INTEGER := 0;
3794 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
3795
3796 l_proc_log_prefix CONSTANT VARCHAR2(30) := 'Merge_Revs_For_Import - ';
3797 BEGIN
3798 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
3799 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
3800
3801 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3802 SET REVISION = NVL( ( SELECT r.REVISION
3803 FROM MTL_ITEM_REVISIONS_B r
3804 WHERE r.REVISION_ID = miri.REVISION_ID
3805 AND r.ORGANIZATION_ID = miri.ORGANIZATION_ID
3806 )
3807 , REVISION
3808 )
3809 WHERE REVISION_ID IS NOT NULL
3810 AND SET_PROCESS_ID = p_batch_id
3811 AND PROCESS_FLAG = 1
3812 AND REVISION IS NULL;
3813
3814 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
3815 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
3816 FROM MTL_SYSTEM_ITEMS_KFV
3817 WHERE INVENTORY_ITEM_ID = miri.INVENTORY_ITEM_ID
3818 AND ORGANIZATION_ID = miri.ORGANIZATION_ID)
3819 WHERE SET_PROCESS_ID = p_batch_id
3820 AND PROCESS_FLAG = 1
3821 AND INVENTORY_ITEM_ID IS NOT NULL
3822 AND ITEM_NUMBER IS NULL;
3823
3824 OPEN c_target_revs;
3825 FETCH c_target_revs BULK COLLECT INTO l_old_rows;
3826 CLOSE c_target_revs;
3827
3828 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
3829 IF 0 <> l_old_rows.COUNT THEN
3830 l_old_rowids := UROWID_TABLE( );
3831 l_old_rowids.EXTEND( l_old_rows.COUNT );
3832
3833 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
3834 l_old_rowids( idx ) := l_old_rows( idx ).RID;
3835
3836 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
3837 THEN
3838 IF l_new_row_idx > 0 THEN
3839 FOR i IN 1..l_new_row_idx LOOP
3840 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
3841 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3842 l_new_rows( i ).SOURCE_SYSTEM_ID);
3843 l_mrow_ix := l_mrow_ix + 1;
3844 l_merged_rows( l_mrow_ix ) := l_merged_row;
3845 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
3846 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
3847 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
3848 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3849 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
3850 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
3851 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3852 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3853 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3854 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
3855 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3856 END IF; --IF l_new_row_idx > 0 THEN
3857 l_cur_rank := l_old_rows( idx ).RNK;
3858 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
3859 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Revision = ' ||
3860 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3861 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3862 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3863 l_old_rows( idx ).REVISION);
3864 l_new_rows.DELETE;
3865 l_new_row_idx := 1;
3866 l_new_rows( l_new_row_idx ).PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
3867 -- initializing l_merged_row . This row will contain the current merged row for an item
3868 l_merged_row := NULL;
3869 l_merged_row.SET_PROCESS_ID := p_batch_id;
3870 l_merged_row.PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
3871 ELSE
3872 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
3873 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Revision = ' ||
3874 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
3875 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
3876 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
3877 l_old_rows( idx ).REVISION);
3878 l_new_row_idx := l_new_row_idx + 1;
3879 l_new_rows( l_new_row_idx ).PROCESS_FLAG := 111;
3880 END IF;
3881
3882 l_new_rows( l_new_row_idx ).SET_PROCESS_ID := p_batch_id;
3883 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
3884 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
3885 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
3886 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
3887
3888 -- Special Cases:
3889 -- Transaction type
3890 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
3891
3892 IF l_merged_row.TRANSACTION_TYPE IS NULL
3893 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
3894 THEN
3895 -- CREATE > SYNC > UPDATE : order of case expression matters
3896 l_merged_row.TRANSACTION_TYPE :=
3897 CASE
3898 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
3899 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
3900 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
3901 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
3902 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
3903 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
3904 ELSE NULL -- INVALID transaction types encountered ...
3905 END;
3906 END IF;
3907
3908 -- The following columns need to be treated as atomic groups
3909 -- 1. Item Identifier
3910 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
3911 AND l_merged_row.ITEM_NUMBER IS NULL
3912 THEN
3913 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
3914 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
3915 END IF;
3916
3917 -- 2. Organization
3918 IF l_merged_row.ORGANIZATION_ID IS NULL
3919 AND l_merged_row.ORGANIZATION_CODE IS NULL
3920 THEN
3921 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID;
3922 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE;
3923 END IF;
3924
3925 -- 3. Template Identifier
3926 IF l_merged_row.TEMPLATE_ID IS NULL
3927 AND l_merged_row.TEMPLATE_NAME IS NULL
3928 THEN
3929 l_merged_row.TEMPLATE_ID := l_old_rows( idx ).TEMPLATE_ID ;
3930 l_merged_row.TEMPLATE_NAME := l_old_rows( idx ).TEMPLATE_NAME ;
3931 END IF;
3932
3933 -- Non-special cased
3934 if l_merged_row.ATTRIBUTE1 is null then l_merged_row.ATTRIBUTE1 := l_old_rows( idx ).ATTRIBUTE1; end if;
3935 if l_merged_row.ATTRIBUTE10 is null then l_merged_row.ATTRIBUTE10 := l_old_rows( idx ).ATTRIBUTE10; end if;
3936 if l_merged_row.ATTRIBUTE11 is null then l_merged_row.ATTRIBUTE11 := l_old_rows( idx ).ATTRIBUTE11; end if;
3937 if l_merged_row.ATTRIBUTE12 is null then l_merged_row.ATTRIBUTE12 := l_old_rows( idx ).ATTRIBUTE12; end if;
3938 if l_merged_row.ATTRIBUTE13 is null then l_merged_row.ATTRIBUTE13 := l_old_rows( idx ).ATTRIBUTE13; end if;
3939 if l_merged_row.ATTRIBUTE14 is null then l_merged_row.ATTRIBUTE14 := l_old_rows( idx ).ATTRIBUTE14; end if;
3940 if l_merged_row.ATTRIBUTE15 is null then l_merged_row.ATTRIBUTE15 := l_old_rows( idx ).ATTRIBUTE15; end if;
3941 if l_merged_row.ATTRIBUTE2 is null then l_merged_row.ATTRIBUTE2 := l_old_rows( idx ).ATTRIBUTE2; end if;
3942 if l_merged_row.ATTRIBUTE3 is null then l_merged_row.ATTRIBUTE3 := l_old_rows( idx ).ATTRIBUTE3; end if;
3943 if l_merged_row.ATTRIBUTE4 is null then l_merged_row.ATTRIBUTE4 := l_old_rows( idx ).ATTRIBUTE4; end if;
3944 if l_merged_row.ATTRIBUTE5 is null then l_merged_row.ATTRIBUTE5 := l_old_rows( idx ).ATTRIBUTE5; end if;
3945 if l_merged_row.ATTRIBUTE6 is null then l_merged_row.ATTRIBUTE6 := l_old_rows( idx ).ATTRIBUTE6; end if;
3946 if l_merged_row.ATTRIBUTE7 is null then l_merged_row.ATTRIBUTE7 := l_old_rows( idx ).ATTRIBUTE7; end if;
3947 if l_merged_row.ATTRIBUTE8 is null then l_merged_row.ATTRIBUTE8 := l_old_rows( idx ).ATTRIBUTE8; end if;
3948 if l_merged_row.ATTRIBUTE9 is null then l_merged_row.ATTRIBUTE9 := l_old_rows( idx ).ATTRIBUTE9; end if;
3949 if l_merged_row.ATTRIBUTE_CATEGORY is null then l_merged_row.ATTRIBUTE_CATEGORY := l_old_rows( idx ).ATTRIBUTE_CATEGORY; end if;
3950 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
3951 if l_merged_row.CHANGE_NOTICE is null then l_merged_row.CHANGE_NOTICE := l_old_rows( idx ).CHANGE_NOTICE; end if;
3952 if l_merged_row.CURRENT_PHASE_ID is null then l_merged_row.CURRENT_PHASE_ID := l_old_rows( idx ).CURRENT_PHASE_ID; end if;
3953 if l_merged_row.DESCRIPTION is null then l_merged_row.DESCRIPTION := l_old_rows( idx ).DESCRIPTION; end if;
3954 if l_merged_row.ECN_INITIATION_DATE is null then l_merged_row.ECN_INITIATION_DATE := l_old_rows( idx ).ECN_INITIATION_DATE; end if;
3955 if l_merged_row.EFFECTIVITY_DATE is null then l_merged_row.EFFECTIVITY_DATE := l_old_rows( idx ).EFFECTIVITY_DATE; end if;
3956 if l_merged_row.IMPLEMENTATION_DATE is null then l_merged_row.IMPLEMENTATION_DATE := l_old_rows( idx ).IMPLEMENTATION_DATE; end if;
3957 if l_merged_row.IMPLEMENTED_SERIAL_NUMBER is null then l_merged_row.IMPLEMENTED_SERIAL_NUMBER := l_old_rows( idx ).IMPLEMENTED_SERIAL_NUMBER; end if;
3958 if l_merged_row.LIFECYCLE_ID is null then l_merged_row.LIFECYCLE_ID := l_old_rows( idx ).LIFECYCLE_ID; end if;
3959 if l_merged_row.REVISED_ITEM_SEQUENCE_ID is null then l_merged_row.REVISED_ITEM_SEQUENCE_ID := l_old_rows( idx ).REVISED_ITEM_SEQUENCE_ID; end if;
3960 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
3961 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
3962 if l_merged_row.REVISION_LABEL is null then l_merged_row.REVISION_LABEL := l_old_rows( idx ).REVISION_LABEL; end if;
3963 if l_merged_row.REVISION_REASON is null then l_merged_row.REVISION_REASON := l_old_rows( idx ).REVISION_REASON; end if;
3964 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
3965
3966 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
3967 FOR i IN 1..l_new_row_idx LOOP
3968 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
3969 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
3970 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
3971 l_new_rows( i ).SOURCE_SYSTEM_ID);
3972 l_mrow_ix := l_mrow_ix + 1;
3973 l_merged_rows( l_mrow_ix ) := l_merged_row;
3974 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
3975 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
3976 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
3977 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
3978 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
3979 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
3980 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
3981 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
3982 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
3983 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
3984 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
3985 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
3986 END LOOP; -- loop over old rows
3987
3988 IF l_merged_rows IS NOT NULL THEN
3989 -- delete
3990 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
3991 FORALL rid_ix IN INDICES OF l_old_rowids
3992 DELETE FROM MTL_ITEM_REVISIONS_INTERFACE
3993 WHERE ROWID = l_old_rowids( rid_ix );
3994 -- insert
3995 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
3996 FORALL row_index IN INDICES OF l_merged_rows
3997 INSERT INTO MTL_ITEM_REVISIONS_INTERFACE
3998 VALUES l_merged_rows( row_index );
3999 END IF;
4000 END IF; -- ENDS IF l_old_rows.count <> 0
4001 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4002 EXCEPTION WHEN OTHERS THEN
4003 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4004 IF c_target_revs%ISOPEN THEN
4005 CLOSE c_target_revs;
4006 END IF;
4007 RAISE;
4008 END Merge_Revs_For_Import;
4009
4010 -- Merges Item Category assignments
4011 PROCEDURE Merge_Categories_For_Import( p_batch_id IN NUMBER
4012 , p_master_org_id IN NUMBER
4013 )
4014 IS
4015 SUBTYPE MICI_ROW IS MTL_ITEM_CATEGORIES_INTERFACE%ROWTYPE;
4016 TYPE MICI_ROWS IS TABLE OF MICI_ROW INDEX BY BINARY_INTEGER;
4017
4018 /*
4019 * Note that the organization_id column is filled in from the organization_code and batch organization_id
4020 * as part of resolve_ssxref_on_data_load
4021 */
4022 CURSOR c_target_categories IS
4023 SELECT *
4024 FROM
4025 (SELECT
4026 ROWID rid,
4027 COUNT( * ) OVER ( PARTITION BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) cnt,
4028 RANK() OVER ( ORDER BY ITEM_NUMBER, ORGANIZATION_ID, CATEGORY_SET_NAME, CATEGORY_NAME ) rnk,
4029 mici.*
4030 FROM MTL_ITEM_CATEGORIES_INTERFACE mici
4031 WHERE PROCESS_FLAG = 1
4032 AND SET_PROCESS_ID = p_batch_id
4033 AND ITEM_NUMBER IS NOT NULL
4034 AND ORGANIZATION_ID IS NOT NULL
4035 AND CATEGORY_SET_NAME IS NOT NULL
4036 AND CATEGORY_NAME IS NOT NULL
4037 AND EXISTS
4038 (SELECT NULL
4039 FROM MTL_PARAMETERS mp
4040 WHERE mp.ORGANIZATION_ID = mici.ORGANIZATION_ID
4041 AND mp.MASTER_ORGANIZATION_ID = p_master_org_id
4042 )
4043 ) sub
4044 WHERE sub.cnt > 1
4045 ORDER BY rnk, last_update_date DESC NULLS LAST;
4046
4047 TYPE TARGET_ROWS IS TABLE OF c_target_categories%ROWTYPE;
4048
4049 l_merged_rows MICI_ROWS;
4050 l_new_rows MICI_ROWS;
4051 l_merged_row MICI_ROW;
4052 l_old_rows TARGET_ROWS;
4053 l_old_rowids UROWID_TABLE;
4054
4055 l_candidate_trans MTL_ITEM_CATEGORIES_INTERFACE.TRANSACTION_TYPE%TYPE;
4056
4057 l_mrow_ix PLS_INTEGER := 0;
4058 l_new_row_idx PLS_INTEGER := 0;
4059 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
4060
4061 l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Categories_For_Import - ';
4062 BEGIN
4063 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4064 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4065
4066 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4067 SET CATEGORY_SET_NAME = NVL( mici.CATEGORY_SET_NAME,
4068 ( SELECT mcs.CATEGORY_SET_NAME
4069 FROM MTL_CATEGORY_SETS mcs
4070 WHERE mcs.CATEGORY_SET_ID = mici.CATEGORY_SET_ID
4071 )
4072 ),
4073 CATEGORY_NAME = NVL( mici.CATEGORY_NAME,
4074 ( SELECT mc.CONCATENATED_SEGMENTS
4075 FROM MTL_CATEGORIES_KFV mc
4076 WHERE mc.CATEGORY_ID = mici.CATEGORY_ID
4077 )
4078 )
4079 WHERE ( ( CATEGORY_NAME IS NULL AND CATEGORY_ID IS NOT NULL )
4080 OR ( CATEGORY_SET_NAME IS NULL AND CATEGORY_SET_ID IS NOT NULL )
4081 )
4082 AND SET_PROCESS_ID = p_batch_id
4083 AND PROCESS_FLAG = 1;
4084
4085 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4086 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4087 FROM MTL_SYSTEM_ITEMS_KFV
4088 WHERE INVENTORY_ITEM_ID = mici.INVENTORY_ITEM_ID
4089 AND ORGANIZATION_ID = mici.ORGANIZATION_ID)
4090 WHERE SET_PROCESS_ID = p_batch_id
4091 AND PROCESS_FLAG = 1
4092 AND INVENTORY_ITEM_ID IS NOT NULL
4093 AND ITEM_NUMBER IS NULL;
4094
4095 OPEN c_target_categories;
4096 FETCH c_target_categories BULK COLLECT INTO l_old_rows;
4097 CLOSE c_target_categories;
4098
4099 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4100 IF 0 <> l_old_rows.COUNT THEN
4101 l_old_rowids := UROWID_TABLE( );
4102 l_old_rowids.EXTEND( l_old_rows.COUNT );
4103
4104 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4105 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4106
4107 IF ( l_cur_rank <> l_old_rows( idx ).RNK )
4108 THEN
4109 IF l_new_row_idx > 0 THEN
4110 FOR i IN 1..l_new_row_idx LOOP
4111 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4112 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4113 l_new_rows( i ).SOURCE_SYSTEM_ID);
4114 l_mrow_ix := l_mrow_ix + 1;
4115 l_merged_rows( l_mrow_ix ) := l_merged_row;
4116 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
4117 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
4118 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4119 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4120 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4121 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4122 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4123 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4124 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4125 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4126 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4127 END IF; --IF l_new_row_idx > 0 THEN
4128 l_cur_rank := l_old_rows( idx ).RNK;
4129 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
4130 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4131 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4132 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4133 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4134 l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4135 l_old_rows( idx ).CATEGORY_NAME);
4136 l_new_rows.DELETE;
4137 l_new_row_idx := 1;
4138 l_new_rows( l_new_row_idx ).PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
4139 -- initializing l_merged_row . This row will contain the current merged row for an item
4140 l_merged_row := NULL;
4141 l_merged_row.SET_PROCESS_ID := p_batch_id;
4142 l_merged_row.PROCESS_FLAG := l_old_rows( idx ).PROCESS_FLAG;
4143 ELSE
4144 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
4145 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, Cat-Set, Cat = ' ||
4146 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4147 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4148 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4149 l_old_rows( idx ).CATEGORY_SET_NAME || ', ' ||
4150 l_old_rows( idx ).CATEGORY_NAME);
4151 l_new_row_idx := l_new_row_idx + 1;
4152 l_new_rows( l_new_row_idx ).PROCESS_FLAG := 111;
4153 END IF;
4154
4155 l_new_rows( l_new_row_idx ).SET_PROCESS_ID := p_batch_id;
4156 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4157 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4158 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
4159 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
4160
4161 -- Special Cases:
4162 -- Transaction type
4163 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4164
4165 IF l_merged_row.TRANSACTION_TYPE IS NULL
4166 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4167 THEN
4168 -- CREATE > SYNC > UPDATE : order of case expression matters
4169 l_merged_row.TRANSACTION_TYPE :=
4170 CASE
4171 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4172 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
4173 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4174 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
4175 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4176 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
4177 ELSE NULL -- INVALID transaction types encountered ...
4178 END;
4179 END IF;
4180
4181 -- The following columns need to be treated as atomic groups
4182 -- 1. Item Identifier
4183 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
4184 AND l_merged_row.ITEM_NUMBER IS NULL
4185 THEN
4186 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
4187 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
4188 END IF;
4189
4190 -- 2. Organization
4191 IF l_merged_row.ORGANIZATION_ID IS NULL
4192 AND l_merged_row.ORGANIZATION_CODE IS NULL
4193 THEN
4194 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID;
4195 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE;
4196 END IF;
4197
4198 -- 3. Category Set
4199 IF l_merged_row.CATEGORY_SET_ID IS NULL
4200 AND l_merged_row.CATEGORY_SET_NAME IS NULL
4201 THEN
4202 l_merged_row.CATEGORY_SET_ID := l_old_rows( idx ).CATEGORY_SET_ID;
4203 l_merged_row.CATEGORY_SET_NAME := l_old_rows( idx ).CATEGORY_SET_NAME;
4204 END IF;
4205
4206 -- 4. Category
4207 IF l_merged_row.CATEGORY_ID IS NULL
4208 AND l_merged_row.CATEGORY_NAME IS NULL
4209 THEN
4210 l_merged_row.CATEGORY_ID := l_old_rows( idx ).CATEGORY_ID;
4211 l_merged_row.CATEGORY_NAME := l_old_rows( idx ).CATEGORY_NAME;
4212 END IF;
4213
4214 -- Non-special cased
4215 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4216 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4217 if l_merged_row.OLD_CATEGORY_ID is null then l_merged_row.OLD_CATEGORY_ID := l_old_rows( idx ).OLD_CATEGORY_ID; end if;
4218 if l_merged_row.OLD_CATEGORY_NAME is null then l_merged_row.OLD_CATEGORY_NAME := l_old_rows( idx ).OLD_CATEGORY_NAME; end if;
4219 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4220
4221 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4222 FOR i IN 1..l_new_row_idx LOOP
4223 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
4224 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4225 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4226 l_new_rows( i ).SOURCE_SYSTEM_ID);
4227 l_mrow_ix := l_mrow_ix + 1;
4228 l_merged_rows( l_mrow_ix ) := l_merged_row;
4229 l_merged_rows( l_mrow_ix ).SET_PROCESS_ID := l_new_rows( i ).SET_PROCESS_ID;
4230 l_merged_rows( l_mrow_ix ).PROCESS_FLAG := l_new_rows( i ).PROCESS_FLAG;
4231 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4232 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4233 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4234 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4235 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4236 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4237 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4238 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4239 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4240 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4241 END LOOP; -- loop over old rows
4242
4243 IF l_merged_rows IS NOT NULL THEN
4244 -- delete
4245 Debug_Conc_Log( l_proc_log_prefix || 'Deleting ' || l_old_rowids.COUNT || ' old rows ...' );
4246 FORALL rid_ix IN INDICES OF l_old_rowids
4247 DELETE FROM MTL_ITEM_CATEGORIES_INTERFACE
4248 WHERE ROWID = l_old_rowids( rid_ix );
4249 -- insert
4250 Debug_Conc_Log( l_proc_log_prefix || 'Inserting ' || l_merged_rows.COUNT || ' merged rows ...' );
4251 FORALL row_index IN INDICES OF l_merged_rows
4252 INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE
4253 VALUES l_merged_rows( row_index );
4254 END IF;
4255 END IF; -- ENDS IF l_old_rows.count <> 0
4256 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4257 EXCEPTION WHEN OTHERS THEN
4258 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4259 IF c_target_categories%ISOPEN THEN
4260 CLOSE c_target_categories;
4261 END IF;
4262 RAISE;
4263 END Merge_Categories_For_Import;
4264
4265 -- Merges Item Attributes
4266 PROCEDURE Merge_Item_Attrs_For_Import( p_batch_id IN NUMBER
4267 , p_master_org_id IN NUMBER
4268 )
4269 IS
4270 CURSOR c_target_item_attrs IS
4271 SELECT sub.*
4272 , attrs.DATA_TYPE_CODE
4273 FROM
4274 ( SELECT
4275 EIUAI.ROWID rid
4276 , COUNT( * ) OVER ( PARTITION BY
4277 ITEM_NUMBER
4278 , ATTR_GROUP_INT_NAME
4279 , ATTR_INT_NAME
4280 , DATA_LEVEL_ID
4281 , PK1_VALUE
4282 , PK2_VALUE
4283 , PK3_VALUE
4284 , PK4_VALUE
4285 , PK5_VALUE
4286 , ORGANIZATION_ID
4287 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4288 )
4289 cnt
4290 , RANK() OVER ( ORDER BY
4291 ITEM_NUMBER
4292 , ATTR_GROUP_INT_NAME
4293 , ATTR_INT_NAME
4294 , DATA_LEVEL_ID
4295 , PK1_VALUE
4296 , PK2_VALUE
4297 , PK3_VALUE
4298 , PK4_VALUE
4299 , PK5_VALUE
4300 , ORGANIZATION_ID
4301 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4302 )
4303 rnk
4304 , eiuai.*
4305 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4306 WHERE DATA_SET_ID = p_batch_id
4307 AND PROCESS_STATUS = 1
4308 AND ITEM_NUMBER IS NOT NULL
4309 AND ORGANIZATION_ID IS NOT NULL
4310 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4311 AND FL_CTX_EXT.APPLICATION_ID = 431
4312 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4313 AND FL_CTX_EXT.MULTI_ROW = 'N'
4314 AND EXISTS( SELECT NULL
4315 FROM EGO_ATTR_GROUP_DL A, EGO_DATA_LEVEL_B DL
4316 WHERE DL.APPLICATION_ID = 431
4317 AND DL.ATTR_GROUP_TYPE = FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME
4318 AND DL.DATA_LEVEL_NAME IN ( 'ITEM_LEVEL' , 'ITEM_ORG', 'ITEM_SUP', 'ITEM_SUP_SITE', 'ITEM_SUP_SITE_ORG' )
4319 AND DL.DATA_LEVEL_ID = DL.DATA_LEVEL_ID
4320 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
4321 )
4322 ) sub
4323 , EGO_ATTRS_V attrs
4324 WHERE sub.CNT > 1
4325 AND attrs.APPLICATION_ID = 431
4326 AND attrs.ATTR_GROUP_NAME = sub.ATTR_GROUP_INT_NAME
4327 AND attrs.ATTR_NAME = sub.ATTR_INT_NAME
4328 AND attrs.ATTR_GROUP_TYPE = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4329 ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4330
4331 TYPE TARGET_ROWS IS TABLE OF c_target_item_attrs%ROWTYPE;
4332
4333 l_merged_rows EIUAI_ROWS;
4334 l_new_rows EIUAI_ROWS;
4335 l_merged_row EIUAI_ROW;
4336 l_old_rows TARGET_ROWS;
4337 l_old_rowids UROWID_TABLE;
4338
4339 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4340
4341 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
4342 l_mrow_ix PLS_INTEGER := 0;
4343 l_new_row_idx PLS_INTEGER := 0;
4344
4345 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4346
4347 l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Item_Attrs_For_Import - ';
4348 BEGIN
4349 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4350 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4351
4352 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4353 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4354 FROM MTL_SYSTEM_ITEMS_KFV
4355 WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4356 AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4357 WHERE DATA_SET_ID = p_batch_id
4358 AND PROCESS_STATUS = 1
4359 AND INVENTORY_ITEM_ID IS NOT NULL
4360 AND ITEM_NUMBER IS NULL;
4361
4362 OPEN c_target_item_attrs;
4363 FETCH c_target_item_attrs BULK COLLECT INTO l_old_rows;
4364 CLOSE c_target_item_attrs;
4365
4366 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4367 IF 0 <> l_old_rows.COUNT THEN
4368 l_old_rowids := UROWID_TABLE( );
4369 l_old_rowids.EXTEND( l_old_rows.COUNT );
4370
4371 -- process the item-level attrs
4372 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4373 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4374
4375 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4376 IF l_new_row_idx > 0 THEN
4377 FOR i IN 1..l_new_row_idx LOOP
4378 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4379 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4380 l_new_rows( i ).SOURCE_SYSTEM_ID);
4381 l_mrow_ix := l_mrow_ix + 1;
4382 l_merged_rows( l_mrow_ix ) := l_merged_row;
4383 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4384 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4385 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4386 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4387 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4388 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4389 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4390 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4391 l_merged_rows( l_mrow_ix ).PK1_VALUE := l_new_rows( i ).PK1_VALUE;
4392 l_merged_rows( l_mrow_ix ).PK2_VALUE := l_new_rows( i ).PK2_VALUE;
4393 l_merged_rows( l_mrow_ix ).PK3_VALUE := l_new_rows( i ).PK3_VALUE;
4394 l_merged_rows( l_mrow_ix ).PK4_VALUE := l_new_rows( i ).PK4_VALUE;
4395 l_merged_rows( l_mrow_ix ).PK5_VALUE := l_new_rows( i ).PK5_VALUE;
4396 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4397 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4398 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4399 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4400 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4401 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4402 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4403 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4404 END IF; --IF l_new_row_idx > 0 THEN
4405 l_cur_rank := l_old_rows( idx ).RNK;
4406 l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4407
4408 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
4409 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4410 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4411 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4412 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4413 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4414 l_old_rows( idx ).ATTR_INT_NAME);
4415 l_new_rows.DELETE;
4416 l_new_row_idx := 1;
4417 l_new_rows( l_new_row_idx ).PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4418 -- initializing l_merged_row . This row will contain the current merged row for an item
4419 l_merged_row := NULL;
4420 l_merged_row.DATA_SET_ID := p_batch_id;
4421 l_merged_row.PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4422 ELSE
4423 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
4424 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4425 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4426 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4427 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4428 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4429 l_old_rows( idx ).ATTR_INT_NAME);
4430 l_new_row_idx := l_new_row_idx + 1;
4431 l_new_rows( l_new_row_idx ).PROCESS_STATUS := 7;
4432 END IF;
4433
4434 l_new_rows( l_new_row_idx ).DATA_SET_ID := p_batch_id;
4435 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4436 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4437 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4438 l_new_rows( l_new_row_idx ).ATTR_INT_NAME := l_old_rows( idx ).ATTR_INT_NAME;
4439 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME := l_old_rows( idx ).DATA_LEVEL_NAME;
4440 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID := l_old_rows( idx ).DATA_LEVEL_ID;
4441 l_new_rows( l_new_row_idx ).PK1_VALUE := l_old_rows( idx ).PK1_VALUE;
4442 l_new_rows( l_new_row_idx ).PK2_VALUE := l_old_rows( idx ).PK2_VALUE;
4443 l_new_rows( l_new_row_idx ).PK3_VALUE := l_old_rows( idx ).PK3_VALUE;
4444 l_new_rows( l_new_row_idx ).PK4_VALUE := l_old_rows( idx ).PK4_VALUE;
4445 l_new_rows( l_new_row_idx ).PK5_VALUE := l_old_rows( idx ).PK5_VALUE;
4446 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER := l_old_rows( idx ).ROW_IDENTIFIER;
4447 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
4448 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
4449
4450 -- Special Cases:
4451 -- Transaction type
4452 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4453
4454 IF l_merged_row.TRANSACTION_TYPE IS NULL
4455 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4456 THEN
4457 -- CREATE > SYNC > UPDATE : order of case expression matters
4458 l_merged_row.TRANSACTION_TYPE :=
4459 CASE
4460 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4461 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
4462 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4463 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
4464 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4465 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
4466 ELSE NULL -- INVALID transaction types encountered so far ...
4467 END;
4468 END IF;
4469
4470
4471 -- The following columns need to be treated as atomic groups
4472 -- 1. Item Identifier
4473 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
4474 AND l_merged_row.ITEM_NUMBER IS NULL
4475 THEN
4476 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
4477 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
4478 END IF;
4479
4480 -- 2. Organization
4481 IF l_merged_row.ORGANIZATION_ID IS NULL
4482 AND l_merged_row.ORGANIZATION_CODE IS NULL
4483 THEN
4484 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID ;
4485 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE ;
4486 END IF;
4487
4488 -- 3. The attribute value
4489 IF l_merged_row.ATTR_DISP_VALUE IS NULL
4490 AND l_merged_row.ATTR_VALUE_STR IS NULL
4491 AND l_merged_row.ATTR_VALUE_DATE IS NULL
4492 AND l_merged_row.ATTR_VALUE_NUM IS NULL
4493 AND l_merged_row.ATTR_VALUE_UOM IS NULL
4494 AND l_merged_row.ATTR_UOM_DISP_VALUE IS NULL
4495 THEN
4496 CASE
4497 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
4498 IF l_old_rows( idx ).ATTR_VALUE_STR IS NOT NULL
4499 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4500 THEN
4501 l_merged_row.ATTR_VALUE_STR := l_old_rows( idx ).ATTR_VALUE_STR;
4502 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4503 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4504 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4505 END IF;
4506 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
4507 IF l_old_rows( idx ).ATTR_VALUE_DATE IS NOT NULL
4508 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4509 THEN
4510 l_merged_row.ATTR_VALUE_DATE := l_old_rows( idx ).ATTR_VALUE_DATE;
4511 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4512 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4513 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4514 END IF;
4515 WHEN l_data_type_code = 'N' THEN -- Num Attribute
4516 IF l_old_rows( idx ).ATTR_VALUE_NUM IS NOT NULL
4517 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4518 THEN
4519 l_merged_row.ATTR_VALUE_NUM := l_old_rows( idx ).ATTR_VALUE_NUM;
4520 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4521 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4522 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4523 END IF;
4524 END CASE;
4525 END IF;
4526
4527 -- Non-special cased
4528 if l_merged_row.ATTR_GROUP_TYPE is null then l_merged_row.ATTR_GROUP_TYPE := l_old_rows( idx ).ATTR_GROUP_TYPE; end if;
4529 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4530 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4531 if l_merged_row.ITEM_CATALOG_GROUP_ID is null then l_merged_row.ITEM_CATALOG_GROUP_ID := l_old_rows( idx ).ITEM_CATALOG_GROUP_ID; end if;
4532 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4533 -- End Generated Code
4534
4535 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4536 FOR i IN 1..l_new_row_idx LOOP
4537 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
4538 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4539 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4540 l_new_rows( i ).SOURCE_SYSTEM_ID);
4541 l_mrow_ix := l_mrow_ix + 1;
4542 l_merged_rows( l_mrow_ix ) := l_merged_row;
4543 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4544 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4545 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4546 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4547 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4548 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4549 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4550 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4551 l_merged_rows( l_mrow_ix ).PK1_VALUE := l_new_rows( i ).PK1_VALUE;
4552 l_merged_rows( l_mrow_ix ).PK2_VALUE := l_new_rows( i ).PK2_VALUE;
4553 l_merged_rows( l_mrow_ix ).PK3_VALUE := l_new_rows( i ).PK3_VALUE;
4554 l_merged_rows( l_mrow_ix ).PK4_VALUE := l_new_rows( i ).PK4_VALUE;
4555 l_merged_rows( l_mrow_ix ).PK5_VALUE := l_new_rows( i ).PK5_VALUE;
4556 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4557 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4558 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4559 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4560 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4561 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4562 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4563 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4564 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4565 END LOOP; -- loop over old rows
4566
4567 IF l_merged_rows IS NOT NULL THEN
4568 -- delete
4569 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4570 FORALL rid_ix IN INDICES OF l_old_rowids
4571 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4572 WHERE ROWID = l_old_rowids( rid_ix );
4573 -- insert
4574 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4575 FORALL row_index IN INDICES OF l_merged_rows
4576 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4577 VALUES l_merged_rows( row_index );
4578 END IF;
4579 END IF; -- ENDS IF l_old_rows.count <> 0
4580
4581 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4582 EXCEPTION WHEN OTHERS THEN
4583 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4584 IF c_target_item_attrs%ISOPEN THEN
4585 CLOSE c_target_item_attrs;
4586 END IF;
4587 RAISE;
4588 END Merge_Item_Attrs_For_Import;
4589
4590 -- Merges Item Revision Attributes
4591 PROCEDURE Merge_Rev_Attrs_For_Import( p_batch_id IN NUMBER
4592 , p_master_org_id IN NUMBER
4593 )
4594 IS
4595 CURSOR c_target_rev_attrs(cp_rev_dl_id NUMBER) IS
4596 SELECT sub.*
4597 , attrs.DATA_TYPE_CODE
4598 FROM
4599 ( SELECT
4600 eiuai.ROWID rid
4601 , COUNT( * ) OVER ( PARTITION BY
4602 ITEM_NUMBER
4603 , ATTR_GROUP_INT_NAME
4604 , ATTR_INT_NAME
4605 , ORGANIZATION_ID
4606 , REVISION
4607 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4608 )
4609 cnt
4610 , RANK() OVER ( ORDER BY
4611 ITEM_NUMBER
4612 , ATTR_GROUP_INT_NAME
4613 , ATTR_INT_NAME
4614 , ORGANIZATION_ID
4615 , REVISION
4616 , NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4617 )
4618 rnk
4619 , eiuai.*
4620 FROM EGO_ITM_USR_ATTR_INTRFC eiuai, EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
4621 WHERE DATA_SET_ID = p_batch_id
4622 AND PROCESS_STATUS = 1
4623 AND ITEM_NUMBER IS NOT NULL
4624 AND ORGANIZATION_ID IS NOT NULL
4625 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4626 AND FL_CTX_EXT.APPLICATION_ID = 431
4627 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
4628 AND FL_CTX_EXT.MULTI_ROW = 'N'
4629 AND EXISTS( SELECT NULL
4630 FROM EGO_ATTR_GROUP_DL A
4631 WHERE A.DATA_LEVEL_ID = cp_rev_dl_id
4632 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
4633 )
4634 ) sub
4635 , EGO_ATTRS_V attrs
4636 WHERE sub.CNT > 1
4637 AND attrs.APPLICATION_ID = 431
4638 AND attrs.ATTR_GROUP_NAME = sub.ATTR_GROUP_INT_NAME
4639 AND attrs.ATTR_NAME = sub.ATTR_INT_NAME
4640 AND attrs.ATTR_GROUP_TYPE = NVL( sub.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
4641 ORDER BY rnk, last_update_date DESC, interface_table_unique_id DESC;
4642
4643 TYPE TARGET_ROWS IS TABLE OF c_target_rev_attrs%ROWTYPE;
4644
4645 l_merged_rows EIUAI_ROWS;
4646 l_new_rows EIUAI_ROWS;
4647 l_merged_row EIUAI_ROW;
4648 l_old_rows TARGET_ROWS;
4649 l_old_rowids UROWID_TABLE;
4650
4651 l_candidate_trans EGO_ITM_USR_ATTR_INTRFC.TRANSACTION_TYPE%TYPE;
4652
4653 l_cur_rank PLS_INTEGER := 0; -- because rank() starts at 1
4654 l_mrow_ix PLS_INTEGER := 0;
4655 l_new_row_idx PLS_INTEGER := 0;
4656 l_rev_dl_id NUMBER;
4657
4658 l_data_type_code EGO_ATTRS_V.DATA_TYPE_CODE%TYPE;
4659
4660 l_proc_log_prefix CONSTANT VARCHAR2(50) := 'Merge_Rev_Attrs_For_Import - ';
4661 BEGIN
4662 Debug_Conc_Log( l_proc_log_prefix || 'Entering' );
4663 Debug_Conc_Log( l_proc_log_prefix || 'Batch ID: ' || p_batch_id );
4664 BEGIN
4665 SELECT DATA_LEVEL_ID INTO l_rev_dl_id
4666 FROM EGO_DATA_LEVEL_B
4667 WHERE ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
4668 AND APPLICATION_ID = 431
4669 AND DATA_LEVEL_NAME = 'ITEM_REVISION_LEVEL';
4670 EXCEPTION WHEN NO_DATA_FOUND THEN
4671 RETURN;
4672 END;
4673 Debug_Conc_Log( l_proc_log_prefix || 'l_rev_dl_id: ' || l_rev_dl_id );
4674
4675 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4676 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
4677 FROM MTL_SYSTEM_ITEMS_KFV
4678 WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
4679 AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
4680 WHERE DATA_SET_ID = p_batch_id
4681 AND PROCESS_STATUS = 1
4682 AND INVENTORY_ITEM_ID IS NOT NULL
4683 AND ITEM_NUMBER IS NULL;
4684
4685 OPEN c_target_rev_attrs(l_rev_dl_id);
4686 FETCH c_target_rev_attrs BULK COLLECT INTO l_old_rows;
4687 CLOSE c_target_rev_attrs;
4688
4689 Debug_Conc_Log( l_proc_log_prefix || 'Total rows requiring merging = ' || l_old_rows.COUNT );
4690 IF 0 <> l_old_rows.COUNT THEN
4691 l_old_rowids := UROWID_TABLE( );
4692 l_old_rowids.EXTEND( l_old_rows.COUNT );
4693
4694 -- process the item-level attrs
4695 FOR idx IN l_old_rows.FIRST .. l_old_rows.LAST LOOP
4696 l_old_rowids( idx ) := l_old_rows( idx ).RID;
4697
4698 IF( l_old_rows( idx ).RNK <> l_cur_rank ) THEN
4699 IF l_new_row_idx > 0 THEN
4700 FOR i IN 1..l_new_row_idx LOOP
4701 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4702 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4703 l_new_rows( i ).SOURCE_SYSTEM_ID);
4704 l_mrow_ix := l_mrow_ix + 1;
4705 l_merged_rows( l_mrow_ix ) := l_merged_row;
4706 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4707 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4708 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4709 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4710 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4711 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4712 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4713 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4714 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4715 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4716 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4717 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4718 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4719 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4720 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4721 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4722 END IF; --IF l_new_row_idx > 0 THEN
4723 l_cur_rank := l_old_rows( idx ).RNK;
4724 l_data_type_code := l_old_rows( idx ).DATA_TYPE_CODE;
4725
4726 Debug_Conc_Log( l_proc_log_prefix || ' Starting new merged row; rank = '|| l_cur_rank );
4727 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4728 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4729 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4730 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4731 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4732 l_old_rows( idx ).ATTR_INT_NAME);
4733 l_new_rows.DELETE;
4734 l_new_row_idx := 1;
4735 l_new_rows( l_new_row_idx ).PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4736 -- initializing l_merged_row . This row will contain the current merged row for an item
4737 l_merged_row := NULL;
4738 l_merged_row.DATA_SET_ID := p_batch_id;
4739 l_merged_row.PROCESS_STATUS := l_old_rows( idx ).PROCESS_STATUS;
4740 ELSE
4741 Debug_Conc_Log( l_proc_log_prefix || ' Merging another record into current merged row; rank = '|| l_cur_rank );
4742 Debug_Conc_Log( l_proc_log_prefix || ' Item, Org-ID, Item-ID, AG-Name, Attr-Name = ' ||
4743 l_old_rows( idx ).ITEM_NUMBER || ', ' ||
4744 l_old_rows( idx ).ORGANIZATION_ID || ', ' ||
4745 l_old_rows( idx ).INVENTORY_ITEM_ID || ', ' ||
4746 l_old_rows( idx ).ATTR_GROUP_INT_NAME || ', ' ||
4747 l_old_rows( idx ).ATTR_INT_NAME);
4748 l_new_row_idx := l_new_row_idx + 1;
4749 l_new_rows( l_new_row_idx ).PROCESS_STATUS := 7;
4750 END IF;
4751
4752 l_new_rows( l_new_row_idx ).DATA_SET_ID := p_batch_id;
4753 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_ID := l_old_rows( idx ).SOURCE_SYSTEM_ID;
4754 l_new_rows( l_new_row_idx ).SOURCE_SYSTEM_REFERENCE := l_old_rows( idx ).SOURCE_SYSTEM_REFERENCE;
4755 l_new_rows( l_new_row_idx ).ATTR_GROUP_INT_NAME := l_old_rows( idx ).ATTR_GROUP_INT_NAME;
4756 l_new_rows( l_new_row_idx ).ATTR_INT_NAME := l_old_rows( idx ).ATTR_INT_NAME;
4757 l_new_rows( l_new_row_idx ).DATA_LEVEL_NAME := l_old_rows( idx ).DATA_LEVEL_NAME;
4758 l_new_rows( l_new_row_idx ).DATA_LEVEL_ID := l_old_rows( idx ).DATA_LEVEL_ID;
4759 l_new_rows( l_new_row_idx ).ROW_IDENTIFIER := l_old_rows( idx ).ROW_IDENTIFIER;
4760 l_new_rows( l_new_row_idx ).CREATED_BY := l_old_rows( idx ).CREATED_BY;
4761 l_new_rows( l_new_row_idx ).LAST_UPDATED_BY := l_old_rows( idx ).LAST_UPDATED_BY;
4762
4763 -- Special Cases:
4764 -- Transaction type
4765 l_candidate_trans := UPPER( l_old_rows( idx ).TRANSACTION_TYPE );
4766
4767 IF l_merged_row.TRANSACTION_TYPE IS NULL
4768 OR l_merged_row.TRANSACTION_TYPE <> l_candidate_trans -- <> filters out nulls
4769 THEN
4770 -- CREATE > SYNC > UPDATE : order of case expression matters
4771 l_merged_row.TRANSACTION_TYPE :=
4772 CASE
4773 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_CREATE
4774 OR l_candidate_trans = G_TRANS_TYPE_CREATE THEN G_TRANS_TYPE_CREATE
4775 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_SYNC
4776 OR l_candidate_trans = G_TRANS_TYPE_SYNC THEN G_TRANS_TYPE_SYNC
4777 WHEN l_merged_row.TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE
4778 OR l_candidate_trans = G_TRANS_TYPE_UPDATE THEN G_TRANS_TYPE_UPDATE
4779 ELSE NULL -- INVALID transaction types encountered so far ...
4780 END;
4781 END IF;
4782
4783
4784 -- The following columns need to be treated as atomic groups
4785 -- 1. Item Identifier
4786 IF l_merged_row.INVENTORY_ITEM_ID IS NULL
4787 AND l_merged_row.ITEM_NUMBER IS NULL
4788 THEN
4789 l_merged_row.INVENTORY_ITEM_ID := l_old_rows( idx ).INVENTORY_ITEM_ID;
4790 l_merged_row.ITEM_NUMBER := l_old_rows( idx ).ITEM_NUMBER;
4791 END IF;
4792
4793 -- 2. Organization
4794 IF l_merged_row.ORGANIZATION_ID IS NULL
4795 AND l_merged_row.ORGANIZATION_CODE IS NULL
4796 THEN
4797 l_merged_row.ORGANIZATION_ID := l_old_rows( idx ).ORGANIZATION_ID ;
4798 l_merged_row.ORGANIZATION_CODE := l_old_rows( idx ).ORGANIZATION_CODE ;
4799 END IF;
4800
4801 -- 3. The attribute value
4802 IF l_merged_row.ATTR_DISP_VALUE IS NULL
4803 AND l_merged_row.ATTR_VALUE_STR IS NULL
4804 AND l_merged_row.ATTR_VALUE_DATE IS NULL
4805 AND l_merged_row.ATTR_VALUE_NUM IS NULL
4806 AND l_merged_row.ATTR_VALUE_UOM IS NULL
4807 AND l_merged_row.ATTR_UOM_DISP_VALUE IS NULL
4808 THEN
4809 CASE
4810 WHEN l_data_type_code = 'C' OR l_data_type_code = 'A' THEN -- String Attribute
4811 IF l_old_rows( idx ).ATTR_VALUE_STR IS NOT NULL
4812 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4813 THEN
4814 l_merged_row.ATTR_VALUE_STR := l_old_rows( idx ).ATTR_VALUE_STR;
4815 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4816 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4817 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4818 END IF;
4819 WHEN l_data_type_code = 'X' or l_data_type_code = 'Y' THEN -- Date Attribute
4820 IF l_old_rows( idx ).ATTR_VALUE_DATE IS NOT NULL
4821 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4822 THEN
4823 l_merged_row.ATTR_VALUE_DATE := l_old_rows( idx ).ATTR_VALUE_DATE;
4824 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4825 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4826 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4827 END IF;
4828 WHEN l_data_type_code = 'N' THEN -- Num Attribute
4829 IF l_old_rows( idx ).ATTR_VALUE_NUM IS NOT NULL
4830 OR l_old_rows( idx ).ATTR_DISP_VALUE IS NOT NULL
4831 THEN
4832 l_merged_row.ATTR_VALUE_NUM := l_old_rows( idx ).ATTR_VALUE_NUM;
4833 l_merged_row.ATTR_DISP_VALUE := l_old_rows( idx ).ATTR_DISP_VALUE;
4834 l_merged_row.ATTR_VALUE_UOM := l_old_rows( idx ).ATTR_VALUE_UOM;
4835 l_merged_row.ATTR_UOM_DISP_VALUE := l_old_rows( idx ).ATTR_UOM_DISP_VALUE;
4836 END IF;
4837 END CASE;
4838 END IF;
4839
4840 -- Non-special cased
4841 if l_merged_row.ATTR_GROUP_TYPE is null then l_merged_row.ATTR_GROUP_TYPE := l_old_rows( idx ).ATTR_GROUP_TYPE; end if;
4842 if l_merged_row.CHANGE_ID is null then l_merged_row.CHANGE_ID := l_old_rows( idx ).CHANGE_ID; end if;
4843 if l_merged_row.CHANGE_LINE_ID is null then l_merged_row.CHANGE_LINE_ID := l_old_rows( idx ).CHANGE_LINE_ID; end if;
4844 if l_merged_row.ITEM_CATALOG_GROUP_ID is null then l_merged_row.ITEM_CATALOG_GROUP_ID := l_old_rows( idx ).ITEM_CATALOG_GROUP_ID; end if;
4845 if l_merged_row.REVISION is null then l_merged_row.REVISION := l_old_rows( idx ).REVISION; end if;
4846 if l_merged_row.REVISION_ID is null then l_merged_row.REVISION_ID := l_old_rows( idx ).REVISION_ID; end if;
4847 if l_merged_row.TRANSACTION_ID is null then l_merged_row.TRANSACTION_ID := l_old_rows( idx ).TRANSACTION_ID; end if;
4848 -- End Generated Code
4849
4850 IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4851 FOR i IN 1..l_new_row_idx LOOP
4852 Debug_Conc_Log( l_proc_log_prefix || ' No More records found for processing.');
4853 Debug_Conc_Log( l_proc_log_prefix || ' Creating merged record for SSR, SS-ID = ' ||
4854 l_new_rows( i ).SOURCE_SYSTEM_REFERENCE || ', ' ||
4855 l_new_rows( i ).SOURCE_SYSTEM_ID);
4856 l_mrow_ix := l_mrow_ix + 1;
4857 l_merged_rows( l_mrow_ix ) := l_merged_row;
4858 l_merged_rows( l_mrow_ix ).DATA_SET_ID := l_new_rows( i ).DATA_SET_ID;
4859 l_merged_rows( l_mrow_ix ).PROCESS_STATUS := l_new_rows( i ).PROCESS_STATUS;
4860 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_ID := l_new_rows( i ).SOURCE_SYSTEM_ID;
4861 l_merged_rows( l_mrow_ix ).SOURCE_SYSTEM_REFERENCE := l_new_rows( i ).SOURCE_SYSTEM_REFERENCE;
4862 l_merged_rows( l_mrow_ix ).ATTR_GROUP_INT_NAME := l_new_rows( i ).ATTR_GROUP_INT_NAME;
4863 l_merged_rows( l_mrow_ix ).ATTR_INT_NAME := l_new_rows( i ).ATTR_INT_NAME;
4864 l_merged_rows( l_mrow_ix ).DATA_LEVEL_NAME := l_new_rows( i ).DATA_LEVEL_NAME;
4865 l_merged_rows( l_mrow_ix ).DATA_LEVEL_ID := l_new_rows( i ).DATA_LEVEL_ID;
4866 l_merged_rows( l_mrow_ix ).ROW_IDENTIFIER := l_new_rows( i ).ROW_IDENTIFIER;
4867 l_merged_rows( l_mrow_ix ).CREATED_BY := l_new_rows( i ).CREATED_BY;
4868 l_merged_rows( l_mrow_ix ).LAST_UPDATED_BY := l_new_rows( i ).LAST_UPDATED_BY;
4869 l_merged_rows( l_mrow_ix ).REQUEST_ID := FND_GLOBAL.CONC_REQUEST_ID;
4870 l_merged_rows( l_mrow_ix ).PROGRAM_APPLICATION_ID := FND_GLOBAL.PROG_APPL_ID;
4871 l_merged_rows( l_mrow_ix ).PROGRAM_ID := FND_GLOBAL.CONC_PROGRAM_ID;
4872 l_merged_rows( l_mrow_ix ).PROGRAM_UPDATE_DATE := SYSDATE;
4873 END LOOP; --FOR i IN 1..l_new_row_idx LOOP
4874 END IF; --IF idx = l_old_rows.LAST AND l_new_row_idx > 0 THEN
4875 END LOOP; -- loop over old rows
4876
4877 IF l_merged_rows IS NOT NULL THEN
4878 -- delete
4879 Debug_Conc_Log( l_proc_log_prefix || l_old_rowids.COUNT || ' old rows ...' );
4880 FORALL rid_ix IN INDICES OF l_old_rowids
4881 DELETE FROM EGO_ITM_USR_ATTR_INTRFC
4882 WHERE ROWID = l_old_rowids( rid_ix );
4883 -- insert
4884 Debug_Conc_Log( l_proc_log_prefix || l_merged_rows.COUNT || ' merged rows ...' );
4885 FORALL row_index IN INDICES OF l_merged_rows
4886 INSERT INTO EGO_ITM_USR_ATTR_INTRFC
4887 VALUES l_merged_rows( row_index );
4888 END IF;
4889 END IF; -- ENDS IF l_old_rows.count <> 0
4890 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
4891 EXCEPTION WHEN OTHERS THEN
4892 Debug_Conc_Log( l_proc_log_prefix || 'Error - ' || SQLERRM);
4893 IF c_target_rev_attrs%ISOPEN THEN
4894 CLOSE c_target_rev_attrs;
4895 END IF;
4896 RAISE;
4897 END Merge_Rev_Attrs_For_Import;
4898
4899 -- Merges all entities in batch
4900 PROCEDURE Merge_Batch_For_Import( p_batch_id IN NUMBER
4901 , p_master_org_id IN NUMBER
4902 )
4903 IS
4904 BEGIN
4905 Merge_Items_For_Import(p_batch_id, p_master_org_id);
4906 Merge_Revs_For_Import(p_batch_id, p_master_org_id);
4907 Merge_Categories_For_Import(p_batch_id, p_master_org_id);
4908 Merge_Item_Attrs_For_Import(p_batch_id, p_master_org_id);
4909 Merge_Rev_Attrs_For_Import(p_batch_id, p_master_org_id);
4910 END Merge_Batch_For_Import;
4911
4912 --=================================================================================================================--
4913 --------------------------------- End of Merging Section for Import -----------------------------------------------
4914 --=================================================================================================================--
4915
4916 /*
4917 * This method is called after all the import is completed
4918 * this will update the process flag of rows with process flag = 111
4919 */
4920 PROCEDURE Demerge_Batch_After_Import(
4921 ERRBUF OUT NOCOPY VARCHAR2
4922 , RETCODE OUT NOCOPY VARCHAR2
4923 , p_batch_id IN NUMBER
4924 )
4925 IS
4926 l_proc_log_prefix VARCHAR2(50) := 'Demerge_Batch_After_Import - ';
4927 BEGIN
4928 Debug_Conc_Log( l_proc_log_prefix || 'Starting ...' );
4929 -- processing items and org assignments
4930 UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
4931 SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4932 (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4933 FROM MTL_SYSTEM_ITEMS_INTERFACE msii_merged
4934 WHERE msii_merged.ITEM_NUMBER = msii.ITEM_NUMBER
4935 AND msii_merged.ORGANIZATION_ID = msii.ORGANIZATION_ID
4936 AND msii_merged.REQUEST_ID = msii.REQUEST_ID
4937 AND msii_merged.SET_PROCESS_ID = msii.SET_PROCESS_ID
4938 AND msii_merged.PROCESS_FLAG <> 111)
4939 WHERE SET_PROCESS_ID = p_batch_id
4940 AND PROCESS_FLAG = 111;
4941
4942 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Items.' );
4943 -- processing item revisions
4944 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
4945 SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4946 (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4947 FROM MTL_ITEM_REVISIONS_INTERFACE miri_merged
4948 WHERE miri_merged.ITEM_NUMBER = miri.ITEM_NUMBER
4949 AND miri_merged.ORGANIZATION_ID = miri.ORGANIZATION_ID
4950 AND miri_merged.REVISION = miri.REVISION
4951 AND miri_merged.REQUEST_ID = miri.REQUEST_ID
4952 AND miri_merged.SET_PROCESS_ID = miri.SET_PROCESS_ID
4953 AND miri_merged.PROCESS_FLAG <> 111)
4954 WHERE SET_PROCESS_ID = p_batch_id
4955 AND PROCESS_FLAG = 111;
4956
4957 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revisions.' );
4958 -- processing category assignments
4959 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
4960 SET (PROCESS_FLAG, INVENTORY_ITEM_ID) =
4961 (SELECT PROCESS_FLAG, INVENTORY_ITEM_ID
4962 FROM MTL_ITEM_CATEGORIES_INTERFACE mici_merged
4963 WHERE mici_merged.ITEM_NUMBER = mici.ITEM_NUMBER
4964 AND mici_merged.ORGANIZATION_ID = mici.ORGANIZATION_ID
4965 AND mici_merged.CATEGORY_SET_NAME = mici.CATEGORY_SET_NAME
4966 AND mici_merged.CATEGORY_NAME = mici.CATEGORY_NAME
4967 AND mici_merged.REQUEST_ID = mici.REQUEST_ID
4968 AND mici_merged.SET_PROCESS_ID = mici.SET_PROCESS_ID
4969 AND mici_merged.PROCESS_FLAG <> 111)
4970 WHERE SET_PROCESS_ID = p_batch_id
4971 AND PROCESS_FLAG = 111;
4972
4973 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Category Assignments.' );
4974 -- processing revision attributes
4975 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4976 SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
4977 (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
4978 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
4979 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
4980 AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
4981 AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
4982 AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
4983 AND NVL(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = NVL(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
4984 AND eiuai_merged.REVISION = eiuai.REVISION
4985 AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
4986 AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
4987 AND eiuai_merged.PROCESS_STATUS <> 7)
4988 WHERE DATA_SET_ID = p_batch_id
4989 AND PROCESS_STATUS = 7
4990 AND REVISION IS NOT NULL;
4991
4992 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Revision attributes.' );
4993 -- processing item attributes
4994 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
4995 SET (PROCESS_STATUS, INVENTORY_ITEM_ID) =
4996 (SELECT PROCESS_STATUS, INVENTORY_ITEM_ID
4997 FROM EGO_ITM_USR_ATTR_INTRFC eiuai_merged
4998 WHERE eiuai_merged.ITEM_NUMBER = eiuai.ITEM_NUMBER
4999 AND eiuai_merged.ORGANIZATION_ID = eiuai.ORGANIZATION_ID
5000 AND eiuai_merged.ATTR_GROUP_INT_NAME = eiuai.ATTR_GROUP_INT_NAME
5001 AND eiuai_merged.ATTR_INT_NAME = eiuai.ATTR_INT_NAME
5002 AND Nvl(eiuai_merged.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP') = Nvl(eiuai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
5003 AND eiuai_merged.REVISION IS NULL
5004 AND eiuai_merged.REQUEST_ID = eiuai.REQUEST_ID
5005 AND eiuai_merged.DATA_SET_ID = eiuai.DATA_SET_ID
5006 AND eiuai_merged.PROCESS_STATUS <> 7)
5007 WHERE DATA_SET_ID = p_batch_id
5008 AND PROCESS_STATUS = 7
5009 AND REVISION IS NULL;
5010
5011 Debug_Conc_Log( l_proc_log_prefix || 'Processed ' || SQL%ROWCOUNT || ' Item attributes.' );
5012
5013 --COMMIT;
5014 Debug_Conc_Log( l_proc_log_prefix || 'Exiting' );
5015 RETCODE := '0';
5016 ERRBUF := NULL;
5017 EXCEPTION WHEN OTHERS THEN
5018 Debug_Conc_Log(l_proc_log_prefix || 'Error - ' || SQLERRM);
5019 RETCODE := '2';
5020 ERRBUF := 'Error in method EGO_IMPORT_PVT.Demerge_Batch_After_Import - '||SQLERRM;
5021 END Demerge_Batch_After_Import;
5022
5023 /*
5024 * This method does a bulkload of GTINs
5025 */
5026 PROCEDURE Process_Gtin_Intf_Rows(ERRBUF OUT NOCOPY VARCHAR2,
5027 RETCODE OUT NOCOPY VARCHAR2,
5028 p_data_set_id IN NUMBER) IS
5029 CURSOR c_intf_rows IS
5030 SELECT
5031 intf.INVENTORY_ITEM_ID,
5032 intf.ORGANIZATION_ID,
5033 intf.ITEM_NUMBER,
5034 intf.ORGANIZATION_CODE,
5035 intf.PRIMARY_UOM_CODE,
5036 intf.GLOBAL_TRADE_ITEM_NUMBER,
5037 intf.GTIN_DESCRIPTION,
5038 intf.TRANSACTION_ID,
5039 c.CROSS_REFERENCE EXISTING_GTIN,
5040 c.DESCRIPTION EXISTING_GTIN_DESC,
5041 c.CROSS_REFERENCE_ID
5042 FROM MTL_SYSTEM_ITEMS_INTERFACE intf, MTL_PARAMETERS p, MTL_CROSS_REFERENCES c
5043 WHERE intf.SET_PROCESS_ID = p_data_set_id
5044 AND intf.ORGANIZATION_ID = p.ORGANIZATION_ID
5045 AND p.ORGANIZATION_ID = p.MASTER_ORGANIZATION_ID
5046 AND intf.PROCESS_FLAG IN (5,7)
5047 AND intf.GLOBAL_TRADE_ITEM_NUMBER IS NOT NULL
5048 AND c.INVENTORY_ITEM_ID(+) = intf.INVENTORY_ITEM_ID
5049 AND c.UOM_CODE(+) = intf.PRIMARY_UOM_CODE
5050 AND intf.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5051 AND c.CROSS_REFERENCE_TYPE(+) = 'GTIN';
5052
5053 l_gtin NUMBER;
5054 l_msg_text VARCHAR2(4000);
5055 dumm_status VARCHAR2(100);
5056 l_user_id NUMBER := FND_GLOBAL.USER_ID;
5057 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
5058 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
5059 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5060 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5061 l_err_text VARCHAR2(4000);
5062 l_error BOOLEAN;
5063 l_rowid ROWID;
5064 l_xref_id NUMBER;
5065 l_existing_gtin VARCHAR2(1000);
5066 l_raise_event BOOLEAN;
5067 l_xref_event_name CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5068 l_msg_data VARCHAR2(4000);
5069 l_return_status VARCHAR2(10);
5070 l_org_id NUMBER;
5071 l_transaction_id NUMBER;
5072 l_priv VARCHAR2(10);
5073 l_party_name VARCHAR2(1000); -- Bug: 5355759
5074 BEGIN
5075 Debug_Conc_Log('Starting Process_Gtin_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5076 l_raise_event := FALSE;
5077 l_party_name := Get_Current_Party_Name; -- Bug: 5355759
5078 FOR i IN c_intf_rows LOOP
5079 Debug_Conc_Log('Processing for Item, Org='||TO_CHAR(i.INVENTORY_ITEM_ID)||', '||TO_CHAR(i.ORGANIZATION_ID));
5080 -- checking the edit cross reference privilege for creating GTIN xref.
5081 --l_priv := EGO_ITEM_AML_PUB.Check_No_AML_Priv(1.0, i.INVENTORY_ITEM_ID, i.ORGANIZATION_ID, 'EGO_EDIT_ITEM_XREFS', NULL, NULL);
5082 l_priv := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_ITEM_XREFS', 'EGO_ITEM', i.INVENTORY_ITEM_ID, i.ORGANIZATION_ID, NULL, NULL, NULL, l_party_name);
5083
5084 IF NVL(l_priv, 'F') <> 'T' THEN
5085 Debug_Conc_Log('No Edit Cross Reference Privilege on item');
5086 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
5087 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
5088 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
5089 l_msg_text := FND_MESSAGE.GET;
5090
5091 dumm_status := INVPUOPI.mtl_log_interface_err(
5092 i.ORGANIZATION_ID
5093 ,l_user_id
5094 ,l_login_id
5095 ,l_prog_appid
5096 ,l_prog_id
5097 ,l_request_id
5098 ,i.TRANSACTION_ID
5099 ,l_msg_text
5100 ,'GLOBAL_TRADE_ITEM_NUMBER'
5101 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5102 ,'INV_IOI_ERR'
5103 ,l_err_text);
5104 ELSE
5105 Debug_Conc_Log('Edit Cross Reference Privilege is present on item');
5106 -- validating the GTIN
5107 IF i.EXISTING_GTIN IS NULL THEN
5108 Debug_Conc_Log('No Existing GTIN found');
5109 Debug_Conc_Log('Validating GTIN-'||i.GLOBAL_TRADE_ITEM_NUMBER);
5110 --1. validating GTIN is number or not
5111 l_error := FALSE;
5112 l_msg_text := NULL;
5113 BEGIN
5114 l_gtin := TO_NUMBER(i.GLOBAL_TRADE_ITEM_NUMBER);
5115 EXCEPTION WHEN VALUE_ERROR THEN
5116 Debug_Conc_Log('Validation Failed - GTIN is not a Number');
5117 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_NOT_NUMBER');
5118 dumm_status := INVPUOPI.mtl_log_interface_err(
5119 i.ORGANIZATION_ID
5120 ,l_user_id
5121 ,l_login_id
5122 ,l_prog_appid
5123 ,l_prog_id
5124 ,l_request_id
5125 ,i.TRANSACTION_ID
5126 ,l_msg_text
5127 ,'GLOBAL_TRADE_ITEM_NUMBER'
5128 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5129 ,'INV_IOI_ERR'
5130 ,l_err_text);
5131 l_error := TRUE;
5132 END;
5133
5134 --2. validating the length of GTIN to be 14
5135 IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER) <> 14 THEN
5136 Debug_Conc_Log('Validation Failed - Length is not 14 chars');
5137 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LENGTH_NOT_CORRECT');
5138 dumm_status := INVPUOPI.mtl_log_interface_err(
5139 i.ORGANIZATION_ID
5140 ,l_user_id
5141 ,l_login_id
5142 ,l_prog_appid
5143 ,l_prog_id
5144 ,l_request_id
5145 ,i.TRANSACTION_ID
5146 ,l_msg_text
5147 ,'GLOBAL_TRADE_ITEM_NUMBER'
5148 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5149 ,'INV_IOI_ERR'
5150 ,l_err_text);
5151 l_error := TRUE;
5152 END IF; --end IF LENGTH(i.GLOBAL_TRADE_ITEM_NUMBER
5153
5154 --3. validating the check digit of GTIN to be valid
5155 IF (NOT l_error) AND EGO_GTIN_ATTRS_PVT.Is_Check_Digit_Invalid(i.GLOBAL_TRADE_ITEM_NUMBER) THEN
5156 Debug_Conc_Log('Validation Failed - Check digit is not valid');
5157 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_CHECKDIGIT_INVALID');
5158 dumm_status := INVPUOPI.mtl_log_interface_err(
5159 i.ORGANIZATION_ID
5160 ,l_user_id
5161 ,l_login_id
5162 ,l_prog_appid
5163 ,l_prog_id
5164 ,l_request_id
5165 ,i.TRANSACTION_ID
5166 ,l_msg_text
5167 ,'GLOBAL_TRADE_ITEM_NUMBER'
5168 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5169 ,'INV_IOI_ERR'
5170 ,l_err_text);
5171 l_error := TRUE;
5172 END IF; --end IF (NOT l_error) AND
5173
5174 --4. gtin can not contain more than six leading zeros
5175 IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 7) = '0000000' THEN
5176 Debug_Conc_Log('Validation Failed - gtin can not contain more than six leading zeros');
5177 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_LEADING_ZERO_INVALID');
5178 dumm_status := INVPUOPI.mtl_log_interface_err(
5179 i.ORGANIZATION_ID
5180 ,l_user_id
5181 ,l_login_id
5182 ,l_prog_appid
5183 ,l_prog_id
5184 ,l_request_id
5185 ,i.TRANSACTION_ID
5186 ,l_msg_text
5187 ,'GLOBAL_TRADE_ITEM_NUMBER'
5188 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5189 ,'INV_IOI_ERR'
5190 ,l_err_text);
5191 l_error := TRUE;
5192 END IF;
5193
5194 -- 5. The third digit from the left contained in a GTIN must be 0,1,3,6,7,8,9 when the second digit from the left is 0
5195 IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 1) = '0' AND
5196 SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 3, 1) NOT IN ('0', '1', '3', '6', '7', '8', '9') THEN
5197 Debug_Conc_Log('Validation Failed - The third digit from the left contained in a GTIN must be 0,1,3,6,7,8,9 when the second digit from the left is 0 ');
5198 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_THIRD_DIGIT_INVALID');
5199 dumm_status := INVPUOPI.mtl_log_interface_err(
5200 i.ORGANIZATION_ID
5201 ,l_user_id
5202 ,l_login_id
5203 ,l_prog_appid
5204 ,l_prog_id
5205 ,l_request_id
5206 ,i.TRANSACTION_ID
5207 ,l_msg_text
5208 ,'GLOBAL_TRADE_ITEM_NUMBER'
5209 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5210 ,'INV_IOI_ERR'
5211 ,l_err_text);
5212 l_error := TRUE;
5213 END IF;
5214
5215 -- 6. If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968
5216 IF (NOT l_error) AND SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 6) = '000000' AND
5217 TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 7, 3)) NOT BETWEEN 301 AND 968 THEN
5218 Debug_Conc_Log('Validation Failed - If a GTIN in a RCI message has six leading zeros, digits 7-9 must be between 301-968');
5219 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_7TO9DIGIT_INVALID');
5220 dumm_status := INVPUOPI.mtl_log_interface_err(
5221 i.ORGANIZATION_ID
5222 ,l_user_id
5223 ,l_login_id
5224 ,l_prog_appid
5225 ,l_prog_id
5226 ,l_request_id
5227 ,i.TRANSACTION_ID
5228 ,l_msg_text
5229 ,'GLOBAL_TRADE_ITEM_NUMBER'
5230 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5231 ,'INV_IOI_ERR'
5232 ,l_err_text);
5233 l_error := TRUE;
5234 END IF;
5235
5236 -- 7. GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits
5237 IF SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 1, 3) IN ('098', '099') THEN
5238 Debug_Conc_Log('Validation Failed - GTINs submitted in RCI messages cannot contain values 0980-0989 or 099 in the first 4 digits');
5239 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_0TO4_DIGIT_INVALID');
5240 dumm_status := INVPUOPI.mtl_log_interface_err(
5241 i.ORGANIZATION_ID
5242 ,l_user_id
5243 ,l_login_id
5244 ,l_prog_appid
5245 ,l_prog_id
5246 ,l_request_id
5247 ,i.TRANSACTION_ID
5248 ,l_msg_text
5249 ,'GLOBAL_TRADE_ITEM_NUMBER'
5250 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5251 ,'INV_IOI_ERR'
5252 ,l_err_text);
5253 l_error := TRUE;
5254 END IF;
5255
5256 -- 8. GTINs submitted in RCI messages cannot contain values 02, 04, 05, and 10-29 in the second and third digits from the left
5257 IF (NOT l_error) AND (SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2) IN ('02', '04', '05') OR
5258 TO_NUMBER(SUBSTR(i.GLOBAL_TRADE_ITEM_NUMBER, 2, 2)) BETWEEN 10 AND 29) THEN
5259 Debug_Conc_Log('Validation Failed - GTINs submitted in RCI messages cannot contain values 02, 04, 05, and 10-29 in the second and third digits from the left');
5260 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET_STRING('EGO', 'EGO_GTIN_2TO3_DIGIT_INVALID');
5261 dumm_status := INVPUOPI.mtl_log_interface_err(
5262 i.ORGANIZATION_ID
5263 ,l_user_id
5264 ,l_login_id
5265 ,l_prog_appid
5266 ,l_prog_id
5267 ,l_request_id
5268 ,i.TRANSACTION_ID
5269 ,l_msg_text
5270 ,'GLOBAL_TRADE_ITEM_NUMBER'
5271 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5272 ,'INV_IOI_ERR'
5273 ,l_err_text);
5274 l_error := TRUE;
5275 END IF;
5276
5277 -- checking for duplicate GTIN
5278 IF NOT l_error THEN
5279 BEGIN
5280 SELECT CONCATENATED_SEGMENTS INTO l_existing_gtin
5281 FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_CROSS_REFERENCES_B mcr, MTL_PARAMETERS mp
5282 WHERE msik.INVENTORY_ITEM_ID = mcr.INVENTORY_ITEM_ID
5283 AND msik.ORGANIZATION_ID = mp.ORGANIZATION_ID
5284 AND mp.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
5285 AND mcr.CROSS_REFERENCE_TYPE = 'GTIN'
5286 AND mcr.CROSS_REFERENCE = i.GLOBAL_TRADE_ITEM_NUMBER
5287 AND mcr.UOM_CODE = msik.PRIMARY_UOM_CODE
5288 AND ROWNUM = 1;
5289
5290 Debug_Conc_Log('Validation Failed - duplicate GTIN');
5291 FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_EXISTS_WITH_PACKITEM');
5292 FND_MESSAGE.Set_Token('GTIN', i.GLOBAL_TRADE_ITEM_NUMBER);
5293 FND_MESSAGE.Set_Token('PACK_ITEM', l_existing_gtin);
5294 FND_MESSAGE.Set_Token('UOM', i.PRIMARY_UOM_CODE);
5295 l_msg_text := i.GLOBAL_TRADE_ITEM_NUMBER ||' - '||FND_MESSAGE.GET;
5296 dumm_status := INVPUOPI.mtl_log_interface_err(
5297 i.ORGANIZATION_ID
5298 ,l_user_id
5299 ,l_login_id
5300 ,l_prog_appid
5301 ,l_prog_id
5302 ,l_request_id
5303 ,i.TRANSACTION_ID
5304 ,l_msg_text
5305 ,'GLOBAL_TRADE_ITEM_NUMBER'
5306 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5307 ,'INV_IOI_ERR'
5308 ,l_err_text);
5309 l_error := TRUE;
5310 EXCEPTION WHEN NO_DATA_FOUND THEN
5311 NULL;
5312 END;
5313 END IF; -- checking for duplicate GTIN
5314 -- if no errors then creating a GTIN
5315 IF NOT l_error THEN
5316 Debug_Conc_Log('No Errors - Creating GTIN');
5317 MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5318 P_SOURCE_SYSTEM_ID => NULL,
5319 P_START_DATE_ACTIVE => NULL,
5320 P_END_DATE_ACTIVE => NULL,
5321 P_OBJECT_VERSION_NUMBER => NULL,
5322 P_UOM_CODE => i.PRIMARY_UOM_CODE,
5323 P_REVISION_ID => NULL,
5324 P_EPC_GTIN_SERIAL => NULL,
5325 P_INVENTORY_ITEM_ID => i.INVENTORY_ITEM_ID,
5326 P_ORGANIZATION_ID => NULL,
5327 P_CROSS_REFERENCE_TYPE => 'GTIN',
5328 P_CROSS_REFERENCE => i.GLOBAL_TRADE_ITEM_NUMBER,
5329 P_ORG_INDEPENDENT_FLAG => 'Y',
5330 P_REQUEST_ID => l_request_id,
5331 P_ATTRIBUTE1 => NULL,
5332 P_ATTRIBUTE2 => NULL,
5333 P_ATTRIBUTE3 => NULL,
5334 P_ATTRIBUTE4 => NULL,
5335 P_ATTRIBUTE5 => NULL,
5336 P_ATTRIBUTE6 => NULL,
5337 P_ATTRIBUTE7 => NULL,
5338 P_ATTRIBUTE8 => NULL,
5339 P_ATTRIBUTE9 => NULL,
5340 P_ATTRIBUTE10 => NULL,
5341 P_ATTRIBUTE11 => NULL,
5342 P_ATTRIBUTE12 => NULL,
5343 P_ATTRIBUTE13 => NULL,
5344 P_ATTRIBUTE14 => NULL,
5345 P_ATTRIBUTE15 => NULL,
5346 P_ATTRIBUTE_CATEGORY => NULL,
5347 P_DESCRIPTION => i.GTIN_DESCRIPTION,
5348 P_CREATION_DATE => SYSDATE,
5349 P_CREATED_BY => l_user_id,
5350 P_LAST_UPDATE_DATE => SYSDATE,
5351 P_LAST_UPDATED_BY => l_user_id,
5352 P_LAST_UPDATE_LOGIN => l_login_id,
5353 P_PROGRAM_APPLICATION_ID => l_prog_appid,
5354 P_PROGRAM_ID => l_prog_id,
5355 P_PROGRAM_UPDATE_DATE => SYSDATE,
5356 X_CROSS_REFERENCE_ID => l_xref_id);
5357
5358 Debug_Conc_Log('Done Creating GTIN');
5359 l_raise_event := TRUE;
5360 l_transaction_id := i.TRANSACTION_ID;
5361 l_org_id := i.ORGANIZATION_ID;
5362 END IF; -- end IF NOT l_error
5363 ELSIF i.EXISTING_GTIN IS NOT NULL THEN
5364 IF i.GTIN_DESCRIPTION IS NOT NULL
5365 AND ( ( i.EXISTING_GTIN_DESC <> i.GTIN_DESCRIPTION)
5366 OR (i.EXISTING_GTIN_DESC IS NULL AND i.GTIN_DESCRIPTION IS NOT NULL)
5367 )
5368 THEN
5369 Debug_Conc_Log('Existing GTIN found. Description needs to be updated.');
5370 UPDATE MTL_CROSS_REFERENCES_TL
5371 SET DESCRIPTION = i.GTIN_DESCRIPTION,
5372 LAST_UPDATE_DATE = SYSDATE,
5373 LAST_UPDATED_BY = l_user_id,
5374 LAST_UPDATE_LOGIN = l_login_id,
5375 SOURCE_LANG = USERENV('LANG')
5376 WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5377 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5378
5379 Debug_Conc_Log('Description updated for GTIN='||i.EXISTING_GTIN);
5380 l_raise_event := TRUE;
5381 l_transaction_id := i.TRANSACTION_ID;
5382 l_org_id := i.ORGANIZATION_ID;
5383 END IF; -- IF i.GTIN_DESCRIPTION IS NOT NULL
5384
5385 -- BUG 5549140 - Adding validation that existing GTIN can not be changed
5386 IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5387 Debug_Conc_Log('GTIN can not be updated');
5388 FND_MESSAGE.Set_Name('EGO', 'EGO_GTIN_NOT_UPDATEABLE');
5389 l_msg_text := FND_MESSAGE.GET;
5390 dumm_status := INVPUOPI.mtl_log_interface_err(
5391 i.ORGANIZATION_ID
5392 ,l_user_id
5393 ,l_login_id
5394 ,l_prog_appid
5395 ,l_prog_id
5396 ,l_request_id
5397 ,i.TRANSACTION_ID
5398 ,l_msg_text
5399 ,'GLOBAL_TRADE_ITEM_NUMBER'
5400 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5401 ,'INV_IOI_ERR'
5402 ,l_err_text);
5403 END IF; -- IF i.EXISTING_GTIN <> i.GLOBAL_TRADE_ITEM_NUMBER THEN
5404
5405 END IF; -- IF i.EXISTING_GTIN IS NULL THEN
5406 END IF; -- IF NVL(l_priv, 'Y') = 'Y' THEN
5407 END LOOP;
5408
5409 IF l_raise_event THEN
5410 Debug_Conc_Log('Raising business event');
5411 EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5412 p_event_name => l_xref_event_name,
5413 p_request_id => l_request_id,
5414 x_msg_data => l_msg_data,
5415 x_return_status => l_return_status);
5416
5417 Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5418 Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5419 IF l_return_status <> 'S' THEN
5420 l_msg_text := SUBSTR('Error in raising business event for GTIN Cross References - '||l_msg_data, 4000);
5421 dumm_status := INVPUOPI.mtl_log_interface_err(
5422 l_org_id
5423 ,l_user_id
5424 ,l_login_id
5425 ,l_prog_appid
5426 ,l_prog_id
5427 ,l_request_id
5428 ,l_transaction_id
5429 ,l_msg_text
5430 ,'GLOBAL_TRADE_ITEM_NUMBER'
5431 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5432 ,'INV_IOI_ERR'
5433 ,l_err_text);
5434 END IF;
5435 END IF;
5436
5437 COMMIT;
5438 RETCODE := '0';
5439 ERRBUF := NULL;
5440 Debug_Conc_Log('Done Process_Gtin_Intf_Rows with success');
5441 EXCEPTION WHEN OTHERS THEN
5442 Debug_Conc_Log('Done Process_Gtin_Intf_Rows with error - '||SQLERRM);
5443 RETCODE := '2';
5444 ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_Gtin_Intf_Rows - '||SQLERRM;
5445 END Process_Gtin_Intf_Rows;
5446
5447 /*
5448 * Private method to process Source System item cross reference
5449 */
5450 FUNCTION Process_SSXref_Pvt(p_source_system_id IN NUMBER,
5451 p_source_system_reference IN VARCHAR2,
5452 p_source_system_reference_desc IN VARCHAR2,
5453 p_inventory_item_id IN NUMBER)
5454 RETURN BOOLEAN
5455 IS
5456 l_rowid ROWID;
5457 l_xref_id NUMBER;
5458 l_user_id NUMBER := FND_GLOBAL.USER_ID;
5459 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
5460 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
5461 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5462 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5463 l_raise_event BOOLEAN;
5464 l_msg_data VARCHAR2(4000);
5465 l_return_status VARCHAR2(10);
5466 l_msg_text VARCHAR2(4000);
5467 l_err_text VARCHAR2(4000);
5468 dumm_status NUMBER;
5469 l_item_id NUMBER;
5470 BEGIN
5471 Debug_Conc_Log('In Process_SSXref_Pvt begin');
5472 l_raise_event := FALSE;
5473 -- if a cross reference already exists for the source system item, then end dating it
5474 BEGIN
5475 SELECT ROWID, INVENTORY_ITEM_ID INTO l_rowid, l_item_id
5476 FROM MTL_CROSS_REFERENCES_B mcr
5477 WHERE mcr.SOURCE_SYSTEM_ID = p_source_system_id
5478 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5479 AND mcr.CROSS_REFERENCE = p_source_system_reference
5480 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5481
5482 Debug_Conc_Log('Existing Xref found l_item_id='||to_char(l_item_id));
5483 IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5484 Debug_Conc_Log('Updating the existing SS Xref, end dating');
5485 UPDATE MTL_CROSS_REFERENCES_B
5486 SET
5487 END_DATE_ACTIVE = SYSDATE,
5488 LAST_UPDATED_BY = l_user_id,
5489 LAST_UPDATE_DATE = SYSDATE,
5490 LAST_UPDATE_LOGIN = l_login_id,
5491 PROGRAM_APPLICATION_ID = l_prog_appid,
5492 PROGRAM_ID = l_prog_id,
5493 REQUEST_ID = l_request_id,
5494 PROGRAM_UPDATE_DATE = SYSDATE
5495 WHERE ROWID = l_rowid;
5496 Debug_Conc_Log('Done Updating the existing SS Xref, end dating');
5497 l_raise_event := TRUE;
5498 END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5499 EXCEPTION WHEN NO_DATA_FOUND THEN
5500 Debug_Conc_Log('No Existing SS Xref Found');
5501 l_item_id := -1;
5502 NULL;
5503 END;
5504
5505 IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5506 -- calling MTL_CROSS_REFERENCES_B table handler to insert rows
5507 Debug_Conc_Log('Creating SS Xref');
5508 MTL_CROSS_REFERENCES_PKG.INSERT_ROW(
5509 P_SOURCE_SYSTEM_ID => p_source_system_id,
5510 P_START_DATE_ACTIVE => SYSDATE,
5511 P_END_DATE_ACTIVE => NULL,
5512 P_OBJECT_VERSION_NUMBER => NULL,
5513 P_UOM_CODE => NULL,
5514 P_REVISION_ID => NULL,
5515 P_EPC_GTIN_SERIAL => NULL,
5516 P_INVENTORY_ITEM_ID => p_inventory_item_id,
5517 P_ORGANIZATION_ID => NULL,
5518 P_CROSS_REFERENCE_TYPE => 'SS_ITEM_XREF',
5519 P_CROSS_REFERENCE => p_source_system_reference,
5520 P_ORG_INDEPENDENT_FLAG => 'Y',
5521 P_REQUEST_ID => l_request_id,
5522 P_ATTRIBUTE1 => NULL,
5523 P_ATTRIBUTE2 => NULL,
5524 P_ATTRIBUTE3 => NULL,
5525 P_ATTRIBUTE4 => NULL,
5526 P_ATTRIBUTE5 => NULL,
5527 P_ATTRIBUTE6 => NULL,
5528 P_ATTRIBUTE7 => NULL,
5529 P_ATTRIBUTE8 => NULL,
5530 P_ATTRIBUTE9 => NULL,
5531 P_ATTRIBUTE10 => NULL,
5532 P_ATTRIBUTE11 => NULL,
5533 P_ATTRIBUTE12 => NULL,
5534 P_ATTRIBUTE13 => NULL,
5535 P_ATTRIBUTE14 => NULL,
5536 P_ATTRIBUTE15 => NULL,
5537 P_ATTRIBUTE_CATEGORY => NULL,
5538 P_DESCRIPTION => p_source_system_reference_desc,
5539 P_CREATION_DATE => SYSDATE,
5540 P_CREATED_BY => l_user_id,
5541 P_LAST_UPDATE_DATE => SYSDATE,
5542 P_LAST_UPDATED_BY => l_user_id,
5543 P_LAST_UPDATE_LOGIN => l_login_id,
5544 P_PROGRAM_APPLICATION_ID => l_prog_appid,
5545 P_PROGRAM_ID => l_prog_id,
5546 P_PROGRAM_UPDATE_DATE => SYSDATE,
5547 X_CROSS_REFERENCE_ID => l_xref_id);
5548
5549 l_raise_event := TRUE;
5550 END IF; --IF p_inventory_item_id <> NVL(l_item_id, -1) THEN
5551 Debug_Conc_Log('Done Process_SSXref_Pvt');
5552 RETURN l_raise_event;
5553 END Process_SSXref_Pvt;
5554
5555 /*
5556 * This method Bulk Loads the Source system cross references
5557 */
5558 PROCEDURE Process_SSXref_Intf_Rows(ERRBUF OUT NOCOPY VARCHAR2,
5559 RETCODE OUT NOCOPY VARCHAR2,
5560 p_data_set_id IN NUMBER) IS
5561 CURSOR c_intf_rows IS
5562 SELECT
5563 SOURCE_SYSTEM_ID,
5564 SOURCE_SYSTEM_REFERENCE,
5565 SOURCE_SYSTEM_REFERENCE_DESC,
5566 INVENTORY_ITEM_ID,
5567 ORGANIZATION_ID,
5568 TRANSACTION_ID,
5569 TRANSACTION_TYPE
5570 FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5571 WHERE msi.PROCESS_FLAG IN (5, 7)
5572 AND msi.SET_PROCESS_ID = p_data_set_id
5573 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5574 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5575 AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5576 AND NOT EXISTS (SELECT NULL
5577 FROM MTL_CROSS_REFERENCES_B mcr
5578 WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5579 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5580 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5581 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5582 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5583
5584 -- Bug: 4752861
5585 CURSOR c_intf_existing_rows IS
5586 SELECT
5587 msi.SOURCE_SYSTEM_ID,
5588 msi.SOURCE_SYSTEM_REFERENCE,
5589 msi.SOURCE_SYSTEM_REFERENCE_DESC,
5590 msi.INVENTORY_ITEM_ID,
5591 msi.ORGANIZATION_ID,
5592 msi.TRANSACTION_ID,
5593 msi.TRANSACTION_TYPE,
5594 mcr.CROSS_REFERENCE_ID
5595 FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5596 WHERE msi.PROCESS_FLAG IN (5, 7)
5597 AND msi.SET_PROCESS_ID = p_data_set_id
5598 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5599 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5600 AND msi.REQUEST_ID = FND_GLOBAL.CONC_REQUEST_ID
5601 AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5602 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5603 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5604 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5605 AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5606 AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5607 AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5608 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5609
5610 -- Bug: 5262421 - Introducing 11 as new process_status. When user chooses to re-import and Import Only Cross References
5611 -- is true, then we move the status of MSII record to 11, so that it will not be picked up by any other IOI program
5612 -- running with option "Process All Batch". So while creating Xrefs, we will also pick up records with process_status = 11
5613 CURSOR c_unprcd_intf_rows IS
5614 SELECT
5615 SOURCE_SYSTEM_ID,
5616 SOURCE_SYSTEM_REFERENCE,
5617 SOURCE_SYSTEM_REFERENCE_DESC,
5618 INVENTORY_ITEM_ID,
5619 ITEM_NUMBER,
5620 ORGANIZATION_ID,
5621 TRANSACTION_ID,
5622 TRANSACTION_TYPE,
5623 ROWID AS ROW_ID
5624 FROM MTL_SYSTEM_ITEMS_INTERFACE msi
5625 WHERE msi.PROCESS_FLAG IN (0, 11)
5626 AND msi.SET_PROCESS_ID = p_data_set_id
5627 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5628 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5629 AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5630 AND NOT EXISTS (SELECT NULL
5631 FROM MTL_CROSS_REFERENCES_B mcr
5632 WHERE mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5633 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5634 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5635 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5636 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE));
5637
5638 -- Bug: 4752861
5639 CURSOR c_unprcd_intf_existing_rows IS
5640 SELECT
5641 msi.SOURCE_SYSTEM_ID,
5642 msi.SOURCE_SYSTEM_REFERENCE,
5643 msi.SOURCE_SYSTEM_REFERENCE_DESC,
5644 msi.INVENTORY_ITEM_ID,
5645 msi.ITEM_NUMBER,
5646 msi.ORGANIZATION_ID,
5647 msi.TRANSACTION_ID,
5648 msi.TRANSACTION_TYPE,
5649 mcr.CROSS_REFERENCE_ID,
5650 msi.ROWID AS ROW_ID
5651 FROM MTL_SYSTEM_ITEMS_INTERFACE msi, MTL_CROSS_REFERENCES mcr
5652 WHERE msi.PROCESS_FLAG IN (0, 11)
5653 AND msi.SET_PROCESS_ID = p_data_set_id
5654 AND msi.SOURCE_SYSTEM_ID IS NOT NULL
5655 AND msi.SOURCE_SYSTEM_REFERENCE IS NOT NULL
5656 AND msi.CONFIRM_STATUS IN ('CM', 'CC')
5657 AND mcr.SOURCE_SYSTEM_ID = msi.SOURCE_SYSTEM_ID
5658 AND mcr.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
5659 AND mcr.CROSS_REFERENCE = msi.SOURCE_SYSTEM_REFERENCE
5660 AND mcr.INVENTORY_ITEM_ID = msi.INVENTORY_ITEM_ID
5661 AND msi.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL
5662 AND NVL(mcr.DESCRIPTION, msi.SOURCE_SYSTEM_REFERENCE_DESC||'##') <> msi.SOURCE_SYSTEM_REFERENCE_DESC
5663 AND UPPER(msi.TRANSACTION_TYPE) <> 'CREATE'
5664 AND (mcr.END_DATE_ACTIVE IS NULL OR mcr.END_DATE_ACTIVE > SYSDATE);
5665
5666 l_xref_event_name CONSTANT VARCHAR2(100) := 'oracle.apps.ego.item.postXrefChange';
5667 l_ss_id NUMBER;
5668 l_raise_event BOOLEAN;
5669 l_raise_bus_event BOOLEAN;
5670 l_user_id NUMBER := FND_GLOBAL.USER_ID;
5671 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
5672 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
5673 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
5674 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
5675 l_msg_data VARCHAR2(4000);
5676 l_err_text VARCHAR2(4000);
5677 l_return_status VARCHAR2(10);
5678 l_msg_text VARCHAR2(4000);
5679 dumm_status NUMBER;
5680 l_org_id NUMBER;
5681
5682 l_import_xref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
5683 l_inventory_item_id MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
5684 l_transaction_id MTL_SYSTEM_ITEMS_INTERFACE.TRANSACTION_ID%TYPE;
5685 BEGIN
5686 Debug_Conc_Log('Starting Process_SSXref_Intf_Rows for batch_id='||TO_CHAR(p_data_set_id));
5687 BEGIN
5688 SELECT b.SOURCE_SYSTEM_ID, NVL(opt.IMPORT_XREF_ONLY, 'N')
5689 INTO l_ss_id, l_import_xref_only
5690 FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
5691 WHERE b.BATCH_ID = p_data_set_id
5692 AND b.BATCH_ID = opt.BATCH_ID;
5693 EXCEPTION WHEN NO_DATA_FOUND THEN
5694 l_ss_id := get_pdh_source_system_id;
5695 l_import_xref_only := 'N';
5696 END;
5697
5698 IF l_ss_id = get_pdh_source_system_id THEN
5699 Debug_Conc_Log('Batch is a PDH batch, so returning');
5700 RETCODE := '0';
5701 ERRBUF := NULL;
5702 RETURN;
5703 END IF;
5704
5705 l_raise_bus_event := FALSE;
5706 IF l_import_xref_only = 'Y' THEN
5707 Debug_Conc_Log('Import Only Cross References is TRUE');
5708 Debug_Conc_Log('Updating the Source System Description');
5709 FOR i IN c_unprcd_intf_existing_rows LOOP
5710 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5711 l_inventory_item_id := i.INVENTORY_ITEM_ID;
5712
5713 IF l_inventory_item_id IS NOT NULL THEN
5714 UPDATE MTL_CROSS_REFERENCES_TL
5715 SET DESCRIPTION = i.SOURCE_SYSTEM_REFERENCE_DESC,
5716 LAST_UPDATE_DATE = SYSDATE,
5717 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
5718 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5719 SOURCE_LANG = USERENV('LANG')
5720 WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5721 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5722
5723 l_raise_bus_event := TRUE;
5724 l_transaction_id := i.TRANSACTION_ID;
5725 l_org_id := i.ORGANIZATION_ID;
5726
5727 -- Bug: 5262421
5728 -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5729 -- so that they appear correctly in the Imported tab
5730 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5731 SET PROCESS_FLAG = 7,
5732 TRANSACTION_TYPE = 'UPDATE',
5733 PROGRAM_APPLICATION_ID = l_prog_appid,
5734 PROGRAM_ID = l_prog_id,
5735 REQUEST_ID = l_request_id,
5736 PROGRAM_UPDATE_DATE = SYSDATE
5737 WHERE ROWID = i.ROW_ID;
5738
5739 UPDATE EGO_ITM_USR_ATTR_INTRFC
5740 SET PROCESS_STATUS = 4,
5741 PROGRAM_APPLICATION_ID = l_prog_appid,
5742 PROGRAM_ID = l_prog_id,
5743 REQUEST_ID = l_request_id,
5744 PROGRAM_UPDATE_DATE = SYSDATE
5745 WHERE DATA_SET_ID = p_data_set_id
5746 AND PROCESS_STATUS = 0
5747 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5748 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5749
5750 UPDATE EGO_AML_INTF
5751 SET PROCESS_FLAG = 7,
5752 PROGRAM_APPLICATION_ID = l_prog_appid,
5753 PROGRAM_ID = l_prog_id,
5754 REQUEST_ID = l_request_id,
5755 PROGRAM_UPDATE_DATE = SYSDATE
5756 WHERE DATA_SET_ID = p_data_set_id
5757 AND PROCESS_FLAG = 0
5758 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5759 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5760 ELSE
5761 Debug_Conc_Log('Inventory Item ID is NULL');
5762 END IF; --IF l_inventory_item_id IS NOT NULL THEN
5763 END LOOP; --FOR i IN c_unprcd_intf_existing_rows LOOP
5764 Debug_Conc_Log('Done Updating the Source System Description');
5765
5766 Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5767 FOR i IN c_unprcd_intf_rows LOOP
5768 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5769 IF i.INVENTORY_ITEM_ID IS NULL THEN
5770 BEGIN
5771 SELECT INVENTORY_ITEM_ID INTO l_inventory_item_id
5772 FROM MTL_SYSTEM_ITEMS_B_KFV
5773 WHERE CONCATENATED_SEGMENTS = i.ITEM_NUMBER
5774 AND ORGANIZATION_ID = i.ORGANIZATION_ID;
5775 EXCEPTION WHEN NO_DATA_FOUND THEN
5776 Debug_Conc_Log('Inventory Item Id is NULL and no Matching Item found for Item Number-'||i.ITEM_NUMBER);
5777 l_inventory_item_id := NULL;
5778 END;
5779 ELSE
5780 l_inventory_item_id := i.INVENTORY_ITEM_ID;
5781 END IF; --IF i.INVENTORY_ITEM_ID IS NULL THEN
5782
5783 IF l_inventory_item_id IS NOT NULL THEN
5784 l_raise_event := Process_SSXref_Pvt(
5785 p_source_system_id => i.SOURCE_SYSTEM_ID,
5786 p_source_system_reference => i.SOURCE_SYSTEM_REFERENCE,
5787 p_source_system_reference_desc => i.SOURCE_SYSTEM_REFERENCE_DESC,
5788 p_inventory_item_id => l_inventory_item_id);
5789 IF l_raise_event THEN
5790 l_raise_bus_event := TRUE;
5791 -- Bug: 5262421
5792 -- Updating item, user-defined attrs, gdsn attrs, AMLs to successful process status
5793 -- so that they appear correctly in the Imported tab
5794 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5795 SET PROCESS_FLAG = 7,
5796 TRANSACTION_TYPE = 'UPDATE',
5797 PROGRAM_APPLICATION_ID = l_prog_appid,
5798 PROGRAM_ID = l_prog_id,
5799 REQUEST_ID = l_request_id,
5800 PROGRAM_UPDATE_DATE = SYSDATE
5801 WHERE ROWID = i.ROW_ID;
5802
5803 UPDATE EGO_ITM_USR_ATTR_INTRFC
5804 SET PROCESS_STATUS = 4,
5805 PROGRAM_APPLICATION_ID = l_prog_appid,
5806 PROGRAM_ID = l_prog_id,
5807 REQUEST_ID = l_request_id,
5808 PROGRAM_UPDATE_DATE = SYSDATE
5809 WHERE DATA_SET_ID = p_data_set_id
5810 AND PROCESS_STATUS = 0
5811 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5812 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5813
5814 UPDATE EGO_AML_INTF
5815 SET PROCESS_FLAG = 7,
5816 PROGRAM_APPLICATION_ID = l_prog_appid,
5817 PROGRAM_ID = l_prog_id,
5818 REQUEST_ID = l_request_id,
5819 PROGRAM_UPDATE_DATE = SYSDATE
5820 WHERE DATA_SET_ID = p_data_set_id
5821 AND PROCESS_FLAG = 0
5822 AND SOURCE_SYSTEM_ID = i.SOURCE_SYSTEM_ID
5823 AND SOURCE_SYSTEM_REFERENCE = i.SOURCE_SYSTEM_REFERENCE;
5824 END IF; --IF l_raise_event THEN
5825 l_transaction_id := i.TRANSACTION_ID;
5826 l_org_id := i.ORGANIZATION_ID;
5827 ELSE
5828 Debug_Conc_Log('Inventory Item ID is NULL, so not calling Process_SSXref_Pvt');
5829 END IF; --IF l_inventory_item_id IS NOT NULL THEN
5830 END LOOP;
5831 ELSE --IF l_import_xref_only = 'Y' THEN
5832 Debug_Conc_Log('Import Only Cross References is FALSE');
5833 Debug_Conc_Log('Updating the Source System Description');
5834 FOR i IN c_intf_existing_rows LOOP
5835 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5836 l_inventory_item_id := i.INVENTORY_ITEM_ID;
5837
5838 IF l_inventory_item_id IS NOT NULL THEN
5839 UPDATE MTL_CROSS_REFERENCES_TL
5840 SET DESCRIPTION = i.SOURCE_SYSTEM_REFERENCE_DESC,
5841 LAST_UPDATE_DATE = SYSDATE,
5842 LAST_UPDATED_BY = FND_GLOBAL.USER_ID,
5843 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID,
5844 SOURCE_LANG = USERENV('LANG')
5845 WHERE CROSS_REFERENCE_ID = i.CROSS_REFERENCE_ID
5846 AND USERENV('LANG') IN (LANGUAGE, SOURCE_LANG);
5847
5848 l_raise_bus_event := TRUE;
5849 l_transaction_id := i.TRANSACTION_ID;
5850 l_org_id := i.ORGANIZATION_ID;
5851 ELSE
5852 Debug_Conc_Log('Inventory Item ID is NULL');
5853 END IF; --IF l_inventory_item_id IS NOT NULL THEN
5854 END LOOP; --FOR i IN c_intf_existing_rows LOOP
5855 Debug_Conc_Log('Done Updating the Source System Description');
5856
5857 Debug_Conc_Log('Processing Source System Cross references that does not exist in PDH');
5858 FOR i IN c_intf_rows LOOP
5859 Debug_Conc_Log('Processing for SS_ID, SS_REF='||TO_CHAR(i.SOURCE_SYSTEM_ID)||', '||i.SOURCE_SYSTEM_REFERENCE);
5860 l_raise_event := Process_SSXref_Pvt(
5861 p_source_system_id => i.SOURCE_SYSTEM_ID,
5862 p_source_system_reference => i.SOURCE_SYSTEM_REFERENCE,
5863 p_source_system_reference_desc => i.SOURCE_SYSTEM_REFERENCE_DESC,
5864 p_inventory_item_id => i.INVENTORY_ITEM_ID);
5865 IF l_raise_event THEN
5866 l_raise_bus_event := TRUE;
5867 END IF; --IF l_raise_event THEN
5868 l_transaction_id := i.TRANSACTION_ID;
5869 l_org_id := i.ORGANIZATION_ID;
5870 END LOOP;
5871 END IF; --IF l_import_xref_only = 'Y' THEN
5872
5873 IF l_raise_bus_event THEN
5874 Debug_Conc_Log('Raising business event');
5875 EGO_WF_WRAPPER_PVT.Raise_Item_Event(
5876 p_event_name => l_xref_event_name,
5877 p_request_id => l_request_id,
5878 x_msg_data => l_msg_data,
5879 x_return_status => l_return_status);
5880
5881 Debug_Conc_Log('Done Raising business event with status - '||l_return_status);
5882 Debug_Conc_Log('Done Raising business event with message - '||SUBSTR(l_msg_data, 3950));
5883 IF l_return_status <> 'S' THEN
5884 l_msg_text := SUBSTR('Error in raising business event for Source System Item Cross References - '||l_msg_data, 4000);
5885 dumm_status := INVPUOPI.mtl_log_interface_err(
5886 l_org_id
5887 ,l_user_id
5888 ,l_login_id
5889 ,l_prog_appid
5890 ,l_prog_id
5891 ,l_request_id
5892 ,l_transaction_id
5893 ,l_msg_text
5894 ,'SOURCE_SYSTEM_REFERENCE'
5895 ,'MTL_SYSTEM_ITEMS_INTERFACE'
5896 ,'INV_IOI_ERR'
5897 ,l_err_text);
5898 END IF; --IF l_return_status <> 'S' THEN
5899 END IF; --IF l_raise_event THEN
5900
5901 --COMMIT;
5902 RETCODE := '0';
5903 ERRBUF := NULL;
5904 Debug_Conc_Log('Done Process_SSXref_Intf_Rows with success');
5905 EXCEPTION WHEN OTHERS THEN
5906 RETCODE := '2';
5907 ERRBUF := 'Error in method EGO_IMPORT_PVT.Process_SSXref_Intf_Rows - '||SQLERRM;
5908 Debug_Conc_Log('Done Process_SSXref_Intf_Rows with error - '||SQLERRM);
5909 END Process_SSXref_Intf_Rows;
5910
5911 /*
5912 * This method sets the confirm_status for an unprocessed row (process_flag = 0) in the master org
5913 * for a source system item identified by p_source_system_id and p_source_system_reference.
5914 * p_status can have the following values:
5915 * G_CONF_XREF -- expecting p_inventory_item_id to be passed
5916 * G_CONF_MATCH -- expecting p_inventory_item_id to be passed
5917 * G_CONF_NEW -- expecting no p_inventory_item_id to be passed
5918 * G_UNCONF_NONE_MATCH -- expecting no p_inventory_item_id to be passed
5919 * G_UNCONF_SIGL_MATCH -- expecting p_inventory_item_id to be passed
5920 * G_UNCONF_MULT_MATCH -- p_inventory_item_id is optional
5921 */
5922 PROCEDURE Set_Confirm_Status(p_data_set_id IN NUMBER,
5923 p_source_system_id IN VARCHAR2,
5924 p_source_system_reference IN VARCHAR2,
5925 p_status IN VARCHAR2,
5926 p_inventory_item_id IN NUMBER DEFAULT NULL,
5927 p_organization_id IN NUMBER DEFAULT NULL)
5928 IS
5929 l_org_id MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
5930 l_org_code MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
5931 unexpected_parameters EXCEPTION;
5932 BEGIN
5933 -- Check that the parameters satisfy the assumptions: if they don't, raise error
5934
5935 -- Status should be one of the constants
5936 IF p_status NOT IN ( G_CONF_XREF, G_CONF_MATCH, G_CONF_NEW
5937 , G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH )
5938 THEN
5939 RAISE unexpected_parameters;
5940 END IF;
5941
5942 -- Item id must be passed for cross-referenced, confirmed matches, and unconfirmed single matches
5943 IF p_inventory_item_id IS NULL AND p_status IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH )
5944 THEN
5945 RAISE unexpected_parameters;
5946 END IF;
5947
5948 -- Item id cannot be passed for confirmed new items, and no-match items
5949 IF p_inventory_item_id IS NOT NULL AND p_status IN ( G_CONF_NEW, G_UNCONF_NONE_MATCH )
5950 THEN
5951 RAISE unexpected_parameters;
5952 END IF;
5953
5954 SELECT
5955 MP.ORGANIZATION_ID,
5956 MP.ORGANIZATION_CODE
5957 INTO l_org_id, l_org_code
5958 FROM MTL_PARAMETERS MP,
5959 EGO_IMPORT_BATCHES_B BA
5960 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
5961 BA.BATCH_ID = p_data_set_id;
5962
5963 -- Set the confirm status and item number based on the parameters
5964 -- Rows that already have a "fake" confirm_status are kept "fake"
5965 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
5966 SET PROCESS_FLAG = 0,
5967 ORGANIZATION_ID = l_org_id,
5968 ORGANIZATION_CODE = l_org_code,
5969 INVENTORY_ITEM_ID = p_inventory_item_id,
5970 ITEM_NUMBER = ( SELECT CONCATENATED_SEGMENTS
5971 FROM MTL_SYSTEM_ITEMS_KFV
5972 WHERE INVENTORY_ITEM_ID = p_inventory_item_id AND ORGANIZATION_ID = p_organization_id
5973 ),
5974 CONFIRM_STATUS =
5975 CASE
5976 WHEN CONFIRM_STATUS IN ( G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_FAKE_CONF_STATUS_FLAG
5977 , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE )
5978 THEN ( CASE p_status
5979 WHEN G_CONF_XREF THEN G_CONF_XREF_FAKE
5980 WHEN G_CONF_MATCH THEN G_CONF_MATCH_FAKE
5981 WHEN G_UNCONF_SIGL_MATCH THEN G_UNCONF_SINGLE_MATCH_FAKE
5982 WHEN G_UNCONF_MULT_MATCH THEN G_UNCONF_MULTI_MATCH_FAKE
5983 WHEN G_UNCONF_NONE_MATCH THEN G_UNCONF_NO_MATCH_FAKE
5984 ELSE p_status
5985 END
5986 )
5987 ELSE p_status
5988 END
5989 WHERE
5990 SET_PROCESS_ID = p_data_set_id AND
5991 SOURCE_SYSTEM_ID = p_source_system_id AND
5992 SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
5993 (PROCESS_FLAG = 0 OR PROCESS_FLAG IS NULL) AND
5994 ( (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE IS NULL) OR
5995 ORGANIZATION_ID = l_org_id OR
5996 (ORGANIZATION_ID IS NULL AND ORGANIZATION_CODE = l_org_code)
5997 );
5998 END Set_Confirm_Status;
5999
6000 /*
6001 * this function checks if the user has to provide revision information
6002 * based on the data and revision import policy
6003 */
6004 FUNCTION IS_NEW_REVISION_INFO_NEEDED
6005 (
6006 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
6007 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
6008 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
6009 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
6010 , p_organization_code IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_CODE%TYPE
6011 , p_instance_rev_policy IN EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE
6012 )
6013 RETURN BOOLEAN IS
6014 l_temp VARCHAR2(1);
6015 BEGIN
6016 IF p_instance_rev_policy IN ('S', 'L') THEN
6017 RETURN false;
6018 END IF;
6019
6020 SELECT 'x' INTO l_temp
6021 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
6022 WHERE SET_PROCESS_ID = p_batch_id AND
6023 PROCESS_FLAG = 0 AND
6024 SOURCE_SYSTEM_ID = p_source_system_id AND
6025 SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6026 (ORGANIZATION_ID = p_organization_id OR ORGANIZATION_CODE = p_organization_code) AND
6027 REVISION IS NOT NULL AND
6028 Upper(REVISION) NOT IN ( SELECT B.REVISION FROM MTL_ITEM_REVISIONS_B B, MTL_SYSTEM_ITEMS_INTERFACE MSII
6029 WHERE MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
6030 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
6031 AND (MSII.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
6032 OR MSII.ORGANIZATION_CODE = MIRI.ORGANIZATION_CODE)
6033 AND MSII.SET_PROCESS_ID = MIRI.SET_PROCESS_ID
6034 AND MSII.PROCESS_FLAG = 0
6035 AND B.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6036 ) AND
6037 EFFECTIVITY_DATE IS NOT NULL AND
6038 UPPER(TRANSACTION_TYPE) = 'CREATE' AND
6039 ROWNUM < 2;
6040 RETURN false;
6041 EXCEPTION
6042 WHEN NO_DATA_FOUND THEN
6043 RETURN true;
6044 END IS_NEW_REVISION_INFO_NEEDED;
6045
6046 -----------------------------------------------------------------------------------------
6047 --R12C : This Function returns varchar2 value to specify if the batch is
6048 -- ready for Import.
6049 FUNCTION Get_Import_Ready_Status ( p_data_set_id IN NUMBER,
6050 p_source_system_id IN VARCHAR2,
6051 p_source_system_reference IN VARCHAR2,
6052 p_bundle_id IN NUMBER
6053 )
6054 RETURN VARCHAR2 IS
6055 l_is_batch_GDSN_enabled VARCHAR2(1);
6056 l_confirm_status VARCHAR2(50);
6057
6058 CURSOR item_group_cr IS
6059 SELECT MSII.SOURCE_SYSTEM_ID,
6060 MSII.SOURCE_SYSTEM_REFERENCE,
6061 MSII.SET_PROCESS_ID,
6062 MSII.BUNDLE_ID
6063 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
6064 WHERE MSII.PROCESS_FLAG = 0
6065 AND MSII.SET_PROCESS_ID = p_data_set_id
6066 AND MSII.BUNDLE_ID = p_bundle_id;
6067
6068 BEGIN
6069 -- See if the batch is GDSN Enabled
6070 SELECT NVL(ENABLED_FOR_DATA_POOL, 'N') INTO l_is_batch_GDSN_enabled
6071 FROM EGO_IMPORT_OPTION_SETS
6072 WHERE BATCH_ID = p_data_set_id;
6073
6074 IF l_is_batch_GDSN_enabled = 'Y' AND p_bundle_id IS NOT NULL THEN
6075 FOR rec in item_group_cr LOOP
6076 l_confirm_status := Get_Confirm_Status( rec.SET_PROCESS_ID ,
6077 rec.SOURCE_SYSTEM_ID ,
6078 rec.SOURCE_SYSTEM_REFERENCE,
6079 rec.bundle_id
6080 );
6081 IF l_confirm_status NOT IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6082 RETURN 'NotImportReady';
6083 END IF;
6084 END LOOP;
6085 RETURN 'ImportReady';
6086 ELSE
6087 l_confirm_status := Get_Confirm_Status( p_data_set_id ,
6088 p_source_system_id ,
6089 p_source_system_reference,
6090 p_bundle_id
6091 );
6092 IF l_confirm_status IN ( 'CNR', 'CCR', 'CMR', 'CFCR', 'CFMR' ) THEN
6093 RETURN 'ImportReady';
6094 ELSE
6095 RETURN 'NotImportReady';
6096 END IF;
6097 END IF;
6098 END Get_Import_Ready_Status;
6099 -----------------------------------------------------------------------------------------
6100
6101 /*
6102 * This method gets the confirm status plus the extra letter to indicate
6103 * whether an item is ready to be passed on to IOI
6104 */
6105 FUNCTION Get_Confirm_Status( p_data_set_id IN NUMBER,
6106 p_source_system_id IN VARCHAR2,
6107 p_source_system_reference IN VARCHAR2,
6108 p_bundle_id IN NUMBER
6109 )
6110 RETURN VARCHAR2 IS
6111 l_pdh_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
6112 l_pdh_description MTL_SYSTEM_ITEMS_INTERFACE.DESCRIPTION%TYPE;
6113 l_pdh_item_catalog_group_id MTL_SYSTEM_ITEMS_INTERFACE.ITEM_CATALOG_GROUP_ID%TYPE;
6114 l_confirm_status MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
6115 l_item_num_gen MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6116 l_item_desc_gen MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6117 l_organization_id MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6118 l_organization_code MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6119 l_batch_rev_policy EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
6120 l_instance_rev_policy MTL_SYSTEM_ITEMS_INTERFACE.REVISION_IMPORT_POLICY%TYPE;
6121 l_style_item_flag MTL_SYSTEM_ITEMS_INTERFACE.STYLE_ITEM_FLAG%TYPE;
6122 BEGIN
6123 SELECT
6124 MP.ORGANIZATION_ID,
6125 MP.ORGANIZATION_CODE,
6126 NVL(OPT.REVISION_IMPORT_POLICY, 'L')
6127 INTO l_organization_id, l_organization_code, l_batch_rev_policy
6128 FROM MTL_PARAMETERS MP,
6129 EGO_IMPORT_BATCHES_B ba,
6130 EGO_IMPORT_OPTION_SETS OPT
6131 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID AND
6132 BA.BATCH_ID = OPT.BATCH_ID AND
6133 BA.BATCH_ID = p_data_set_id;
6134
6135 SELECT ITEM_NUMBER,
6136 NVL(DESCRIPTION,
6137 ( SELECT ATTRIBUTE_VALUE
6138 FROM MTL_ITEM_TEMPLATES_VL TEMP, MTL_ITEM_TEMPL_ATTRIBUTES ATTR
6139 WHERE ( (MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
6140 OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
6141 ) AND
6142 (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL) AND
6143 TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID AND
6144 ATTR.ENABLED_FLAG = 'Y' AND
6145 ATTR.ATTRIBUTE_NAME LIKE 'MTL_SYSTEM_ITEMS.DESCRIPTION')),
6146 NVL(ITEM_CATALOG_GROUP_ID,
6147 ( SELECT MICG.ITEM_CATALOG_GROUP_ID
6148 FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
6149 WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)),
6150 CONFIRM_STATUS,
6151 NVL(REVISION_IMPORT_POLICY, l_batch_rev_policy),
6152 MSII.STYLE_ITEM_FLAG
6153 INTO l_pdh_item_number, l_pdh_description, l_pdh_item_catalog_group_id, l_confirm_status, l_instance_rev_policy, l_style_item_flag
6154 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BATCH
6155 WHERE MSII.SET_PROCESS_ID = p_data_set_id AND
6156 MSII.SOURCE_SYSTEM_ID = p_source_system_id AND
6157 MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference AND
6158 MSII.ORGANIZATION_ID = BATCH.ORGANIZATION_ID AND
6159 BATCH.BATCH_ID = p_data_set_id AND
6160 PROCESS_FLAG = 0 AND
6161 ( ( p_bundle_id IS NULL AND MSII.BUNDLE_ID IS NULL ) --R12C:
6162 OR MSII.BUNDLE_ID = p_bundle_id
6163 ) AND
6164 ROWNUM = 1;
6165 -- eletuchy: note that this rownum = 1 introduced indeterminacy ...
6166
6167 -- if confirm status is one of UN, US, UM (unconfirmed no match, unconfirmed single match, unconfirmed multiple matches) or null
6168 -- simply return it
6169 IF l_confirm_status IN ( G_UNCONF_NONE_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
6170 , G_UNCONF_NO_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
6171 OR l_confirm_status IS NULL
6172 THEN
6173 RETURN l_confirm_status;
6174
6175 -- if confirm status is CN (confirmed new), we need to see if all required information for item creation is provided
6176 ELSIF l_confirm_status = G_CONF_NEW THEN
6177 -- if item catalog group id is specified, we look at the item number generation method, if any
6178 -- says U (user entered) and is not there, it is not ready
6179 Get_Item_Num_Desc_Gen_Method(l_pdh_item_catalog_group_id, l_item_num_gen, l_item_desc_gen);
6180 IF ( ( l_item_desc_gen <> 'F' AND l_pdh_description IS NULL ) OR
6181 ( l_item_desc_gen = 'F' AND l_pdh_description IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6182 ) THEN
6183 RETURN G_CONF_NEW_NOT_READY;
6184 END IF;
6185
6186 -- if no item catalog group id is specified, these columns are required
6187 IF l_pdh_item_catalog_group_id IS NULL THEN
6188 IF l_pdh_item_number IS null THEN
6189 RETURN G_CONF_NEW_NOT_READY;
6190 ELSE
6191 RETURN G_CONF_NEW_READY;
6192 END IF;
6193 END IF;
6194
6195 IF ( ( l_item_num_gen NOT IN ('S', 'F') AND l_pdh_item_number IS NULL ) OR
6196 ( l_item_num_gen IN ('S', 'F') AND l_pdh_item_number IS NULL AND NVL(l_style_item_flag, 'N') = 'Y' )
6197 ) THEN
6198 RETURN G_CONF_NEW_NOT_READY;
6199 ELSE
6200 RETURN G_CONF_NEW_READY;
6201 END IF;
6202 -- if confirm status is CM (confirmed match) or CC (confirmed cross reference),
6203 -- we need to see if rev level attributes are loaded and check import policy
6204 ELSIF l_confirm_status in ( G_CONF_MATCH, G_CONF_XREF, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE ) THEN
6205 RETURN l_confirm_status
6206 || CASE WHEN IS_NEW_REVISION_INFO_NEEDED( p_data_set_id
6207 , p_source_system_id
6208 , p_source_system_reference
6209 , l_organization_id
6210 , l_organization_code
6211 , l_instance_rev_policy ) THEN 'N'
6212 ELSE 'R'
6213 END;
6214 ELSE
6215 RETURN 'UNKNOWN';
6216 END IF;
6217
6218 EXCEPTION
6219 WHEN NO_DATA_FOUND THEN -- no batch header info, or no matching msii rows
6220 RETURN 'UNKNOWN';
6221 END Get_Confirm_Status;
6222
6223 PROCEDURE Get_Item_Num_Desc_Gen_Method(p_item_catalog_group_id IN NUMBER,
6224 x_item_num_gen_method OUT NOCOPY VARCHAR2,
6225 x_item_desc_gen_method OUT NOCOPY VARCHAR2) IS
6226 l_num_gen_resolved VARCHAR2(1) := 'N';
6227 l_desc_gen_resolved VARCHAR2(1) := 'N';
6228 l_item_num_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_NUM_GEN_METHOD%TYPE;
6229 l_item_desc_gen_method MTL_ITEM_CATALOG_GROUPS_B.ITEM_DESC_GEN_METHOD%TYPE;
6230
6231 CURSOR c_gen_method IS
6232 SELECT
6233 DECODE(ICC.ITEM_NUM_GEN_METHOD,
6234 NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6235 ICC.ITEM_NUM_GEN_METHOD),
6236 DECODE(ICC.ITEM_DESC_GEN_METHOD,
6237 NULL, DECODE(ICC.PARENT_CATALOG_GROUP_ID, NULL, 'U', 'I'),
6238 ICC.ITEM_DESC_GEN_METHOD)
6239 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
6240 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
6241 START WITH ICC.ITEM_CATALOG_GROUP_ID = p_item_catalog_group_id;
6242 BEGIN
6243 OPEN c_gen_method;
6244 LOOP
6245 FETCH c_gen_method INTO l_item_num_gen_method, l_item_desc_gen_method;
6246 -- exit loop if no more row exists or we have resolved both item number and description generation methods
6247 EXIT WHEN (l_num_gen_resolved = 'Y' AND l_desc_gen_resolved = 'Y') OR c_gen_method%NOTFOUND;
6248 -- if generation method hasn't been resolved yet
6249 IF l_num_gen_resolved = 'N' AND l_item_num_gen_method IN ('U', 'S', 'F') THEN
6250 l_num_gen_resolved := 'Y';
6251 x_item_num_gen_method := l_item_num_gen_method;
6252 END IF;
6253
6254 IF l_desc_gen_resolved = 'N' AND l_item_desc_gen_method IN ('U', 'F') THEN
6255 l_desc_gen_resolved := 'Y';
6256 x_item_desc_gen_method := l_item_desc_gen_method;
6257 END IF;
6258
6259
6260 END LOOP;
6261
6262 CLOSE c_gen_method;
6263 END Get_Item_Num_Desc_Gen_Method;
6264
6265
6266 /*
6267 * parse item segments into item number if item_number is null
6268 */
6269 PROCEDURE PARSE_ITEM_SEGMENTS ( p_set_id IN NUMBER
6270 , p_master_org_id IN NUMBER
6271 , p_is_pdh_batch IN FLAG DEFAULT FND_API.G_FALSE
6272 )
6273 IS
6274 CURSOR c_ss_items_table IS
6275 SELECT rowid rid
6276 FROM mtl_system_items_interface
6277 WHERE set_process_id = p_set_id
6278 AND process_flag = 0
6279 AND organization_id /*bug 6402904 parse for child items also*/
6280 IN (SELECT organization_id
6281 FROM mtl_parameters mp
6282 WHERE mp.master_organization_id = p_master_org_id)
6283 AND ( confirm_status IS NULL
6284 OR confirm_status = G_FAKE_CONF_STATUS_FLAG
6285 )
6286 AND item_number IS null
6287 FOR UPDATE OF item_number;
6288
6289 CURSOR c_pdh_items_table IS
6290 SELECT rowid rid
6291 FROM mtl_system_items_interface
6292 WHERE set_process_id = p_set_id
6293 AND process_flag = 1
6294 AND item_number IS null
6295 FOR UPDATE OF item_number;
6296
6297 l_err_text VARCHAR2(240) := NULL;
6298 l_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE := NULL;
6299 l_item_id MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID%TYPE := NULL;
6300 l_ret_code INTEGER;
6301 BEGIN
6302 IF p_is_pdh_batch = FND_API.G_TRUE THEN
6303 FOR item_record IN c_pdh_items_table LOOP
6304 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id =>item_record.rid
6305 , item_number =>l_item_number
6306 , item_id =>l_item_id
6307 , ERR_TEXT =>l_err_text
6308 );
6309 END LOOP;
6310 ELSE
6311 FOR item_record IN c_ss_items_table LOOP
6312 l_ret_code := INVPUOPI.MTL_PR_PARSE_ITEM_SEGMENTS ( p_row_id =>item_record.rid
6313 , item_number =>l_item_number
6314 , item_id =>l_item_id
6315 , ERR_TEXT =>l_err_text
6316 );
6317 END LOOP;
6318 END IF;
6319 END PARSE_ITEM_SEGMENTS;
6320
6321 /**
6322 * resolve the SYNC transaction_type into 'CREATE' or 'UPDATE'
6323 * using the same logic as INVPOPIB.pls for a PDH batch
6324 */
6325 PROCEDURE UPDATE_ITEM_SYNC_RECORDS_PDH
6326 (p_set_id IN NUMBER,
6327 p_org_id IN NUMBER
6328 ) IS
6329 CURSOR c_items_table IS
6330 SELECT rowid
6331 , organization_id
6332 , inventory_item_id
6333 , item_number
6334 , transaction_id
6335 , transaction_type
6336 FROM mtl_system_items_interface
6337 WHERE set_process_id = p_set_id
6338 AND organization_id = p_org_id
6339 AND process_flag = 1
6340 AND UPPER(transaction_type) = 'SYNC'
6341 FOR UPDATE OF transaction_type;
6342
6343 CURSOR c_item_exists(cp_item_id NUMBER) IS
6344 SELECT 1
6345 FROM mtl_system_items_b
6346 WHERE inventory_item_id = cp_item_id;
6347
6348 l_item_exist NUMBER(10) := 0;
6349 l_err_text VARCHAR2(200);
6350 l_status NUMBER(10):= 0;
6351 l_item_id mtl_system_items_b.inventory_item_id%TYPE;
6352
6353 BEGIN
6354 FOR item_record IN c_items_table LOOP
6355 l_item_exist := 0;
6356 l_item_id := NULL;
6357
6358 IF item_record.inventory_item_id IS NULL THEN
6359 IF item_record.item_number IS NOT NULL THEN
6360 l_status := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER
6361 ( ITEM_NUMBER =>item_record.item_number
6362 , ITEM_ID =>item_record.inventory_item_id
6363 , TRANS_ID =>item_record.transaction_id
6364 , ORG_ID =>item_record.organization_id
6365 , ERR_TEXT =>l_err_text
6366 , P_ROWID =>item_record.rowid
6367 );
6368 END IF;
6369 l_item_exist := INVUPD1B.EXISTS_IN_MSI
6370 ( ROW_ID => item_record.rowid
6371 , ORG_ID => item_record.organization_id
6372 , INV_ITEM_ID => l_item_id
6373 , TRANS_ID => item_record.transaction_id
6374 , ERR_TEXT => l_err_text
6375 , XSET_ID => p_set_id
6376 );
6377 ELSE
6378 l_item_id := item_record.inventory_item_id;
6379 OPEN c_item_exists(item_record.inventory_item_id);
6380 FETCH c_item_exists INTO l_item_exist;
6381 CLOSE c_item_exists;
6382 l_item_exist := NVL(l_item_exist,0);
6383 END IF;
6384
6385 IF l_item_exist = 1 THEN
6386 UPDATE mtl_system_items_interface
6387 SET transaction_type = 'UPDATE'
6388 WHERE rowid = item_record.rowid;
6389 ELSE
6390 UPDATE mtl_system_items_interface
6391 SET transaction_type = 'CREATE', inventory_item_id = NULL
6392 WHERE rowid = item_record.rowid;
6393 END IF;
6394 END LOOP;
6395
6396 END UPDATE_ITEM_SYNC_RECORDS_PDH;
6397
6398 /*
6399 * This procedure resolves source system item cross references
6400 * immediately after MTL_SYSTEM_ITEMS_INTERFACE is populated and
6401 * tries to resolve discrepencies between user entered CONFIRM_STATUS
6402 * (if any), TRANSACTION_TYPE (if any) and other data.
6403 * This procedure needs to be safe for re-execution if data is loaded into an
6404 * active batch repeatedly.
6405 */
6406 PROCEDURE Resolve_SSXref_on_Data_load( p_data_set_id IN NUMBER
6407 ,p_commit IN FLAG DEFAULT FND_API.G_TRUE
6408 )
6409 IS
6410 l_org_id MTL_PARAMETERS.ORGANIZATION_ID%TYPE;
6411 l_org_code MTL_PARAMETERS.ORGANIZATION_CODE%TYPE;
6412 l_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_id%TYPE;
6413 l_import_xref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
6414 l_party_name VARCHAR2(1000);
6415 l_security_predicate VARCHAR2(4000);
6416 l_return_status VARCHAR2(100);
6417 l_sql VARCHAR2(32000);
6418
6419 l_insert_date DATE;
6420 l_org VARCHAR2(100);
6421 l_enabled_for_data_pool EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
6422 BEGIN
6423 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Entering' );
6424
6425 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Gather Statistics' );
6426 Gather_Stats_For_Intf_Tables(p_data_set_id);
6427 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Call for Gather Statistics' );
6428 l_party_name := Get_Current_Party_Name;
6429
6430 -- get the organization_id, organization_code for this batch
6431 BEGIN
6432 SELECT
6433 MP.ORGANIZATION_ID,
6434 MP.ORGANIZATION_CODE,
6435 BA.SOURCE_SYSTEM_ID,
6436 NVL(OPT.IMPORT_XREF_ONLY, 'N'),
6437 NVL(ENABLED_FOR_DATA_POOL, 'N')
6438 INTO l_org_id, l_org_code, l_ss_id, l_import_xref_only, l_enabled_for_data_pool
6439 FROM MTL_PARAMETERS MP,
6440 EGO_IMPORT_BATCHES_B BA,
6441 EGO_IMPORT_OPTION_SETS OPT
6442 WHERE BA.ORGANIZATION_ID = MP.ORGANIZATION_ID
6443 AND BA.BATCH_ID = p_data_set_id
6444 AND BA.BATCH_ID = OPT.BATCH_ID;
6445 EXCEPTION WHEN NO_DATA_FOUND THEN
6446 -- IF batch not found then getting the default org_id from
6447 -- profile option for the user
6448 l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
6449 BEGIN
6450 SELECT mp.MASTER_ORGANIZATION_ID, mp1.ORGANIZATION_CODE
6451 INTO l_org_id, l_org_code
6452 FROM MTL_PARAMETERS mp, MTL_PARAMETERS mp1
6453 WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org)
6454 AND mp.MASTER_ORGANIZATION_ID = mp1.ORGANIZATION_ID;
6455 EXCEPTION WHEN OTHERS THEN
6456 l_org_id := NULL;
6457 l_org_code := NULL;
6458 END;
6459 l_ss_id := get_pdh_source_system_id();
6460 l_import_xref_only := 'N';
6461 l_enabled_for_data_pool := 'N';
6462 END;
6463
6464 -- populate organization_id if it's null
6465 -- if organization_code is not null, derive from it otherwise use
6466 -- organization id for batch
6467 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6468 SET ORGANIZATION_ID =
6469 CASE
6470 WHEN ORGANIZATION_CODE IS NOT NULL
6471 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = MSII.ORGANIZATION_CODE)
6472 ELSE l_org_id
6473 END
6474 WHERE SET_PROCESS_ID = p_data_set_id AND
6475 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6476 ORGANIZATION_ID IS NULL;
6477
6478
6479 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6480 SET ORGANIZATION_ID =
6481 CASE
6482 WHEN ORGANIZATION_CODE IS NOT NULL
6483 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = MIRI.ORGANIZATION_CODE)
6484 ELSE l_org_id
6485 END
6486 WHERE SET_PROCESS_ID = p_data_set_id AND
6487 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6488 ORGANIZATION_ID IS NULL;
6489
6490
6491 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6492 SET ORGANIZATION_ID =
6493 CASE
6494 WHEN ORGANIZATION_CODE IS NOT NULL
6495 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = MICI.ORGANIZATION_CODE)
6496 ELSE l_org_id
6497 END
6498 WHERE SET_PROCESS_ID = p_data_set_id AND
6499 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6500 ORGANIZATION_ID IS NULL;
6501
6502 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6503 SET ORGANIZATION_ID =
6504 CASE
6505 WHEN ORGANIZATION_CODE IS NOT NULL
6506 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE)
6507 ELSE l_org_id
6508 END
6509 WHERE DATA_SET_ID = p_data_set_id AND
6510 (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6511 ORGANIZATION_ID IS NULL;
6512
6513 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
6514 SET ORGANIZATION_ID =
6515 CASE
6516 WHEN ORGANIZATION_CODE IS NOT NULL
6517 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EIPI.ORGANIZATION_CODE)
6518 ELSE l_org_id
6519 END
6520 WHERE DATA_SET_ID = p_data_set_id AND
6521 (PROCESS_STATUS IS NULL OR PROCESS_STATUS IN (0, 1)) AND
6522 ORGANIZATION_ID IS NULL;
6523
6524 UPDATE EGO_AML_INTF EAI
6525 SET ORGANIZATION_ID =
6526 CASE
6527 WHEN ORGANIZATION_CODE IS NOT NULL
6528 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EAI.ORGANIZATION_CODE)
6529 ELSE l_org_id
6530 END
6531 WHERE DATA_SET_ID = p_data_set_id AND
6532 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6533 ORGANIZATION_ID IS NULL;
6534
6535 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6536 SET ORGANIZATION_ID =
6537 CASE
6538 WHEN ORGANIZATION_CODE IS NOT NULL
6539 THEN (SELECT ORGANIZATION_ID FROM MTL_PARAMETERS WHERE ORGANIZATION_CODE = EIAI.ORGANIZATION_CODE)
6540 ELSE l_org_id
6541 END
6542 WHERE BATCH_ID = p_data_set_id AND
6543 (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) AND
6544 ORGANIZATION_ID IS NULL;
6545
6546 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done populating organization_id' );
6547
6548 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Resolving data_level_name' );
6549
6550 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6551 SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6552 FROM EGO_DATA_LEVEL_B EDLB
6553 WHERE EDLB.APPLICATION_ID = 431
6554 AND EDLB.ATTR_GROUP_TYPE = 'EGO_ITEMMGMT_GROUP'
6555 AND EDLB.DATA_LEVEL_NAME = EIAI.DATA_LEVEL_NAME
6556 )
6557 WHERE BATCH_ID = p_data_set_id
6558 AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1))
6559 AND DATA_LEVEL_ID IS NULL
6560 AND DATA_LEVEL_NAME IS NOT NULL;
6561
6562
6563 UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6564 SET uai.DATA_LEVEL_ID = (SELECT edlb.DATA_LEVEL_ID
6565 FROM EGO_DATA_LEVEL_B edlb
6566 WHERE edlb.DATA_LEVEL_NAME = uai.DATA_LEVEL_NAME
6567 AND edlb.APPLICATION_ID = 431
6568 AND edlb.ATTR_GROUP_TYPE = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6569 )
6570 WHERE uai.DATA_SET_ID = p_data_set_id
6571 AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1))
6572 AND uai.DATA_LEVEL_NAME IS NOT NULL
6573 AND uai.DATA_LEVEL_ID IS NULL;
6574
6575 UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6576 SET uai.DATA_LEVEL_ID = (SELECT edlv.DATA_LEVEL_ID
6577 FROM EGO_DATA_LEVEL_VL edlv
6578 WHERE edlv.USER_DATA_LEVEL_NAME = uai.USER_DATA_LEVEL_NAME
6579 AND edlv.APPLICATION_ID = 431
6580 AND edlv.ATTR_GROUP_TYPE = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6581 )
6582 WHERE uai.DATA_SET_ID = p_data_set_id
6583 AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6584 AND uai.USER_DATA_LEVEL_NAME IS NOT NULL
6585 AND uai.DATA_LEVEL_NAME IS NULL
6586 AND uai.DATA_LEVEL_ID IS NULL;
6587
6588 -----------------------------------------------------------
6589 -- If all data level columns are null, then check if the --
6590 -- attribute group is associated at only one level, then --
6591 -- put that data level id here. --
6592 -----------------------------------------------------------
6593 UPDATE EGO_ITM_USR_ATTR_INTRFC uai
6594 SET DATA_LEVEL_ID = (SELECT DATA_LEVEL_ID
6595 FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6596 WHERE eagd.ATTR_GROUP_ID = ag_ext.ATTR_GROUP_ID
6597 AND ag_ext.APPLICATION_ID = 431
6598 AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6599 AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6600 )
6601 WHERE uai.DATA_SET_ID = p_data_set_id
6602 AND (uai.PROCESS_STATUS IS NULL OR uai.PROCESS_STATUS IN (0, 1) )
6603 AND uai.DATA_LEVEL_ID IS NULL
6604 AND uai.DATA_LEVEL_NAME IS NULL
6605 AND uai.USER_DATA_LEVEL_NAME IS NULL
6606 AND (SELECT COUNT(*)
6607 FROM EGO_ATTR_GROUP_DL eagd, EGO_FND_DSC_FLX_CTX_EXT ag_ext
6608 WHERE eagd.ATTR_GROUP_ID = ag_ext.ATTR_GROUP_ID
6609 AND ag_ext.APPLICATION_ID = 431
6610 AND ag_ext.DESCRIPTIVE_FLEXFIELD_NAME = NVL(uai.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
6611 AND ag_ext.DESCRIPTIVE_FLEX_CONTEXT_CODE = uai.ATTR_GROUP_INT_NAME
6612 ) = 1;
6613
6614
6615 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving data_level_name' );
6616
6617 UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6618 SET PK1_VALUE = ( SELECT VENDOR_ID
6619 FROM AP_SUPPLIERS aas
6620 WHERE aas.SEGMENT1 = eiai.SUPPLIER_NUMBER
6621 )
6622 WHERE eiai.BATCH_ID = p_data_set_id
6623 AND (eiai.PROCESS_FLAG IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6624 AND eiai.PK1_VALUE IS NULL
6625 AND eiai.SUPPLIER_NUMBER IS NOT NULL;
6626
6627 UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6628 SET PK1_VALUE = ( SELECT VENDOR_ID
6629 FROM AP_SUPPLIERS aas
6630 WHERE aas.VENDOR_NAME = eiai.SUPPLIER_NAME
6631 )
6632 WHERE eiai.BATCH_ID = p_data_set_id
6633 AND (eiai.PROCESS_FLAG IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6634 AND eiai.PK1_VALUE IS NULL
6635 AND eiai.SUPPLIER_NAME IS NOT NULL
6636 AND eiai.SUPPLIER_NUMBER IS NULL;
6637
6638 UPDATE EGO_ITEM_ASSOCIATIONS_INTF eiai
6639 SET PK2_VALUE = ( SELECT VENDOR_SITE_ID
6640 FROM AP_SUPPLIER_SITES_ALL asa
6641 WHERE asa.VENDOR_ID = eiai.PK1_VALUE
6642 AND asa.VENDOR_SITE_CODE = eiai.SUPPLIER_SITE_NAME
6643 AND asa.ORG_ID = FND_PROFILE.Value('ORG_ID')
6644 )
6645 WHERE eiai.BATCH_ID = p_data_set_id
6646 AND (eiai.PROCESS_FLAG IS NULL OR eiai.PROCESS_FLAG IN (0, 1) )
6647 AND eiai.PK2_VALUE IS NULL
6648 AND eiai.SUPPLIER_SITE_NAME IS NOT NULL;
6649
6650 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving PK Values in Intersection Interface table' );
6651
6652 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6653 SET STYLE_ITEM_ID = (SELECT MSIK.INVENTORY_ITEM_ID
6654 FROM MTL_SYSTEM_ITEMS_KFV MSIK
6655 WHERE MSIK.CONCATENATED_SEGMENTS = MSII.STYLE_ITEM_NUMBER
6656 AND MSIK.ORGANIZATION_ID = MSII.ORGANIZATION_ID
6657 )
6658 WHERE SET_PROCESS_ID = p_data_set_id
6659 AND STYLE_ITEM_NUMBER IS NOT NULL
6660 AND STYLE_ITEM_ID IS NULL
6661 AND STYLE_ITEM_FLAG = 'N'
6662 AND (PROCESS_FLAG IS NULL OR PROCESS_FLAG IN (0, 1)) ;
6663
6664 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Done Resolving Style Item Id' );
6665
6666 IF l_ss_id = get_pdh_source_system_id() THEN
6667 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, update item_number if inventory_item_id is populated' );
6668 -- if user does know the inventory_item_id, use it to overwrite
6669 -- item_number
6670 -- so in the imported tab, we can join to the child entities by item_number alone
6671 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6672 SET item_number = (SELECT CONCATENATED_SEGMENTS
6673 FROM MTL_SYSTEM_ITEMS_KFV
6674 WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
6675 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID)
6676 WHERE SET_PROCESS_ID = p_data_set_id
6677 AND PROCESS_FLAG = 1
6678 AND ITEM_NUMBER IS NULL
6679 AND INVENTORY_ITEM_ID IS NOT NULL;
6680
6681 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
6682 SET item_number = (SELECT CONCATENATED_SEGMENTS
6683 FROM MTL_SYSTEM_ITEMS_KFV
6684 WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
6685 AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
6686 WHERE SET_PROCESS_ID = p_data_set_id
6687 AND PROCESS_FLAG = 1
6688 AND ITEM_NUMBER IS NULL
6689 AND INVENTORY_ITEM_ID IS NOT NULL;
6690
6691 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
6692 SET item_number = (SELECT CONCATENATED_SEGMENTS
6693 FROM MTL_SYSTEM_ITEMS_KFV
6694 WHERE INVENTORY_ITEM_ID = MICI.INVENTORY_ITEM_ID
6695 AND ORGANIZATION_ID = MICI.ORGANIZATION_ID)
6696 WHERE SET_PROCESS_ID = p_data_set_id
6697 AND PROCESS_FLAG = 1
6698 AND ITEM_NUMBER IS NULL
6699 AND INVENTORY_ITEM_ID IS NOT NULL;
6700
6701 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
6702 SET item_number = (SELECT CONCATENATED_SEGMENTS
6703 FROM MTL_SYSTEM_ITEMS_KFV
6704 WHERE INVENTORY_ITEM_ID = EIUAI.INVENTORY_ITEM_ID
6705 AND ORGANIZATION_ID = EIUAI.ORGANIZATION_ID)
6706 WHERE DATA_SET_ID = p_data_set_id
6707 AND PROCESS_STATUS = 1
6708 AND ITEM_NUMBER IS NULL
6709 AND INVENTORY_ITEM_ID IS NOT NULL;
6710
6711 UPDATE EGO_AML_INTF EAI
6712 SET item_number = (SELECT CONCATENATED_SEGMENTS
6713 FROM MTL_SYSTEM_ITEMS_KFV
6714 WHERE INVENTORY_ITEM_ID = EAI.INVENTORY_ITEM_ID
6715 AND ORGANIZATION_ID = EAI.ORGANIZATION_ID)
6716 WHERE DATA_SET_ID = p_data_set_id
6717 AND PROCESS_FLAG = 1
6718 AND ITEM_NUMBER IS NULL
6719 AND INVENTORY_ITEM_ID IS NOT NULL;
6720
6721 UPDATE EGO_ITEM_PEOPLE_INTF MIPI
6722 SET item_number = (SELECT CONCATENATED_SEGMENTS
6723 FROM MTL_SYSTEM_ITEMS_KFV
6724 WHERE INVENTORY_ITEM_ID = MIPI.INVENTORY_ITEM_ID
6725 AND ORGANIZATION_ID = MIPI.ORGANIZATION_ID)
6726 WHERE DATA_SET_ID = p_data_set_id
6727 AND PROCESS_STATUS = 1
6728 AND ITEM_NUMBER IS NULL
6729 AND INVENTORY_ITEM_ID IS NOT NULL;
6730
6731 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
6732 SET item_number = (SELECT CONCATENATED_SEGMENTS
6733 FROM MTL_SYSTEM_ITEMS_KFV
6734 WHERE INVENTORY_ITEM_ID = EIAI.INVENTORY_ITEM_ID
6735 AND ORGANIZATION_ID = EIAI.ORGANIZATION_ID)
6736 WHERE BATCH_ID = p_data_set_id
6737 AND PROCESS_FLAG = 1
6738 AND ITEM_NUMBER IS NULL
6739 AND INVENTORY_ITEM_ID IS NOT NULL;
6740
6741 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item_number if inventory_item_id is populated' );
6742
6743 -- parse segments into item_number if item_number is null
6744 -- so that we can join to the child entities by item number alone
6745 PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id, FND_API.G_TRUE);
6746 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done parsing item segments' );
6747
6748 -- insert fake records ...
6749 l_insert_date := SYSDATE;
6750 -- ... 1. for attributes (no child orgs)
6751 INSERT INTO
6752 MTL_SYSTEM_ITEMS_INTERFACE MSII
6753 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6754 , confirm_status, inventory_item_id, item_number
6755 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
6756 , ITEM_CATALOG_GROUP_ID )
6757 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIUAI.organization_id, l_ss_id
6758 , G_FAKE_CONF_STATUS_FLAG
6759 , MAX( EIUAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6760 , EIUAI.item_number
6761 , l_insert_date -- CREATION_DATE
6762 , l_insert_date -- LAST_UPDATE_DATE
6763 , MAX( EIUAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6764 , MAX( EIUAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6765 , MAX( EIUAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6766 , MAX( EIUAI.item_catalog_group_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_CATALOG_GROUP_ID
6767 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
6768 -- , MTL_PARAMETERS MP
6769 WHERE
6770 data_set_id = p_data_set_id
6771 AND process_status = 1
6772 AND EIUAI.organization_id = l_org_id
6773 -- AND EIUAI.organization_id = MP.organization_id
6774 -- AND MP.master_organization_id = l_org_id
6775 AND NOT EXISTS
6776 (
6777 select null from mtl_system_items_interface
6778 where set_process_id = EIUAI.data_set_id
6779 and item_number = EIUAI.item_number
6780 and process_flag = EIUAI.process_status
6781 and organization_id = l_org_id
6782 )
6783 GROUP BY EIUAI.ITEM_NUMBER, EIUAI.organization_id;
6784 -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6785 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
6786 -- ... 2. for AMLs (no child orgs)
6787 INSERT INTO
6788 MTL_SYSTEM_ITEMS_INTERFACE MSII
6789 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6790 , confirm_status, inventory_item_id, item_number
6791 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6792 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, l_org_id, l_ss_id
6793 , G_FAKE_CONF_STATUS_FLAG
6794 , MAX( EAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6795 , EAI.item_number
6796 , l_insert_date -- CREATION_DATE
6797 , l_insert_date -- LAST_UPDATE_DATE
6798 , MAX( EAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6799 , MAX( EAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6800 , MAX( EAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6801 FROM EGO_AML_INTF EAI
6802 -- , MTL_PARAMETERS MP
6803 WHERE
6804 EAI.data_set_id = p_data_set_id
6805 AND EAI.process_flag = 1
6806 AND EAI.organization_id = l_org_id
6807 -- AND EAI.organization_id = MP.organization_id
6808 -- AND MP.master_organization_id = l_org_id
6809 AND NOT EXISTS
6810 (
6811 select null from mtl_system_items_interface
6812 where set_process_id = EAI.data_set_id
6813 and item_number = EAI.item_number
6814 and process_flag = EAI.process_flag
6815 and organization_id = l_org_id
6816 )
6817 GROUP BY EAI.ITEM_NUMBER;
6818 -- using GROUP BY rather than distinct for performance reasons (emulating merge code)
6819 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
6820
6821 --R12C: Inseting Fake Row into MSII for orphan row in EGO_ITEM_ASSOCIATIONS_INTF.
6822 INSERT INTO
6823 MTL_SYSTEM_ITEMS_INTERFACE MSII
6824 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6825 , confirm_status, inventory_item_id, item_number
6826 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6827 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, EIAI.organization_id, l_ss_id
6828 , G_FAKE_CONF_STATUS_FLAG
6829 , MAX( EIAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6830 , EIAI.item_number
6831 , l_insert_date -- CREATION_DATE
6832 , l_insert_date -- LAST_UPDATE_DATE
6833 , MAX( EIAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6834 , MAX( EIAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6835 , MAX( EIAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6836 FROM EGO_ITEM_ASSOCIATIONS_INTF EIAI
6837 WHERE
6838 batch_id = p_data_set_id
6839 AND process_flag = 1
6840 AND EIAI.organization_id = l_org_id
6841 AND NOT EXISTS
6842 (
6843 select null from mtl_system_items_interface
6844 where set_process_id = EIAI.batch_id
6845 and item_number = EIAI.item_number
6846 and process_flag = EIAI.process_flag
6847 and organization_id = l_org_id
6848 )
6849 GROUP BY EIAI.ITEM_NUMBER, EIAI.organization_id;
6850 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
6851
6852 --R12C: Insertion of Fake row into MSII for a orphan row in MTL_ITEM_CATEGORIES_INTERFACE
6853 INSERT INTO
6854 MTL_SYSTEM_ITEMS_INTERFACE MSII
6855 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id
6856 , confirm_status, inventory_item_id, item_number
6857 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
6858 SELECT G_TRANS_TYPE_SYNC, 1, p_data_set_id, MICI.organization_id, l_ss_id
6859 , G_FAKE_CONF_STATUS_FLAG
6860 , MAX( MICI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST )
6861 , MICI.item_number
6862 , l_insert_date -- CREATION_DATE
6863 , l_insert_date -- LAST_UPDATE_DATE
6864 , MAX( MICI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6865 , MAX( MICI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6866 , MAX( MICI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6867 FROM MTL_ITEM_CATEGORIES_INTERFACE MICI
6868 WHERE
6869 set_process_id = p_data_set_id
6870 AND process_flag = 1
6871 AND MICI.organization_id = l_org_id
6872 AND NOT EXISTS
6873 (
6874 select null from mtl_system_items_interface
6875 where set_process_id = MICI.set_process_id
6876 and item_number = MICI.item_number
6877 and process_flag = MICI.process_flag
6878 and organization_id = l_org_id
6879 )
6880 GROUP BY MICI.ITEM_NUMBER, MICI.organization_id;
6881 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, parent rows inserted for CATEGORY ASSIGNMENT rows: ' || SQL%ROWCOUNT );
6882 MERGE_BATCH( p_batch_id => p_data_set_id
6883 , p_master_org_id => l_org_id
6884 , p_is_pdh_batch => FND_API.G_TRUE
6885 , p_commit => FND_API.G_FALSE
6886 );
6887 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done merging batch' );
6888
6889 -- resolve SYNC transaction_type into UPDATE or CREATE
6890 -- this is needed in the Confirmed Tab for a PDH batch to partition
6891 -- items into 'Matched' and 'New'
6892 UPDATE_ITEM_SYNC_RECORDS_PDH(p_data_set_id, l_org_id);
6893 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, done updating item sync records' );
6894
6895 /* Bug 5283663: CREATE rows can have the FAKE confirm status,
6896 since those rows are moved to process flag 3 in resolve_child_entities;
6897 before IOI has a chance to process them
6898 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
6899 SET CONFIRM_STATUS = NULL
6900 WHERE
6901 set_process_id = p_data_set_id
6902 AND process_flag = 1
6903 AND organization_id = l_org_id
6904 AND UPPER( transaction_type ) = G_TRANS_TYPE_CREATE
6905 AND confirm_status = G_FAKE_CONF_STATUS_FLAG;
6906 */
6907
6908 -- that's it
6909 IF FND_API.G_TRUE = p_commit THEN
6910 COMMIT;
6911 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - PDH batch, committed' );
6912 END IF;
6913
6914 RETURN;
6915 END IF;
6916
6917 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, setting process_flag if null' );
6918
6919 -- we need to look at all these columns
6920 -- Filter Conditions: set_process_id (batch), process_flag (0 -- unprocessed), organization_id (master org), process_flag (null)
6921 -- Source System Item Primary Keys: source_system_id, source_system_reference
6922 -- PDH Item Primary Key Possibilities: inventory_item_id, item_number, segment1, segment2, ... segment20
6923 -- User Directive: transaction_type
6924
6925 -- Normalize the PROCESS_FLAG if it is null
6926 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
6927 SET PROCESS_FLAG = 0
6928 WHERE SET_PROCESS_ID = p_data_set_id AND
6929 PROCESS_FLAG IS NULL;
6930
6931 UPDATE MTL_ITEM_REVISIONS_INTERFACE
6932 SET PROCESS_FLAG = 0
6933 WHERE SET_PROCESS_ID = p_data_set_id AND
6934 PROCESS_FLAG IS NULL;
6935
6936 UPDATE MTL_ITEM_CATEGORIES_INTERFACE
6937 SET PROCESS_FLAG = 0
6938 WHERE SET_PROCESS_ID = p_data_set_id AND
6939 PROCESS_FLAG IS NULL;
6940
6941 UPDATE EGO_ITM_USR_ATTR_INTRFC
6942 SET PROCESS_STATUS = 0
6943 WHERE DATA_SET_ID = p_data_set_id AND
6944 PROCESS_STATUS IS NULL;
6945
6946 UPDATE EGO_ITEM_PEOPLE_INTF
6947 SET PROCESS_STATUS = 0
6948 WHERE DATA_SET_ID = p_data_set_id AND
6949 PROCESS_STATUS IS NULL;
6950
6951 UPDATE EGO_AML_INTF
6952 SET PROCESS_FLAG = 0
6953 WHERE DATA_SET_ID = p_data_set_id AND
6954 PROCESS_FLAG IS NULL;
6955
6956 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
6957 SET PROCESS_FLAG = 0
6958 WHERE BATCH_ID = p_data_set_id AND
6959 PROCESS_FLAG IS NULL;
6960
6961 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done setting process_flag if null' );
6962
6963
6964 -- insert fake records ...
6965 l_insert_date := SYSDATE;
6966 -- ... 1. for attributes (no child orgs)
6967 INSERT INTO
6968 MTL_SYSTEM_ITEMS_INTERFACE MSII
6969 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
6970 , confirm_status, inventory_item_id, item_number
6971 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN
6972 , ITEM_CATALOG_GROUP_ID )
6973 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, EIUAI.organization_id
6974 , EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.bundle_id
6975 , G_FAKE_CONF_STATUS_FLAG
6976 , MAX( EIUAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
6977 , MAX( EIUAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
6978 , l_insert_date -- CREATION_DATE
6979 , l_insert_date -- LAST_UPDATE_DATE
6980 , MAX( EIUAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
6981 , MAX( EIUAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
6982 , MAX( EIUAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
6983 , MAX( EIUAI.item_catalog_group_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_CATALOG_GROUP_ID
6984 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
6985 -- , MTL_PARAMETERS MP
6986 WHERE
6987 data_set_id = p_data_set_id
6988 AND process_status = 0
6989 AND EIUAI.organization_id = l_org_id
6990 -- AND EIUAI.organization_id = MP.organization_id
6991 -- AND MP.master_organization_id = l_org_id
6992 AND source_system_id = l_ss_id
6993 AND source_system_reference IS NOT NULL
6994 AND NOT EXISTS
6995 (
6996 select null from mtl_system_items_interface
6997 where set_process_id = EIUAI.data_set_id
6998 and source_system_id = EIUAI.source_system_id
6999 and source_system_reference = EIUAI.source_system_reference
7000 and process_flag = EIUAI.process_status
7001 and organization_id = l_org_id
7002 )
7003 GROUP BY EIUAI.source_system_id, EIUAI.source_system_reference, EIUAI.organization_id, EIUAI.BUNDLE_ID;
7004 -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7005 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for UDAs: ' || SQL%ROWCOUNT );
7006 -- ... 2. for AMLs (no child orgs)
7007 INSERT INTO
7008 MTL_SYSTEM_ITEMS_INTERFACE MSII
7009 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference
7010 , source_system_reference_desc, confirm_status, inventory_item_id, item_number
7011 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7012 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7013 , EAI.source_system_id, EAI.source_system_reference
7014 , MAX( EAI.source_system_reference_desc ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) SOURCE_SYSTEM_REFERENCE_DESC
7015 , G_FAKE_CONF_STATUS_FLAG
7016 , MAX( EAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7017 , MAX( EAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7018 , l_insert_date -- CREATION_DATE
7019 , l_insert_date -- LAST_UPDATE_DATE
7020 , MAX( EAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7021 , MAX( EAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7022 , MAX( EAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7023 FROM EGO_AML_INTF EAI
7024 -- , MTL_PARAMETERS MP
7025 WHERE
7026 EAI.data_set_id = p_data_set_id
7027 AND EAI.process_flag = 0
7028 AND EAI.organization_id = l_org_id
7029 -- AND EAI.organization_id = MP.organization_id
7030 -- AND MP.master_organization_id = l_org_id
7031 AND source_system_id = l_ss_id
7032 AND source_system_reference IS NOT NULL
7033 AND NOT EXISTS
7034 (
7035 select null from mtl_system_items_interface
7036 where set_process_id = EAI.data_set_id
7037 and source_system_id = EAI.source_system_id
7038 and source_system_reference = EAI.source_system_reference
7039 and process_flag = EAI.process_flag
7040 and organization_id = l_org_id
7041 )
7042 GROUP BY EAI.source_system_id, EAI.source_system_reference;
7043 -- using GROUP BY rather than distinct for performance reasons (no load on merge code)
7044 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for AMLs: ' || SQL%ROWCOUNT );
7045
7046 --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7047 INSERT INTO
7048 MTL_SYSTEM_ITEMS_INTERFACE MSII
7049 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7050 , confirm_status, inventory_item_id, item_number
7051 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7052 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7053 , EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id
7054 , G_FAKE_CONF_STATUS_FLAG
7055 , MAX( EIAI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7056 , MAX( EIAI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7057 , l_insert_date -- CREATION_DATE
7058 , l_insert_date -- LAST_UPDATE_DATE
7059 , MAX( EIAI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7060 , MAX( EIAI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7061 , MAX( EIAI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7062 FROM EGO_ITEM_ASSOCIATIONS_INTF EIAI
7063 WHERE
7064 EIAI.batch_id = p_data_set_id
7065 AND EIAI.process_flag = 0
7066 AND EIAI.organization_id = l_org_id
7067 AND source_system_id = l_ss_id
7068 AND source_system_reference IS NOT NULL
7069 AND NOT EXISTS
7070 (
7071 select null from mtl_system_items_interface
7072 where set_process_id = EIAI.batch_id
7073 and source_system_id = EIAI.source_system_id
7074 and source_system_reference = EIAI.source_system_reference
7075 and process_flag = EIAI.process_flag
7076 and organization_id = l_org_id
7077 )
7078 GROUP BY EIAI.source_system_id, EIAI.source_system_reference, EIAI.bundle_id;
7079 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for ASSOCIATIONS: ' || SQL%ROWCOUNT );
7080
7081
7082 --R12C: Inserting Fake Row (Parent Row in MSII) for Orphan row in EGO_ITEM_ASSOCIATIONS_INTF
7083 INSERT INTO
7084 MTL_SYSTEM_ITEMS_INTERFACE MSII
7085 ( transaction_type, process_flag, set_process_id, organization_id, source_system_id, source_system_reference, bundle_id
7086 , confirm_status, inventory_item_id, item_number
7087 , CREATION_DATE, LAST_UPDATE_DATE, CREATED_BY, LAST_UPDATED_BY, LAST_UPDATE_LOGIN )
7088 SELECT G_TRANS_TYPE_SYNC, 0, p_data_set_id, l_org_id
7089 , MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id
7090 , G_FAKE_CONF_STATUS_FLAG
7091 , MAX( MICI.inventory_item_id ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_ID
7092 , MAX( MICI.item_number ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) ITEM_NUMBER
7093 , l_insert_date -- CREATION_DATE
7094 , l_insert_date -- LAST_UPDATE_DATE
7095 , MAX( MICI.created_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) CREATED_BY
7096 , MAX( MICI.last_updated_by ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) UPDATED_BY
7097 , MAX( MICI.last_update_login ) KEEP ( DENSE_RANK FIRST ORDER BY INVENTORY_ITEM_ID NULLS LAST, ITEM_NUMBER NULLS LAST, LAST_UPDATE_DATE NULLS LAST ) LAST_UPDATE_LOGIN
7098 FROM MTL_ITEM_CATEGORIES_INTERFACE MICI
7099 WHERE
7100 MICI.set_process_id = p_data_set_id
7101 AND MICI.process_flag = 0
7102 AND MICI.organization_id = l_org_id
7103 AND source_system_id = l_ss_id
7104 AND source_system_reference IS NOT NULL
7105 AND NOT EXISTS
7106 (
7107 select null from mtl_system_items_interface
7108 where set_process_id = MICI.set_process_id
7109 and source_system_id = MICI.source_system_id
7110 and source_system_reference = MICI.source_system_reference
7111 and process_flag = MICI.process_flag
7112 and organization_id = l_org_id
7113 )
7114 GROUP BY MICI.source_system_id, MICI.source_system_reference, MICI.bundle_id;
7115 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, parent rows inserted for CAT Assignments: ' || SQL%ROWCOUNT );
7116 -- R12C: End
7117 -- check for records that need to be marked excluded
7118 UPDATE
7119 MTL_SYSTEM_ITEMS_INTERFACE MSII
7120 SET CONFIRM_STATUS = CASE
7121 WHEN CONFIRM_STATUS IS NULL THEN G_EXCLUDED
7122 ELSE G_FAKE_EXCLUDED
7123 END
7124 WHERE
7125 SET_PROCESS_ID = p_data_set_id
7126 AND ( CONFIRM_STATUS IS NULL
7127 OR CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG ) -- bug5303685: exclusion check for fake rows
7128 AND PROCESS_FLAG = 0
7129 AND ORGANIZATION_ID = l_org_id
7130 AND EXISTS
7131 ( SELECT NULL
7132 FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
7133 WHERE SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7134 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7135 );
7136
7137 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, excluded items: ' || SQL%ROWCOUNT );
7138
7139 -- parse segments into item number
7140 PARSE_ITEM_SEGMENTS(p_data_set_id, l_org_id);
7141 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done parsing item segments' );
7142
7143 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Calling Err_null_ssxref_ssid' );
7144 --Bug 5352143
7145 --This Procedure errors out rows in interface table which have source system reference
7146 --as null or have invalid source system id
7147
7148 Err_null_ssxref_ssid( p_data_set_id );
7149
7150 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Returned from Err_null_ssxref_ssid' );
7151
7152 /*
7153 * Note that merging does not need to be aware of fake records,
7154 * since they will either not be created (if there are already records in MSII)
7155 * or will be the oldest records (if the user loads item info for previously fake
7156 * records).
7157 * Either way, the confirm status after merging will be NULL.
7158 */
7159 IF l_enabled_for_data_pool = 'N' THEN
7160 MERGE_BATCH( p_batch_id => p_data_set_id
7161 , p_master_org_id => l_org_id
7162 , p_is_pdh_batch => FND_API.G_FALSE
7163 , p_commit => FND_API.G_FALSE
7164 );
7165 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done merging rows' );
7166 ELSE
7167 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Not calling merging, because batch is enabled for data pool' );
7168 END IF;
7169
7170 -- check for records that need to be marked excluded among the merged records
7171 -- (for freshly merged records, confirm_status is NULL)
7172 -- fix for bug 5329665
7173 UPDATE
7174 MTL_SYSTEM_ITEMS_INTERFACE MSII
7175 SET CONFIRM_STATUS = G_EXCLUDED
7176 WHERE
7177 SET_PROCESS_ID = p_data_set_id
7178 AND CONFIRM_STATUS IS NULL
7179 AND PROCESS_FLAG = 0
7180 AND ORGANIZATION_ID = l_org_id
7181 AND EXISTS
7182 ( SELECT NULL
7183 FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
7184 WHERE SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7185 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7186 );
7187
7188
7189 -- For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
7190 -- if it has no inventory_item_id
7191 -- if it has an item number, parse it into segments.
7192 -- determine if an item exists with these segments in MSI and if true, populate inventory_item_id
7193 -- else it has inventory_item_id
7194 -- determine if an item exists with this inventory_item_id in MSI
7195
7196 -- if the current transaction_type is 'SYNC'
7197 -- change it to 'UPDATE' if there is a way to resolve it to an existing item.
7198 -- change it to 'CREATE' if there is no way to resolve it to an existing item
7199 UPDATE_ITEM_SYNC_RECORDS(p_data_set_id, l_org_id);
7200 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done updating item sync records' );
7201 -- Now the records all have either 'UPDATE' or 'CREATE' as transaction_type
7202 -- UPDATE:
7203 -- 1. Specified by user directly.
7204 -- a. with existent inventory_item_id -- GOOD.
7205 -- b. with nonexistent inventory_item_id -- BAD -- try getting it from xref
7206 -- c. with no inventory_item_id, some information on item number or segments
7207 -- c.1. is resolved to existent inventory_item_id -- GOOD
7208 -- c.2. can not resolve to existent inventory_item_id -- inventory_item_id is still null -- try getting it from xref
7209 -- d. with no PDH item key information at all -- inventory_item_id is null -- try getting it from xref
7210 -- 2. Resolved from 'SYNC' -- may have inventory_item_id resolved. GOOD
7211 -- -- may have a null inventory_item_id -- try getting it from xref
7212
7213 -- CREATE:
7214 -- 1. Specified by user directly.
7215 -- 2. Resolved from 'SYNC'
7216 -- a. with nonexistent inventory_item_id
7217 -- b. with no inventory_item_id, some information on item number or segments which can not resolve to existent inventory_item_id
7218 -- c. with no PDH item key information at all.
7219 l_party_name := Get_Current_Party_Name;
7220
7221 -- getting security predicate
7222 EGO_DATA_SECURITY.get_security_predicate(
7223 p_api_version => 1.0
7224 ,p_function => 'EGO_VIEW_SS_ITEM_XREFS'
7225 ,p_object_name => 'EGO_ITEM'
7226 ,p_user_name => l_party_name
7227 ,p_statement_type => 'EXISTS'
7228 ,p_pk1_alias => 'XREF.INVENTORY_ITEM_ID'
7229 ,p_pk2_alias => l_org_id
7230 ,x_predicate => l_security_predicate
7231 ,x_return_status => l_return_status
7232 );
7233
7234 l_security_predicate := NVL(l_security_predicate, '1=1');
7235
7236 l_sql := q'#
7237 UPDATE
7238 MTL_SYSTEM_ITEMS_INTERFACE MSII
7239 SET TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7240 , INVENTORY_ITEM_ID =
7241 (SELECT INVENTORY_ITEM_ID
7242 FROM MTL_CROSS_REFERENCES_B XREF
7243 WHERE XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF' AND
7244 XREF.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE AND
7245 XREF.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID AND
7246 SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1) AND #'
7247 || l_security_predicate || q'# AND
7248 ROWNUM < = 1)
7249 WHERE
7250 SET_PROCESS_ID = :p_data_set_id AND
7251 PROCESS_FLAG = 0 AND
7252 ORGANIZATION_ID = :l_org_id AND
7253 ( CONFIRM_STATUS IS NULL
7254 OR CONFIRM_STATUS = '#'||G_FAKE_CONF_STATUS_FLAG||q'#'
7255 )
7256 AND
7257 ( INVENTORY_ITEM_ID IS NULL OR NOT EXISTS
7258 (SELECT 1
7259 FROM MTL_SYSTEM_ITEMS_B
7260 WHERE INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
7261 ) )
7262 AND UPPER( TRANSACTION_TYPE ) = 'UPDATE' #';
7263
7264 execute immediate l_sql using p_data_set_id, l_org_id;
7265 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, resolved xrefs. Rows touched: ' || SQL%ROWCOUNT );
7266 -- determine if import policy applies to a source system item:
7267 -- the revision import policy should not apply if the user has given us a
7268 -- rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE: We set it to 'S' meaning specific.
7269 -- however, if the rev import policy is set to Specific already, we need to verify that
7270 -- the user has given us a rev code or id in either EGO_ITM_USR_ATTR_INTRFC or MTL_ITEM_REVISIONS_INTERFACE.
7271 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
7272 SET REVISION_IMPORT_POLICY =
7273 CASE
7274 WHEN EXISTS -- check the revision interface table
7275 (
7276 SELECT NULL
7277 FROM MTL_ITEM_REVISIONS_INTERFACE
7278 WHERE SET_PROCESS_ID = MSII.SET_PROCESS_ID
7279 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7280 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7281 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7282 AND PROCESS_FLAG = MSII.PROCESS_FLAG
7283 AND
7284 (
7285 REVISION_ID IS NOT NULL
7286 OR REVISION IS NOT NULL
7287 )
7288 )
7289 THEN 'S'
7290 WHEN EXISTS -- check the user attrs interface table
7291 (
7292 SELECT NULL
7293 FROM EGO_ITM_USR_ATTR_INTRFC USR_ATTR
7294 WHERE DATA_SET_ID = MSII.SET_PROCESS_ID
7295 AND SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
7296 AND SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7297 AND ORGANIZATION_ID = MSII.ORGANIZATION_ID
7298 AND PROCESS_STATUS = MSII.PROCESS_FLAG
7299 AND
7300 (
7301 REVISION_ID IS NOT NULL
7302 OR REVISION IS NOT NULL
7303 )
7304 )
7305 THEN 'S'
7306 ELSE NULL
7307 END
7308 WHERE SET_PROCESS_ID = p_data_set_id
7309 AND ORGANIZATION_ID = l_org_id
7310 AND PROCESS_FLAG = 0
7311 AND ( REVISION_IMPORT_POLICY = 'S' OR REVISION_IMPORT_POLICY IS NULL )
7312 --AND CONFIRM_STATUS IS NULL
7313 ;
7314 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving item import policy' );
7315
7316 -- We will also try to harmonize CONFIRM_STATUS, TRANSACTION_TYPE with information the user provides on INVENTORY_ITEMID or
7317 -- ITEM_NUMBER, segments, et.al.
7318 -- CONFIRM_STATUS can have the following values: CN (confirmed new), CC (confirmed xref), CM (confirmed match),
7319 -- US (unconfirmed single match), UM (unconfirmed multiple match), UN (unconfirmed no match), EX (excluded), null.
7320 -- See spec (EGOVIMPS.pls) constants for list of confirm status values.
7321 -- Bug: 5458886 - If batch is cross references only batch, then New Item should not be allowed
7322 UPDATE -- for non-fake rows
7323 MTL_SYSTEM_ITEMS_INTERFACE MSII
7324 SET
7325 CONFIRM_STATUS =
7326 CASE
7327 WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7328 WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF -- TRANSACTION_TYPE is 'UPDATE'
7329 ELSE G_UNCONF_NONE_MATCH
7330 END
7331 , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7332 WHERE
7333 SET_PROCESS_ID = p_data_set_id AND
7334 PROCESS_FLAG = 0 AND
7335 ORGANIZATION_ID = l_org_id AND
7336 CONFIRM_STATUS IS NULL;
7337
7338 UPDATE -- for fake rows
7339 MTL_SYSTEM_ITEMS_INTERFACE MSII
7340 SET
7341 CONFIRM_STATUS =
7342 CASE
7343 WHEN UPPER( TRANSACTION_TYPE ) = G_TRANS_TYPE_CREATE AND l_import_xref_only = 'N' THEN G_CONF_NEW
7344 WHEN INVENTORY_ITEM_ID IS NOT NULL THEN G_CONF_XREF_FAKE -- TRANSACTION_TYPE is 'UPDATE'
7345 ELSE G_UNCONF_NO_MATCH_FAKE
7346 END
7347 , TRANSACTION_TYPE = UPPER( TRANSACTION_TYPE )
7348 WHERE
7349 SET_PROCESS_ID = p_data_set_id AND
7350 PROCESS_FLAG = 0 AND
7351 ORGANIZATION_ID = l_org_id AND
7352 CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG;
7353
7354 -- update inventory_item_id to make sure their existence makes sense
7355 UPDATE
7356 MTL_SYSTEM_ITEMS_INTERFACE MSII
7357 SET
7358 INVENTORY_ITEM_ID =
7359 CASE
7360 WHEN CONFIRM_STATUS IN ( G_CONF_XREF, G_CONF_MATCH, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_MATCH
7361 , G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE, G_UNCONF_SINGLE_MATCH_FAKE, G_UNCONF_MULTI_MATCH_FAKE )
7362 THEN INVENTORY_ITEM_ID
7363 -- if it's 'CN', 'UN', 'EX' or NULL, erase
7364 ELSE NULL
7365 END
7366 WHERE
7367 SET_PROCESS_ID = p_data_set_id AND
7368 PROCESS_FLAG = 0 AND
7369 ORGANIZATION_ID = l_org_id;
7370
7371 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, done resolving confirm status' );
7372 -- for all records where item_catalog_group_name is present and item_catalog_group_id is not present
7373 -- update the item_catalog_group_id
7374 UPDATE
7375 MTL_SYSTEM_ITEMS_INTERFACE MSII
7376 SET ITEM_CATALOG_GROUP_ID = (SELECT MICG.ITEM_CATALOG_GROUP_ID
7377 FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
7378 WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME)
7379 WHERE MSII.SET_PROCESS_ID = p_data_set_id
7380 AND MSII.PROCESS_FLAG = 0
7381 AND MSII.ORGANIZATION_ID = l_org_id
7382 AND MSII.CONFIRM_STATUS IN ( G_CONF_NEW, G_CONF_XREF, G_CONF_MATCH, G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
7383 AND MSII.ITEM_CATALOG_GROUP_ID IS NULL
7384 AND MSII.ITEM_CATALOG_GROUP_NAME IS NOT NULL;
7385
7386 Debug_Conc_Log('Resolve_SSXref_on_Data_load - After Updating Item Catalog Group ID' );
7387
7388
7389 IF FND_API.G_TRUE = p_commit THEN
7390 COMMIT;
7391 Debug_Conc_Log( 'Resolve_SSXref_on_Data_load - Source System batch, committed' );
7392 END IF;
7393 EXCEPTION
7394 WHEN NO_DATA_FOUND THEN
7395 IF FND_API.G_TRUE = p_commit THEN
7396 COMMIT;
7397 END IF;
7398 RETURN;
7399
7400 END Resolve_SSXref_on_Data_load;
7401
7402
7403 /*
7404 * This method cleans up the row identifiers before the actual import process starts
7405 * Here we group the rows based on item_number or source_system_reference
7406 */
7407 PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_PRE( p_batch_id IN NUMBER,
7408 p_process_status IN NUMBER,
7409 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE
7410 )
7411 IS
7412 CURSOR c_unmerged_rows(cp_ss_id IN NUMBER) IS
7413 SELECT ROW_IDENTIFIER FROM
7414 (
7415 SELECT
7416 ROW_IDENTIFIER,
7417 COUNT( DISTINCT ROW_IDENTIFIER )
7418 OVER ( PARTITION BY
7419 NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7420 NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7421 ATTR_GROUP_INT_NAME,
7422 ATTR_INT_NAME,
7423 DATA_LEVEL_ID,
7424 PK1_VALUE,
7425 PK2_VALUE,
7426 PK3_VALUE,
7427 PK4_VALUE,
7428 PK5_VALUE,
7429 ORGANIZATION_ID,
7430 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7431 ) cnt
7432 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7433 WHERE DATA_SET_ID = p_batch_id
7434 AND PROCESS_STATUS = p_process_status
7435 AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7436 AND DATA_LEVEL_ID IS NOT NULL
7437 AND EXISTS( SELECT NULL
7438 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7439 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7440 AND FL_CTX_EXT.APPLICATION_ID = 431
7441 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7442 AND FL_CTX_EXT.MULTI_ROW = 'N'
7443 )
7444 )
7445 WHERE CNT > 1;
7446
7447
7448 CURSOR c_intf_recs(cp_ss_id IN NUMBER) IS
7449 SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7450 (
7451 SELECT
7452 ROWID ROW_ID,
7453 COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7454 NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7455 NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7456 ATTR_GROUP_INT_NAME,
7457 DATA_LEVEL_ID,
7458 PK1_VALUE,
7459 PK2_VALUE,
7460 PK3_VALUE,
7461 PK4_VALUE,
7462 PK5_VALUE,
7463 ORGANIZATION_ID,
7464 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7465 ) cnt,
7466 MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7467 NVL(SOURCE_SYSTEM_ID, cp_ss_id),
7468 NVL(ITEM_NUMBER, SOURCE_SYSTEM_REFERENCE),
7469 ATTR_GROUP_INT_NAME,
7470 DATA_LEVEL_ID,
7471 PK1_VALUE,
7472 PK2_VALUE,
7473 PK3_VALUE,
7474 PK4_VALUE,
7475 PK5_VALUE,
7476 ORGANIZATION_ID,
7477 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7478 ) MAX_ROW_IDENTIFIER
7479 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7480 WHERE DATA_SET_ID = p_batch_id
7481 AND PROCESS_STATUS = p_process_status
7482 AND (ITEM_NUMBER IS NOT NULL OR SOURCE_SYSTEM_REFERENCE IS NOT NULL)
7483 AND DATA_LEVEL_ID IS NOT NULL
7484 AND EXISTS( SELECT NULL
7485 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7486 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7487 AND FL_CTX_EXT.APPLICATION_ID = 431
7488 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7489 AND FL_CTX_EXT.MULTI_ROW = 'N'
7490 )
7491 )
7492 WHERE CNT > 1;
7493
7494 CURSOR c_error_case_cursor IS
7495 SELECT DISTINCT
7496 ORGANIZATION_ID,
7497 ITEM_NUMBER,
7498 SOURCE_SYSTEM_REFERENCE,
7499 INVENTORY_ITEM_ID,
7500 ATTR_GROUP_INT_NAME,
7501 TRANSACTION_ID
7502 FROM EGO_ITM_USR_ATTR_INTRFC
7503 WHERE DATA_SET_ID = p_batch_id
7504 AND PROCESS_STATUS = 3.475;
7505
7506 l_msg_text VARCHAR2(4000);
7507 dumm_status VARCHAR2(100);
7508 l_user_id NUMBER := FND_GLOBAL.USER_ID;
7509 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
7510 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
7511 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7512 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7513 l_err_text VARCHAR2(4000);
7514
7515 TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7516 TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7517 l_unmerged_row_idents ROW_IDENTIFIERS;
7518
7519 l_row_ids ROW_IDS;
7520 l_row_idents ROW_IDENTIFIERS;
7521 l_ss_id NUMBER;
7522 BEGIN
7523 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Starting');
7524 BEGIN
7525 SELECT SOURCE_SYSTEM_ID INTO l_ss_id
7526 FROM EGO_IMPORT_BATCHES_B
7527 WHERE BATCH_ID = p_batch_id;
7528 EXCEPTION WHEN NO_DATA_FOUND THEN
7529 l_ss_id := GET_PDH_SOURCE_SYSTEM_ID();
7530 END;
7531
7532 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating item_number and revision, l_ss_id='||l_ss_id);
7533 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7534 SET ITEM_NUMBER = (SELECT CONCATENATED_SEGMENTS
7535 FROM MTL_SYSTEM_ITEMS_KFV
7536 WHERE INVENTORY_ITEM_ID = eiuai.INVENTORY_ITEM_ID
7537 AND ORGANIZATION_ID = eiuai.ORGANIZATION_ID)
7538 WHERE DATA_SET_ID = p_batch_id
7539 AND PROCESS_STATUS = p_process_status
7540 AND INVENTORY_ITEM_ID IS NOT NULL
7541 AND ITEM_NUMBER IS NULL;
7542
7543 UPDATE EGO_ITM_USR_ATTR_INTRFC eiuai
7544 SET REVISION = ( SELECT R.REVISION
7545 FROM MTL_ITEM_REVISIONS_B R
7546 WHERE R.REVISION_ID = eiuai.REVISION_ID
7547 )
7548 WHERE DATA_SET_ID = p_batch_id
7549 AND PROCESS_STATUS = p_process_status
7550 AND REVISION_ID IS NOT NULL
7551 AND REVISION IS NULL;
7552
7553 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Erroring out Unmerged Rows' );
7554 OPEN c_unmerged_rows(l_ss_id);
7555 LOOP
7556 FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7557 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7558
7559 FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7560 UPDATE EGO_ITM_USR_ATTR_INTRFC
7561 SET process_status = 3.475
7562 WHERE DATA_SET_ID = p_batch_id
7563 AND PROCESS_STATUS = p_process_status
7564 AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7565 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Errored - '||SQL%ROWCOUNT||' rows');
7566 EXIT WHEN c_unmerged_rows%NOTFOUND;
7567 END LOOP;
7568 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Erroring unmerged rows');
7569 CLOSE c_unmerged_rows;
7570
7571 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Logging errors for Errored out unmerged rows');
7572 FOR i IN c_error_case_cursor LOOP
7573 FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7574 FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7575 l_msg_text := FND_MESSAGE.GET;
7576 dumm_status := INVPUOPI.mtl_log_interface_err(
7577 i.ORGANIZATION_ID
7578 ,l_user_id
7579 ,l_login_id
7580 ,l_prog_appid
7581 ,l_prog_id
7582 ,l_request_id
7583 ,i.TRANSACTION_ID
7584 ,l_msg_text
7585 ,'ATTR_GROUP_INT_NAME'
7586 ,'EGO_ITM_USR_ATTR_INTRFC'
7587 ,'INV_IOI_ERR'
7588 ,l_err_text);
7589 END LOOP;
7590 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done Logging errors for Errored out unmerged rows');
7591
7592 UPDATE EGO_ITM_USR_ATTR_INTRFC
7593 SET
7594 PROCESS_STATUS = 3,
7595 REQUEST_ID = l_request_id
7596 WHERE DATA_SET_ID = p_batch_id
7597 AND PROCESS_STATUS = 3.475;
7598
7599 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating rows to 3');
7600
7601 -- work around the following case by setting the row identifier to the same value
7602 -- item ids attr_grp attr row_ident value
7603 -- xyz item_sr one 1 x
7604 -- xyz item_sr two 2 y
7605 -- UDA loader code throws an error ...
7606 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updating row_identifiers to unique value where' );
7607 OPEN c_intf_recs(l_ss_id);
7608 LOOP
7609 FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7610 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - fetched '||l_unmerged_row_idents.Count||' rows, ');
7611
7612 FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7613 UPDATE EGO_ITM_USR_ATTR_INTRFC
7614 SET ROW_IDENTIFIER = l_row_idents(idx)
7615 WHERE ROWID = l_row_ids(idx);
7616 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Updated - '||SQL%ROWCOUNT||' rows');
7617 EXIT WHEN c_intf_recs%NOTFOUND;
7618 END LOOP;
7619 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre - Done updating row_identifiers');
7620 CLOSE c_intf_recs;
7621
7622 IF FND_API.G_TRUE = p_commit THEN
7623 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre COMMITING');
7624 COMMIT;
7625 END IF;
7626 EXCEPTION WHEN OTHERS THEN
7627 IF c_unmerged_rows%ISOPEN THEN
7628 CLOSE c_unmerged_rows;
7629 END IF;
7630 IF c_intf_recs%ISOPEN THEN
7631 CLOSE c_intf_recs;
7632 END IF;
7633 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Pre Error - '||SQLERRM);
7634 RAISE;
7635 END CLEAN_UP_UDA_ROW_IDENTS_PRE;
7636
7637
7638 PROCEDURE CLEAN_UP_UDA_ROW_IDENTS_POST( p_batch_id IN NUMBER,
7639 p_process_status IN NUMBER,
7640 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE
7641 )
7642 IS
7643 CURSOR c_unmerged_rows IS
7644 SELECT ROW_IDENTIFIER FROM
7645 (
7646 SELECT
7647 ROW_IDENTIFIER,
7648 COUNT( DISTINCT ROW_IDENTIFIER )
7649 OVER ( PARTITION BY
7650 INVENTORY_ITEM_ID,
7651 ATTR_GROUP_INT_NAME,
7652 ATTR_INT_NAME,
7653 DATA_LEVEL_ID,
7654 PK1_VALUE,
7655 PK2_VALUE,
7656 PK3_VALUE,
7657 PK4_VALUE,
7658 PK5_VALUE,
7659 ORGANIZATION_ID,
7660 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7661 ) cnt
7662 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7663 WHERE DATA_SET_ID = p_batch_id
7664 AND PROCESS_STATUS = p_process_status
7665 AND INVENTORY_ITEM_ID IS NOT NULL
7666 AND DATA_LEVEL_ID IS NOT NULL
7667 AND EXISTS( SELECT NULL
7668 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7669 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7670 AND FL_CTX_EXT.APPLICATION_ID = 431
7671 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7672 AND FL_CTX_EXT.MULTI_ROW = 'N'
7673 )
7674 )
7675 WHERE CNT > 1;
7676
7677
7678 CURSOR c_intf_recs IS
7679 SELECT ROW_ID, MAX_ROW_IDENTIFIER FROM
7680 (
7681 SELECT
7682 ROWID ROW_ID,
7683 COUNT( DISTINCT ROW_IDENTIFIER ) OVER ( PARTITION BY
7684 INVENTORY_ITEM_ID,
7685 ATTR_GROUP_INT_NAME,
7686 DATA_LEVEL_ID,
7687 PK1_VALUE,
7688 PK2_VALUE,
7689 PK3_VALUE,
7690 PK4_VALUE,
7691 PK5_VALUE,
7692 ORGANIZATION_ID,
7693 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7694 ) cnt,
7695 MAX( ROW_IDENTIFIER ) OVER ( PARTITION BY
7696 INVENTORY_ITEM_ID,
7697 ATTR_GROUP_INT_NAME,
7698 DATA_LEVEL_ID,
7699 PK1_VALUE,
7700 PK2_VALUE,
7701 PK3_VALUE,
7702 PK4_VALUE,
7703 PK5_VALUE,
7704 ORGANIZATION_ID,
7705 NVL( ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7706 ) MAX_ROW_IDENTIFIER
7707 FROM EGO_ITM_USR_ATTR_INTRFC eiuai
7708 WHERE DATA_SET_ID = p_batch_id
7709 AND PROCESS_STATUS = p_process_status
7710 AND INVENTORY_ITEM_ID IS NOT NULL
7711 AND DATA_LEVEL_ID IS NOT NULL
7712 AND EXISTS( SELECT NULL
7713 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
7714 WHERE FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( eiuai.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
7715 AND FL_CTX_EXT.APPLICATION_ID = 431
7716 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = eiuai.ATTR_GROUP_INT_NAME
7717 AND FL_CTX_EXT.MULTI_ROW = 'N'
7718 )
7719 )
7720 WHERE CNT > 1;
7721
7722 CURSOR c_error_case_cursor IS
7723 SELECT DISTINCT
7724 ORGANIZATION_ID,
7725 ITEM_NUMBER,
7726 SOURCE_SYSTEM_REFERENCE,
7727 INVENTORY_ITEM_ID,
7728 ATTR_GROUP_INT_NAME,
7729 TRANSACTION_ID
7730 FROM EGO_ITM_USR_ATTR_INTRFC
7731 WHERE DATA_SET_ID = p_batch_id
7732 AND PROCESS_STATUS = 3.475;
7733
7734 l_msg_text VARCHAR2(4000);
7735 dumm_status VARCHAR2(100);
7736 l_user_id NUMBER := FND_GLOBAL.USER_ID;
7737 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
7738 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
7739 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7740 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7741 l_err_text VARCHAR2(4000);
7742
7743 TYPE ROW_IDS IS TABLE OF ROWID INDEX BY BINARY_INTEGER;
7744 TYPE ROW_IDENTIFIERS IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
7745 l_unmerged_row_idents ROW_IDENTIFIERS;
7746
7747 l_row_ids ROW_IDS;
7748 l_row_idents ROW_IDENTIFIERS;
7749 BEGIN
7750 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Starting');
7751 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Erroring out Unmerged Rows' );
7752 OPEN c_unmerged_rows;
7753 LOOP
7754 FETCH c_unmerged_rows BULK COLLECT INTO l_unmerged_row_idents LIMIT 1000;
7755 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7756
7757 FORALL idx IN l_unmerged_row_idents.FIRST..l_unmerged_row_idents.LAST
7758 UPDATE EGO_ITM_USR_ATTR_INTRFC
7759 SET process_status = 3.475
7760 WHERE DATA_SET_ID = p_batch_id
7761 AND PROCESS_STATUS = p_process_status
7762 AND ROW_IDENTIFIER = l_unmerged_row_idents(idx);
7763 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Errored - '||SQL%ROWCOUNT||' rows');
7764 EXIT WHEN c_unmerged_rows%NOTFOUND;
7765 END LOOP;
7766 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Erroring unmerged rows');
7767 CLOSE c_unmerged_rows;
7768
7769 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Logging errors for Errored out unmerged rows');
7770 FOR i IN c_error_case_cursor LOOP
7771 FND_MESSAGE.SET_NAME('EGO', 'EGO_EF_IDENTICAL_ROWS_ERR');
7772 FND_MESSAGE.SET_TOKEN('AG_NAME', i.ATTR_GROUP_INT_NAME);
7773 l_msg_text := FND_MESSAGE.GET;
7774 dumm_status := INVPUOPI.mtl_log_interface_err(
7775 i.ORGANIZATION_ID
7776 ,l_user_id
7777 ,l_login_id
7778 ,l_prog_appid
7779 ,l_prog_id
7780 ,l_request_id
7781 ,i.TRANSACTION_ID
7782 ,l_msg_text
7783 ,'ATTR_GROUP_INT_NAME'
7784 ,'EGO_ITM_USR_ATTR_INTRFC'
7785 ,'INV_IOI_ERR'
7786 ,l_err_text);
7787 END LOOP;
7788 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done Logging errors for Errored out unmerged rows');
7789
7790 UPDATE EGO_ITM_USR_ATTR_INTRFC
7791 SET
7792 PROCESS_STATUS = 3,
7793 REQUEST_ID = l_request_id
7794 WHERE DATA_SET_ID = p_batch_id
7795 AND PROCESS_STATUS = 3.475;
7796
7797 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating rows to 3');
7798
7799 -- work around the following case by setting the row identifier to the same value
7800 -- item ids attr_grp attr row_ident value
7801 -- xyz item_sr one 1 x
7802 -- xyz item_sr two 2 y
7803 -- UDA loader code throws an error ...
7804 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updating row_identifiers to unique value where' );
7805 OPEN c_intf_recs;
7806 LOOP
7807 FETCH c_intf_recs BULK COLLECT INTO l_row_ids, l_row_idents LIMIT 1000;
7808 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - fetched '||l_unmerged_row_idents.Count||' rows, ');
7809
7810 FORALL idx IN l_row_ids.FIRST..l_row_ids.LAST
7811 UPDATE EGO_ITM_USR_ATTR_INTRFC
7812 SET ROW_IDENTIFIER = l_row_idents(idx)
7813 WHERE ROWID = l_row_ids(idx);
7814 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Updated - '||SQL%ROWCOUNT||' rows');
7815 EXIT WHEN c_intf_recs%NOTFOUND;
7816 END LOOP;
7817 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post - Done updating row_identifiers');
7818 CLOSE c_intf_recs;
7819
7820 IF FND_API.G_TRUE = p_commit THEN
7821 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post COMMITING');
7822 COMMIT;
7823 END IF;
7824 EXCEPTION WHEN OTHERS THEN
7825 IF c_unmerged_rows%ISOPEN THEN
7826 CLOSE c_unmerged_rows;
7827 END IF;
7828 IF c_intf_recs%ISOPEN THEN
7829 CLOSE c_intf_recs;
7830 END IF;
7831 Debug_Conc_Log('Clean_Up_UDA_Row_Idents_Post Error - '||SQLERRM);
7832 RAISE;
7833 END CLEAN_UP_UDA_ROW_IDENTS_POST;
7834
7835 /*
7836 * This method cleans up UDA row identifiers, ensuring that all single attr groups
7837 * are represented by only one row identifier in EGO_ITM_USR_ATTR_INTRFC
7838 *
7839 * Helper procedure for resolve_child_entities
7840 */
7841 PROCEDURE CLEAN_UP_UDA_ROW_IDENTS( p_batch_id IN NUMBER,
7842 p_process_status IN NUMBER,
7843 p_ignore_item_num_upd IN VARCHAR2, --FND_API.G_TRUE
7844 p_commit IN VARCHAR2 DEFAULT FND_API.G_TRUE
7845 )
7846 IS
7847 BEGIN
7848 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Starting');
7849 IF p_ignore_item_num_upd = FND_API.G_FALSE THEN
7850 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_PRE');
7851 CLEAN_UP_UDA_ROW_IDENTS_PRE(p_batch_id => p_batch_id,
7852 p_process_status => p_process_status,
7853 p_commit => p_commit);
7854 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_PRE');
7855 ELSE
7856 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Calling CLEAN_UP_UDA_ROW_IDENTS_POST');
7857 CLEAN_UP_UDA_ROW_IDENTS_POST(p_batch_id => p_batch_id,
7858 p_process_status => p_process_status,
7859 p_commit => p_commit);
7860 Debug_Conc_Log('Clean_Up_UDA_Row_Idents - Done CLEAN_UP_UDA_ROW_IDENTS_POST');
7861 END IF;
7862 END CLEAN_UP_UDA_ROW_IDENTS;
7863
7864 /*
7865 * This method populates the child entities with PK values.
7866 * This method populates the other interface tables like MTL_ITEM_REVISION_INTERFACE,
7867 * EGO_ITEM_PEOPLE_INTF, MTL_ITEM_CATEGORIES_INTERFACE, EGO_ITM_USR_ATTR_INTRFC etc.
7868 * with the inventory item id/number and organization id/code.
7869 */
7870 PROCEDURE Resolve_Child_Entities( p_data_set_id IN NUMBER
7871 , p_commit IN FLAG DEFAULT FND_API.G_TRUE
7872 )
7873 IS
7874 CURSOR c_no_privilege_rows IS
7875 SELECT
7876 ROWID,
7877 SOURCE_SYSTEM_ID,
7878 SOURCE_SYSTEM_REFERENCE,
7879 ITEM_NUMBER,
7880 ORGANIZATION_CODE,
7881 INVENTORY_ITEM_ID,
7882 ORGANIZATION_ID,
7883 TRANSACTION_TYPE,
7884 TRANSACTION_ID
7885 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
7886 WHERE SET_PROCESS_ID = p_data_set_id
7887 AND PROCESS_FLAG = 33390;
7888
7889
7890
7891 CURSOR c_old_xref_no_priv_row IS
7892 SELECT KFV.CONCATENATED_SEGMENTS ITEM_NUMBER,
7893 MSII.ORGANIZATION_CODE,
7894 MSII.ORGANIZATION_ID,
7895 MSII.TRANSACTION_ID
7896 FROM MTL_SYSTEM_ITEMS_B_KFV KFV,
7897 MTL_SYSTEM_ITEMS_INTERFACE MSII,
7898 MTL_CROSS_REFERENCES MCR
7899 WHERE MSII.SET_PROCESS_ID = p_data_set_id
7900 AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
7901 AND MSII.SOURCE_SYSTEM_ID = MCR.SOURCE_SYSTEM_ID
7902 AND MSII.ORGANIZATION_ID = KFV.ORGANIZATION_ID
7903 AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
7904 AND MCR.INVENTORY_ITEM_ID = KFV.INVENTORY_ITEM_ID
7905 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
7906 AND MSII.PROCESS_FLAG = 33391;
7907
7908
7909
7910 l_msg_text VARCHAR2(4000);
7911 dumm_status VARCHAR2(100);
7912 l_user_id NUMBER := FND_GLOBAL.USER_ID;
7913 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
7914 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
7915 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
7916 l_request_id NUMBER := FND_GLOBAL.CONC_REQUEST_ID;
7917 l_err_text VARCHAR2(4000);
7918 l_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
7919 l_org_id EGO_IMPORT_BATCHES_B.ORGANIZATION_ID%TYPE;
7920 l_item_id NUMBER;
7921 l_revision MTL_ITEM_REVISIONS_B.REVISION%TYPE;
7922 l_error BOOLEAN;
7923 l_import_policy EGO_IMPORT_OPTION_SETS.REVISION_IMPORT_POLICY%TYPE;
7924
7925 l_import_xref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
7926 l_party_name VARCHAR2(1000);
7927 l_security_predicate VARCHAR2(4000);
7928 l_return_status VARCHAR2(100);
7929 l_sql VARCHAR2(32000);
7930 l_enabled_for_data_pool EGO_IMPORT_OPTION_SETS.ENABLED_FOR_DATA_POOL%TYPE;
7931 l_org VARCHAR2(100);
7932 BEGIN
7933 -- get the source_system_id for this batch
7934 Debug_Conc_Log( 'Resolve_Child_Entities START' );
7935 BEGIN
7936 SELECT
7937 BA.SOURCE_SYSTEM_ID,
7938 BA.ORGANIZATION_ID,
7939 NVL(OPT.REVISION_IMPORT_POLICY, 'L'),
7940 NVL(opt.IMPORT_XREF_ONLY, 'N'),
7941 NVL(opt.ENABLED_FOR_DATA_POOL, 'N')
7942 INTO l_ss_id, l_org_id, l_import_policy, l_import_xref_only, l_enabled_for_data_pool
7943 FROM EGO_IMPORT_BATCHES_B BA, EGO_IMPORT_OPTION_SETS OPT
7944 WHERE BA.BATCH_ID = p_data_set_id AND BA.BATCH_ID = OPT.BATCH_ID;
7945 EXCEPTION WHEN NO_DATA_FOUND THEN
7946 l_org := fnd_profile.value('EGO_USER_ORGANIZATION_CONTEXT');
7947 BEGIN
7948 SELECT mp.MASTER_ORGANIZATION_ID
7949 INTO l_org_id
7950 FROM MTL_PARAMETERS mp
7951 WHERE mp.ORGANIZATION_ID = TO_NUMBER(l_org);
7952 EXCEPTION WHEN OTHERS THEN
7953 l_org_id := NULL;
7954 END;
7955 l_ss_id := get_pdh_source_system_id();
7956 l_import_xref_only := 'N';
7957 l_enabled_for_data_pool := 'N';
7958 l_import_policy := NULL;
7959 END;
7960
7961 -- no need to resolve child entities for a PDH batch
7962 -- no need to resolve child entities for a Non-PDH batch, if Import Only Cross References is true
7963 IF l_ss_id = get_pdh_source_system_id() THEN
7964 -- move fake rows to have the success process flag value
7965 -- so that they are not processed by IOI
7966 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
7967 SET
7968 REQUEST_ID = l_request_id
7969 , PROGRAM_APPLICATION_ID = l_prog_appid
7970 , PROGRAM_ID = l_prog_id
7971 , PROGRAM_UPDATE_DATE = SYSDATE
7972 , PROCESS_FLAG = CASE -- bug 5283663: never leave fake rows in status 1
7973 WHEN UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE THEN 7
7974 ELSE 3
7975 END
7976 WHERE
7977 set_process_id = p_data_set_id
7978 AND organization_id = l_org_id
7979 AND confirm_status = G_FAKE_CONF_STATUS_FLAG
7980 -- AND UPPER( TRANSACTION_TYPE ) <> G_TRANS_TYPE_CREATE -- bug 5283663: never leave fake rows in status 1
7981 ;
7982
7983 Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
7984 Clean_Up_UDA_Row_Idents( p_batch_id => p_data_set_id,
7985 p_process_status => 1,
7986 p_ignore_item_num_upd => FND_API.G_FALSE,
7987 p_commit => FND_API.G_FALSE );
7988 Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
7989
7990 Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
7991 UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
7992 SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID, INVENTORY_ITEM_ID) = (SELECT
7993 DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
7994 '$NULL$', msii.STYLE_ITEM_FLAG,
7995 NULL, msii.STYLE_ITEM_FLAG,
7996 'N', 'N',
7997 'Y', 'Y'
7998 ),
7999 NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID),
8000 NVL(msii.INVENTORY_ITEM_ID, MAX(msik.INVENTORY_ITEM_ID))
8001 FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
8002 WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
8003 OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
8004 AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
8005 AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
8006 )
8007 WHERE SET_PROCESS_ID = p_data_set_id
8008 AND PROCESS_FLAG = 1;
8009
8010 Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
8011
8012 Debug_Conc_Log('Resolve_Child_Entities END');
8013 IF FND_API.G_TRUE = p_commit THEN
8014 Debug_Conc_Log('Resolve_Child_Entities COMMITING');
8015 COMMIT;
8016 END IF;
8017 RETURN;
8018 END IF;
8019
8020 l_party_name := Get_Current_Party_Name;
8021
8022 -- getting security predicate
8023 EGO_DATA_SECURITY.get_security_predicate(
8024 p_api_version => 1.0
8025 ,p_function => 'EGO_EDIT_SS_ITEM_XREFS'
8026 ,p_object_name => 'EGO_ITEM'
8027 ,p_user_name => l_party_name
8028 ,p_statement_type => 'EXISTS'
8029 ,p_pk1_alias => 'APPLYSEC.INVENTORY_ITEM_ID'
8030 ,p_pk2_alias => l_org_id
8031 ,x_predicate => l_security_predicate
8032 ,x_return_status => l_return_status
8033 );
8034
8035 Debug_Conc_Log('Resolve_Child_Entities - Security Predicate = '||l_security_predicate);
8036 IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8037 Debug_Conc_Log('Resolve_Child_Entities - Import Cross References Only is true' );
8038 IF l_security_predicate IS NULL THEN
8039 RETURN;
8040 ELSE
8041 Debug_Conc_Log('Resolve_Child_Entities - Checking data security');
8042 -- For CN case, if one is importing cross-references only, the new item would not be
8043 -- created. Thus, there's no need to check security on the cross-references.
8044
8045 -- CC/CM:
8046 -- old link and new link are the same:
8047 l_sql := q'#
8048 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8049 SET PROCESS_FLAG = 33390
8050 WHERE SET_PROCESS_ID = :p_data_set_id
8051 AND PROCESS_FLAG = 0
8052 AND ORGANIZATION_ID = :org_id
8053 AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8054 AND EXISTS
8055 (SELECT 1
8056 FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8057 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8058 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8059 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8060 AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8061 AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8062 (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8063 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8064 AND NOT #' || l_security_predicate || ' )';
8065
8066 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8067
8068 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8069 source system reference desc is being updated');
8070 -- old link and new link are not the same:
8071 -- check edit privilege on old item link (if any)
8072 l_sql := q'#
8073 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8074 SET PROCESS_FLAG = 33391
8075 WHERE SET_PROCESS_ID = :p_data_set_id
8076 AND PROCESS_FLAG = 0
8077 AND ORGANIZATION_ID = :org_id
8078 AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8079 AND EXISTS ( SELECT 1
8080 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8081 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8082 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8083 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8084 AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8085 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8086 AND NOT #' || l_security_predicate || ' )';
8087
8088 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8089
8090 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on old item link (if any) where old link and new link are not the same' );
8091 -- old link and new link are not the same:
8092 -- check edit privilege on new item link
8093 l_sql := q'#
8094 UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8095 SET PROCESS_FLAG = 33390
8096 WHERE SET_PROCESS_ID = :p_data_set_id
8097 AND PROCESS_FLAG = 0
8098 AND ORGANIZATION_ID = :org_id
8099 AND CONFIRM_STATUS IN ('CC', 'CM', 'CFC', 'CFM')
8100 AND NOT #' || l_security_predicate || q'#
8101 AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8102 AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8103 (SELECT XREF.INVENTORY_ITEM_ID
8104 FROM MTL_CROSS_REFERENCES_B XREF
8105 WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8106 AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8107 AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8108 AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8109
8110 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8111
8112 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8113
8114 FOR i IN c_no_privilege_rows LOOP
8115 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8116 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8117 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8118 l_msg_text := FND_MESSAGE.GET;
8119
8120 dumm_status := INVPUOPI.mtl_log_interface_err(
8121 i.ORGANIZATION_ID
8122 ,l_user_id
8123 ,l_login_id
8124 ,l_prog_appid
8125 ,l_prog_id
8126 ,l_request_id
8127 ,i.TRANSACTION_ID
8128 ,l_msg_text
8129 ,'SOURCE_SYSTEM_REFERENCE'
8130 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8131 ,'INV_IOI_ERR'
8132 ,l_err_text);
8133
8134 END LOOP;
8135
8136 FOR i IN c_old_xref_no_priv_row LOOP
8137 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8138 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8139 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8140 l_msg_text := FND_MESSAGE.GET;
8141
8142 dumm_status := INVPUOPI.mtl_log_interface_err(
8143 i.ORGANIZATION_ID
8144 ,l_user_id
8145 ,l_login_id
8146 ,l_prog_appid
8147 ,l_prog_id
8148 ,l_request_id
8149 ,i.TRANSACTION_ID
8150 ,l_msg_text
8151 ,'SOURCE_SYSTEM_REFERENCE'
8152 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8153 ,'INV_IOI_ERR'
8154 ,l_err_text);
8155 END LOOP;
8156
8157 Debug_Conc_Log( 'Resolve_Child_Entities - After logging errors for records without privilege' );
8158
8159 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8160 SET PROCESS_FLAG = 3
8161 WHERE SET_PROCESS_ID = p_data_set_id
8162 AND PROCESS_FLAG IN (33390, 33391)
8163 AND CONFIRM_STATUS IN ( 'CM', 'CC', 'CN', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8164 AND ORGANIZATION_ID = l_org_id;
8165
8166 Debug_Conc_Log( 'Resolve_Child_Entities - After erroring out records without privilege' );
8167
8168 IF FND_API.G_TRUE = p_commit THEN
8169 Debug_Conc_Log( 'Resolve_Child_Entities COMMITING' );
8170 COMMIT;
8171 END IF;
8172
8173 RETURN;
8174 END IF; --IF l_security_predicate IS NULL THEN
8175 END IF; --IF NVL(l_import_xref_only, 'N') = 'Y' THEN
8176
8177 -- resolving transaction type for revisions
8178 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8179 SET TRANSACTION_TYPE = (
8180 SELECT
8181 (CASE
8182 WHEN MSII.CONFIRM_STATUS = 'CN'
8183 THEN 'CREATE'
8184 WHEN (MSII.CONFIRM_STATUS IN ( 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8185 AND EXISTS (SELECT NULL
8186 FROM MTL_ITEM_REVISIONS_B MIR
8187 WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8188 AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8189 AND MIR.REVISION = MIRI.REVISION) )
8190 THEN 'UPDATE'
8191 ELSE 'CREATE'
8192 END)
8193 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8194 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8195 AND MSII.PROCESS_FLAG = 0
8196 AND MSII.CONFIRM_STATUS IN ('CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE)
8197 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8198 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8199 AND MSII.ORGANIZATION_ID = l_org_id
8200 AND ROWNUM = 1
8201 )
8202 WHERE MIRI.PROCESS_FLAG = 0
8203 AND MIRI.SET_PROCESS_ID = p_data_set_id
8204 AND EXISTS (SELECT NULL
8205 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8206 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8207 AND MSII.PROCESS_FLAG = 0
8208 AND MSII.CONFIRM_STATUS IN ( 'CN', 'CM', 'CC', G_CONF_XREF_FAKE, G_CONF_MATCH_FAKE )
8209 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8210 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8211 AND MSII.ORGANIZATION_ID = l_org_id);
8212
8213 Debug_Conc_Log('Resolve_Child_Entities - After resolving transaction_type for revisions' );
8214
8215 -- update the confirm status to ready for all READY CN records
8216 UPDATE
8217 MTL_SYSTEM_ITEMS_INTERFACE MSII
8218 SET CONFIRM_STATUS = (
8219 CASE
8220 WHEN (MSII.DESCRIPTION IS NULL
8221 AND NOT EXISTS
8222 (SELECT NULL
8223 FROM MTL_ITEM_TEMPLATES_VL TEMP,
8224 MTL_ITEM_TEMPL_ATTRIBUTES ATTR
8225 WHERE ((MSII.TEMPLATE_ID IS NOT NULL AND TEMP.TEMPLATE_ID = MSII.TEMPLATE_ID)
8226 OR (MSII.TEMPLATE_ID IS NULL AND TEMP.TEMPLATE_NAME = MSII.TEMPLATE_NAME)
8227 )
8228 AND (TEMP.CONTEXT_ORGANIZATION_ID = MSII.ORGANIZATION_ID OR TEMP.CONTEXT_ORGANIZATION_ID IS NULL)
8229 AND TEMP.TEMPLATE_ID = ATTR.TEMPLATE_ID
8230 AND ATTR.ENABLED_FLAG = 'Y'
8231 AND ATTR.ATTRIBUTE_NAME = 'MTL_SYSTEM_ITEMS.DESCRIPTION'
8232 )
8233 AND 'F' <>
8234 (SELECT DECODE(MSII.STYLE_ITEM_FLAG, 'Y', 'ZZZ', (MAX(ICC.ITEM_DESC_GEN_METHOD) KEEP (DENSE_RANK FIRST ORDER BY LEVEL) ) ) AS ITEM_DESC_GEN_METHOD
8235 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8236 WHERE ICC.ITEM_DESC_GEN_METHOD IS NOT NULL
8237 AND ICC.ITEM_DESC_GEN_METHOD <> 'I'
8238 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8239 START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8240 )
8241 )
8242 THEN CONFIRM_STATUS
8243 WHEN
8244 (MSII.ITEM_NUMBER IS NULL AND MSII.ITEM_CATALOG_GROUP_ID IS NULL)
8245 THEN CONFIRM_STATUS
8246 WHEN
8247 ( MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8248 AND MSII.ITEM_NUMBER IS NULL
8249 AND (SELECT DECODE(MSII.STYLE_ITEM_FLAG, 'Y', 'ZZZ', (MAX(ICC.ITEM_NUM_GEN_METHOD) KEEP (DENSE_RANK FIRST ORDER BY LEVEL) ) ) AS ITEM_NUM_GEN_METHOD
8250 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8251 WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8252 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8253 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8254 START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8255 ) NOT IN ('S', 'F')
8256 )
8257 THEN CONFIRM_STATUS
8258 ELSE CONFIRM_STATUS||'R'
8259 END
8260 )
8261 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8262 AND MSII.PROCESS_FLAG = 0
8263 AND MSII.ORGANIZATION_ID = l_org_id
8264 AND MSII.CONFIRM_STATUS = 'CN';
8265
8266 Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CNR' );
8267 -- for all records with confirm_status = CN and item_number is null and is sequence generated
8268 -- update the item_number column.
8269
8270 -- eletuchy:
8271 -- The item number must be generated here because the IOI doesn't know anything about source system references.
8272 -- Therefore, the parent-child linkages must be reported to IOI via inventory_item_id and item_number columns.
8273 -- For CN items with sequence-generated item_numbers, neither inventory_item_id not item_number contain any info,
8274 -- so IOI wouldn't know about the parent-child linkages unless the item number generation occurs here.
8275
8276 -- dsakalle: For R12C, bug 6113606
8277 -- We are not honoring user entered item number values from R12C
8278 -- so the overwriting of item number must happen only from IOI
8279 /*
8280 UPDATE
8281 MTL_SYSTEM_ITEMS_INTERFACE MSII
8282 SET ITEM_NUMBER = EGO_IMPORT_PVT.GET_NEXT_ITEM_NUMBER(MSII.ITEM_CATALOG_GROUP_ID)
8283 WHERE MSII.ITEM_CATALOG_GROUP_ID IS NOT NULL
8284 AND MSII.ITEM_NUMBER IS NULL
8285 AND MSII.SET_PROCESS_ID = p_data_set_id
8286 AND MSII.PROCESS_FLAG = 0
8287 AND MSII.CONFIRM_STATUS = 'CNR'
8288 AND MSII.ORGANIZATION_ID = l_org_id
8289 AND 'S' = ( SELECT MAX( ICC.ITEM_NUM_GEN_METHOD ) KEEP (DENSE_RANK FIRST ORDER BY LEVEL)
8290 FROM MTL_ITEM_CATALOG_GROUPS_B ICC
8291 WHERE ICC.ITEM_NUM_GEN_METHOD IS NOT NULL
8292 AND ICC.ITEM_NUM_GEN_METHOD <> 'I'
8293 CONNECT BY PRIOR ICC.PARENT_CATALOG_GROUP_ID = ICC.ITEM_CATALOG_GROUP_ID
8294 START WITH ICC.ITEM_CATALOG_GROUP_ID = MSII.ITEM_CATALOG_GROUP_ID
8295 );
8296
8297 Debug_Conc_Log('Resolve_Child_Entities - After updating Sequence Generated Item Numbers' );
8298 */
8299 -- update all records with confirm_status='CC', 'CM' to ready, where conditions are satisfied
8300 UPDATE
8301 MTL_SYSTEM_ITEMS_INTERFACE MSII
8302 SET CONFIRM_STATUS = (
8303 CASE
8304 WHEN
8305 (NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8306 1 <> (SELECT COUNT(*)
8307 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8308 WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8309 AND MIRI.PROCESS_FLAG = 0
8310 AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8311 AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8312 AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8313 AND MIRI.REVISION IS NOT NULL
8314 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8315 AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'))
8316 THEN CONFIRM_STATUS
8317 ELSE CONFIRM_STATUS||'R'
8318 END
8319 )
8320 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8321 AND MSII.PROCESS_FLAG = 0
8322 AND MSII.ORGANIZATION_ID = l_org_id
8323 AND MSII.CONFIRM_STATUS IN ('CC', 'CM');
8324
8325 UPDATE
8326 MTL_SYSTEM_ITEMS_INTERFACE MSII
8327 SET CONFIRM_STATUS = (
8328 CASE
8329 WHEN ( NVL(MSII.REVISION_IMPORT_POLICY, l_import_policy) = 'N' AND
8330 1 <> (SELECT COUNT(*)
8331 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8332 WHERE MIRI.SET_PROCESS_ID = MSII.SET_PROCESS_ID
8333 AND MIRI.PROCESS_FLAG = 0
8334 AND MIRI.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8335 AND MIRI.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8336 AND MIRI.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8337 AND MIRI.REVISION IS NOT NULL
8338 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8339 AND UPPER(MIRI.TRANSACTION_TYPE) = G_TRANS_TYPE_CREATE )
8340 )
8341 THEN CONFIRM_STATUS
8342 ELSE G_FAKE_MATCH_READY
8343 END
8344 )
8345 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8346 AND MSII.PROCESS_FLAG = 0
8347 AND MSII.ORGANIZATION_ID = l_org_id
8348 AND MSII.CONFIRM_STATUS IN ( G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE );
8349
8350 Debug_Conc_Log('Resolve_Child_Entities - After updating confirm status to CMR or CCR' );
8351
8352 IF l_security_predicate IS NOT NULL THEN
8353 Debug_Conc_Log('Resolve_Child_Entities - Need to check privilege' );
8354 -- For the confirmed new case, if there exists an active cross reference which you cannot break
8355 -- update process_flag to 33391
8356 l_sql := q'#
8357 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8358 SET PROCESS_FLAG = 33391
8359 WHERE SET_PROCESS_ID = :p_data_set_id
8360 AND PROCESS_FLAG = 0
8361 AND ORGANIZATION_ID = :org_id
8362 AND CONFIRM_status = 'CNR'
8363 AND EXISTS ( SELECT 1 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8364 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8365 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8366 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8367 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8368 AND NOT #' || l_security_predicate || ' )';
8369
8370 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8371
8372 Debug_Conc_Log('Resolve_Child_Entities - After checking for CNR' );
8373 -- CC/CM:
8374 -- old link and new link are the same:
8375 l_sql := q'#
8376 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8377 SET PROCESS_FLAG = 33390
8378 WHERE SET_PROCESS_ID = :p_data_set_id
8379 AND PROCESS_FLAG = 0
8380 AND ORGANIZATION_ID = :org_id
8381 AND CONFIRM_STATUS IN ('CCR', 'CMR', 'FMR' )
8382 AND EXISTS
8383 (SELECT 1
8384 FROM MTL_CROSS_REFERENCES_VL APPLYSEC
8385 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8386 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8387 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8388 AND APPLYSEC.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8389 AND (APPLYSEC.DESCRIPTION <> MSII.SOURCE_SYSTEM_REFERENCE_DESC OR
8390 (APPLYSEC.DESCRIPTION IS NULL AND MSII.SOURCE_SYSTEM_REFERENCE_DESC IS NOT NULL))
8391 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8392 AND NOT #' || l_security_predicate || ' )';
8393
8394 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8395
8396 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on the link where old link and new link are the same and
8397 source system reference desc is being updated' );
8398 -- old link and new link are not the same:
8399 -- check edit privilege on old item link (if any)
8400 l_sql := q'#
8401 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8402 SET PROCESS_FLAG = 33391
8403 WHERE SET_PROCESS_ID = :p_data_set_id
8404 AND PROCESS_FLAG = 0
8405 AND ORGANIZATION_ID = :org_id
8406 AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8407 AND EXISTS ( SELECT 1
8408 FROM MTL_CROSS_REFERENCES_B APPLYSEC
8409 WHERE APPLYSEC.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8410 AND APPLYSEC.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8411 AND APPLYSEC.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8412 AND APPLYSEC.INVENTORY_ITEM_ID <> MSII.INVENTORY_ITEM_ID
8413 AND SYSDATE BETWEEN NVL(APPLYSEC.START_DATE_ACTIVE, SYSDATE-1) AND NVL(APPLYSEC.END_DATE_ACTIVE, SYSDATE + 1)
8414 AND NOT #' || l_security_predicate || ' )';
8415
8416 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8417
8418 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on old item link (if any) where old link and new link are not the same' );
8419
8420 -- old link and new link are not the same:
8421 -- check edit privilege on new item link
8422 l_sql := q'#
8423 UPDATE MTL_SYSTEM_ITEMS_INTERFACE APPLYSEC
8424 SET PROCESS_FLAG = 33390
8425 WHERE SET_PROCESS_ID = :p_data_set_id
8426 AND PROCESS_FLAG = 0
8427 AND ORGANIZATION_ID = :org_id
8428 AND CONFIRM_STATUS IN ( 'CCR', 'CMR', 'FMR' )
8429 AND NOT #' || l_security_predicate || q'#
8430 AND APPLYSEC.INVENTORY_ITEM_ID IS NOT NULL
8431 AND LNNVL (APPLYSEC.INVENTORY_ITEM_ID =
8432 (SELECT XREF.INVENTORY_ITEM_ID
8433 FROM MTL_CROSS_REFERENCES_B XREF
8434 WHERE XREF.CROSS_REFERENCE = APPLYSEC.SOURCE_SYSTEM_REFERENCE
8435 AND XREF.SOURCE_SYSTEM_ID = APPLYSEC.SOURCE_SYSTEM_ID
8436 AND XREF.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8437 AND SYSDATE BETWEEN NVL(XREF.START_DATE_ACTIVE, SYSDATE-1) AND NVL(XREF.END_DATE_ACTIVE, SYSDATE + 1))) #';
8438
8439 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id;
8440
8441 Debug_Conc_Log( 'Resolve_Child_Entities - After checking security on new item link where old link and new link are not the same' );
8442
8443 Debug_Conc_Log( 'Resolve_Child_Entities - After updating records without privilege to status 33390' );
8444
8445 FOR i IN c_no_privilege_rows LOOP
8446 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8447 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8448 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8449 l_msg_text := FND_MESSAGE.GET;
8450
8451
8452
8453 dumm_status := INVPUOPI.mtl_log_interface_err(
8454 i.ORGANIZATION_ID
8455 ,l_user_id
8456 ,l_login_id
8457 ,l_prog_appid
8458 ,l_prog_id
8459 ,l_request_id
8460 ,i.TRANSACTION_ID
8461 ,l_msg_text
8462 ,'SOURCE_SYSTEM_REFERENCE'
8463 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8464 ,'INV_IOI_ERR'
8465 ,l_err_text);
8466 END LOOP;
8467
8468 FOR i IN c_old_xref_no_priv_row LOOP
8469 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
8470 FND_MESSAGE.SET_TOKEN('ITEM', i.ITEM_NUMBER);
8471 FND_MESSAGE.SET_TOKEN('ORG', i.ORGANIZATION_CODE);
8472 l_msg_text := FND_MESSAGE.GET;
8473
8474 dumm_status := INVPUOPI.mtl_log_interface_err(
8475 i.ORGANIZATION_ID
8476 ,l_user_id
8477 ,l_login_id
8478 ,l_prog_appid
8479 ,l_prog_id
8480 ,l_request_id
8481 ,i.TRANSACTION_ID
8482 ,l_msg_text
8483 ,'SOURCE_SYSTEM_REFERENCE'
8484 ,'MTL_SYSTEM_ITEMS_INTERFACE'
8485 ,'INV_IOI_ERR'
8486 ,l_err_text);
8487 END LOOP;
8488
8489 Debug_Conc_Log('Resolve_Child_Entities - After logging errors for no privilege' );
8490 END IF; --IF l_security_predicate IS NOT NULL THEN
8491
8492 -- ELETUCHY XXX: seems wasteful to overwrite transaction type to sync rather than update, no?
8493 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8494 SET PROCESS_FLAG = 1
8495 , TRANSACTION_TYPE = CASE
8496 WHEN CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8497 ELSE G_TRANS_TYPE_UPDATE
8498 END
8499 -- ELETUCHY Bug 5316904: Should not attempt to change ICC from source system batch
8500 , ITEM_CATALOG_GROUP_ID = CASE
8501 WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_ID
8502 ELSE NULL
8503 END
8504 , ITEM_CATALOG_GROUP_NAME = CASE
8505 WHEN CONFIRM_STATUS = 'CNR' THEN ITEM_CATALOG_GROUP_NAME
8506 ELSE NULL
8507 END
8508 WHERE SET_PROCESS_ID = p_data_set_id
8509 AND PROCESS_FLAG = 0
8510 AND CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR' )
8511 AND ORGANIZATION_ID = l_org_id;
8512
8513 -- ELETUCHY: these fake rows will never be processed by IOI, so putting trans_type to UPDATE is reasonable
8514 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
8515 SET PROCESS_FLAG = 1,
8516 TRANSACTION_TYPE = G_TRANS_TYPE_UPDATE,
8517 CONFIRM_STATUS = G_FAKE_CONF_STATUS_FLAG
8518 WHERE SET_PROCESS_ID = p_data_set_id
8519 AND PROCESS_FLAG = 0
8520 AND CONFIRM_STATUS = G_FAKE_MATCH_READY
8521 AND ORGANIZATION_ID = l_org_id;
8522
8523 Debug_Conc_Log('Resolve_Child_Entities - Done with master item rows' );
8524
8525 -- updating item_number, item_id from MSII table
8526 -- for child items
8527 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8528 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID, ITEM_CATALOG_GROUP_NAME, STYLE_ITEM_FLAG, STYLE_ITEM_ID ) =
8529 (SELECT
8530 1,
8531 (CASE
8532 WHEN MSII2.CONFIRM_STATUS = 'CNR'
8533 THEN 'CREATE'
8534 ELSE 'SYNC'
8535 END),
8536 MSII2.INVENTORY_ITEM_ID,
8537 MSII2.ITEM_NUMBER,
8538 MSII2.ITEM_CATALOG_GROUP_ID,
8539 MSII2.ITEM_CATALOG_GROUP_NAME,
8540 NVL(MSII.STYLE_ITEM_FLAG, MSII2.STYLE_ITEM_FLAG),
8541 NVL(MSII.STYLE_ITEM_ID, MSII2.STYLE_ITEM_ID)
8542 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8543 WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8544 AND MSII2.PROCESS_FLAG = 1
8545 AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8546 AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8547 AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8548 AND MSII2.ORGANIZATION_ID = l_org_id
8549 AND ROWNUM = 1
8550 )
8551 WHERE MSII.PROCESS_FLAG = 0
8552 AND MSII.CONFIRM_STATUS IS NULL
8553 AND MSII.SET_PROCESS_ID = p_data_set_id
8554 AND EXISTS (SELECT NULL FROM MTL_PARAMETERS mp
8555 WHERE mp.ORGANIZATION_ID = MSII.ORGANIZATION_ID
8556 AND mp.MASTER_ORGANIZATION_ID = l_org_id
8557 AND mp.MASTER_ORGANIZATION_ID <> mp.ORGANIZATION_ID
8558 )
8559 AND EXISTS (SELECT NULL
8560 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8561 WHERE MSII2.SET_PROCESS_ID = p_data_set_id
8562 AND MSII2.PROCESS_FLAG = 1
8563 AND MSII2.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8564 AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8565 AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8566 AND MSII2.ORGANIZATION_ID = l_org_id);
8567
8568 Debug_Conc_Log('Resolve_Child_Entities - After resolving child items' );
8569
8570 -- updating item_number, item_id from MSII table
8571 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8572 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8573 (SELECT
8574 1,
8575 (CASE
8576 WHEN MSII.CONFIRM_STATUS = 'CNR'
8577 THEN 'CREATE'
8578 WHEN MIRI.TRANSACTION_TYPE <> 'SYNC'
8579 THEN MIRI.TRANSACTION_TYPE
8580 WHEN EXISTS (SELECT 1
8581 FROM MTL_ITEM_REVISIONS_B MIR
8582 WHERE MIR.INVENTORY_ITEM_ID = MSII.INVENTORY_ITEM_ID
8583 AND MIR.ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8584 AND MIR.REVISION = MIRI.REVISION)
8585 THEN 'UPDATE'
8586 ELSE 'CREATE'
8587 END),
8588 MSII.INVENTORY_ITEM_ID,
8589 MSII.ITEM_NUMBER
8590 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8591 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8592 AND MSII.PROCESS_FLAG = 1
8593 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8594 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8595 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8596 AND MSII.ORGANIZATION_ID = l_org_id
8597 AND ROWNUM = 1
8598 )
8599 WHERE MIRI.PROCESS_FLAG = 0
8600 AND MIRI.SET_PROCESS_ID = p_data_set_id
8601 AND EXISTS (SELECT NULL
8602 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8603 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8604 AND MSII.PROCESS_FLAG = 1
8605 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8606 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8607 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8608 AND MSII.ORGANIZATION_ID = l_org_id);
8609
8610 Debug_Conc_Log('Resolve_Child_Entities - After resolving revision rows' );
8611 -- updating item_number, item_id from MSII table
8612 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
8613 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8614 (SELECT
8615 1,
8616 (CASE
8617 WHEN MSII.CONFIRM_STATUS = 'CNR'
8618 THEN 'CREATE'
8619 ELSE MICI.TRANSACTION_TYPE
8620 END),
8621 MSII.INVENTORY_ITEM_ID,
8622 MSII.ITEM_NUMBER
8623 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8624 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8625 AND MSII.PROCESS_FLAG = 1
8626 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8627 AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8628 AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8629 AND MSII.ORGANIZATION_ID = l_org_id
8630 AND ROWNUM = 1
8631 )
8632 WHERE MICI.PROCESS_FLAG = 0
8633 AND MICI.SET_PROCESS_ID = p_data_set_id
8634 AND EXISTS (SELECT NULL
8635 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8636 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8637 AND MSII.PROCESS_FLAG = 1
8638 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8639 AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
8640 AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
8641 AND MSII.ORGANIZATION_ID = l_org_id);
8642
8643 Debug_Conc_Log('Resolve_Child_Entities - After resolving categories rows' );
8644 -- updating item_number, item_id from MSII table
8645 UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8646 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER, ITEM_CATALOG_GROUP_ID) =
8647 (SELECT
8648 1,
8649 (CASE
8650 WHEN UPPER(ATTRS.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8651 WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8652 ELSE G_TRANS_TYPE_SYNC
8653 END),
8654 MSII.INVENTORY_ITEM_ID,
8655 MSII.ITEM_NUMBER,
8656 NVL(ATTRS.ITEM_CATALOG_GROUP_ID, MSII.ITEM_CATALOG_GROUP_ID)
8657 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8658 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8659 AND MSII.PROCESS_FLAG = 1
8660 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8661 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8662 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8663 AND MSII.ORGANIZATION_ID = l_org_id
8664 AND ROWNUM = 1
8665 )
8666 WHERE ATTRS.PROCESS_STATUS = 0
8667 AND ATTRS.DATA_SET_ID = p_data_set_id
8668 AND EXISTS (SELECT NULL
8669 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8670 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8671 AND MSII.PROCESS_FLAG = 1
8672 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8673 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8674 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8675 AND MSII.ORGANIZATION_ID = l_org_id);
8676
8677 Debug_Conc_Log('Resolve_Child_Entities - After resolving user defined attrs rows' );
8678
8679 UPDATE EGO_ITM_USR_ATTR_INTRFC ATTRS
8680 SET REVISION = (
8681 CASE (SELECT
8682 CASE
8683 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8684 AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8685 THEN '1'
8686 WHEN MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8687 AND (MSII.REVISION_IMPORT_POLICY = 'N' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'N'))
8688 THEN '2'
8689 WHEN MSII.CONFIRM_STATUS = 'CNR'
8690 THEN '3'
8691 END
8692 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8693 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8694 AND MSII.PROCESS_FLAG = 1
8695 AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8696 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8697 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8698 AND MSII.ORGANIZATION_ID = l_org_id
8699 )
8700 WHEN '1'
8701 THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8702 FROM MTL_ITEM_REVISIONS_B
8703 WHERE INVENTORY_ITEM_ID = ATTRS.INVENTORY_ITEM_ID
8704 AND ORGANIZATION_ID = ATTRS.ORGANIZATION_ID)
8705 WHEN '2'
8706 THEN (SELECT REVISION
8707 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
8708 WHERE MIRI.SET_PROCESS_ID = ATTRS.DATA_SET_ID
8709 AND MIRI.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8710 AND MIRI.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8711 AND MIRI.ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8712 AND MIRI.REVISION IS NOT NULL
8713 AND MIRI.EFFECTIVITY_DATE IS NOT NULL
8714 AND UPPER(MIRI.TRANSACTION_TYPE) = 'CREATE'
8715 AND ROWNUM = 1
8716 )
8717 WHEN '3'
8718 THEN (SELECT STARTING_REVISION
8719 FROM MTL_PARAMETERS
8720 WHERE ORGANIZATION_ID = ATTRS.ORGANIZATION_ID
8721 )
8722 END)
8723 WHERE ATTRS.PROCESS_STATUS = 1
8724 AND ATTRS.DATA_SET_ID = p_data_set_id
8725 AND ATTRS.REVISION IS NULL
8726 AND EXISTS (SELECT NULL
8727 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8728 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8729 AND MSII.PROCESS_FLAG = 1
8730 AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8731 AND MSII.SOURCE_SYSTEM_ID = ATTRS.SOURCE_SYSTEM_ID
8732 AND MSII.SOURCE_SYSTEM_REFERENCE = ATTRS.SOURCE_SYSTEM_REFERENCE
8733 AND MSII.ORGANIZATION_ID = l_org_id)
8734 AND EXISTS (SELECT NULL
8735 FROM EGO_OBJ_AG_ASSOCS_B A, EGO_FND_DSC_FLX_CTX_EXT EXT
8736 WHERE A.ATTR_GROUP_ID = EXT.ATTR_GROUP_ID
8737 AND A.OBJECT_ID = (SELECT OBJECT_ID FROM FND_OBJECTS WHERE OBJ_NAME = 'EGO_ITEM')
8738 AND EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = ATTRS.ATTR_GROUP_INT_NAME
8739 AND EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL(ATTRS.ATTR_GROUP_TYPE, 'EGO_ITEMMGMT_GROUP')
8740 AND EXT.APPLICATION_ID = 431
8741 AND A.DATA_LEVEL = 'ITEM_REVISION_LEVEL');
8742
8743 Debug_Conc_Log('Resolve_Child_Entities - After resolving user attrs intf table for revision' );
8744 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8745 SET (REVISION, TRANSACTION_TYPE) =
8746 (SELECT
8747 (CASE
8748 WHEN (EXISTS (SELECT NULL
8749 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8750 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8751 AND MSII.PROCESS_FLAG = 1
8752 AND MSII.CONFIRM_STATUS IN ('CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8753 AND (MSII.REVISION_IMPORT_POLICY = 'L' OR (MSII.REVISION_IMPORT_POLICY IS NULL AND l_import_policy = 'L'))
8754 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8755 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8756 AND MSII.ORGANIZATION_ID = l_org_id)
8757 )
8758 THEN (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC)
8759 FROM MTL_ITEM_REVISIONS_B
8760 WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
8761 AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
8762 WHEN (EXISTS (SELECT NULL
8763 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8764 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8765 AND MSII.PROCESS_FLAG = 1
8766 AND MSII.CONFIRM_STATUS = 'CNR'
8767 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8768 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8769 AND MSII.ORGANIZATION_ID = l_org_id)
8770 )
8771 THEN (SELECT STARTING_REVISION
8772 FROM MTL_PARAMETERS
8773 WHERE ORGANIZATION_ID = MIRI.ORGANIZATION_ID
8774 )
8775 END) AS REVISION,
8776 'SYNC' AS TRANSACTION_TYPE
8777 FROM DUAL)
8778 WHERE MIRI.PROCESS_FLAG = 1
8779 AND MIRI.SET_PROCESS_ID = p_data_set_id
8780 AND MIRI.REVISION IS NULL
8781 AND EXISTS (SELECT NULL
8782 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8783 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8784 AND MSII.PROCESS_FLAG = 1
8785 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8786 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8787 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8788 AND MSII.ORGANIZATION_ID = l_org_id);
8789
8790 Debug_Conc_Log('Resolve_Child_Entities - After resolving item revisions interface table for revision' );
8791 -- updating item_number, item_id from MSII table
8792 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
8793 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8794 (SELECT
8795 1,
8796 (CASE
8797 WHEN MSII.CONFIRM_STATUS = 'CNR'
8798 THEN 'CREATE'
8799 ELSE 'SYNC'
8800 END),
8801 MSII.INVENTORY_ITEM_ID,
8802 MSII.ITEM_NUMBER
8803 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8804 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8805 AND MSII.PROCESS_FLAG = 1
8806 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8807 AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8808 AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8809 AND MSII.ORGANIZATION_ID = l_org_id
8810 AND ROWNUM = 1
8811 )
8812 WHERE EIPI.PROCESS_STATUS = 0
8813 AND EIPI.DATA_SET_ID = p_data_set_id
8814 AND EXISTS (SELECT NULL
8815 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8816 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8817 AND MSII.PROCESS_FLAG = 1
8818 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8819 AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
8820 AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
8821 AND MSII.ORGANIZATION_ID = l_org_id);
8822
8823 Debug_Conc_Log('Resolve_Child_Entities - After resolving item people rows' );
8824 -- updating item_number, item_id from MSII table
8825 UPDATE EGO_AML_INTF EAI
8826 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8827 (SELECT
8828 1,
8829 (CASE
8830 WHEN UPPER(EAI.TRANSACTION_TYPE) = G_TRANS_TYPE_DELETE THEN G_TRANS_TYPE_DELETE
8831 WHEN MSII.CONFIRM_STATUS = 'CNR' THEN G_TRANS_TYPE_CREATE
8832 ELSE G_TRANS_TYPE_SYNC
8833 END),
8834 MSII.INVENTORY_ITEM_ID,
8835 MSII.ITEM_NUMBER
8836 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8837 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8838 AND MSII.PROCESS_FLAG = 1
8839 AND MSII.CONFIRM_STATUS IN ( 'CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG )
8840 AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8841 AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8842 AND MSII.ORGANIZATION_ID = l_org_id
8843 AND ROWNUM = 1
8844 )
8845 WHERE EAI.PROCESS_FLAG = 0
8846 AND EAI.DATA_SET_ID = p_data_set_id
8847 AND EXISTS (SELECT NULL
8848 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8849 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8850 AND MSII.PROCESS_FLAG = 1
8851 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8852 AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
8853 AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
8854 AND MSII.ORGANIZATION_ID = l_org_id);
8855
8856 Debug_Conc_Log( 'Resolve_Child_Entities - After resolving aml rows' );
8857
8858 -- updating item_number, item_id from MSII table
8859 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
8860 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID, ITEM_NUMBER) =
8861 (SELECT
8862 1,
8863 (CASE
8864 WHEN MSII.CONFIRM_STATUS = 'CNR'
8865 THEN 'CREATE'
8866 ELSE EIAI.TRANSACTION_TYPE
8867 END),
8868 MSII.INVENTORY_ITEM_ID,
8869 MSII.ITEM_NUMBER
8870 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8871 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8872 AND MSII.PROCESS_FLAG = 1
8873 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8874 AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8875 AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8876 AND MSII.ORGANIZATION_ID = l_org_id
8877 AND ROWNUM = 1
8878 )
8879 WHERE EIAI.PROCESS_FLAG = 0
8880 AND EIAI.BATCH_ID = p_data_set_id
8881 AND EXISTS (SELECT NULL
8882 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8883 WHERE MSII.SET_PROCESS_ID = p_data_set_id
8884 AND MSII.PROCESS_FLAG = 1
8885 AND MSII.CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR', G_FAKE_CONF_STATUS_FLAG)
8886 AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
8887 AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
8888 AND MSII.ORGANIZATION_ID = l_org_id);
8889
8890 Debug_Conc_Log('Resolve_Child_Entities - After resolving intersection rows' );
8891 -- getting security predicate
8892 EGO_DATA_SECURITY.get_security_predicate(
8893 p_api_version => 1.0
8894 ,p_function => 'EGO_VIEW_SS_ITEM_XREFS'
8895 ,p_object_name => 'EGO_ITEM'
8896 ,p_user_name => l_party_name
8897 ,p_statement_type => 'EXISTS'
8898 ,p_pk1_alias => 'MCR.INVENTORY_ITEM_ID'
8899 ,p_pk2_alias => l_org_id
8900 ,x_predicate => l_security_predicate
8901 ,x_return_status => l_return_status
8902 );
8903
8904 IF l_security_predicate IS NULL THEN
8905 l_security_predicate := ' AND 1=1 ';
8906 ELSE
8907 l_security_predicate := ' AND '||l_security_predicate;
8908 END IF;
8909
8910 Debug_Conc_Log('Resolve_Child_Entities - Security Predicate - '||l_security_predicate);
8911
8912 -- updating all the child entities, which do not have parent in mtl_system_items_interface
8913 -- updating the items and org assignments
8914
8915 -- Note that using q'# is a new feature of 10g. By using this syntax, we can put as many single quotes within
8916 -- the string. for example q'# This is Devendra's code #'
8917 l_sql := q'#
8918 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
8919 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
8920 (SELECT
8921 1,
8922 NVL(MSII.TRANSACTION_TYPE, 'SYNC'),
8923 MCR.INVENTORY_ITEM_ID
8924 FROM MTL_CROSS_REFERENCES_B MCR
8925 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8926 AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8927 AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8928 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
8929 AND ROWNUM = 1
8930 )
8931 WHERE MSII.SET_PROCESS_ID = :p_data_set_id
8932 AND MSII.PROCESS_FLAG = 0
8933 -- PICK ONLY CHILD ITEMS
8934 AND EXISTS (SELECT NULL
8935 FROM MTL_PARAMETERS MP
8936 WHERE MP.MASTER_ORGANIZATION_ID = :l_org_id
8937 AND MP.ORGANIZATION_ID <> MP.MASTER_ORGANIZATION_ID
8938 AND MP.ORGANIZATION_ID = MSII.ORGANIZATION_ID)
8939 -- CHILD MUST NOT HAVE A MASTER RECORD IN CURRENT BATCH
8940 AND NOT EXISTS (SELECT NULL
8941 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII2
8942 WHERE MSII2.PROCESS_FLAG in (0, 1, 33390,33391)
8943 AND MSII2.SET_PROCESS_ID = :p_data_set_id1
8944 AND MSII2.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8945 AND MSII2.SOURCE_SYSTEM_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8946 AND MSII2.ORGANIZATION_ID = :l_org_id1
8947 )
8948 -- HAS A CROSS REFERENCE
8949 AND EXISTS (SELECT NULL
8950 FROM MTL_CROSS_REFERENCES_B MCR
8951 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8952 AND MCR.CROSS_REFERENCE = MSII.SOURCE_SYSTEM_REFERENCE
8953 AND MCR.SOURCE_SYSTEM_ID = MSII.SOURCE_SYSTEM_ID
8954 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE - 1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE + 1)
8955 #'||l_security_predicate||')';
8956
8957 EXECUTE IMMEDIATE l_sql USING p_data_set_id, l_org_id, p_data_set_id, l_org_id;
8958
8959 Debug_Conc_Log('Resolve_Child_Entities - After updating items intf table for child items that has XXref' );
8960
8961 -- updating the item revisions
8962 l_sql := q'#
8963 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
8964 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
8965 (SELECT
8966 1,
8967 NVL(MIRI.TRANSACTION_TYPE, 'SYNC'),
8968 MCR.INVENTORY_ITEM_ID
8969 FROM MTL_CROSS_REFERENCES_B MCR
8970 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8971 AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8972 AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8973 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
8974 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
8975 AND ROWNUM = 1
8976 )
8977 WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
8978 AND MIRI.PROCESS_FLAG = 0
8979 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
8980 AND NOT EXISTS (SELECT NULL
8981 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
8982 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
8983 AND MSII.SET_PROCESS_ID = :p_data_set_id1
8984 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8985 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8986 AND MSII.ORGANIZATION_ID = :l_org_id
8987 )
8988 -- HAS A CROSS REFERENCE
8989 AND EXISTS (SELECT NULL
8990 FROM MTL_CROSS_REFERENCES_B MCR
8991 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
8992 AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
8993 AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
8994 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
8995 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
8996 #'||l_security_predicate||')';
8997
8998 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
8999
9000 Debug_Conc_Log('Resolve_Child_Entities - After updating revisions intf table for items that has XXref' );
9001
9002 -- updating the item revisions where revision is null and revision_import_policy is Update Latest
9003 -- Bug: 5476972
9004 IF l_import_policy = 'L' THEN
9005 l_sql := q'#
9006 UPDATE MTL_ITEM_REVISIONS_INTERFACE MIRI
9007 SET (REVISION, TRANSACTION_TYPE) =
9008 (SELECT MAX(REVISION) KEEP (DENSE_RANK FIRST ORDER BY EFFECTIVITY_DATE DESC), 'UPDATE'
9009 FROM MTL_ITEM_REVISIONS_B
9010 WHERE INVENTORY_ITEM_ID = MIRI.INVENTORY_ITEM_ID
9011 AND ORGANIZATION_ID = MIRI.ORGANIZATION_ID)
9012 WHERE MIRI.SET_PROCESS_ID = :p_data_set_id
9013 AND MIRI.PROCESS_FLAG = 1
9014 AND MIRI.REVISION IS NULL
9015 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9016 AND NOT EXISTS (SELECT NULL
9017 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9018 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9019 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9020 AND MSII.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9021 AND MSII.SOURCE_SYSTEM_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9022 AND MSII.ORGANIZATION_ID = :l_org_id
9023 )
9024 -- HAS A CROSS REFERENCE
9025 AND EXISTS (SELECT NULL
9026 FROM MTL_CROSS_REFERENCES_B MCR
9027 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9028 AND MCR.CROSS_REFERENCE = MIRI.SOURCE_SYSTEM_REFERENCE
9029 AND MCR.SOURCE_SYSTEM_ID = MIRI.SOURCE_SYSTEM_ID
9030 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9031 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9032 #'||l_security_predicate||')';
9033
9034 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9035
9036 Debug_Conc_Log('Resolve_Child_Entities - After updating REVISION in revisions intf table for items that has XXref' );
9037 END IF;
9038
9039 -- updating the item category assignments
9040 l_sql := q'#
9041 UPDATE MTL_ITEM_CATEGORIES_INTERFACE MICI
9042 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9043 (SELECT
9044 1,
9045 MICI.TRANSACTION_TYPE,
9046 MCR.INVENTORY_ITEM_ID
9047 FROM MTL_CROSS_REFERENCES_B MCR
9048 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9049 AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9050 AND MCR.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9051 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9052 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9053 AND ROWNUM = 1
9054 )
9055 WHERE MICI.SET_PROCESS_ID = :p_data_set_id
9056 AND MICI.PROCESS_FLAG = 0
9057 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9058 AND NOT EXISTS (SELECT NULL
9059 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9060 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9061 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9062 AND MSII.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9063 AND MSII.SOURCE_SYSTEM_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9064 AND MSII.ORGANIZATION_ID = :l_org_id
9065 )
9066 -- HAS A CROSS REFERENCE
9067 AND EXISTS (SELECT NULL
9068 FROM MTL_CROSS_REFERENCES_B MCR
9069 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9070 AND MCR.CROSS_REFERENCE = MICI.SOURCE_SYSTEM_REFERENCE
9071 AND MCR.SOURCE_SYSTEM_ID = MICI.SOURCE_SYSTEM_ID
9072 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9073 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9074 #'||l_security_predicate||')';
9075
9076 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9077
9078 Debug_Conc_Log('Resolve_Child_Entities - After updating categories intf table for items that has XXref');
9079
9080 -- updating the item people
9081 l_sql := q'#
9082 UPDATE EGO_ITEM_PEOPLE_INTF EIPI
9083 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9084 (SELECT
9085 1,
9086 NVL(EIPI.TRANSACTION_TYPE, 'SYNC'),
9087 MCR.INVENTORY_ITEM_ID
9088 FROM MTL_CROSS_REFERENCES_B MCR
9089 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9090 AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9091 AND MCR.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9092 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9093 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9094 AND ROWNUM = 1
9095 )
9096 WHERE EIPI.DATA_SET_ID = :p_data_set_id
9097 AND EIPI.PROCESS_STATUS = 0
9098 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9099 AND NOT EXISTS (SELECT NULL
9100 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9101 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9102 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9103 AND MSII.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9104 AND MSII.SOURCE_SYSTEM_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9105 AND MSII.ORGANIZATION_ID = :l_org_id
9106 )
9107 -- HAS A CROSS REFERENCE
9108 AND EXISTS (SELECT NULL
9109 FROM MTL_CROSS_REFERENCES_B MCR
9110 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9111 AND MCR.CROSS_REFERENCE = EIPI.SOURCE_SYSTEM_REFERENCE
9112 AND MCR.SOURCE_SYSTEM_ID = EIPI.SOURCE_SYSTEM_ID
9113 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9114 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9115 #'||l_security_predicate||')';
9116
9117 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9118
9119 Debug_Conc_Log('Resolve_Child_Entities - After updating item people intf table for items that has XXref');
9120
9121 -- updating the item user defined attributes interface
9122 l_sql := q'#
9123 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
9124 SET (PROCESS_STATUS, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9125 (SELECT
9126 1,
9127 NVL(EIUAI.TRANSACTION_TYPE, 'SYNC'),
9128 MCR.INVENTORY_ITEM_ID
9129 FROM MTL_CROSS_REFERENCES_B MCR
9130 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9131 AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9132 AND MCR.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9133 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9134 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9135 AND ROWNUM = 1
9136 )
9137 WHERE EIUAI.DATA_SET_ID = :p_data_set_id
9138 AND EIUAI.PROCESS_STATUS = 0
9139 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9140 AND NOT EXISTS (SELECT NULL
9141 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9142 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9143 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9144 AND MSII.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9145 AND MSII.SOURCE_SYSTEM_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9146 AND MSII.ORGANIZATION_ID = :l_org_id
9147 )
9148 -- HAS A CROSS REFERENCE
9149 AND EXISTS (SELECT NULL
9150 FROM MTL_CROSS_REFERENCES_B MCR
9151 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9152 AND MCR.CROSS_REFERENCE = EIUAI.SOURCE_SYSTEM_REFERENCE
9153 AND MCR.SOURCE_SYSTEM_ID = EIUAI.SOURCE_SYSTEM_ID
9154 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9155 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9156 #'||l_security_predicate||')';
9157
9158 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9159
9160 Debug_Conc_Log('Resolve_Child_Entities - After updating user attrs intf table for items that has XXref');
9161
9162 -- updating the item AML interface
9163 l_sql := q'#
9164 UPDATE EGO_AML_INTF EAI
9165 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9166 (SELECT
9167 1,
9168 NVL(EAI.TRANSACTION_TYPE, 'SYNC'),
9169 MCR.INVENTORY_ITEM_ID
9170 FROM MTL_CROSS_REFERENCES_B MCR
9171 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9172 AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9173 AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9174 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9175 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9176 AND ROWNUM = 1
9177 )
9178 WHERE EAI.DATA_SET_ID = :p_data_set_id
9179 AND EAI.PROCESS_FLAG = 0
9180 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9181 AND NOT EXISTS (SELECT NULL
9182 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9183 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390, 33391)
9184 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9185 AND MSII.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9186 AND MSII.SOURCE_SYSTEM_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9187 AND MSII.ORGANIZATION_ID = :l_org_id
9188 )
9189 -- HAS A CROSS REFERENCE
9190 AND EXISTS (SELECT NULL
9191 FROM MTL_CROSS_REFERENCES_B MCR
9192 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9193 AND MCR.CROSS_REFERENCE = EAI.SOURCE_SYSTEM_REFERENCE
9194 AND MCR.SOURCE_SYSTEM_ID = EAI.SOURCE_SYSTEM_ID
9195 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9196 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9197 #'||l_security_predicate||')';
9198
9199 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9200
9201 Debug_Conc_Log('Resolve_Child_Entities - After updating aml intf table for items that has XXref');
9202
9203 -- updating the item intersections
9204 l_sql := q'#
9205 UPDATE EGO_ITEM_ASSOCIATIONS_INTF EIAI
9206 SET (PROCESS_FLAG, TRANSACTION_TYPE, INVENTORY_ITEM_ID) =
9207 (SELECT
9208 1,
9209 EIAI.TRANSACTION_TYPE,
9210 MCR.INVENTORY_ITEM_ID
9211 FROM MTL_CROSS_REFERENCES_B MCR
9212 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9213 AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9214 AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9215 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9216 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9217 AND ROWNUM = 1
9218 )
9219 WHERE EIAI.BATCH_ID = :p_data_set_id
9220 AND EIAI.PROCESS_FLAG = 0
9221 -- MUST NOT HAVE A MASTER ITEM RECORD IN CURRENT BATCH
9222 AND NOT EXISTS (SELECT NULL
9223 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
9224 WHERE MSII.PROCESS_FLAG IN (0, 1, 33390,33391)
9225 AND MSII.SET_PROCESS_ID = :p_data_set_id1
9226 AND MSII.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9227 AND MSII.SOURCE_SYSTEM_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9228 AND MSII.ORGANIZATION_ID = :l_org_id
9229 )
9230 -- HAS A CROSS REFERENCE
9231 AND EXISTS (SELECT NULL
9232 FROM MTL_CROSS_REFERENCES_B MCR
9233 WHERE MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9234 AND MCR.CROSS_REFERENCE = EIAI.SOURCE_SYSTEM_REFERENCE
9235 AND MCR.SOURCE_SYSTEM_ID = EIAI.SOURCE_SYSTEM_ID
9236 AND (MCR.START_DATE_ACTIVE < SYSDATE OR MCR.START_DATE_ACTIVE IS NULL)
9237 AND (MCR.END_DATE_ACTIVE > SYSDATE OR MCR.END_DATE_ACTIVE IS NULL)
9238 #'||l_security_predicate||')';
9239
9240 EXECUTE IMMEDIATE l_sql USING p_data_set_id, p_data_set_id, l_org_id;
9241
9242 Debug_Conc_Log('Resolve_Child_Entities - After updating intersections intf table for items that has XXref');
9243
9244 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9245 SET REQUEST_ID = CASE PROCESS_FLAG
9246 WHEN 33390 THEN l_request_id
9247 WHEN 33391 THEN l_request_id
9248 ELSE REQUEST_ID
9249 END,
9250 PROCESS_FLAG = CASE PROCESS_FLAG
9251 WHEN 33390 THEN 3
9252 WHEN 33391 THEN 3
9253 ELSE PROCESS_FLAG
9254 END,
9255 CONFIRM_STATUS = SUBSTR(CONFIRM_STATUS, 1, 2)
9256 WHERE SET_PROCESS_ID = p_data_set_id
9257 AND PROCESS_FLAG IN (1, 33390, 33391)
9258 AND CONFIRM_STATUS IN ('CNR', 'CMR', 'CCR')
9259 AND ORGANIZATION_ID = l_org_id;
9260 Debug_Conc_Log( 'Resolve_Child_Entities - Resolved pre-IOI process flag, request_id for ' || SQL%ROWCOUNT || ' rows' );
9261
9262 /*
9263 * Note that setting the process flag to 7 does not interfere with the source system cross-reference
9264 * import because that bulk-loader looks for process flag 7 with the request id of the calling request.
9265 * Since both that code (Process_SSXref_Intf_Rows) and this chunk are executed within the auspices of
9266 * the same concurrent request, the cross-ref import will work correctly.
9267 */
9268 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9269 SET REQUEST_ID = l_request_id
9270 , PROCESS_FLAG = CASE PROCESS_FLAG
9271 WHEN 33390 THEN 3
9272 WHEN 33391 THEN 3
9273 ELSE 7
9274 END
9275 WHERE SET_PROCESS_ID = p_data_set_id
9276 AND PROCESS_FLAG IN (1, 33390, 33391)
9277 AND CONFIRM_STATUS IN ( G_FAKE_CONF_STATUS_FLAG, G_CONF_MATCH_FAKE, G_CONF_XREF_FAKE )
9278 AND ORGANIZATION_ID = l_org_id;
9279 Debug_Conc_Log( 'Resolve_Child_Entities - Stamped request_id and final process flag on ' || SQL%ROWCOUNT || ' inserted rows' );
9280
9281 IF l_enabled_for_data_pool = 'N' THEN
9282 Debug_Conc_Log('Resolve_Child_Entities - Calling Merge_Batch_For_Import');
9283 Merge_Batch_For_Import(p_data_set_id, l_org_id);
9284 Debug_Conc_Log('Resolve_Child_Entities - Done Merge_Batch_For_Import');
9285
9286 Debug_Conc_Log('Resolve_Child_Entities - Calling Clean_Up_UDA_Row_Idents');
9287 Clean_Up_UDA_Row_Idents( p_batch_id => p_data_set_id,
9288 p_process_status => 1,
9289 p_ignore_item_num_upd => FND_API.G_FALSE,
9290 p_commit => FND_API.G_FALSE );
9291
9292 Debug_Conc_Log('Resolve_Child_Entities - Clean_Up_UDA_Row_Idents Done.');
9293 ELSE
9294 Debug_Conc_Log('Resolve_Child_Entities - Not calling Merge_Batch_For_Import, because this batch is enabled for data pool');
9295 END IF;
9296
9297 Debug_Conc_Log('Resolve_Child_Entities - Resolving Style_Item_Flag');
9298 UPDATE MTL_SYSTEM_ITEMS_INTERFACE msii
9299 SET (STYLE_ITEM_FLAG, STYLE_ITEM_ID) = (SELECT
9300 DECODE(MAX(NVL(msik.STYLE_ITEM_FLAG, '$NULL$')),
9301 '$NULL$', msii.STYLE_ITEM_FLAG,
9302 NULL, msii.STYLE_ITEM_FLAG,
9303 'N', 'N',
9304 'Y', 'Y'
9305 ),
9306 NVL(MAX(msik.STYLE_ITEM_ID), msii.STYLE_ITEM_ID)
9307 FROM MTL_SYSTEM_ITEMS_KFV msik, MTL_PARAMETERS mp
9308 WHERE (msii.INVENTORY_ITEM_ID = msik.INVENTORY_ITEM_ID
9309 OR msii.ITEM_NUMBER = msik.CONCATENATED_SEGMENTS)
9310 AND msik.ORGANIZATION_ID = mp.MASTER_ORGANIZATION_ID
9311 AND msii.ORGANIZATION_ID = mp.ORGANIZATION_ID
9312 )
9313 WHERE SET_PROCESS_ID = p_data_set_id
9314 AND PROCESS_FLAG = 1;
9315
9316 Debug_Conc_Log('Resolve_Child_Entities - Done Resolving Style_Item_Flag, rows processed='||SQL%ROWCOUNT);
9317
9318 Debug_Conc_Log('Resolve_Child_Entities END');
9319 IF FND_API.G_TRUE = p_commit THEN
9320 Debug_Conc_Log('Resolve_Child_Entities COMMITING');
9321 COMMIT;
9322 END IF;
9323
9324 END Resolve_Child_Entities;
9325
9326 PROCEDURE Stamp_Row_RequestId( p_request_id IN MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9327 , p_target_rowid IN UROWID
9328 )
9329 IS
9330 BEGIN
9331 IF p_request_id IS NULL THEN RETURN; END IF;
9332
9333 SAVEPOINT do_stamp_row;
9334
9335 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9336 SET REQUEST_ID = p_request_id
9337 WHERE MSII.ROWID = p_target_rowid
9338 AND PROCESS_FLAG = 7
9339 AND ( SOURCE_SYSTEM_ID IS NOT NULL
9340 OR SOURCE_SYSTEM_REFERENCE IS NOT NULL
9341 );
9342
9343 IF 1 <> SQL%ROWCOUNT THEN
9344 ROLLBACK TO do_stamp_row;
9345 -- ELSE
9346 -- COMMIT;
9347 END IF;
9348
9349 RETURN;
9350 END;
9351
9352
9353 PROCEDURE Stamp_RequestId_For_ReImport( p_request_id IN MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE )
9354 IS
9355 l_index PLS_INTEGER;
9356 BEGIN
9357 IF G_MSII_REIMPORT_ROWS IS NOT NULL THEN
9358 l_index := G_MSII_REIMPORT_ROWS.FIRST;
9359 WHILE l_index IS NOT NULL LOOP
9360 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9361 SET REQUEST_ID = p_request_id
9362 WHERE ROWID = G_MSII_REIMPORT_ROWS( l_index );
9363 l_index := G_MSII_REIMPORT_ROWS.next( l_index );
9364 END LOOP;
9365 G_MSII_REIMPORT_ROWS := NULL;
9366 END IF;
9367 END;
9368
9369 PROCEDURE Log_Error_For_ReImport(p_request_id IN MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE
9370 , p_target_rowid IN UROWID
9371 , p_err_msg IN VARCHAR2
9372 )
9373 IS
9374 l_org_id NUMBER;
9375 l_transaction_id NUMBER;
9376 dumm_status VARCHAR2(100);
9377 l_user_id NUMBER := FND_GLOBAL.USER_ID;
9378 l_login_id NUMBER := FND_GLOBAL.LOGIN_ID;
9379 l_prog_appid NUMBER := FND_GLOBAL.PROG_APPL_ID;
9380 l_prog_id NUMBER := FND_GLOBAL.CONC_PROGRAM_ID;
9381 l_err_text VARCHAR2(4000);
9382 BEGIN
9383 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9384 SET REQUEST_ID = p_request_id
9385 WHERE ROWID = p_target_rowid
9386 RETURNING ORGANIZATION_ID, TRANSACTION_ID
9387 INTO l_org_id, l_transaction_id;
9388
9389 dumm_status := INVPUOPI.mtl_log_interface_err(
9390 l_org_id
9391 ,l_user_id
9392 ,l_login_id
9393 ,l_prog_appid
9394 ,l_prog_id
9395 ,p_request_id
9396 ,l_transaction_id
9397 ,p_err_msg
9398 ,'GLOBAL_TRADE_ITEM_NUMBER'
9399 ,'MTL_SYSTEM_ITEMS_INTERFACE'
9400 ,'INV_IOI_ERR'
9401 ,l_err_text);
9402 EXCEPTION WHEN OTHERS THEN
9403 NULL;
9404 END Log_Error_For_ReImport;
9405
9406 PROCEDURE Prepare_Row_For_ReImport
9407 ( p_batch_id IN MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
9408 , p_organization_id IN MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE
9409 , p_target_rowid IN UROWID
9410 , x_return_code OUT NOCOPY NUMBER
9411 , x_err_msg OUT NOCOPY VARCHAR2
9412 )
9413 IS
9414 l_process_flag MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9415 l_ssr MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE;
9416 l_ss_id MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE;
9417 l_ssr_desc MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE_DESC%TYPE;
9418 l_batch_ss_id EGO_IMPORT_BATCHES_B.SOURCE_SYSTEM_ID%TYPE;
9419 l_request_id MTL_SYSTEM_ITEMS_INTERFACE.REQUEST_ID%TYPE;
9420 l_org_id MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE;
9421 l_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9422 l_item_id MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9423 l_ssxref_only EGO_IMPORT_OPTION_SETS.IMPORT_XREF_ONLY%TYPE;
9424
9425 l_is_pdh_batch BOOLEAN;
9426 l_is_reimport BOOLEAN;
9427 l_is_ssxref_only BOOLEAN;
9428 l_reimport_process_status MTL_SYSTEM_ITEMS_INTERFACE.PROCESS_FLAG%TYPE;
9429 l_priv_exists VARCHAR2(1);
9430 l_msg_text VARCHAR2(4000);
9431 l_xref_item_number MTL_SYSTEM_ITEMS_INTERFACE.ITEM_NUMBER%TYPE;
9432 l_xref_item_id MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE;
9433 l_xref_desc MTL_CROSS_REFERENCES.DESCRIPTION%TYPE;
9434 l_org_code MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_CODE%TYPE;
9435 l_party_name VARCHAR2(1000); -- Bug: 5355759
9436 BEGIN
9437 x_return_code := 0;
9438 BEGIN -- CHECK THAT BATCH HAS A HEADER
9439 SELECT BATCH.SOURCE_SYSTEM_ID
9440 , BATCH.ORGANIZATION_ID
9441 , NVL( OPT.IMPORT_XREF_ONLY, 'N' )
9442 INTO l_batch_ss_id
9443 , l_org_id
9444 , l_ssxref_only
9445 FROM EGO_IMPORT_BATCHES_B BATCH, EGO_IMPORT_OPTION_SETS OPT
9446 WHERE BATCH.BATCH_ID = p_batch_id
9447 AND BATCH.ORGANIZATION_ID = p_organization_id
9448 AND BATCH.BATCH_ID = OPT.BATCH_ID;
9449 EXCEPTION
9450 WHEN NO_DATA_FOUND THEN
9451 x_return_code := 20; -- no batch header
9452 RETURN;
9453 END;
9454
9455 l_is_reimport := FALSE;
9456 l_is_pdh_batch := ( l_batch_ss_id = get_pdh_source_system_id );
9457 l_is_ssxref_only := NOT l_is_pdh_batch AND ( 'Y' = l_ssxref_only );
9458 l_party_name := Get_Current_Party_Name; -- Bug: 5355759
9459 IF l_is_pdh_batch THEN
9460 SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9461 -- XXX: Should child updates be attempted first?
9462
9463 -- update/select master item row
9464 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9465 SET PROCESS_FLAG = CASE PROCESS_FLAG
9466 WHEN 3 THEN 1
9467 -- WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9468 ELSE PROCESS_FLAG END
9469 WHERE SET_PROCESS_ID = p_batch_id
9470 AND ORGANIZATION_ID = p_organization_id
9471 AND MSII.ROWID = p_target_rowid
9472 AND PROCESS_FLAG IN ( 3, 7 )
9473 AND ( SOURCE_SYSTEM_ID IS NULL
9474 OR SOURCE_SYSTEM_ID = l_batch_ss_id
9475 )
9476 RETURNING
9477 MSII.PROCESS_FLAG
9478 , MSII.REQUEST_ID
9479 , MSII.INVENTORY_ITEM_ID
9480 , MSII.ITEM_NUMBER
9481 , MSII.ORGANIZATION_ID
9482 INTO
9483 l_process_flag
9484 , l_request_id
9485 , l_item_id
9486 , l_item_number
9487 , l_org_id;
9488
9489 IF 1 <> SQL%ROWCOUNT THEN
9490 ROLLBACK TO do_prepare_master_row;
9491 x_return_code := 10; -- update statement found too many matching master rows, or not enough
9492 RETURN;
9493 END IF;
9494
9495 IF 7 = l_process_flag THEN
9496 -- IF G_MSII_REIMPORT_ROWS IS NULL THEN
9497 -- G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9498 -- END IF;
9499 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9500 -- G_MSII_REIMPORT_ROWS.EXTEND( );
9501 -- G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9502 ELSE
9503 l_is_reimport := TRUE;
9504 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9505 END IF;
9506
9507 IF l_item_id IS NOT NULL THEN
9508 -- xxx: should the item number to use for comparison be fetched from the msii kfv?
9509
9510 -- updating the item's org assignments
9511 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9512 SET PROCESS_FLAG = 1
9513 WHERE ( INVENTORY_ITEM_ID = l_item_id
9514 OR ( ITEM_NUMBER = l_item_number
9515 AND INVENTORY_ITEM_ID IS NULL
9516 )
9517 )
9518 AND PROCESS_FLAG = 3
9519 AND SET_PROCESS_ID = p_batch_id
9520 AND REQUEST_ID = l_request_id
9521 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9522 FROM MTL_PARAMETERS MP
9523 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9524 AND MP.ORGANIZATION_ID <> l_org_id
9525 );
9526 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9527
9528 -- updating item revisions
9529 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
9530 SET PROCESS_FLAG = 1
9531 WHERE ( INVENTORY_ITEM_ID = l_item_id
9532 OR ( ITEM_NUMBER = l_item_number
9533 AND INVENTORY_ITEM_ID IS NULL
9534 )
9535 )
9536 AND PROCESS_FLAG = 3
9537 AND SET_PROCESS_ID = p_batch_id
9538 AND REQUEST_ID = l_request_id
9539 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9540 FROM MTL_PARAMETERS MP
9541 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9542 );
9543 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9544
9545 -- updating item category assignments
9546 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9547 SET PROCESS_FLAG = 1
9548 WHERE ( INVENTORY_ITEM_ID = l_item_id
9549 OR ( ITEM_NUMBER = l_item_number
9550 AND INVENTORY_ITEM_ID IS NULL
9551 )
9552 )
9553 AND PROCESS_FLAG = 3
9554 AND SET_PROCESS_ID = p_batch_id
9555 AND REQUEST_ID = l_request_id
9556 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9557 FROM MTL_PARAMETERS MP
9558 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9559 );
9560 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9561
9562 -- updating item user defined attributes
9563 UPDATE EGO_ITM_USR_ATTR_INTRFC
9564 SET PROCESS_STATUS = 1
9565 WHERE ( INVENTORY_ITEM_ID = l_item_id
9566 OR ( ITEM_NUMBER = l_item_number
9567 AND INVENTORY_ITEM_ID IS NULL
9568 )
9569 )
9570 AND PROCESS_STATUS = 3
9571 AND DATA_SET_ID = p_batch_id
9572 AND REQUEST_ID = l_request_id
9573 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9574 FROM MTL_PARAMETERS MP
9575 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9576 );
9577 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9578
9579 -- updating item people
9580 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9581 SET PROCESS_STATUS = 1
9582 WHERE ( INVENTORY_ITEM_ID = l_item_id
9583 OR ( ITEM_NUMBER = l_item_number
9584 AND INVENTORY_ITEM_ID IS NULL
9585 )
9586 )
9587 AND PROCESS_STATUS = 3
9588 AND DATA_SET_ID = p_batch_id
9589 AND REQUEST_ID = l_request_id
9590 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9591 FROM MTL_PARAMETERS MP
9592 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9593 );
9594 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9595
9596 -- updating item AML
9597 UPDATE EGO_AML_INTF
9598 SET PROCESS_FLAG = 1
9599 WHERE ( INVENTORY_ITEM_ID = l_item_id
9600 OR ( ITEM_NUMBER = l_item_number
9601 AND INVENTORY_ITEM_ID IS NULL
9602 )
9603 )
9604 AND PROCESS_FLAG = 3
9605 AND DATA_SET_ID = p_batch_id
9606 AND REQUEST_ID = l_request_id
9607 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9608 FROM MTL_PARAMETERS MP
9609 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9610 );
9611 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9612
9613 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9614 SET PROCESS_FLAG = 1
9615 WHERE ( INVENTORY_ITEM_ID = l_item_id
9616 OR ( ITEM_NUMBER = l_item_number
9617 AND INVENTORY_ITEM_ID IS NULL
9618 )
9619 )
9620 AND PROCESS_FLAG = 3
9621 AND BATCH_ID = p_batch_id
9622 AND REQUEST_ID = l_request_id
9623 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9624 FROM MTL_PARAMETERS MP
9625 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9626 );
9627 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9628 ELSE -- item id is null
9629 -- updating the item's org assignments
9630 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9631 SET PROCESS_FLAG = 1
9632 WHERE ITEM_NUMBER = l_item_number
9633 AND PROCESS_FLAG = 3
9634 AND SET_PROCESS_ID = p_batch_id
9635 AND REQUEST_ID = l_request_id
9636 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9637 FROM MTL_PARAMETERS MP
9638 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9639 AND MP.ORGANIZATION_ID <> l_org_id
9640 );
9641 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9642
9643 -- updating item revisions
9644 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
9645 SET PROCESS_FLAG = 1
9646 WHERE ITEM_NUMBER = l_item_number
9647 AND PROCESS_FLAG = 3
9648 AND SET_PROCESS_ID = p_batch_id
9649 AND REQUEST_ID = l_request_id
9650 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9651 FROM MTL_PARAMETERS MP
9652 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9653 );
9654 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9655
9656 -- updating item category assignments
9657 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9658 SET PROCESS_FLAG = 1
9659 WHERE ITEM_NUMBER = l_item_number
9660 AND PROCESS_FLAG = 3
9661 AND SET_PROCESS_ID = p_batch_id
9662 AND REQUEST_ID = l_request_id
9663 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9664 FROM MTL_PARAMETERS MP
9665 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9666 );
9667 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9668
9669 -- updating item user defined attributes
9670 UPDATE EGO_ITM_USR_ATTR_INTRFC
9671 SET PROCESS_STATUS = 1
9672 WHERE ITEM_NUMBER = l_item_number
9673 AND PROCESS_STATUS = 3
9674 AND DATA_SET_ID = p_batch_id
9675 AND REQUEST_ID = l_request_id
9676 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9677 FROM MTL_PARAMETERS MP
9678 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9679 );
9680 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9681
9682 -- updating item people
9683 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9684 SET PROCESS_STATUS = 1
9685 WHERE ITEM_NUMBER = l_item_number
9686 AND PROCESS_STATUS = 3
9687 AND DATA_SET_ID = p_batch_id
9688 AND REQUEST_ID = l_request_id
9689 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9690 FROM MTL_PARAMETERS MP
9691 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9692 );
9693 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9694
9695 -- updating item AML
9696 UPDATE EGO_AML_INTF
9697 SET PROCESS_FLAG = 1
9698 WHERE ITEM_NUMBER = l_item_number
9699 AND PROCESS_FLAG = 3
9700 AND DATA_SET_ID = p_batch_id
9701 AND REQUEST_ID = l_request_id
9702 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9703 FROM MTL_PARAMETERS MP
9704 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9705 );
9706 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9707 -- updating item ITEM ASSOCIATIONS
9708 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9709 SET PROCESS_FLAG = 1
9710 WHERE ITEM_NUMBER = l_item_number
9711 AND PROCESS_FLAG = 3
9712 AND BATCH_ID = p_batch_id
9713 AND REQUEST_ID = l_request_id
9714 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9715 FROM MTL_PARAMETERS MP
9716 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9717 );
9718 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9719 END IF;
9720 ELSE -- source system is not PIMDH
9721 SAVEPOINT do_prepare_master_row; -- ENSURES THAT THE UPDATES ARE AN ATOMIC UNIT WITHIN THE TRANSACTION
9722
9723 -- TODO: need to check for cross-reference related security.
9724 -- however, we can't trust confirm status for the errored rows...
9725
9726 -- XXX: Should child updates be attempted first?
9727
9728 -- Bug: 5355759
9729 IF l_is_ssxref_only THEN
9730 l_reimport_process_status := 11;
9731 ELSE
9732 l_reimport_process_status := 1;
9733 END IF;
9734
9735 -- update/select master item row
9736 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9737 SET PROCESS_FLAG = CASE PROCESS_FLAG
9738 WHEN 3 THEN l_reimport_process_status
9739 -- WHEN 7 THEN G_IOI_STAMP_REQUEST_ID_FLAG
9740 ELSE PROCESS_FLAG END
9741 WHERE SET_PROCESS_ID = p_batch_id
9742 AND ORGANIZATION_ID = p_organization_id
9743 AND MSII.ROWID = p_target_rowid
9744 AND PROCESS_FLAG IN ( 3, 7 )
9745 AND SOURCE_SYSTEM_ID IS NOT NULL
9746 AND SOURCE_SYSTEM_REFERENCE IS NOT NULL
9747 RETURNING
9748 MSII.PROCESS_FLAG
9749 , MSII.REQUEST_ID
9750 , MSII.SOURCE_SYSTEM_ID
9751 , MSII.SOURCE_SYSTEM_REFERENCE
9752 , MSII.SOURCE_SYSTEM_REFERENCE_DESC
9753 , MSII.ORGANIZATION_ID
9754 , MSII.INVENTORY_ITEM_ID
9755 , MSII.ITEM_NUMBER
9756 INTO
9757 l_process_flag
9758 , l_request_id
9759 , l_ss_id
9760 , l_ssr
9761 , l_ssr_desc
9762 , l_org_id
9763 , l_item_id
9764 , l_item_number;
9765
9766 IF 1 <> SQL%ROWCOUNT THEN
9767 ROLLBACK TO do_prepare_master_row;
9768 x_return_code := 10;
9769 RETURN;
9770 END IF;
9771
9772 IF 7 = l_process_flag THEN
9773 -- IF G_MSII_REIMPORT_ROWS IS NULL THEN
9774 -- G_MSII_REIMPORT_ROWS := UROWID_TABLE( );
9775 -- END IF;
9776 x_return_code := G_NEEDS_REQUEST_ID_STAMP;
9777 -- G_MSII_REIMPORT_ROWS.EXTEND( );
9778 -- G_MSII_REIMPORT_ROWS( G_MSII_REIMPORT_ROWS.LAST ) := p_target_rowid;
9779 ELSE
9780 l_is_reimport := TRUE;
9781 SAVEPOINT do_prepare_master_row; -- move savepoint up since parent row was in error
9782 -- Bug: 5355759
9783 -- check for cross-reference related security
9784
9785 BEGIN
9786 SELECT ORGANIZATION_CODE
9787 INTO l_org_code
9788 FROM MTL_PARAMETERS
9789 WHERE ORGANIZATION_ID = l_org_id;
9790 EXCEPTION
9791 WHEN NO_DATA_FOUND THEN
9792 NULL;
9793 END;
9794
9795 BEGIN
9796 SELECT MSIK.CONCATENATED_SEGMENTS
9797 , MSIK.INVENTORY_ITEM_ID
9798 , MCR.DESCRIPTION
9799 INTO l_xref_item_number
9800 , l_xref_item_id
9801 , l_xref_desc
9802 FROM MTL_CROSS_REFERENCES MCR,
9803 MTL_SYSTEM_ITEMS_KFV MSIK
9804 WHERE MCR.INVENTORY_ITEM_ID = MSIK.INVENTORY_ITEM_ID
9805 AND MSIK.ORGANIZATION_ID = l_org_id
9806 AND MCR.CROSS_REFERENCE_TYPE = 'SS_ITEM_XREF'
9807 AND MCR.SOURCE_SYSTEM_ID = l_ss_id
9808 AND MCR.CROSS_REFERENCE = l_ssr
9809 AND SYSDATE BETWEEN NVL(MCR.START_DATE_ACTIVE, SYSDATE-1) AND NVL(MCR.END_DATE_ACTIVE, SYSDATE+1);
9810
9811 IF l_xref_item_id <> l_item_id THEN
9812 -- old xref and new xref are not same, so check privilege on old item
9813 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_xref_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9814 IF 'T' <> l_priv_exists THEN
9815 -- no privileges, logging error
9816 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9817 FND_MESSAGE.SET_TOKEN('ITEM', l_xref_item_number);
9818 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9819 l_msg_text := FND_MESSAGE.GET;
9820 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9821 SET PROCESS_FLAG = 3
9822 WHERE ROWID = p_target_rowid;
9823 x_return_code := G_NEED_TO_LOG_ERROR;
9824 x_err_msg := l_msg_text;
9825 RETURN;
9826 ELSE
9827 -- privilege exists on old item. Check privilege on new item
9828 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9829 IF 'T' <> l_priv_exists THEN
9830 -- no privileges, logging error
9831 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9832 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9833 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9834 l_msg_text := FND_MESSAGE.GET;
9835
9836 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9837 SET PROCESS_FLAG = 3
9838 WHERE ROWID = p_target_rowid;
9839
9840 x_return_code := G_NEED_TO_LOG_ERROR;
9841 x_err_msg := l_msg_text;
9842 RETURN;
9843 END IF; -- IF 'T' <> l_priv_exists THEN
9844 END IF; -- IF 'T' <> l_priv_exists THEN
9845 ELSIF l_xref_item_id = l_item_id AND NVL(l_ssr_desc, '!') <> NVL(l_xref_desc, '!') THEN
9846 -- New and Old link are same, but description is different, so check privilege on item
9847 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9848 IF 'T' <> l_priv_exists THEN
9849 -- no privileges, logging error
9850 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9851 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9852 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9853 l_msg_text := FND_MESSAGE.GET;
9854
9855 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9856 SET PROCESS_FLAG = 3
9857 WHERE ROWID = p_target_rowid;
9858
9859 x_return_code := G_NEED_TO_LOG_ERROR;
9860 x_err_msg := l_msg_text;
9861 RETURN;
9862 END IF; -- IF 'T' <> l_priv_exists THEN
9863 END IF; -- IF l_xref_item_id <> l_item_id THEN
9864 EXCEPTION
9865 WHEN NO_DATA_FOUND THEN
9866 -- check privilege only for new item
9867 l_priv_exists := EGO_DATA_SECURITY.CHECK_FUNCTION(1.0, 'EGO_EDIT_SS_ITEM_XREFS', 'EGO_ITEM', l_item_id, l_org_id, NULL, NULL, NULL, l_party_name);
9868 IF 'T' <> l_priv_exists THEN
9869 -- no privileges, logging error
9870 FND_MESSAGE.SET_NAME('EGO', 'EGO_NO_EDIT_XREF_PRIV');
9871 FND_MESSAGE.SET_TOKEN('ITEM', l_item_number);
9872 FND_MESSAGE.SET_TOKEN('ORG', l_org_code);
9873 l_msg_text := FND_MESSAGE.GET;
9874
9875 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
9876 SET PROCESS_FLAG = 3
9877 WHERE ROWID = p_target_rowid;
9878
9879 x_return_code := G_NEED_TO_LOG_ERROR;
9880 x_err_msg := l_msg_text;
9881 RETURN;
9882 END IF; -- IF 'T' <> l_priv_exists THEN
9883 END;
9884 END IF;
9885
9886 IF NOT l_is_ssxref_only THEN
9887 -- updating item's org assignments
9888 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
9889 SET PROCESS_FLAG = 1
9890 WHERE SOURCE_SYSTEM_ID = l_ss_id
9891 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9892 AND PROCESS_FLAG = 3
9893 AND SET_PROCESS_ID = p_batch_id
9894 AND REQUEST_ID = l_request_id
9895 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID -- org assignment
9896 FROM MTL_PARAMETERS MP
9897 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9898 AND MP.ORGANIZATION_ID <> l_org_id
9899 );
9900 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9901
9902 -- updating item revisions
9903 UPDATE MTL_ITEM_REVISIONS_INTERFACE miri
9904 SET PROCESS_FLAG = 1
9905 WHERE SOURCE_SYSTEM_ID = l_ss_id
9906 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9907 AND PROCESS_FLAG = 3
9908 AND SET_PROCESS_ID = p_batch_id
9909 AND REQUEST_ID = l_request_id
9910 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9911 FROM MTL_PARAMETERS MP
9912 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9913 );
9914 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9915
9916 -- updating item category assignments
9917 UPDATE MTL_ITEM_CATEGORIES_INTERFACE mici
9918 SET PROCESS_FLAG = 1
9919 WHERE SOURCE_SYSTEM_ID = l_ss_id
9920 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9921 AND PROCESS_FLAG = 3
9922 AND SET_PROCESS_ID = p_batch_id
9923 AND REQUEST_ID = l_request_id
9924 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9925 FROM MTL_PARAMETERS MP
9926 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9927 );
9928 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9929
9930 -- updating item user defined attributes
9931 UPDATE EGO_ITM_USR_ATTR_INTRFC
9932 SET PROCESS_STATUS = 1
9933 WHERE SOURCE_SYSTEM_ID = l_ss_id
9934 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9935 AND PROCESS_STATUS = 3
9936 AND DATA_SET_ID = p_batch_id
9937 AND REQUEST_ID = l_request_id
9938 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9939 FROM MTL_PARAMETERS MP
9940 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9941 );
9942 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9943
9944 -- updating item people
9945 UPDATE EGO_ITEM_PEOPLE_INTF eipi
9946 SET PROCESS_STATUS = 1
9947 WHERE SOURCE_SYSTEM_ID = l_ss_id
9948 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9949 AND PROCESS_STATUS = 3
9950 AND DATA_SET_ID = p_batch_id
9951 AND REQUEST_ID = l_request_id
9952 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9953 FROM MTL_PARAMETERS MP
9954 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9955 );
9956 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9957
9958 -- updating item AML
9959 UPDATE EGO_AML_INTF
9960 SET PROCESS_FLAG = 1
9961 WHERE SOURCE_SYSTEM_ID = l_ss_id
9962 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9963 AND PROCESS_FLAG = 3
9964 AND DATA_SET_ID = p_batch_id
9965 AND REQUEST_ID = l_request_id
9966 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9967 FROM MTL_PARAMETERS MP
9968 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9969 );
9970 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9971 UPDATE EGO_ITEM_ASSOCIATIONS_INTF
9972 SET PROCESS_FLAG = 1
9973 WHERE SOURCE_SYSTEM_ID = l_ss_id
9974 AND SOURCE_SYSTEM_REFERENCE = l_ssr
9975 AND PROCESS_FLAG = 3
9976 AND BATCH_ID = p_batch_id
9977 AND REQUEST_ID = l_request_id
9978 AND ORGANIZATION_ID IN ( SELECT MP.ORGANIZATION_ID
9979 FROM MTL_PARAMETERS MP
9980 WHERE MP.MASTER_ORGANIZATION_ID = l_org_id
9981 );
9982 l_is_reimport := l_is_reimport OR ( 0 <> SQL%ROWCOUNT );
9983 END IF; -- IF l_is_ssxref_only
9984 END IF;
9985
9986 IF NOT l_is_reimport THEN
9987 ROLLBACK TO do_prepare_master_row;
9988 x_return_code := 50;
9989 END IF;
9990 SAVEPOINT do_prepare_master_row;
9991 EXCEPTION
9992 WHEN NO_DATA_FOUND THEN
9993 ROLLBACK TO do_prepare_master_row;
9994 x_return_code := 30;
9995 WHEN TOO_MANY_ROWS THEN
9996 ROLLBACK TO do_prepare_master_row;
9997 x_return_code := 40;
9998 WHEN OTHERS THEN -- unanticipated error ( probably during update )
9999 ROLLBACK TO do_prepare_master_row;
10000 x_return_code := SQLCODE;
10001 END Prepare_Row_For_ReImport;
10002
10003 ------------------------------------------------------------------------------------------
10004 -- This function returns the batch status of a batch --
10005 ------------------------------------------------------------------------------------------
10006 FUNCTION GET_BATCH_STATUS(p_batch_id NUMBER) RETURN VARCHAR2 AS
10007 l_batch_status VARCHAR2(2);
10008 BEGIN
10009 SELECT
10010 (CASE WHEN ( (crimp.PHASE_CODE IN ('P', 'I', 'R') AND (crimp.REQUESTED_START_DATE <= SYSDATE) )
10011 OR crmatch.PHASE_CODE IN ('P', 'I', 'R')
10012 )
10013 THEN 'P'
10014 ELSE impbat.BATCH_STATUS
10015 END
10016 ) BATCH_STATUS
10017 INTO l_batch_status
10018 FROM
10019 EGO_IMPORT_BATCHES_B impbat,
10020 FND_CONCURRENT_REQUESTS crimp,
10021 FND_CONCURRENT_REQUESTS crmatch
10022 WHERE impbat.BATCH_ID = p_batch_id
10023 AND impbat.LAST_MATCH_REQUEST_ID = crmatch.REQUEST_ID (+)
10024 AND impbat.LAST_IMPORT_REQUEST_ID = crimp.REQUEST_ID (+);
10025
10026 RETURN l_batch_status;
10027 EXCEPTION
10028 WHEN NO_DATA_FOUND THEN
10029 RETURN NULL;
10030 END GET_BATCH_STATUS;
10031
10032 ------------------------------------------------------------------------------------------------
10033 -- Functions GET_LATEST_EIUAI_REV_[SS/PDH] --
10034 -- Returns the the code of the latest LOGICAL revision row loaded for the item into the --
10035 -- user defined attribute interface table --
10036 -- Note the lack of attribute-specific parameters - this is to ensure that contexts in --
10037 -- which this proc gets called will only attempt to go after a single logical revision --
10038 -- row, regardless of the possible absence of the required attributes in that row and --
10039 -- their possible presence in other logical rows of the interface table --
10040 ------------------------------------------------------------------------------------------------
10041 FUNCTION GET_LATEST_EIUAI_REV_SS
10042 (
10043 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10044 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10045 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10046 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10047 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10048 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10049 )
10050 RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10051 IS
10052 l_rev_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10053 BEGIN
10054 IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10055 SELECT MAX( EIUAI.REVISION ) INTO l_rev_code
10056 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10057 WHERE EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10058 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10059 AND EIUAI.ORGANIZATION_ID = p_organization_id
10060 AND EIUAI.DATA_SET_ID = p_batch_id
10061 AND EIUAI.REVISION IS NOT NULL
10062 AND EIUAI.PROCESS_STATUS IN ( 3,4 )
10063 AND EIUAI.REQUEST_ID = p_request_id
10064 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10065 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10066 , EGO_OBJ_AG_ASSOCS_B A
10067 WHERE
10068 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10069 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10070 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10071 AND FL_CTX_EXT.APPLICATION_ID = 431
10072 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10073 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10074 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10075 AND A.CLASSIFICATION_CODE IS NOT NULL
10076 AND A.OBJECT_ID IS NOT NULL
10077 AND ROWNUM = 1
10078 );
10079 -- the aggregate function MAX always returns one (possibly null) row, so
10080 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10081 ELSE
10082 SELECT MAX( EIUAI.REVISION ) INTO l_rev_code
10083 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10084 WHERE EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10085 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10086 AND EIUAI.ORGANIZATION_ID = p_organization_id
10087 AND EIUAI.DATA_SET_ID = p_batch_id
10088 AND EIUAI.REVISION IS NOT NULL
10089 AND EIUAI.PROCESS_STATUS = 0
10090 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10091 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10092 , EGO_OBJ_AG_ASSOCS_B A
10093 WHERE
10094 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10095 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10096 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10097 AND FL_CTX_EXT.APPLICATION_ID = 431
10098 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10099 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10100 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10101 AND A.CLASSIFICATION_CODE IS NOT NULL
10102 AND A.OBJECT_ID IS NOT NULL
10103 AND ROWNUM = 1
10104 );
10105 -- the aggregate function MAX always returns one (possibly null) row, so
10106 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10107 END IF;
10108 RETURN l_rev_code;
10109 END GET_LATEST_EIUAI_REV_SS;
10110
10111 FUNCTION GET_LATEST_EIUAI_REV_PDH
10112 (
10113 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10114 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10115 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10116 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10117 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10118 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10119 )
10120 RETURN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10121 IS
10122 l_rev_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10123 l_sql_stmt VARCHAR2( 32000 );
10124 BEGIN
10125 -- the aggregate function MAX always returns one (possibly null) row, so
10126 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10127
10128 IF p_inventory_item_id IS NULL
10129 THEN
10130 IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10131 SELECT MAX( EIUAI.REVISION )
10132 INTO l_rev_code
10133 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10134 WHERE EIUAI.ITEM_NUMBER = p_item_number
10135 AND EIUAI.ORGANIZATION_ID = p_organization_id
10136 AND EIUAI.DATA_SET_ID = p_batch_id
10137 AND EIUAI.REVISION IS NOT NULL
10138 AND EIUAI.PROCESS_STATUS IN ( 3, 4 )
10139 AND EIUAI.REQUEST_ID = p_request_id
10140 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10141 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10142 , EGO_OBJ_AG_ASSOCS_B A
10143 WHERE
10144 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10145 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10146 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10147 AND FL_CTX_EXT.APPLICATION_ID = 431
10148 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10149 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10150 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10151 AND A.CLASSIFICATION_CODE IS NOT NULL
10152 AND A.OBJECT_ID IS NOT NULL
10153 AND ROWNUM = 1
10154 );
10155 -- the aggregate function MAX always returns one (possibly null) row, so
10156 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10157 ELSE
10158 SELECT MAX( EIUAI.REVISION )
10159 INTO l_rev_code
10160 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10161 WHERE EIUAI.ITEM_NUMBER = p_item_number
10162 AND EIUAI.ORGANIZATION_ID = p_organization_id
10163 AND EIUAI.DATA_SET_ID = p_batch_id
10164 AND EIUAI.REVISION IS NOT NULL
10165 AND EIUAI.PROCESS_STATUS = 1
10166 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10167 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10168 , EGO_OBJ_AG_ASSOCS_B A
10169 WHERE
10170 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10171 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10172 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10173 AND FL_CTX_EXT.APPLICATION_ID = 431
10174 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10175 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10176 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10177 AND A.CLASSIFICATION_CODE IS NOT NULL
10178 AND A.OBJECT_ID IS NOT NULL
10179 AND ROWNUM = 1
10180 );
10181 -- the aggregate function MAX always returns one (possibly null) row, so
10182 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10183 END IF;
10184 ELSE
10185 IF p_do_processed_rows_flag = FND_API.G_TRUE THEN
10186 SELECT MAX( EIUAI.REVISION )
10187 INTO l_rev_code
10188 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10189 WHERE
10190 ( ( EIUAI.INVENTORY_ITEM_ID IS NULL
10191 AND EIUAI.ITEM_NUMBER = p_item_number
10192 )
10193 OR EIUAI.INVENTORY_ITEM_ID = p_inventory_item_id
10194 )
10195 AND EIUAI.ORGANIZATION_ID = p_organization_id
10196 AND EIUAI.DATA_SET_ID = p_batch_id
10197 AND EIUAI.REVISION IS NOT NULL
10198 AND EIUAI.PROCESS_STATUS IN ( 3, 4 )
10199 AND EIUAI.REQUEST_ID = p_request_id
10200 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10201 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10202 , EGO_OBJ_AG_ASSOCS_B A
10203 WHERE
10204 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10205 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10206 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10207 AND FL_CTX_EXT.APPLICATION_ID = 431
10208 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10209 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10210 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10211 AND A.CLASSIFICATION_CODE IS NOT NULL
10212 AND A.OBJECT_ID IS NOT NULL
10213 AND ROWNUM = 1
10214 );
10215 -- the aggregate function MAX always returns one (possibly null) row, so
10216 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10217 ELSE
10218 SELECT MAX( EIUAI.REVISION )
10219 INTO l_rev_code
10220 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10221 WHERE
10222 ( ( EIUAI.INVENTORY_ITEM_ID IS NULL
10223 AND EIUAI.ITEM_NUMBER = p_item_number
10224 )
10225 OR EIUAI.INVENTORY_ITEM_ID = p_inventory_item_id
10226 )
10227 AND EIUAI.ORGANIZATION_ID = p_organization_id
10228 AND EIUAI.DATA_SET_ID = p_batch_id
10229 AND EIUAI.REVISION IS NOT NULL
10230 AND EIUAI.PROCESS_STATUS = 1
10231 AND EXISTS( SELECT NULL -- SEE DEFINITION OF EGO_OBJ_ATTR_GRP_ASSOCS_V
10232 FROM EGO_FND_DSC_FLX_CTX_EXT FL_CTX_EXT
10233 , EGO_OBJ_AG_ASSOCS_B A
10234 WHERE
10235 -- CHECK FOR REVISION LEVEL GROUPS ONLY
10236 A.DATA_LEVEL = 'ITEM_REVISION_LEVEL'
10237 AND FL_CTX_EXT.DESCRIPTIVE_FLEXFIELD_NAME = NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE )
10238 AND FL_CTX_EXT.APPLICATION_ID = 431
10239 AND FL_CTX_EXT.DESCRIPTIVE_FLEX_CONTEXT_CODE = EIUAI.ATTR_GROUP_INT_NAME
10240 AND A.ATTR_GROUP_ID = FL_CTX_EXT.ATTR_GROUP_ID
10241 -- TO ENSURE A(OBJECT_ID, CLASS_CODE, ATTR_GROUP) IDX USED:
10242 AND A.CLASSIFICATION_CODE IS NOT NULL
10243 AND A.OBJECT_ID IS NOT NULL
10244 AND ROWNUM = 1
10245 );
10246 -- the aggregate function MAX always returns one (possibly null) row, so
10247 -- no need to check for the NO_DATA_FOUND exception, or initialize l_rev_code
10248 END IF;
10249 END IF;
10250 RETURN l_rev_code;
10251 END GET_LATEST_EIUAI_REV_PDH;
10252
10253 FUNCTION GET_LATEST_MIRI_REV_SS
10254 (
10255 p_batch_id IN MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10256 , p_source_system_id IN MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
10257 , p_source_system_reference IN MTL_ITEM_REVISIONS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
10258 , p_organization_id IN MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10259 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10260 , p_request_id IN MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10261 )
10262 RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10263 l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10264 BEGIN
10265 IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10266 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10267 INTO l_revision
10268 FROM
10269 MTL_ITEM_REVISIONS_INTERFACE MIRI
10270 WHERE MIRI.SET_PROCESS_id = p_batch_id
10271 AND MIRI.SOURCE_SYSTEM_ID = p_source_system_id
10272 AND MIRI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10273 AND MIRI.ORGANIZATION_ID = p_organization_id
10274 AND MIRI.PROCESS_FLAG = 0;
10275 ELSE
10276 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10277 INTO l_revision
10278 FROM
10279 MTL_ITEM_REVISIONS_INTERFACE MIRI
10280 WHERE
10281 MIRI.SET_PROCESS_id = p_batch_id
10282 AND MIRI.SOURCE_SYSTEM_ID = p_source_system_id
10283 AND MIRI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10284 AND MIRI.ORGANIZATION_ID = p_organization_id
10285 AND MIRI.REQUEST_ID = p_request_id
10286 AND MIRI.PROCESS_FLAG IN (3, 7);
10287 END IF;
10288 RETURN l_revision;
10289 EXCEPTION
10290 WHEN NO_DATA_FOUND THEN
10291 RETURN NULL;
10292 END GET_LATEST_MIRI_REV_SS;
10293
10294 FUNCTION GET_LATEST_MIRI_REV_PDH
10295 (
10296 p_batch_id IN MTL_ITEM_REVISIONS_INTERFACE.SET_PROCESS_ID%TYPE
10297 , p_inventory_item_id IN MTL_ITEM_REVISIONS_INTERFACE.INVENTORY_ITEM_ID%TYPE
10298 , p_item_number IN MTL_ITEM_REVISIONS_INTERFACE.ITEM_NUMBER%TYPE
10299 , p_organization_id IN MTL_ITEM_REVISIONS_INTERFACE.ORGANIZATION_ID%TYPE
10300 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10301 , p_request_id IN MTL_ITEM_REVISIONS_INTERFACE.REQUEST_ID%TYPE DEFAULT NULL
10302 )
10303 RETURN MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE IS
10304 l_revision MTL_ITEM_REVISIONS_INTERFACE.REVISION%TYPE;
10305 BEGIN
10306 IF p_inventory_item_id IS NULL THEN
10307 IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10308 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10309 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10310 INTO l_revision
10311 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10312 WHERE MIRI.SET_PROCESS_id = p_batch_id
10313 AND MIRI.ITEM_NUMBER = p_item_number
10314 AND MIRI.ORGANIZATION_ID = p_organization_id
10315 AND MIRI.PROCESS_FLAG = 1;
10316 ELSE
10317 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10318 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10319 INTO l_revision
10320 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10321 WHERE MIRI.SET_PROCESS_id = p_batch_id
10322 AND MIRI.ITEM_NUMBER = p_item_number
10323 AND MIRI.ORGANIZATION_ID = p_organization_id
10324 AND MIRI.REQUEST_ID = p_request_id
10325 AND MIRI.PROCESS_FLAG IN (3, 7);
10326 END IF;
10327 ELSE -- p_inventory_item_id is not null
10328 IF p_do_processed_rows_flag = FND_API.G_FALSE THEN
10329 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10330 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10331 INTO l_revision
10332 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10333 WHERE MIRI.SET_PROCESS_id = p_batch_id
10334 AND ( ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10335 OR MIRI.INVENTORY_ITEM_ID = p_inventory_item_id
10336 )
10337 AND MIRI.ORGANIZATION_ID = p_organization_id
10338 AND MIRI.PROCESS_FLAG = 1;
10339 ELSE
10340 SELECT MAX( REVISION ) KEEP ( DENSE_RANK FIRST
10341 ORDER BY MIRI.EFFECTIVITY_DATE DESC NULLS LAST , MIRI.REVISION DESC NULLS LAST )
10342 INTO l_revision
10343 FROM MTL_ITEM_REVISIONS_INTERFACE MIRI
10344 WHERE MIRI.SET_PROCESS_id = p_batch_id
10345 AND ( ( MIRI.INVENTORY_ITEM_ID IS NULL AND MIRI.ITEM_NUMBER = p_item_number )
10346 OR MIRI.INVENTORY_ITEM_ID = p_inventory_item_id
10347 )
10348 AND MIRI.ORGANIZATION_ID = p_organization_id
10349 AND PROCESS_FLAG IN ( 3, 7 );
10350 END IF;
10351 END IF;
10352 RETURN l_revision;
10353 EXCEPTION
10354 WHEN NO_DATA_FOUND THEN
10355 RETURN NULL;
10356 END GET_LATEST_MIRI_REV_PDH;
10357
10358 --------------------------------------------------------------------------------------------
10359 -- Function WRAPPED_TO_NUMBER --
10360 -- Wraps the to_number built-in to return null in case of conversion failure --
10361 --------------------------------------------------------------------------------------------
10362 FUNCTION WRAPPED_TO_NUMBER( p_val VARCHAR2 )
10363 RETURN NUMBER
10364 DETERMINISTIC
10365 IS
10366 l_return_value NUMBER;
10367 BEGIN
10368 l_return_value := to_number( p_val );
10369 RETURN l_return_value;
10370 EXCEPTION
10371 WHEN OTHERS THEN
10372 RETURN NULL;
10373 END WRAPPED_TO_NUMBER;
10374
10375 --------------------------------------------------------------------------------------------
10376 -- Function WRAPPED_TO_DATE --
10377 -- Wraps the to_date built-in to return null in case of conversion failure --
10378 --------------------------------------------------------------------------------------------
10379 FUNCTION WRAPPED_TO_DATE( p_val VARCHAR2 )
10380 RETURN DATE
10381 DETERMINISTIC
10382 IS
10383 l_return_value DATE;
10384 BEGIN
10385 l_return_value := to_date( p_val, EGO_USER_ATTRS_COMMON_PVT.G_DATE_FORMAT );
10386
10387 -- bug 5366882: substitute internal "null-out" value with excel "null-out" value
10388 RETURN CASE WHEN l_return_value = to_date( '1', 'J' ) THEN G_EXCEL_MISS_DATE_VAL -- to_date( '9999-12-31', 'YYYY-MM-DD' )
10389 ELSE l_return_value
10390 END;
10391 EXCEPTION
10392 WHEN OTHERS THEN
10393 RETURN NULL;
10394 END WRAPPED_TO_DATE;
10395
10396 --------------------------------------------------------------------------------------------
10397 -- Function GET_REV_USR_ATTR --
10398 -- Returns the display value of the specified revision attribute; if there is no --
10399 -- display value, it returns the appropriate value column, based on the --
10400 -- p_attr_value_type parameter --
10401 --------------------------------------------------------------------------------------------
10402 FUNCTION GET_REV_USR_ATTR
10403 ( p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10404 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10405 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10406 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10407 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10408 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10409 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10410 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10411 , p_attr_value_type IN FLAG
10412 )
10413 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10414 IS
10415 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10416 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10417 BEGIN
10418 l_return_value := null;
10419 l_revision_code := p_revision_code;
10420
10421 -- Check to see whether the revision code has been provided:
10422 -- If not, default it to be the code of the latest LOGICAL revision row
10423 IF l_revision_code IS NULL
10424 THEN
10425 l_revision_code := GET_LATEST_EIUAI_REV_SS( p_batch_id => p_batch_id
10426 , p_source_system_id => p_source_system_id
10427 , p_source_system_reference => p_source_system_reference
10428 , p_organization_id => p_organization_id
10429 , p_do_processed_rows_flag => FND_API.G_FALSE
10430 );
10431 END IF;
10432
10433 IF l_revision_code IS NOT NULL
10434 THEN
10435 BEGIN -- start sub-query block
10436 CASE p_attr_value_type
10437 -- text attr-type case
10438 WHEN G_TEXT_DATA_TYPE THEN
10439 SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10440 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10441 WHERE
10442 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10443 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10444 AND EIUAI.ATTR_INT_NAME = p_attr_name
10445 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10446 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10447 AND EIUAI.ORGANIZATION_ID = p_organization_id
10448 AND EIUAI.DATA_SET_ID = p_batch_id
10449 AND EIUAI.REVISION = l_revision_code
10450 AND rownum < 2
10451 ;
10452 -- end text attr-type case
10453 -- number attr-type case
10454 WHEN G_NUMBER_DATA_TYPE THEN
10455 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10456 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10457 WHERE
10458 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10459 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10460 AND EIUAI.ATTR_INT_NAME = p_attr_name
10461 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10462 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10463 AND EIUAI.ORGANIZATION_ID = p_organization_id
10464 AND EIUAI.DATA_SET_ID = p_batch_id
10465 AND EIUAI.REVISION = l_revision_code
10466 AND rownum < 2
10467 ;
10468 -- end number attr-type case
10469 -- date attr-type case
10470 WHEN G_DATE_DATA_TYPE THEN
10471 -- XXX: which date format to use? what about date-time type vs date-type?
10472 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10473 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10474 WHERE
10475 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10476 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10477 AND EIUAI.ATTR_INT_NAME = p_attr_name
10478 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10479 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10480 AND EIUAI.ORGANIZATION_ID = p_organization_id
10481 AND EIUAI.DATA_SET_ID = p_batch_id
10482 AND EIUAI.REVISION = l_revision_code
10483 AND rownum < 2
10484 ;
10485 -- end date attr-type case
10486 END CASE;
10487 EXCEPTION
10488 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10489 l_return_value := null; -- 'no data found';
10490 WHEN OTHERS THEN
10491 l_return_value := null; -- 'other error';
10492 END; -- query sub-block
10493 ELSE -- revision code is null
10494 BEGIN -- start sub-query block
10495 CASE p_attr_value_type
10496 -- text attr-type case
10497 WHEN G_TEXT_DATA_TYPE THEN
10498 SELECT NVL( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR ) INTO l_return_value
10499 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10500 WHERE
10501 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10502 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10503 AND EIUAI.ATTR_INT_NAME = p_attr_name
10504 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10505 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10506 AND EIUAI.ORGANIZATION_ID = p_organization_id
10507 AND EIUAI.DATA_SET_ID = p_batch_id
10508 AND EIUAI.REVISION IS NULL
10509 AND rownum < 2
10510 ;
10511 -- end text attr-type case
10512 -- number attr-type case
10513 WHEN G_NUMBER_DATA_TYPE THEN
10514 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_NUM ) ) INTO l_return_value
10515 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10516 WHERE
10517 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10518 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10519 AND EIUAI.ATTR_INT_NAME = p_attr_name
10520 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10521 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10522 AND EIUAI.ORGANIZATION_ID = p_organization_id
10523 AND EIUAI.DATA_SET_ID = p_batch_id
10524 AND EIUAI.REVISION IS NULL
10525 AND rownum < 2
10526 ;
10527 -- end number attr-type case
10528 -- date attr-type case
10529 WHEN G_DATE_DATA_TYPE THEN
10530 -- XXX: which date format to use? what about date-time type vs date-type?
10531 SELECT NVL( EIUAI.ATTR_DISP_VALUE, TO_CHAR( EIUAI.ATTR_VALUE_DATE ) ) INTO l_return_value
10532 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
10533 WHERE
10534 NVL( EIUAI.ATTR_GROUP_TYPE, G_DEFAULT_ATTR_GROUP_TYPE ) = p_attr_group_type
10535 AND EIUAI.ATTR_GROUP_INT_NAME = p_attr_group_name
10536 AND EIUAI.ATTR_INT_NAME = p_attr_name
10537 AND EIUAI.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
10538 AND EIUAI.SOURCE_SYSTEM_ID = p_source_system_id
10539 AND EIUAI.ORGANIZATION_ID = p_organization_id
10540 AND EIUAI.DATA_SET_ID = p_batch_id
10541 AND EIUAI.REVISION IS NULL
10542 AND rownum < 2
10543 ;
10544 -- end date attr-type case
10545 END CASE;
10546 EXCEPTION
10547 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table!
10548 l_return_value := null; -- 'no data found';
10549 WHEN OTHERS THEN
10550 l_return_value := null; -- 'other error';
10551 END; -- query sub-block
10552 END IF;
10553
10554 RETURN l_return_value;
10555 END GET_REV_USR_ATTR;
10556
10557 ----------------------------------------------------------------------------------------------
10558 -- Function GET_REV_USR_ATTR_TO_CHAR
10559 -- Returns the display value of the specified revision attribute, if the attribute is present
10560 -- in the interface table, or the internal value, interpreted as a display value.
10561 -- The assumption is that this will be called from a value set context ...
10562 ----------------------------------------------------------------------------------------------
10563 FUNCTION GET_REV_USR_ATTR_TO_CHAR
10564 (
10565 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10566 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
10567 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
10568 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10569 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10570 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10571 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10572 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10573 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10574 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10575 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
10576 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
10577 , p_use_pdh_keys_to_join IN BOOLEAN
10578 , p_get_value_col IN BOOLEAN
10579 , p_attr_type IN FLAG
10580 , p_attr_miss_value IN BOOLEAN DEFAULT TRUE
10581 )
10582 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10583 IS
10584 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE;
10585 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10586 l_sql_stmt VARCHAR2( 32000 );
10587 l_do_procd_rows_sql VARCHAR2( 200 );
10588 l_join_sql VARCHAR2( 200 );
10589 l_select_sql VARCHAR2( 200 );
10590 l_do_processed_rows BOOLEAN;
10591 l_miss_str VARCHAR2( 30 );
10592 l_date_format VARCHAR2( 30 ) := NULL;
10593 BEGIN
10594 l_return_value := null; -- 'default';
10595
10596 CASE -- order of WHEN clauses matters!
10597 WHEN p_USE_PDH_KEYS_TO_JOIN AND
10598 p_inventory_item_id IS NULL AND
10599 p_item_number IS NULL
10600 THEN RETURN l_return_value;
10601 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10602 l_join_sql :=
10603 ' AND ( ( '
10604 || CASE
10605 WHEN p_inventory_item_id IS NOT NULL THEN
10606 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
10607 ELSE ''
10608 END
10609 || ' EIUAI.ITEM_NUMBER = :item_number '
10610 || ' ) '
10611 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
10612 || ' ) '
10613 ;
10614 WHEN p_source_system_reference IS NULL AND
10615 p_source_system_id IS NULL
10616 THEN RETURN l_return_value;
10617 ELSE
10618 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref '
10619 || ' AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
10620 END CASE;
10621
10622 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10623 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
10624 || CASE
10625 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
10626 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
10627 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
10628 ELSE '' -- XXX: hmmm, raise exception here?
10629 END;
10630
10631 l_date_format := CASE p_attr_type
10632 WHEN G_DATE_TIME_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' ) || ' HH24:MI:SS'
10633 WHEN G_DATE_DATA_TYPE THEN FND_PROFILE.VALUE( 'ICX_DATE_FORMAT_MASK' )
10634 ELSE NULL
10635 END;
10636
10637 l_miss_str := CASE WHEN NOT p_attr_miss_value THEN G_EXCEL_MISS_VS_VAL
10638 WHEN p_attr_type = G_DATE_DATA_TYPE THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10639 WHEN p_attr_type = G_DATE_TIME_DATA_TYPE THEN 'TO_CHAR('||G_EXCEL_MISS_DATE_STR||','''||l_date_format||''')'
10640 WHEN p_attr_type = G_NUMBER_DATA_TYPE THEN 'TO_CHAR('||G_EXCEL_MISS_NUM_STR||')'
10641 WHEN p_attr_type = G_TEXT_DATA_TYPE THEN ''''||G_EXCEL_MISS_CHAR_VAL||''''
10642 END;
10643
10644 IF p_get_value_col
10645 THEN
10646 l_select_sql := CASE
10647 WHEN p_attr_type = G_DATE_DATA_TYPE OR p_attr_type = G_DATE_TIME_DATA_TYPE THEN
10648 'DECODE( EIUAI.ATTR_VALUE_DATE'
10649 ||', NULL, ' || l_miss_str
10650 ||', '|| EGO_USER_ATTRS_BULK_PVT.G_NULL_DATE_VAL ||', '|| l_miss_str
10651 ||', TO_CHAR( EIUAI.ATTR_VALUE_DATE, '''|| l_date_format || ''')'
10652 ||')'
10653 WHEN p_attr_type = G_NUMBER_DATA_TYPE THEN
10654 -- ignore UOM column completely ... the assumption is that this
10655 -- code is called for junk values only
10656 'DECODE( EIUAI.ATTR_VALUE_NUM'
10657 ||', NULL, ' || l_miss_str
10658 ||', TO_CHAR( EIUAI.ATTR_VALUE_NUM )'
10659 ||')'
10660 WHEN p_attr_type = G_TEXT_DATA_TYPE THEN
10661 'NVL( EIUAI.ATTR_VALUE_STR, '|| l_miss_str || ')'
10662 END;
10663 ELSE
10664 l_select_sql := ' EIUAI.ATTR_DISP_VALUE ';
10665 END IF;
10666
10667 -- Check to see whether the revision code has been provided:
10668 -- If not, default it to be the code of the latest LOGICAL revision row
10669 l_revision_code :=
10670 CASE -- order of WHEN clauses matters!
10671 WHEN p_revision_code IS NOT NULL THEN p_revision_code
10672 WHEN p_use_pdh_keys_to_join THEN
10673 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
10674 , p_inventory_item_id => p_inventory_item_id
10675 , p_item_number => p_item_number
10676 , p_organization_id => p_organization_id
10677 , p_do_processed_rows_flag => p_do_processed_rows_flag
10678 , p_request_id => p_request_id
10679 )
10680 ELSE
10681 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
10682 , p_source_system_id => p_source_system_id
10683 , p_source_system_reference => p_source_system_reference
10684 , p_organization_id => p_organization_id
10685 , p_do_processed_rows_flag => p_do_processed_rows_flag
10686 , p_request_id => p_request_id
10687 )
10688 END;
10689
10690 l_sql_stmt := '
10691 SELECT ' || l_select_sql
10692 ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
10693 ||' WHERE '
10694 ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
10695 ||' AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp'
10696 ||' AND EIUAI.ATTR_INT_NAME = :attr '
10697 || l_join_sql
10698 ||' AND EIUAI.ORGANIZATION_ID = :org_id '
10699 ||' AND EIUAI.DATA_SET_ID = :batch_id '
10700 || l_do_procd_rows_sql
10701 ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
10702 ||' AND rownum = 1 '
10703 ;
10704 -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
10705
10706 IF l_do_processed_rows THEN
10707 CASE
10708 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10709 EXECUTE IMMEDIATE l_sql_stmt
10710 INTO l_return_value
10711 USING G_DEFAULT_ATTR_GROUP_TYPE
10712 , p_attr_group_type, p_attr_group_name, p_attr_name
10713 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10714 , p_request_id
10715 , l_revision_code
10716 ;
10717 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10718 EXECUTE IMMEDIATE l_sql_stmt
10719 INTO l_return_value
10720 USING G_DEFAULT_ATTR_GROUP_TYPE
10721 , p_attr_group_type, p_attr_group_name, p_attr_name
10722 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10723 , p_request_id
10724 , l_revision_code
10725 ;
10726 END CASE;
10727 ELSE -- unprocessed rows
10728 CASE
10729 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10730 EXECUTE IMMEDIATE l_sql_stmt
10731 INTO l_return_value
10732 USING G_DEFAULT_ATTR_GROUP_TYPE
10733 , p_attr_group_type, p_attr_group_name, p_attr_name
10734 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10735 , l_revision_code
10736 ;
10737 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10738 EXECUTE IMMEDIATE l_sql_stmt
10739 INTO l_return_value
10740 USING G_DEFAULT_ATTR_GROUP_TYPE
10741 , p_attr_group_type, p_attr_group_name, p_attr_name
10742 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10743 , l_revision_code
10744 ;
10745 END CASE;
10746 END IF;
10747
10748 RETURN l_return_value;
10749
10750 EXCEPTION
10751 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
10752 RETURN l_return_value;
10753 WHEN OTHERS THEN
10754 -- XXX: Log the error here?
10755 RETURN l_return_value;
10756 END GET_REV_USR_ATTR_TO_CHAR;
10757
10758 FUNCTION GET_REV_USR_ATTR_SS_DISP
10759 (
10760 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10761 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
10762 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
10763 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10764 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10765 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10766 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10767 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10768 , p_attr_type IN FLAG
10769 , p_from_internal_column IN FLAG
10770 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10771 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10772 )
10773 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10774 IS
10775 l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10776 BEGIN
10777 RETURN GET_REV_USR_ATTR_TO_CHAR
10778 (
10779 p_batch_id => p_batch_id
10780 , p_source_system_id => p_source_system_id
10781 , p_source_system_reference => p_source_system_reference
10782 , p_organization_id => p_organization_id
10783 , p_revision_code => p_revision_code
10784 , p_attr_group_type => p_attr_group_type
10785 , p_attr_group_name => p_attr_group_name
10786 , p_attr_name => p_attr_name
10787 , p_attr_type => p_attr_type
10788 , p_do_processed_rows_flag => p_do_processed_rows_flag
10789 , p_request_id => p_request_id
10790 , p_use_pdh_keys_to_join => FALSE
10791 , p_get_value_col => l_get_value_col
10792 , p_attr_miss_value => FALSE -- returns value set miss value if get_value_column TRUE
10793 );
10794 END;
10795
10796 FUNCTION GET_REV_USR_ATTR_PDH_DISP
10797 (
10798 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10799 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
10800 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
10801 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10802 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10803 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10804 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10805 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10806 , p_attr_type IN FLAG
10807 , p_from_internal_column IN FLAG
10808 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10809 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10810 )
10811 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_DISP_VALUE%TYPE
10812 IS
10813 l_get_value_col BOOLEAN := ( FND_API.G_TRUE = p_from_internal_column );
10814 BEGIN
10815 RETURN GET_REV_USR_ATTR_TO_CHAR
10816 (
10817 p_batch_id => p_batch_id
10818 , p_inventory_item_id => p_inventory_item_id
10819 , p_item_number => p_item_number
10820 , p_organization_id => p_organization_id
10821 , p_revision_code => p_revision_code
10822 , p_attr_group_type => p_attr_group_type
10823 , p_attr_group_name => p_attr_group_name
10824 , p_attr_name => p_attr_name
10825 , p_attr_type => p_attr_type
10826 , p_do_processed_rows_flag => p_do_processed_rows_flag
10827 , p_request_id => p_request_id
10828 , p_use_pdh_keys_to_join => TRUE
10829 , p_get_value_col => l_get_value_col
10830 , p_attr_miss_value => FALSE -- returns value set miss value if get_value_column TRUE
10831 );
10832 END;
10833
10834
10835 ----------------------------------------------------------------------------------------------
10836 -- Function GET_REV_USR_ATTR_DISP_DATE
10837 -- Returns the date value of the specified revision attribute, if the attribute is present
10838 -- in the interface table, merging in an attempted conversion of the display column content.
10839 ----------------------------------------------------------------------------------------------
10840 FUNCTION GET_REV_USR_ATTR_DATE
10841 (
10842 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
10843 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
10844 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
10845 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
10846 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
10847 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
10848 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
10849 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
10850 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
10851 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
10852 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
10853 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
10854 , p_use_pdh_keys_to_join IN BOOLEAN
10855 , p_get_value_column IN BOOLEAN
10856 )
10857 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE
10858 IS
10859 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE;
10860 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
10861 l_sql_stmt VARCHAR2( 32000 );
10862 l_do_procd_rows_sql VARCHAR2( 200 );
10863 l_join_sql VARCHAR2( 200 );
10864 l_select_sql VARCHAR2( 300 );
10865 l_do_processed_rows BOOLEAN;
10866 BEGIN
10867 l_return_value := null; -- 'default';
10868
10869 CASE -- order of WHEN clauses matters!
10870 WHEN p_USE_PDH_KEYS_TO_JOIN AND
10871 p_inventory_item_id IS NULL AND
10872 p_item_number IS NULL
10873 THEN RETURN l_return_value;
10874 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10875 l_join_sql :=
10876 ' AND ( ( '
10877 || CASE
10878 WHEN p_inventory_item_id IS NOT NULL THEN
10879 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
10880 ELSE ''
10881 END
10882 || ' EIUAI.ITEM_NUMBER = :item_number '
10883 || ' ) '
10884 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
10885 || ' ) '
10886 ;
10887 WHEN p_source_system_reference IS NULL AND
10888 p_source_system_id IS NULL
10889 THEN RETURN l_return_value;
10890 ELSE
10891 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref '
10892 || ' AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
10893 END CASE;
10894
10895 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
10896 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
10897 || CASE
10898 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
10899 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
10900 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
10901 ELSE '' -- XXX: hmmm, raise exception here?
10902 END;
10903
10904 IF p_get_value_column THEN
10905 l_select_sql := ' EIUAI.ATTR_VALUE_DATE ';
10906 ELSE
10907 l_select_sql := ' NVL2( EIUAI.ATTR_DISP_VALUE '
10908 || ' , EGO_IMPORT_PVT.wrapped_to_date( EIUAI.ATTR_DISP_VALUE ) '
10909 || ' , CASE WHEN EIUAI.ATTR_VALUE_DATE IS NULL '
10910 || 'OR EIUAI.ATTR_VALUE_DATE = TO_DATE(''1'',''J'') THEN ' || G_EXCEL_MISS_DATE_STR
10911 || ' ELSE EIUAI.ATTR_VALUE_DATE END'
10912 || ' ) '
10913 ;
10914 END IF;
10915
10916 -- Check to see whether the revision code has been provided:
10917 -- If not, default it to be the code of the latest LOGICAL revision row
10918 l_revision_code :=
10919 CASE -- order of WHEN clauses matters!
10920 WHEN p_revision_code IS NOT NULL THEN p_revision_code
10921 WHEN p_use_pdh_keys_to_join THEN
10922 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
10923 , p_inventory_item_id => p_inventory_item_id
10924 , p_item_number => p_item_number
10925 , p_organization_id => p_organization_id
10926 , p_do_processed_rows_flag => p_do_processed_rows_flag
10927 , p_request_id => p_request_id
10928 )
10929 ELSE
10930 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
10931 , p_source_system_id => p_source_system_id
10932 , p_source_system_reference => p_source_system_reference
10933 , p_organization_id => p_organization_id
10934 , p_do_processed_rows_flag => p_do_processed_rows_flag
10935 , p_request_id => p_request_id
10936 )
10937 END;
10938
10939 l_sql_stmt := '
10940 SELECT ' || l_select_sql
10941 ||' FROM EGO_ITM_USR_ATTR_INTRFC EIUAI '
10942 ||' WHERE '
10943 ||' NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type'
10944 ||' AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp'
10945 ||' AND EIUAI.ATTR_INT_NAME = :attr '
10946 || l_join_sql
10947 ||' AND EIUAI.ORGANIZATION_ID = :org_id '
10948 ||' AND EIUAI.DATA_SET_ID = :batch_id '
10949 || l_do_procd_rows_sql
10950 ||' AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1 '
10951 ||' AND rownum = 1 '
10952 ;
10953 -- note that decode does a null-safe comparision (i.e. ( NULL = NULL ) = TRUE ||||'')
10954
10955 -- my_put_line( 'sql:' || l_sql_stmt );
10956
10957 IF l_do_processed_rows THEN
10958 CASE
10959 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10960 EXECUTE IMMEDIATE l_sql_stmt
10961 INTO l_return_value
10962 USING G_DEFAULT_ATTR_GROUP_TYPE
10963 , p_attr_group_type, p_attr_group_name, p_attr_name
10964 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10965 , p_request_id
10966 , l_revision_code
10967 ;
10968 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10969 EXECUTE IMMEDIATE l_sql_stmt
10970 INTO l_return_value
10971 USING G_DEFAULT_ATTR_GROUP_TYPE
10972 , p_attr_group_type, p_attr_group_name, p_attr_name
10973 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10974 , p_request_id
10975 , l_revision_code
10976 ;
10977 END CASE;
10978 ELSE -- unprocessed rows
10979 CASE
10980 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
10981 EXECUTE IMMEDIATE l_sql_stmt
10982 INTO l_return_value
10983 USING G_DEFAULT_ATTR_GROUP_TYPE
10984 , p_attr_group_type, p_attr_group_name, p_attr_name
10985 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
10986 , l_revision_code
10987 ;
10988 WHEN NOT p_USE_PDH_KEYS_TO_JOIN THEN
10989 EXECUTE IMMEDIATE l_sql_stmt
10990 INTO l_return_value
10991 USING G_DEFAULT_ATTR_GROUP_TYPE
10992 , p_attr_group_type, p_attr_group_name, p_attr_name
10993 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
10994 , l_revision_code
10995 ;
10996 END CASE;
10997 END IF;
10998
10999 RETURN l_return_value;
11000
11001 EXCEPTION
11002 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11003 RETURN l_return_value;
11004 WHEN OTHERS THEN
11005 -- MY_PUT_LINE( 'GET_REV_USR_ATTR_DATE Error code ' || SQLCODE || ': ' || SQLERRM );
11006 RETURN l_return_value;
11007 END GET_REV_USR_ATTR_DATE;
11008
11009 FUNCTION GET_REV_USR_ATTR_SS_DDATE
11010 (
11011 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11012 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11013 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11014 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11015 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11016 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11017 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11018 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11019 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11020 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11021 )
11022 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11023 BEGIN
11024 RETURN GET_REV_USR_ATTR_DATE
11025 (
11026 p_batch_id => p_batch_id
11027 , p_source_system_id => p_source_system_id
11028 , p_source_system_reference => p_source_system_reference
11029 , p_organization_id => p_organization_id
11030 , p_revision_code => p_revision_code
11031 , p_attr_group_type => p_attr_group_type
11032 , p_attr_group_name => p_attr_group_name
11033 , p_attr_name => p_attr_name
11034 , p_do_processed_rows_flag => p_do_processed_rows_flag
11035 , p_request_id => p_request_id
11036 , p_use_pdh_keys_to_join => false
11037 , p_get_value_column => false
11038 );
11039 END GET_REV_USR_ATTR_SS_DDATE;
11040
11041 FUNCTION GET_REV_USR_ATTR_PDH_DDATE
11042 ( p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11043 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11044 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11045 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11046 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11047 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11048 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11049 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11050 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11051 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11052 )
11053 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11054 BEGIN
11055 RETURN GET_REV_USR_ATTR_DATE
11056 (
11057 p_batch_id => p_batch_id
11058 , p_inventory_item_id => p_inventory_item_id
11059 , p_item_number => p_item_number
11060 , p_organization_id => p_organization_id
11061 , p_revision_code => p_revision_code
11062 , p_attr_group_type => p_attr_group_type
11063 , p_attr_group_name => p_attr_group_name
11064 , p_attr_name => p_attr_name
11065 , p_do_processed_rows_flag => p_do_processed_rows_flag
11066 , p_request_id => p_request_id
11067 , p_use_pdh_keys_to_join => true
11068 , p_get_value_column => false
11069 );
11070 END GET_REV_USR_ATTR_PDH_DDATE;
11071
11072 ----------------------------------------------------------------------------------------------
11073 -- Function GET_REV_USR_ATTR_DISP_STR
11074 -- Returns the string value of the specified revision attribute, if the attribute is present
11075 -- in the interface table, merging in an attempted conversion of the display column content.
11076 ----------------------------------------------------------------------------------------------
11077 FUNCTION GET_REV_USR_ATTR_STR
11078 ( p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11079 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
11080 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
11081 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11082 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11083 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11084 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11085 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11086 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11087 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11088 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
11089 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
11090 , p_use_pdh_keys_to_join IN BOOLEAN
11091 , p_get_value_column IN BOOLEAN
11092 )
11093 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE
11094 IS
11095 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE;
11096 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11097 l_sql_stmt VARCHAR2( 32000 );
11098 l_do_procd_rows_sql VARCHAR2( 200 );
11099 l_join_sql VARCHAR2( 200 );
11100 l_select_sql VARCHAR2( 200 );
11101 l_do_processed_rows BOOLEAN;
11102 BEGIN
11103 l_return_value := null; -- 'default';
11104
11105 CASE -- order of WHEN clauses matters!
11106 WHEN p_USE_PDH_KEYS_TO_JOIN AND
11107 p_inventory_item_id IS NULL AND
11108 p_item_number IS NULL
11109 THEN RETURN l_return_value;
11110 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11111 l_join_sql :=
11112 ' AND ( ( '
11113 || CASE
11114 WHEN p_inventory_item_id IS NOT NULL THEN
11115 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
11116 ELSE ''
11117 END
11118 || ' EIUAI.ITEM_NUMBER = :item_number '
11119 || ' ) '
11120 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
11121 || ' ) '
11122 ;
11123 WHEN p_source_system_reference IS NULL AND
11124 p_source_system_id IS NULL
11125 THEN RETURN l_return_value;
11126 ELSE
11127 l_join_sql := '
11128 AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref
11129 AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
11130 END CASE;
11131
11132 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11133 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
11134 || CASE
11135 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11136 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11137 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
11138 ELSE '' -- XXX: hmmm, raise exception here?
11139 END;
11140
11141 IF p_get_value_column THEN
11142 l_select_sql := ' EIUAI.ATTR_VALUE_STR ';
11143 ELSE
11144 l_select_sql := ' COALESCE( EIUAI.ATTR_DISP_VALUE, EIUAI.ATTR_VALUE_STR, '''|| G_EXCEL_MISS_CHAR_VAL ||''' ) ';
11145 END IF;
11146
11147 -- Check to see whether the revision code has been provided:
11148 -- If not, default it to be the code of the latest LOGICAL revision row
11149 l_revision_code :=
11150 CASE -- order of WHEN clauses matters!
11151 WHEN p_revision_code IS NOT NULL THEN p_revision_code
11152 WHEN p_use_pdh_keys_to_join THEN
11153 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
11154 , p_inventory_item_id => p_inventory_item_id
11155 , p_item_number => p_item_number
11156 , p_organization_id => p_organization_id
11157 , p_do_processed_rows_flag => p_do_processed_rows_flag
11158 , p_request_id => p_request_id
11159 )
11160 ELSE
11161 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
11162 , p_source_system_id => p_source_system_id
11163 , p_source_system_reference => p_source_system_reference
11164 , p_organization_id => p_organization_id
11165 , p_do_processed_rows_flag => p_do_processed_rows_flag
11166 , p_request_id => p_request_id
11167 )
11168 END;
11169
11170 l_sql_stmt := '
11171 SELECT ' || l_select_sql
11172 || '
11173 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11174 WHERE
11175 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11176 AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp
11177 AND EIUAI.ATTR_INT_NAME = :attr '
11178 || l_join_sql
11179 || '
11180 AND EIUAI.ORGANIZATION_ID = :org_id
11181 AND EIUAI.DATA_SET_ID = :batch_id '
11182 || l_do_procd_rows_sql
11183 /* || '
11184 AND EIUAI.REVISION '
11185 || CASE l_revision_code
11186 WHEN NULL THEN 'IS NULL '
11187 ELSE '= :rev_code '
11188 END */
11189 || '
11190 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11191 AND rownum = 1
11192 ';
11193
11194 -- my_put_line( l_sql_stmt );
11195
11196 CASE
11197 WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11198 EXECUTE IMMEDIATE l_sql_stmt
11199 INTO l_return_value
11200 USING G_DEFAULT_ATTR_GROUP_TYPE
11201 , p_attr_group_type, p_attr_group_name, p_attr_name
11202 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11203 , p_request_id
11204 , l_revision_code
11205 ;
11206 WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11207 EXECUTE IMMEDIATE l_sql_stmt
11208 INTO l_return_value
11209 USING G_DEFAULT_ATTR_GROUP_TYPE
11210 , p_attr_group_type, p_attr_group_name, p_attr_name
11211 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11212 , p_request_id
11213 , l_revision_code
11214 ;
11215 WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11216 EXECUTE IMMEDIATE l_sql_stmt
11217 INTO l_return_value
11218 USING G_DEFAULT_ATTR_GROUP_TYPE
11219 , p_attr_group_type, p_attr_group_name, p_attr_name
11220 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11221 , l_revision_code
11222 ;
11223 WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11224 EXECUTE IMMEDIATE l_sql_stmt
11225 INTO l_return_value
11226 USING G_DEFAULT_ATTR_GROUP_TYPE
11227 , p_attr_group_type, p_attr_group_name, p_attr_name
11228 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11229 , l_revision_code
11230 ;
11231 END CASE;
11232 RETURN l_return_value;
11233
11234 EXCEPTION
11235 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11236 RETURN l_return_value;
11237 WHEN OTHERS THEN
11238 -- MY_PUT_LINE( 'Error code ' || SQLCODE || ': ' || SQLERRM );
11239 RAISE;
11240 END GET_REV_USR_ATTR_STR;
11241
11242 FUNCTION GET_REV_USR_ATTR_SS_DSTR
11243 (
11244 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11245 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11246 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11247 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11248 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11249 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11250 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11251 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11252 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11253 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11254 )
11255 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11256 BEGIN
11257 RETURN GET_REV_USR_ATTR_STR
11258 (
11259 p_batch_id => p_batch_id
11260 , p_source_system_id => p_source_system_id
11261 , p_source_system_reference => p_source_system_reference
11262 , p_organization_id => p_organization_id
11263 , p_revision_code => p_revision_code
11264 , p_attr_group_type => p_attr_group_type
11265 , p_attr_group_name => p_attr_group_name
11266 , p_attr_name => p_attr_name
11267 , p_do_processed_rows_flag => p_do_processed_rows_flag
11268 , p_request_id => p_request_id
11269 , p_use_pdh_keys_to_join => false
11270 , p_get_value_column => false
11271 );
11272 END GET_REV_USR_ATTR_SS_DSTR;
11273
11274 FUNCTION GET_REV_USR_ATTR_PDH_DSTR
11275 (
11276 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11277 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11278 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11279 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11280 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11281 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11282 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11283 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11284 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11285 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11286 )
11287 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11288 BEGIN
11289 RETURN GET_REV_USR_ATTR_STR
11290 (
11291 p_batch_id => p_batch_id
11292 , p_inventory_item_id => p_inventory_item_id
11293 , p_item_number => p_item_number
11294 , p_organization_id => p_organization_id
11295 , p_revision_code => p_revision_code
11296 , p_attr_group_type => p_attr_group_type
11297 , p_attr_group_name => p_attr_group_name
11298 , p_attr_name => p_attr_name
11299 , p_do_processed_rows_flag => p_do_processed_rows_flag
11300 , p_request_id => p_request_id
11301 , p_use_pdh_keys_to_join => true
11302 , p_get_value_column => false
11303 );
11304 END GET_REV_USR_ATTR_PDH_DSTR;
11305
11306 ----------------------------------------------------------------------------------------------
11307 -- Function GET_REV_USR_ATTR_DISP_NUM
11308 -- Returns the number value of the specified revision attribute, if the attribute is present
11309 -- in the interface table, merging in an attempted conversion of the display column content.
11310 --------------------------------------------------------------------------------------------
11311 FUNCTION GET_REV_USR_ATTR_NUM
11312 (
11313 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11314 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE DEFAULT NULL
11315 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE DEFAULT NULL
11316 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11317 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11318 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11319 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11320 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11321 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE DEFAULT NULL
11322 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11323 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11324 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
11325 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE DEFAULT NULL
11326 , p_use_pdh_keys_to_join IN BOOLEAN
11327 , p_get_value_column IN BOOLEAN
11328 )
11329 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE
11330 IS
11331 l_return_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11332 l_num_value EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE;
11333 l_revision_code EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE;
11334 l_sql_stmt VARCHAR2( 32000 );
11335 l_do_procd_rows_sql VARCHAR2( 200 );
11336 l_join_sql VARCHAR2( 200 );
11337 l_select_sql VARCHAR2( 200 );
11338 l_do_processed_rows BOOLEAN;
11339
11340 l_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE;
11341 l_uom_disp_value EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE;
11342 l_uom_rate NUMBER := 1;
11343 BEGIN
11344 l_return_value := null; -- 'default';
11345
11346 CASE -- order of WHEN clauses matters!
11347 WHEN p_USE_PDH_KEYS_TO_JOIN AND
11348 p_inventory_item_id IS NULL AND
11349 p_item_number IS NULL
11350 THEN RETURN l_return_value;
11351 WHEN p_USE_PDH_KEYS_TO_JOIN THEN
11352 l_join_sql :=
11353 ' AND ( ( '
11354 || CASE
11355 WHEN p_inventory_item_id IS NOT NULL THEN
11356 ' EIUAI.INVENTORY_ITEM_ID IS NULL AND'
11357 ELSE ''
11358 END
11359 || ' EIUAI.ITEM_NUMBER = :item_number '
11360 || ' ) '
11361 || ' OR EIUAI.INVENTORY_ITEM_ID = :item_id '
11362 || ' ) '
11363 ;
11364 WHEN p_source_system_reference IS NULL AND
11365 p_source_system_id IS NULL
11366 THEN RETURN l_return_value;
11367 ELSE
11368 l_join_sql := ' AND EIUAI.SOURCE_SYSTEM_REFERENCE = :ss_ref '
11369 || ' AND EIUAI.SOURCE_SYSTEM_ID = :ss_id ';
11370 END CASE;
11371
11372 l_do_processed_rows := ( p_do_processed_rows_flag = FND_API.G_TRUE );
11373 l_do_procd_rows_sql := ' AND EIUAI.PROCESS_STATUS'
11374 || CASE
11375 WHEN l_do_processed_rows THEN ' IN ( 3, 4 ) AND EIUAI.REQUEST_ID = :req_id '
11376 WHEN NOT l_do_processed_rows AND NOT p_use_pdh_keys_to_join THEN ' = 0 '
11377 WHEN NOT l_do_processed_rows AND p_use_pdh_keys_to_join THEN ' = 1 '
11378 ELSE '' -- XXX: hmmm, raise exception here?
11379 END;
11380
11381 IF p_get_value_column THEN
11382 l_select_sql := ' EIUAI.ATTR_VALUE_NUM ';
11383 ELSE
11384 l_select_sql := ' NVL2( EIUAI.ATTR_DISP_VALUE '
11385 || ' , to_number( EIUAI.ATTR_DISP_VALUE ) '
11386 || ' , NVL( EIUAI.ATTR_VALUE_NUM, ' || G_EXCEL_MISS_NUM_STR
11387 || ' ) ) '
11388 ;
11389 END IF;
11390
11391 -- Check to see whether the revision code has been provided:
11392 -- If not, default it to be the code of the latest LOGICAL revision row
11393 l_revision_code :=
11394 CASE -- order of WHEN clauses matters!
11395 WHEN p_revision_code IS NOT NULL THEN p_revision_code
11396 WHEN p_use_pdh_keys_to_join THEN
11397 GET_LATEST_EIUAI_REV_PDH( p_batch_id => p_batch_id
11398 , p_inventory_item_id => p_inventory_item_id
11399 , p_item_number => p_item_number
11400 , p_organization_id => p_organization_id
11401 , p_do_processed_rows_flag => p_do_processed_rows_flag
11402 , p_request_id => p_request_id
11403 )
11404 ELSE
11405 GET_LATEST_EIUAI_REV_SS ( p_batch_id => p_batch_id
11406 , p_source_system_id => p_source_system_id
11407 , p_source_system_reference => p_source_system_reference
11408 , p_organization_id => p_organization_id
11409 , p_do_processed_rows_flag => p_do_processed_rows_flag
11410 , p_request_id => p_request_id
11411 )
11412 END;
11413
11414 l_sql_stmt := '
11415 SELECT ' || l_select_sql
11416 || ', ATTR_VALUE_UOM
11417 , ATTR_UOM_DISP_VALUE
11418 FROM EGO_ITM_USR_ATTR_INTRFC EIUAI
11419 WHERE
11420 NVL( EIUAI.ATTR_GROUP_TYPE, :default_attr_grp ) = :attr_grp_type
11421 AND EIUAI.ATTR_GROUP_INT_NAME = :attr_grp
11422 AND EIUAI.ATTR_INT_NAME = :attr '
11423 || l_join_sql
11424 || '
11425 AND EIUAI.ORGANIZATION_ID = :org_id
11426 AND EIUAI.DATA_SET_ID = :batch_id '
11427 || l_do_procd_rows_sql
11428 || '
11429 AND DECODE( EIUAI.REVISION, :rev_code, 1, 0 ) = 1
11430 AND rownum = 1
11431 ';
11432
11433 -- my_put_line( l_sql_stmt );
11434
11435 CASE
11436 WHEN l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11437 EXECUTE IMMEDIATE l_sql_stmt
11438 INTO l_num_value, l_uom_code, l_uom_disp_value
11439 USING G_DEFAULT_ATTR_GROUP_TYPE
11440 , p_attr_group_type, p_attr_group_name, p_attr_name
11441 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11442 , p_request_id
11443 , l_revision_code
11444 ;
11445 WHEN l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11446 EXECUTE IMMEDIATE l_sql_stmt
11447 INTO l_num_value, l_uom_code, l_uom_disp_value
11448 USING G_DEFAULT_ATTR_GROUP_TYPE
11449 , p_attr_group_type, p_attr_group_name, p_attr_name
11450 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11451 , p_request_id
11452 , l_revision_code
11453 ;
11454 WHEN NOT l_do_processed_rows AND p_USE_PDH_KEYS_TO_JOIN THEN
11455 EXECUTE IMMEDIATE l_sql_stmt
11456 INTO l_num_value, l_uom_code, l_uom_disp_value
11457 USING G_DEFAULT_ATTR_GROUP_TYPE
11458 , p_attr_group_type, p_attr_group_name, p_attr_name
11459 , p_item_number, p_inventory_item_id, p_organization_id, p_batch_id
11460 , l_revision_code
11461 ;
11462 WHEN NOT l_do_processed_rows AND NOT p_USE_PDH_KEYS_TO_JOIN THEN
11463 EXECUTE IMMEDIATE l_sql_stmt
11464 INTO l_num_value, l_uom_code, l_uom_disp_value
11465 USING G_DEFAULT_ATTR_GROUP_TYPE
11466 , p_attr_group_type, p_attr_group_name, p_attr_name
11467 , p_source_system_reference, p_source_system_id, p_organization_id, p_batch_id
11468 , l_revision_code
11469 ;
11470 END CASE;
11471
11472 -- perform a uom conversion if one is necessary
11473 l_return_value := CASE WHEN p_output_uom_code IS NULL THEN l_num_value
11474 ELSE WRAPPED_TO_UOM( p_val => l_num_value
11475 , p_to_uom_code => p_output_uom_code
11476 , p_from_uom_code => l_uom_code
11477 , p_from_uom_value => l_uom_disp_value
11478 )
11479 END;
11480 RETURN l_return_value;
11481 EXCEPTION
11482 WHEN NO_DATA_FOUND THEN -- this attribute is not present in the interface table !
11483 RETURN l_return_value;
11484 WHEN OTHERS THEN
11485 -- MY_PUT_LINE( 'GET_REV_USR_ATTR_NUM Error code ' || SQLCODE || ': ' || SQLERRM );
11486 RETURN l_return_value;
11487 END GET_REV_USR_ATTR_NUM;
11488
11489 --------------------------------------------------------------------------------------------
11490 -- Function WRAPPED_TO_UOM --
11491 -- Wraps inv_convert.uom_conversion to return null in case of conversion failure. --
11492 -- If both of the from_uom params are null, no attempt to make the conversion is --
11493 -- performed. --
11494 --------------------------------------------------------------------------------------------
11495 FUNCTION WRAPPED_TO_UOM( p_val NUMBER
11496 , p_to_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11497 , p_from_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11498 , p_from_uom_value EGO_ITM_USR_ATTR_INTRFC.ATTR_UOM_DISP_VALUE%TYPE
11499 , p_inventory_item_id EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
11500 )
11501 RETURN NUMBER IS
11502 l_uom_code EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE := p_from_uom_code;
11503 l_uom_rate NUMBER;
11504 BEGIN
11505 IF p_val IS NULL
11506 OR p_val = 0
11507 OR p_val = 9.99e125 -- G_EXCEL_MISS_NUM we make sure that null out attempts are not UOM converted
11508 OR ( p_from_uom_code IS NULL
11509 AND p_from_uom_value IS NULL
11510 )
11511 THEN
11512 RETURN p_val;
11513 END IF;
11514
11515 IF l_uom_code IS NULL THEN
11516 SELECT uom_code INTO l_uom_code
11517 FROM mtl_units_of_measure_vl
11518 WHERE unit_of_measure = p_from_uom_value;
11519 END IF;
11520
11521 inv_convert.inv_um_conversion( from_unit => l_uom_code
11522 , to_unit => p_to_uom_code
11523 , item_id => p_inventory_item_id
11524 , uom_rate => l_uom_rate
11525 );
11526 IF l_uom_rate <> -99999 -- the error value in the inv_convert package
11527 THEN
11528 RETURN l_uom_rate * p_val;
11529 ELSE
11530 RETURN NULL;
11531 END IF;
11532
11533 EXCEPTION
11534 WHEN OTHERS THEN
11535 RETURN NULL;
11536 END WRAPPED_TO_UOM;
11537
11538 FUNCTION GET_REV_USR_ATTR_SS_DNUM
11539 (
11540 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11541 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11542 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11543 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11544 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11545 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11546 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11547 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11548 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11549 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11550 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11551 )
11552 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11553 BEGIN
11554 RETURN GET_REV_USR_ATTR_NUM
11555 (
11556 p_batch_id => p_batch_id
11557 , p_source_system_id => p_source_system_id
11558 , p_source_system_reference => p_source_system_reference
11559 , p_organization_id => p_organization_id
11560 , p_revision_code => p_revision_code
11561 , p_attr_group_type => p_attr_group_type
11562 , p_attr_group_name => p_attr_group_name
11563 , p_attr_name => p_attr_name
11564 , p_do_processed_rows_flag => p_do_processed_rows_flag
11565 , p_request_id => p_request_id
11566 , p_use_pdh_keys_to_join => FALSE
11567 , p_get_value_column => FALSE
11568 , p_output_uom_code => p_output_uom_code
11569 );
11570 END GET_REV_USR_ATTR_SS_DNUM;
11571
11572 FUNCTION GET_REV_USR_ATTR_PDH_DNUM
11573 (
11574 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11575 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11576 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11577 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11578 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11579 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11580 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11581 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11582 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11583 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11584 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11585 )
11586 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11587 BEGIN
11588 RETURN GET_REV_USR_ATTR_NUM
11589 (
11590 p_batch_id => p_batch_id
11591 , p_inventory_item_id => p_inventory_item_id
11592 , p_item_number => p_item_number
11593 , p_organization_id => p_organization_id
11594 , p_revision_code => p_revision_code
11595 , p_attr_group_type => p_attr_group_type
11596 , p_attr_group_name => p_attr_group_name
11597 , p_attr_name => p_attr_name
11598 , p_do_processed_rows_flag => p_do_processed_rows_flag
11599 , p_request_id => p_request_id
11600 , p_use_pdh_keys_to_join => TRUE
11601 , p_get_value_column => FALSE
11602 , p_output_uom_code => p_output_uom_code
11603 );
11604 END GET_REV_USR_ATTR_PDH_DNUM;
11605
11606 --------------------------------------------------------------------------------------------
11607 -- Function GET_REV_USR_ATTR_STR --
11608 -- Returns the string value of the specified revision attribute, if the attribute is present
11609 -- in the interface table.
11610 --------------------------------------------------------------------------------------------
11611 FUNCTION GET_REV_USR_ATTR_SS_VSTR
11612 (
11613 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11614 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11615 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11616 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11617 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11618 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11619 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11620 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11621 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11622 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11623 )
11624 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11625 BEGIN
11626 RETURN GET_REV_USR_ATTR_STR
11627 (
11628 p_batch_id => p_batch_id
11629 , p_source_system_id => p_source_system_id
11630 , p_source_system_reference => p_source_system_reference
11631 , p_organization_id => p_organization_id
11632 , p_revision_code => p_revision_code
11633 , p_attr_group_type => p_attr_group_type
11634 , p_attr_group_name => p_attr_group_name
11635 , p_attr_name => p_attr_name
11636 , p_do_processed_rows_flag => p_do_processed_rows_flag
11637 , p_request_id => p_request_id
11638 , p_use_pdh_keys_to_join => false
11639 , p_get_value_column => true
11640 );
11641 END GET_REV_USR_ATTR_SS_VSTR;
11642
11643 FUNCTION GET_REV_USR_ATTR_PDH_VSTR
11644 (
11645 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11646 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11647 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11648 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11649 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11650 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11651 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11652 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11653 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11654 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11655 )
11656 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_STR%TYPE IS
11657 BEGIN
11658 RETURN GET_REV_USR_ATTR_STR
11659 (
11660 p_batch_id => p_batch_id
11661 , p_inventory_item_id => p_inventory_item_id
11662 , p_item_number => p_item_number
11663 , p_organization_id => p_organization_id
11664 , p_revision_code => p_revision_code
11665 , p_attr_group_type => p_attr_group_type
11666 , p_attr_group_name => p_attr_group_name
11667 , p_attr_name => p_attr_name
11668 , p_do_processed_rows_flag => p_do_processed_rows_flag
11669 , p_request_id => p_request_id
11670 , p_use_pdh_keys_to_join => true
11671 , p_get_value_column => true
11672 );
11673 END GET_REV_USR_ATTR_PDH_VSTR;
11674
11675 --------------------------------------------------------------------------------------------
11676 -- Function GET_REV_USR_ATTR_DATE
11677 -- Returns the date value of the specified revision attribute, if the attribute is present
11678 -- in the interface table.
11679 --------------------------------------------------------------------------------------------
11680 FUNCTION GET_REV_USR_ATTR_SS_VDATE
11681 (
11682 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11683 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11684 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11685 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11686 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11687 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11688 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11689 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11690 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11691 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11692 )
11693 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11694 BEGIN
11695 RETURN GET_REV_USR_ATTR_DATE
11696 (
11697 p_batch_id => p_batch_id
11698 , p_source_system_id => p_source_system_id
11699 , p_source_system_reference => p_source_system_reference
11700 , p_organization_id => p_organization_id
11701 , p_revision_code => p_revision_code
11702 , p_attr_group_type => p_attr_group_type
11703 , p_attr_group_name => p_attr_group_name
11704 , p_attr_name => p_attr_name
11705 , p_do_processed_rows_flag => p_do_processed_rows_flag
11706 , p_request_id => p_request_id
11707 , p_use_pdh_keys_to_join => false
11708 , p_get_value_column => true
11709 );
11710 END GET_REV_USR_ATTR_SS_VDATE;
11711
11712 FUNCTION GET_REV_USR_ATTR_PDH_VDATE
11713 (
11714 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11715 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11716 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11717 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11718 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11719 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11720 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11721 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11722 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11723 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11724 )
11725 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_DATE%TYPE IS
11726 BEGIN
11727 RETURN GET_REV_USR_ATTR_DATE
11728 (
11729 p_batch_id => p_batch_id
11730 , p_inventory_item_id => p_inventory_item_id
11731 , p_item_number => p_item_number
11732 , p_organization_id => p_organization_id
11733 , p_revision_code => p_revision_code
11734 , p_attr_group_type => p_attr_group_type
11735 , p_attr_group_name => p_attr_group_name
11736 , p_attr_name => p_attr_name
11737 , p_do_processed_rows_flag => p_do_processed_rows_flag
11738 , p_request_id => p_request_id
11739 , p_use_pdh_keys_to_join => true
11740 , p_get_value_column => true
11741 );
11742 END GET_REV_USR_ATTR_PDH_VDATE;
11743
11744 --------------------------------------------------------------------------------------------
11745 -- Function GET_REV_USR_ATTR_NUM
11746 -- Returns the number value of the specified revision attribute, if the attribute is present
11747 -- in the interface table.
11748 -- p_output_uom_code parameter is ignored (no uom conversions performed)
11749 --------------------------------------------------------------------------------------------
11750 FUNCTION GET_REV_USR_ATTR_SS_VNUM
11751 (
11752 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11753 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
11754 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
11755 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11756 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11757 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11758 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11759 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11760 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11761 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11762 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11763 )
11764 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11765 BEGIN
11766 RETURN GET_REV_USR_ATTR_NUM
11767 (
11768 p_batch_id => p_batch_id
11769 , p_source_system_id => p_source_system_id
11770 , p_source_system_reference => p_source_system_reference
11771 , p_organization_id => p_organization_id
11772 , p_revision_code => p_revision_code
11773 , p_attr_group_type => p_attr_group_type
11774 , p_attr_group_name => p_attr_group_name
11775 , p_attr_name => p_attr_name
11776 , p_do_processed_rows_flag => p_do_processed_rows_flag
11777 , p_request_id => p_request_id
11778 , p_use_pdh_keys_to_join => false
11779 , p_get_value_column => true
11780 , p_output_uom_code => NULL
11781 );
11782 END GET_REV_USR_ATTR_SS_VNUM;
11783
11784 FUNCTION GET_REV_USR_ATTR_PDH_VNUM
11785 (
11786 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
11787 , p_inventory_item_id IN EGO_ITM_USR_ATTR_INTRFC.INVENTORY_ITEM_ID%TYPE
11788 , p_item_number IN EGO_ITM_USR_ATTR_INTRFC.ITEM_NUMBER%TYPE
11789 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
11790 , p_revision_code IN EGO_ITM_USR_ATTR_INTRFC.REVISION%TYPE
11791 , p_attr_group_type IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_TYPE%TYPE
11792 , p_attr_group_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_GROUP_INT_NAME%TYPE
11793 , p_attr_name IN EGO_ITM_USR_ATTR_INTRFC.ATTR_INT_NAME%TYPE
11794 , p_output_uom_code IN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_UOM%TYPE
11795 , p_do_processed_rows_flag IN FLAG DEFAULT FND_API.G_FALSE
11796 , p_request_id IN EGO_ITM_USR_ATTR_INTRFC.REQUEST_ID%TYPE DEFAULT NULL
11797 )
11798 RETURN EGO_ITM_USR_ATTR_INTRFC.ATTR_VALUE_NUM%TYPE IS
11799 BEGIN
11800 RETURN GET_REV_USR_ATTR_NUM
11801 (
11802 p_batch_id => p_batch_id
11803 , p_inventory_item_id => p_inventory_item_id
11804 , p_item_number => p_item_number
11805 , p_organization_id => p_organization_id
11806 , p_revision_code => p_revision_code
11807 , p_attr_group_type => p_attr_group_type
11808 , p_attr_group_name => p_attr_group_name
11809 , p_attr_name => p_attr_name
11810 , p_do_processed_rows_flag => p_do_processed_rows_flag
11811 , p_request_id => p_request_id
11812 , p_use_pdh_keys_to_join => true
11813 , p_get_value_column => true
11814 , p_output_uom_code => NULL
11815 );
11816 END GET_REV_USR_ATTR_PDH_VNUM;
11817
11818 FUNCTION Get_PDH_Source_System_Id RETURN NUMBER AS
11819 BEGIN
11820 RETURN G_PDH_SOURCE_SYSTEM_ID;
11821 END;
11822
11823 -----------------------------------------------------------------------------------------
11824 -- Get_Tokens --
11825 -- Takes a string and breaks it into tokens, returning them in another space-delimited --
11826 -- string; the tokens are determined according to the attributes/preferences of the --
11827 -- intermedia text index on items, using its stoplist, lexer, etc. --
11828 -----------------------------------------------------------------------------------------
11829 PROCEDURE GET_TOKENS
11830 (
11831 p_string_val IN VARCHAR2
11832 ,x_tokens OUT NOCOPY VARCHAR2
11833 ) IS
11834
11835 l_schema_name VARCHAR2(30);
11836 l_policy_name CONSTANT VARCHAR2(30) := 'EGO_ITEM_TEXT_TL_POL1';
11837
11838 l_token_table CTX_DOC.token_tab;
11839
11840 BEGIN
11841
11842 -- initialization
11843 x_tokens := '';
11844 l_schema_name := EGO_COMMON_PVT.Get_Prod_Schema('EGO');
11845
11846 -- retrieve tokens in a table
11847 CTX_DOC.Policy_Tokens(l_schema_name || '.' || l_policy_name
11848 ,p_string_val
11849 ,l_token_table
11850 ,userenv('lang') -- look into how to process other languages
11851 ,NULL
11852 ,NULL
11853 );
11854
11855 -- for each token, put operators and join with the specified conjunction
11856 FOR i IN 1..l_token_table.count LOOP
11857
11858 -- reset the clause
11859 x_tokens := x_tokens || ' ' || l_token_table(i).token;
11860
11861 END LOOP;
11862
11863 END GET_TOKENS;
11864
11865 ------------------------------------------------------------------------------------------
11866 -- Convert_Org_And_Cat_Grp --
11867 -- This procedure converts a specified interface table row's organization code to an ID --
11868 -- and converts the item catalog category name to its corresponding ID; these --
11869 -- conversions only occur if the org code/category name exactly match an existing name --
11870 -- in PDH. --
11871 ------------------------------------------------------------------------------------------
11872 PROCEDURE CONVERT_ORG_AND_CAT_GRP
11873 (
11874 p_batch_id IN NUMBER
11875 ,p_src_system_id IN NUMBER
11876 ,p_src_system_ref IN VARCHAR2
11877 ,p_commit IN BOOLEAN
11878 ) IS
11879
11880 l_org_id NUMBER;
11881 l_org_code VARCHAR2(3);
11882
11883 l_catalog_grp_id NUMBER;
11884 l_catalog_grp_name VARCHAR2(820);
11885
11886 l_update_flag BOOLEAN;
11887
11888 BEGIN
11889
11890 IF (p_batch_id IS NOT NULL AND p_src_system_id IS NOT NULL AND p_src_system_ref IS NOT NULL) THEN
11891
11892 --------------------------------
11893 -- MTL_SYSTEM_ITEMS_INTERFACE --
11894 --------------------------------
11895 UPDATE MTL_SYSTEM_ITEMS_INTERFACE MSII
11896 SET ORGANIZATION_ID =
11897 NVL(ORGANIZATION_ID,
11898 (SELECT MP.ORGANIZATION_ID
11899 FROM MTL_PARAMETERS MP
11900 WHERE MP.ORGANIZATION_CODE = MSII.ORGANIZATION_CODE))
11901 ,ITEM_CATALOG_GROUP_ID =
11902 NVL(ITEM_CATALOG_GROUP_ID,
11903 (SELECT MICG.ITEM_CATALOG_GROUP_ID
11904 FROM MTL_ITEM_CATALOG_GROUPS_B_KFV MICG
11905 WHERE MICG.CONCATENATED_SEGMENTS = MSII.ITEM_CATALOG_GROUP_NAME))
11906 WHERE SET_PROCESS_ID = p_batch_id
11907 AND SOURCE_SYSTEM_ID = p_src_system_id
11908 AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
11909 AND PROCESS_FLAG = 0;
11910
11911 ------------------
11912 -- EGO_AML_INTF --
11913 ------------------
11914 UPDATE EGO_AML_INTF EAI
11915 SET ORGANIZATION_ID =
11916 NVL(ORGANIZATION_ID,
11917 (SELECT MP.ORGANIZATION_ID
11918 FROM MTL_PARAMETERS MP
11919 WHERE MP.ORGANIZATION_CODE = EAI.ORGANIZATION_CODE))
11920 WHERE DATA_SET_ID = p_batch_id
11921 AND SOURCE_SYSTEM_ID = p_src_system_id
11922 AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
11923 AND PROCESS_FLAG = 0;
11924
11925 -----------------------------
11926 -- EGO_ITM_USR_ATTR_INTRFC --
11927 -----------------------------
11928 UPDATE EGO_ITM_USR_ATTR_INTRFC EIUAI
11929 SET ORGANIZATION_ID =
11930 NVL(ORGANIZATION_ID,
11931 (SELECT MP.ORGANIZATION_ID
11932 FROM MTL_PARAMETERS MP
11933 WHERE MP.ORGANIZATION_CODE = EIUAI.ORGANIZATION_CODE))
11934 WHERE DATA_SET_ID = p_batch_id
11935 AND SOURCE_SYSTEM_ID = p_src_system_id
11936 AND SOURCE_SYSTEM_REFERENCE = p_src_system_ref
11937 AND PROCESS_STATUS = 0;
11938
11939 IF (p_commit) THEN
11940 COMMIT WORK;
11941 END IF;
11942
11943 END IF; -- if all parameters are not null
11944
11945 END CONVERT_ORG_AND_CAT_GRP;
11946
11947
11948 ------------------------------------------------------------------------------------------
11949 -- Convert_Org_Cat_Grp_For_Batch --
11950 -- This is a wrapper procedure for the previous conversion procedure; this one accepts --
11951 -- a batch ID and converts all unprocessed rows belonging to that batch. --
11952 ------------------------------------------------------------------------------------------
11953 PROCEDURE CONVERT_ORG_CAT_GRP_FOR_BATCH
11954 (
11955 p_batch_id IN NUMBER
11956 ,p_commit IN BOOLEAN
11957 ) IS
11958
11959 CURSOR c_batch_pks IS
11960 SELECT MSII.SOURCE_SYSTEM_ID SOURCE_SYSTEM_ID
11961 ,MSII.SOURCE_SYSTEM_REFERENCE SOURCE_SYSTEM_REFERENCE
11962 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII
11963 WHERE MSII.SET_PROCESS_ID = p_batch_id
11964 AND MSII.PROCESS_FLAG = 0
11965 AND MSII.CONFIRM_STATUS IN ('US', 'UM', 'UN');
11966
11967 BEGIN
11968
11969 FOR v_pks IN c_batch_pks
11970 LOOP
11971
11972 CONVERT_ORG_AND_CAT_GRP(p_batch_id, v_pks.SOURCE_SYSTEM_ID, v_pks.SOURCE_SYSTEM_REFERENCE, p_commit);
11973
11974 END LOOP;
11975
11976 END CONVERT_ORG_CAT_GRP_FOR_BATCH;
11977
11978
11979 ------------------------------------------------------------------------------------------
11980 -- Confirm_Matches --
11981 -- This procedure takes care of setting the confirm status for a particular match in --
11982 -- the item match table, depending on how many matches were found for a row in the --
11983 -- interface table. --
11984 ------------------------------------------------------------------------------------------
11985 PROCEDURE CONFIRM_MATCHES
11986 (
11987 p_batch_id IN NUMBER
11988 ,p_src_system_id IN NUMBER
11989 ,p_src_system_ref IN VARCHAR2
11990 ,p_match_count IN NUMBER
11991 ,p_inventory_item_id IN NUMBER
11992 ,p_organization_id IN NUMBER
11993 ) IS
11994
11995 l_confirm_single_match VARCHAR2(1);
11996
11997 BEGIN
11998
11999 IF (p_match_count < 1) THEN
12000
12001 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12002 ,p_src_system_id
12003 ,p_src_system_ref
12004 ,EGO_IMPORT_PVT.G_UNCONF_NONE_MATCH);
12005
12006 ELSIF (p_match_count > 1) THEN
12007
12008 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12009 ,p_src_system_id
12010 ,p_src_system_ref
12011 ,EGO_IMPORT_PVT.G_UNCONF_MULT_MATCH);
12012
12013 ELSE
12014
12015 SELECT CONFIRM_SINGLE_MATCH
12016 INTO l_confirm_single_match
12017 FROM EGO_IMPORT_BATCH_DETAILS_V
12018 WHERE BATCH_ID = p_batch_id;
12019
12020 IF (l_confirm_single_match = 'Y') THEN
12021
12022 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12023 ,p_src_system_id
12024 ,p_src_system_ref
12025 ,EGO_IMPORT_PVT.G_CONF_MATCH
12026 ,p_inventory_item_id
12027 ,p_organization_id);
12028
12029 ELSE
12030
12031 EGO_IMPORT_PVT.Set_Confirm_Status(p_batch_id
12032 ,p_src_system_id
12033 ,p_src_system_ref
12034 ,EGO_IMPORT_PVT.G_UNCONF_SIGL_MATCH
12035 ,p_inventory_item_id
12036 ,p_organization_id);
12037
12038 END IF;
12039
12040 END IF;
12041
12042 END CONFIRM_MATCHES;
12043
12044 ------------------------------------------------------------------------------------------
12045 -- Get_Latest_Revision_Func --
12046 -- This function returns the latest revision available for a particular spoke item. --
12047 -- The function first checks for a revision in the item revision interface table, then --
12048 -- MSI interface, and finally, the user-defined attributes interface table. --
12049 ------------------------------------------------------------------------------------------
12050 FUNCTION GET_LATEST_REVISION_FUNC
12051 (
12052 p_batch_id IN EGO_ITM_USR_ATTR_INTRFC.DATA_SET_ID%TYPE
12053 , p_source_system_id IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_ID%TYPE
12054 , p_source_system_reference IN EGO_ITM_USR_ATTR_INTRFC.SOURCE_SYSTEM_REFERENCE%TYPE
12055 , p_organization_id IN EGO_ITM_USR_ATTR_INTRFC.ORGANIZATION_ID%TYPE
12056 )
12057 RETURN VARCHAR2
12058 IS
12059
12060 l_revision_code VARCHAR2(3);
12061
12062
12063 BEGIN
12064
12065 -- attempt to get the latest revision from the revision interface table
12066 -- according to latest effectivity date; in the case of equal effectivity
12067 -- dates, return that with the "greatest" revision code (ASCII sort order)
12068 l_revision_code := GET_LATEST_MIRI_REV_SS( p_batch_id, p_source_system_id, p_source_system_reference, p_organization_id, FND_API.G_FALSE );
12069
12070 -- if the revision still could not be obtained, then obtain it from the
12071 -- user attrs interface table (ASCII sort order)
12072 IF (l_revision_code IS NULL) THEN
12073 l_revision_code := GET_LATEST_EIUAI_REV_SS( p_batch_id, p_source_system_id, p_source_system_reference, p_organization_id, FND_API.G_FALSE );
12074 END IF;
12075
12076 RETURN l_revision_code;
12077 END GET_LATEST_REVISION_FUNC;
12078
12079 /**
12080 * For every unprocessed master record in a batch which has transaction_type value of 'UPDATE' or 'SYNC'
12081 * if it has no inventory_item_id
12082 * if it has an item number, parse it into segments.
12083 * determine if an item exists with these segments in MSI and if true, populate inventory_item_id
12084 * else it has inventory_item_id
12085 * determine if an item exists with this inventory_item_id in MSI
12086 *
12087 * if the current transaction_type is 'SYNC'
12088 * change it to 'UPDATE' if there is a way to resolve it to an existing item.
12089 * change it to 'CREATE' if there is no way to resolve it to an existing item
12090 */
12091 PROCEDURE UPDATE_ITEM_SYNC_RECORDS
12092 (p_set_id IN NUMBER
12093 ,p_org_id IN NUMBER
12094 ) IS
12095 CURSOR c_items_table IS
12096 SELECT rowid
12097 ,organization_id
12098 ,inventory_item_id
12099 ,item_number
12100 ,transaction_id
12101 ,transaction_type
12102 FROM mtl_system_items_interface
12103 WHERE set_process_id = p_set_id
12104 AND process_flag = 0
12105 AND organization_id = p_org_id
12106 AND ( confirm_status IS NULL
12107 OR confirm_status = G_FAKE_CONF_STATUS_FLAG ) -- for bug 5136989
12108 AND UPPER(transaction_type) in ('SYNC', 'UPDATE')
12109 FOR UPDATE OF transaction_type;
12110
12111 CURSOR c_item_exists(cp_item_id NUMBER) IS
12112 SELECT 1
12113 FROM mtl_system_items_b
12114 WHERE inventory_item_id = cp_item_id;
12115
12116 l_item_exist NUMBER(10) := 0;
12117 l_err_text VARCHAR2(200);
12118 l_status NUMBER(10):= 0;
12119 l_item_id mtl_system_items_b.inventory_item_id%TYPE;
12120
12121 BEGIN
12122
12123 FOR item_record IN c_items_table LOOP
12124 l_item_exist :=0;
12125 l_item_id := NULL;
12126
12127 IF item_record.inventory_item_id IS NULL THEN
12128 IF item_record.item_number IS NOT NULL THEN
12129 l_status := INVPUOPI.MTL_PR_PARSE_ITEM_NUMBER(
12130 ITEM_NUMBER =>item_record.item_number
12131 ,ITEM_ID =>item_record.inventory_item_id
12132 ,TRANS_ID =>item_record.transaction_id
12133 ,ORG_ID =>item_record.organization_id
12134 ,ERR_TEXT =>l_err_text
12135 ,P_ROWID =>item_record.rowid);
12136 END IF;
12137 l_item_exist := INVUPD1B.EXISTS_IN_MSI(
12138 ROW_ID => item_record.rowid
12139 ,ORG_ID => item_record.organization_id
12140 ,INV_ITEM_ID => l_item_id
12141 ,TRANS_ID => item_record.transaction_id
12142 ,ERR_TEXT => l_err_text
12143 ,XSET_ID => p_set_id);
12144 ELSE
12145 l_item_id := item_record.inventory_item_id;
12146 OPEN c_item_exists(item_record.inventory_item_id);
12147 FETCH c_item_exists INTO l_item_exist;
12148 CLOSE c_item_exists;
12149 l_item_exist := NVL(l_item_exist,0);
12150 END IF;
12151
12152 IF upper(item_record.transaction_type) = 'SYNC' THEN
12153 IF l_item_exist = 1 THEN
12154 UPDATE mtl_system_items_interface
12155 SET transaction_type = 'UPDATE'
12156 WHERE rowid = item_record.rowid;
12157 ELSE
12158 IF item_record.item_number IS NOT NULL THEN
12159 UPDATE mtl_system_items_interface
12160 SET transaction_type = 'CREATE', inventory_item_id = NULL
12161 WHERE rowid = item_record.rowid;
12162 ELSE
12163 UPDATE mtl_system_items_interface
12164 SET transaction_type = 'UPDATE', inventory_item_id = NULL
12165 WHERE rowid = item_record.rowid;
12166 END IF;
12167 END IF;
12168 END IF;
12169 END LOOP;
12170 END UPDATE_ITEM_SYNC_RECORDS;
12171
12172
12173 PROCEDURE SET_CONFIRM_STATUS
12174 (p_batch_id IN MTL_SYSTEM_ITEMS_INTERFACE.SET_PROCESS_ID%TYPE
12175 ,p_source_system_id IN MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_ID%TYPE
12176 ,p_source_system_reference IN MTL_SYSTEM_ITEMS_INTERFACE.SOURCE_SYSTEM_REFERENCE%TYPE
12177 ,p_new_status IN MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE
12178 ,p_inventory_item_id IN MTL_SYSTEM_ITEMS_INTERFACE.INVENTORY_ITEM_ID%TYPE DEFAULT NULL
12179 ,p_organization_id IN MTL_SYSTEM_ITEMS_INTERFACE.ORGANIZATION_ID%TYPE DEFAULT NULL
12180 ,p_check_matching_table IN FLAG DEFAULT FND_API.G_FALSE
12181 ,errmsg OUT NOCOPY VARCHAR2
12182 ,retcode OUT NOCOPY VARCHAR2
12183 ) IS
12184 CURSOR cur_old_status IS
12185 SELECT CONFIRM_STATUS
12186 FROM MTL_SYSTEM_ITEMS_INTERFACE MSII, EGO_IMPORT_BATCHES_B BA
12187 WHERE MSII.SET_PROCESS_ID = p_batch_id
12188 AND MSII.SOURCE_SYSTEM_ID = p_source_system_id
12189 AND MSII.SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12190 AND MSII.ORGANIZATION_ID = BA.ORGANIZATION_ID
12191 AND BA.BATCH_ID = p_batch_id
12192 AND NVL(MSII.PROCESS_FLAG, 0) < 1
12193 AND ROWNUM < 2;
12194
12195 l_old_status MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE;
12196 l_need_resolve_unconf_status FLAG := p_check_matching_table;
12197 l_resolved_status MTL_SYSTEM_ITEMS_INTERFACE.CONFIRM_STATUS%TYPE := p_new_status;
12198 l_item_in_matching_table NUMBER;
12199 BEGIN
12200 OPEN cur_old_status;
12201 FETCH cur_old_status INTO l_old_status;
12202 CLOSE cur_old_status;
12203
12204 IF l_old_status IS NOT NULL AND l_old_status NOT IN (G_CONF_MATCH,G_CONF_XREF,G_CONF_NEW, G_UNCONF_NONE_MATCH,
12205 G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED) THEN
12206 errmsg := 'Invalid old status';
12207 retcode := 'F';
12208 RETURN;
12209 END IF;
12210
12211 IF p_new_status NOT IN (G_CONF_MATCH,G_CONF_NEW, G_UNCONF_NONE_MATCH,
12212 G_UNCONF_SIGL_MATCH,G_UNCONF_MULT_MATCH,G_EXCLUDED,
12213 G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12214 errmsg := 'Invalid new status or action';
12215 retcode := 'F';
12216 RETURN;
12217 END IF;
12218
12219 IF (l_old_status = G_UNCONF_NONE_MATCH AND p_new_status = G_CONF_MATCH) OR
12220 (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_SIGL_MATCH) OR
12221 (l_old_status = G_CONF_XREF AND p_new_status = G_UNCONF_MULT_MATCH) OR
12222 (l_old_status = G_CONF_XREF AND p_new_status = G_CONF_MATCH) OR
12223 (l_old_status = G_CONF_MATCH AND p_new_status = G_UNCONF_NONE_MATCH) OR
12224 (l_old_status = G_CONF_MATCH AND p_new_status = G_CONF_MATCH) OR
12225 (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_MATCH) OR
12226 (l_old_status = G_CONF_NEW AND p_new_status = G_CONF_NEW) OR
12227 (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_MATCH) OR
12228 (l_old_status = G_EXCLUDED AND p_new_status = G_CONF_NEW) OR
12229 (l_old_status = G_EXCLUDED AND p_new_status = G_EXCLUDED) THEN
12230 errmsg := 'Invalid status transition from ' || l_old_status || ' to ' || p_new_status || '.';
12231 retcode := 'F';
12232 RETURN;
12233 END IF;
12234
12235 IF l_old_status NOT IN (G_CONF_MATCH,G_CONF_XREF,G_CONF_NEW) AND p_new_status = G_UNCONF_ACTION THEN
12236 errmsg := 'Invalid action: cannot unconfirm an item that is not confirmed.';
12237 retcode := 'F';
12238 RETURN;
12239 END IF;
12240
12241 IF l_old_status <> G_EXCLUDED AND p_new_status = G_UNEXCLUDE_ACTION THEN
12242 errmsg := 'Invalid action: cannot unexclude an item that is not excluded';
12243 retcode := 'F';
12244 RETURN;
12245 END IF;
12246
12247 IF p_new_status = G_CONF_MATCH AND (p_inventory_item_id IS NULL OR p_organization_id IS NULL) THEN
12248 errmsg := 'Insufficient parameters: need PDH item id and org id';
12249 retcode := 'F';
12250 RETURN;
12251 END IF;
12252
12253 IF p_new_status <> G_CONF_MATCH AND p_inventory_item_id IS NOT NULL THEN
12254 errmsg := 'Invalid parameters: p_inventory_item_id must be null if item is not confirmed as matched';
12255 retcode := 'F';
12256 RETURN;
12257 END IF;
12258
12259 IF p_new_status = G_CONF_MATCH THEN
12260 BEGIN
12261 SELECT 1 INTO l_item_in_matching_table
12262 FROM EGO_ITEM_MATCHES
12263 WHERE BATCH_ID = p_batch_id
12264 AND SOURCE_SYSTEM_ID = p_source_system_id
12265 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12266 AND INVENTORY_ITEM_ID = p_inventory_item_id
12267 AND ORGANIZATION_ID = p_organization_id;
12268 EXCEPTION WHEN NO_DATA_FOUND THEN
12269 errmsg := 'Invalid parameters: need to pick a PDH item that is matched';
12270 retcode := 'F';
12271 RETURN;
12272 END;
12273 END IF;
12274
12275 IF p_new_status IN (G_CONF_MATCH, G_CONF_NEW, G_EXCLUDED) AND
12276 p_check_matching_table = FND_API.G_TRUE THEN
12277 errmsg := 'Invalid parameters: cannot check matching table when setting confirm_status to ' || p_new_status;
12278 retcode := 'F';
12279 RETURN;
12280 END IF;
12281
12282 IF p_new_status IN (G_UNCONF_ACTION, G_UNEXCLUDE_ACTION) THEN
12283 l_need_resolve_unconf_status := FND_API.G_TRUE;
12284 END IF;
12285
12286 IF l_need_resolve_unconf_status = FND_API.G_TRUE THEN
12287 SELECT decode(count(1), 0, G_UNCONF_NONE_MATCH, 1, G_UNCONF_SIGL_MATCH, G_UNCONF_MULT_match)
12288 INTO l_resolved_status
12289 FROM EGO_ITEM_MATCHES
12290 WHERE BATCH_ID = p_batch_id
12291 AND SOURCE_SYSTEM_ID = p_source_system_id
12292 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12293 END IF;
12294
12295 UPDATE MTL_SYSTEM_ITEMS_INTERFACE
12296 SET CONFIRM_STATUS = l_resolved_status, INVENTORY_ITEM_ID = p_inventory_item_id
12297 WHERE SET_PROCESS_ID = p_batch_id
12298 AND SOURCE_SYSTEM_ID = p_source_system_id
12299 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference
12300 AND ORGANIZATION_ID = (SELECT ORGANIZATION_id FROM EGO_IMPORT_BATCHES_B WHERE BATCH_ID = p_batch_id)
12301 AND NVL(PROCESS_FLAG, 0) < 1;
12302
12303 IF l_old_status = G_EXCLUDED THEN
12304 DELETE FROM EGO_IMPORT_EXCLUDED_SS_ITEMS
12305 WHERE SOURCE_SYSTEM_ID = p_source_system_id
12306 AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference;
12307 END IF;
12308
12309 IF p_new_status = G_EXCLUDED THEN
12310 MERGE INTO EGO_IMPORT_EXCLUDED_SS_ITEMS
12311 USING dual
12312 ON (SOURCE_SYSTEM_ID = p_source_system_id AND SOURCE_SYSTEM_REFERENCE = p_source_system_reference)
12313 WHEN matched THEN
12314 UPDATE SET LAST_UPDATED_BY = FND_GLOBAL.USER_ID, LAST_UPDATE_DATE = SYSDATE,
12315 LAST_UPDATE_LOGIN = FND_GLOBAL.LOGIN_ID, OBJECT_VERSION_NUMBER = OBJECT_VERSION_NUMBER + 1
12316 WHEN NOT matched THEN
12317 INSERT VALUES (p_source_system_id, p_source_system_reference, 1, FND_GLOBAL.USER_ID, SYSDATE, FND_GLOBAL.USER_ID, SYSDATE, FND_GLOBAL.LOGIN_ID);
12318 END IF;
12319
12320 errmsg := NULL;
12321 retcode := 'S';
12322 END SET_CONFIRM_STATUS;
12323
12324 ------------------------------------------------------------------
12325 -- Function for returning the change order flag for the batch
12326 -- Bug#4631349 (RSOUNDAR)
12327 ------------------------------------------------------------------
12328 FUNCTION getAddAllToChangeFlag (p_batch_id IN NUMBER)
12329 RETURN VARCHAR2 IS
12330
12331 l_add_all_change_flag VARCHAR2(1);
12332
12333 BEGIN
12334 SELECT NVL(ADD_ALL_TO_CHANGE_FLAG,'N')
12335 INTO l_add_all_change_flag
12336 FROM EGO_IMPORT_OPTION_SETS
12337 WHERE BATCH_ID = p_batch_id;
12338 RETURN l_add_all_change_flag;
12339 EXCEPTION
12340 WHEN OTHERS THEN
12341 RETURN 'N';
12342
12343 END getAddAllToChangeFlag;
12344
12345 FUNCTION Get_Lookup_Meaning(p_lookup_type IN VARCHAR2, p_lookup_code IN VARCHAR2)
12346 RETURN VARCHAR2 IS
12347 l_meaning VARCHAR2(1000);
12348 BEGIN
12349 SELECT MEANING INTO l_meaning
12350 FROM FND_LOOKUPS
12351 WHERE LOOKUP_TYPE = p_lookup_type
12352 AND LOOKUP_CODE = p_lookup_code;
12353
12354 RETURN l_meaning;
12355 EXCEPTION WHEN OTHERS THEN
12356 RETURN NULL;
12357 END Get_Lookup_Meaning;
12358
12359 ------------------------------------------------------------------
12360 --Function for returning batch details before import
12361 --Bug.:4933193
12362 ------------------------------------------------------------------
12363 FUNCTION GET_IMPORT_DETAILS_DATA
12364 ( p_set_process_id NUMBER,
12365 p_organization_id NUMBER ,
12366 p_organization_code VARCHAR2
12367 )
12368 RETURN SYSTEM.EGO_IMPORT_CNT_TABLE
12369 IS
12370 CURSOR cr_item ( p_set_process_id NUMBER, p_organization_id NUMBER , p_organization_code VARCHAR2) IS
12371 SELECT
12372 COUNT(1) CNT ,
12373 COUNT(
12374 CASE
12375 WHEN PROCESS_FLAG = 7
12376 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12377 THEN 1
12378 ELSE NULL
12379 END
12380 ) AS NEW_CNT ,
12381 COUNT(
12382 CASE
12383 WHEN PROCESS_FLAG = 7
12384 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12385 THEN 1
12386 ELSE NULL
12387 END
12388 ) UPDATE_CNT
12389 FROM MTL_SYSTEM_ITEMS_INTERFACE
12390 WHERE SET_PROCESS_ID = p_set_process_id
12391 AND ( (ORGANIZATION_ID is not null and ORGANIZATION_ID = p_organization_id )
12392 OR
12393 (ORGANIZATION_ID is null and ORGANIZATION_CODE = p_organization_code )
12394 );
12395
12396
12397 CURSOR cr_org_assign (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12398 SELECT
12399 COUNT(1) CNT ,
12400 COUNT(
12401 CASE
12402 WHEN PROCESS_FLAG = 7
12403 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12404 THEN 1
12405 ELSE NULL
12406 END
12407 ) AS NEW_CNT ,
12408 COUNT(
12409 CASE
12410 WHEN PROCESS_FLAG = 7
12411 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12412 THEN 1
12413 ELSE NULL
12414 END
12415 ) UPDATE_CNT
12416 FROM MTL_SYSTEM_ITEMS_INTERFACE msii
12417 WHERE SET_PROCESS_ID = p_set_process_id
12418 AND EXISTS
12419 (
12420 SELECT NULL
12421 FROM MTL_PARAMETERS mp
12422 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12423 AND mp.ORGANIZATION_ID <> mp.MASTER_ORGANIZATION_ID
12424 AND ( (msii.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = msii.ORGANIZATION_ID)
12425 OR
12426 (msii.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = msii.ORGANIZATION_CODE)
12427 )
12428 );
12429
12430
12431 CURSOR cr_revision (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12432 SELECT
12433 COUNT(1) AS CNT ,
12434 COUNT(
12435 CASE
12436 WHEN PROCESS_FLAG = 7
12437 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12438 THEN 1
12439 ELSE NULL
12440 END
12441 ) AS NEW_CNT ,
12442 COUNT(
12443 CASE
12444 WHEN PROCESS_FLAG = 7
12445 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12446 THEN 1
12447 ELSE NULL
12448 END
12449 ) UPDATE_CNT
12450 FROM MTL_ITEM_REVISIONS_INTERFACE miri
12451 WHERE SET_PROCESS_ID = p_set_process_id
12452 AND EXISTS
12453 (
12454 SELECT NULL
12455 FROM MTL_PARAMETERS mp
12456 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12457 AND ( (miri.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = miri.ORGANIZATION_ID)
12458 OR
12459 (miri.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = miri.ORGANIZATION_CODE)
12460 )
12461 );
12462
12463
12464 CURSOR cr_structure (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12465 SELECT
12466 COUNT(
12467 CASE
12468 WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12469 THEN 1
12470 ELSE NULL
12471 END
12472 ) AS CNT ,
12473 COUNT(
12474 CASE
12475 WHEN PROCESS_FLAG = 7
12476 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12477 THEN 1
12478 ELSE NULL
12479 END
12480 ) AS NEW_CNT ,
12481 COUNT(
12482 CASE
12483 WHEN PROCESS_FLAG = 7
12484 AND UPPER(TRANSACTION_TYPE) IN ( 'UPDATE', 'DELETE' )
12485 THEN 1
12486 ELSE NULL
12487 END
12488 ) UPDATE_CNT
12489 FROM BOM_INVENTORY_COMPS_INTERFACE bici
12490 WHERE bici.BATCH_ID = p_set_process_id
12491 AND EXISTS
12492 (
12493 SELECT NULL
12494 FROM MTL_PARAMETERS mp
12495 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12496 AND ( (bici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bici.ORGANIZATION_ID)
12497 OR
12498 (bici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bici.ORGANIZATION_CODE)
12499 )
12500 );
12501
12502
12503 CURSOR cr_people (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12504 SELECT
12505 COUNT(1) AS CNT ,
12506 COUNT(
12507 CASE
12508 WHEN PROCESS_STATUS = 4
12509 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12510 THEN 1
12511 ELSE NULL
12512 END
12513 ) AS NEW_CNT ,
12514 COUNT(
12515 CASE
12516 WHEN PROCESS_STATUS = 4
12517 AND ( UPPER(TRANSACTION_TYPE) IN ('UPDATE', 'DELETE') )
12518 THEN 1
12519 ELSE NULL
12520 END
12521 ) UPDATE_CNT
12522 FROM EGO_ITEM_PEOPLE_INTF eipi
12523 WHERE eipi.DATA_SET_ID = p_set_process_id
12524 AND EXISTS
12525 (
12526 SELECT NULL
12527 FROM MTL_PARAMETERS mp
12528 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12529 AND ( (eipi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eipi.ORGANIZATION_ID)
12530 OR
12531 (eipi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eipi.ORGANIZATION_CODE)
12532 )
12533 ) ;
12534
12535
12536 CURSOR cr_category_assignment (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12537 SELECT
12538 COUNT(1) AS CNT ,
12539 COUNT(
12540 CASE
12541 WHEN PROCESS_FLAG = 7
12542 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12543 THEN 1
12544 ELSE NULL
12545 END
12546 ) AS NEW_CNT ,
12547 COUNT(
12548 CASE
12549 WHEN PROCESS_FLAG = 7
12550 AND ( UPPER(TRANSACTION_TYPE) IN ( 'UPDATE','DELETE') )
12551 THEN 1
12552 ELSE NULL
12553 END
12554 ) UPDATE_CNT
12555 FROM MTL_ITEM_CATEGORIES_INTERFACE mici
12556 WHERE mici.SET_PROCESS_ID = p_set_process_id
12557 AND EXISTS
12558 (
12559 SELECT NULL
12560 FROM MTL_PARAMETERS mp
12561 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12562 AND ( (mici.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = mici.ORGANIZATION_ID)
12563 OR
12564 (mici.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = mici.ORGANIZATION_CODE)
12565 )
12566 );
12567
12568
12569 CURSOR cr_aml (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12570 SELECT
12571 COUNT(1) AS CNT ,
12572 COUNT(
12573 CASE
12574 WHEN PROCESS_FLAG = 7
12575 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12576 THEN 1
12577 ELSE NULL
12578 END
12579 ) AS NEW_CNT ,
12580 COUNT(
12581 CASE
12582 WHEN PROCESS_FLAG = 7
12583 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12584 THEN 1
12585 ELSE NULL
12586 END
12587 ) UPDATE_CNT
12588 FROM EGO_AML_INTF eai
12589 WHERE eai.DATA_SET_ID = p_set_process_id
12590 AND EXISTS
12591 (
12592 SELECT NULL
12593 FROM MTL_PARAMETERS mp
12594 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12595 AND ( (eai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eai.ORGANIZATION_ID)
12596 OR
12597 (eai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eai.ORGANIZATION_CODE)
12598 )
12599 );
12600
12601
12602 CURSOR cr_component_ops (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12603 SELECT
12604 COUNT(1) AS CNT ,
12605 COUNT(
12606 CASE
12607 WHEN PROCESS_FLAG = 7
12608 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12609 THEN 1
12610 ELSE NULL
12611 END
12612 ) AS NEW_CNT ,
12613 COUNT(
12614 CASE
12615 WHEN PROCESS_FLAG = 7
12616 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12617 THEN 1
12618 ELSE NULL
12619 END
12620 ) UPDATE_CNT
12621 FROM BOM_COMPONENT_OPS_INTERFACE bcoi
12622 WHERE bcoi.BATCH_ID = p_set_process_id
12623 AND EXISTS
12624 (
12625 SELECT NULL
12626 FROM MTL_PARAMETERS mp
12627 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12628 AND ( (bcoi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bcoi.ORGANIZATION_ID)
12629 OR
12630 (bcoi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bcoi.ORGANIZATION_CODE)
12631 )
12632 );
12633
12634
12635 CURSOR cr_ref_desgs (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12636 SELECT
12637 COUNT(1) AS CNT ,
12638 COUNT(
12639 CASE
12640 WHEN PROCESS_FLAG = 7
12641 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12642 THEN 1
12643 ELSE NULL
12644 END
12645 ) AS NEW_CNT ,
12646 COUNT(
12647 CASE
12648 WHEN PROCESS_FLAG = 7
12649 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12650 THEN 1
12651 ELSE NULL
12652 END
12653 ) UPDATE_CNT
12654 FROM BOM_REF_DESGS_INTERFACE brdi
12655 WHERE brdi.BATCH_ID = p_set_process_id
12656 AND EXISTS
12657 (
12658 SELECT NULL
12659 FROM MTL_PARAMETERS mp
12660 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12661 AND ( (brdi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = brdi.ORGANIZATION_ID)
12662 OR
12663 (brdi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = brdi.ORGANIZATION_CODE)
12664 )
12665 );
12666
12667
12668 CURSOR cr_sub_comps (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12669 SELECT
12670 COUNT(1) AS CNT ,
12671 COUNT(
12672 CASE
12673 WHEN PROCESS_FLAG = 7
12674 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12675 THEN 1
12676 ELSE NULL
12677 END
12678 ) AS NEW_CNT ,
12679 COUNT(
12680 CASE
12681 WHEN PROCESS_FLAG = 7
12682 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12683 THEN 1
12684 ELSE NULL
12685 END
12686 ) UPDATE_CNT
12687 FROM BOM_SUB_COMPS_INTERFACE bsci
12688 WHERE bsci.BATCH_ID = p_set_process_id
12689 AND EXISTS
12690 (
12691 SELECT NULL
12692 FROM MTL_PARAMETERS mp
12693 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12694 AND ( (bsci.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bsci.ORGANIZATION_ID)
12695 OR
12696 (bsci.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bsci.ORGANIZATION_CODE)
12697 )
12698 );
12699
12700
12701 CURSOR cr_bill_of_mtls (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12702 SELECT
12703 COUNT(
12704 CASE
12705 WHEN UPPER(TRANSACTION_TYPE) <> 'NO_OP'
12706 THEN 1
12707 ELSE NULL
12708 END
12709 ) AS CNT ,
12710 COUNT(
12711 CASE
12712 WHEN PROCESS_FLAG = 7
12713 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12714 THEN 1
12715 ELSE NULL
12716 END
12717 ) AS NEW_CNT ,
12718 COUNT(
12719 CASE
12720 WHEN PROCESS_FLAG = 7
12721 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12722 THEN 1
12723 ELSE NULL
12724 END
12725 ) UPDATE_CNT
12726 FROM BOM_BILL_OF_MTLS_INTERFACE bomi
12727 WHERE bomi.BATCH_ID = p_set_process_id
12728 AND EXISTS
12729 (
12730 SELECT NULL
12731 FROM MTL_PARAMETERS mp
12732 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12733 AND ( (bomi.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = bomi.ORGANIZATION_ID)
12734 OR
12735 (bomi.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = bomi.ORGANIZATION_CODE)
12736 )
12737 );
12738
12739 CURSOR cr_item_sup (p_set_process_id NUMBER, p_organization_id NUMBER) IS
12740 SELECT
12741 edlb.DATA_LEVEL_NAME AS DATA_LEVEL_NAME,
12742 COUNT(1) AS CNT ,
12743 COUNT(
12744 CASE
12745 WHEN PROCESS_FLAG = 7
12746 AND UPPER(TRANSACTION_TYPE)= 'CREATE'
12747 THEN 1
12748 ELSE NULL
12749 END
12750 ) AS NEW_CNT ,
12751 COUNT(
12752 CASE
12753 WHEN PROCESS_FLAG = 7
12754 AND UPPER(TRANSACTION_TYPE)= 'UPDATE'
12755 THEN 1
12756 ELSE NULL
12757 END
12758 ) UPDATE_CNT
12759 FROM EGO_ITEM_ASSOCIATIONS_INTF eiai, EGO_DATA_LEVEL_B edlb
12760 WHERE eiai.BATCH_ID = p_set_process_id
12761 AND eiai.DATA_LEVEL_ID = edlb.DATA_LEVEL_ID
12762 AND EXISTS
12763 (
12764 SELECT NULL
12765 FROM MTL_PARAMETERS mp
12766 WHERE mp.MASTER_ORGANIZATION_ID = p_organization_id
12767 AND ( (eiai.ORGANIZATION_ID IS NOT NULL AND mp.ORGANIZATION_ID = eiai.ORGANIZATION_ID)
12768 OR
12769 (eiai.ORGANIZATION_ID IS NULL AND mp.ORGANIZATION_CODE = eiai.ORGANIZATION_CODE)
12770 )
12771 )
12772 GROUP BY edlb.DATA_LEVEL_NAME;
12773
12774
12775 CURSOR cr_lookup IS
12776 SELECT LOOKUP_CODE,
12777 MEANING,
12778 TAG
12779 FROM FND_LOOKUP_VALUES_VL
12780 WHERE LOOKUP_TYPE='EGO_PDH_ENTITY_TYPES'
12781 AND VIEW_APPLICATION_ID = 0
12782 AND SECURITY_GROUP_ID = fnd_global.lookup_security_group(LOOKUP_TYPE, VIEW_APPLICATION_ID);
12783
12784
12785 TYPE TABLE_TAG_TYPE IS TABLE OF VARCHAR2(150) INDEX BY VARCHAR2(30);
12786 TYPE TABLE_MEANING_TYPE IS TABLE OF VARCHAR2(80) INDEX BY VARCHAR2(30);
12787
12788
12789 l_row_type SYSTEM.EGO_IMPORT_CNT_REC;
12790 l_return_table SYSTEM.EGO_IMPORT_CNT_TABLE;
12791 l_tag TABLE_TAG_TYPE;
12792 l_meaning TABLE_MEANING_TYPE;
12793 l_import_xref_only VARCHAR2(1);
12794
12795 BEGIN
12796 l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
12797 l_row_type := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
12798
12799 -- Bug: 5262421, if IMPORT_XREF_ONLY is 'Y', then we will show 0 as after import count for AML
12800 BEGIN
12801 SELECT NVL(opt.IMPORT_XREF_ONLY, 'N') INTO l_import_xref_only
12802 FROM EGO_IMPORT_BATCHES_B b, EGO_IMPORT_OPTION_SETS opt
12803 WHERE b.BATCH_ID = p_set_process_id
12804 AND b.BATCH_ID = opt.BATCH_ID;
12805 EXCEPTION WHEN NO_DATA_FOUND THEN
12806 l_import_xref_only := 'N';
12807 END;
12808
12809 FOR i IN cr_lookup
12810 LOOP
12811 l_tag(i.LOOKUP_CODE) := i.TAG;
12812 l_meaning(i.LOOKUP_CODE) := i.MEANING;
12813 END LOOP;
12814
12815 FOR i IN cr_item( p_set_process_id, p_organization_id, p_organization_code)
12816 LOOP
12817 IF i.CNT > 0 THEN
12818 l_return_table.EXTEND();
12819 l_row_type.MEANING := l_meaning('ITEM');
12820 l_row_type.CNT := i.CNT;
12821 l_row_type.NEW_CNT := i.NEW_CNT;
12822 l_row_type.TAG := l_tag('ITEM');
12823 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12824 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12825 l_return_table(l_return_table.LAST) := l_row_type;
12826 END IF;
12827 END LOOP;
12828
12829 FOR i IN cr_org_assign (p_set_process_id, p_organization_id)
12830 LOOP
12831 IF i.CNT > 0 THEN
12832 l_return_table.EXTEND();
12833 l_row_type.MEANING := l_meaning('ORG_ASSIGN');
12834 l_row_type.CNT := i.CNT;
12835 l_row_type.NEW_CNT := i.NEW_CNT;
12836 l_row_type.TAG := l_tag('ORG_ASSIGN');
12837 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12838 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12839 l_return_table(l_return_table.LAST) := l_row_type;
12840 END IF;
12841 END LOOP;
12842
12843 FOR i IN cr_revision (p_set_process_id, p_organization_id)
12844 LOOP
12845 IF i.CNT > 0 THEN
12846 l_return_table.EXTEND();
12847 l_row_type.MEANING := l_meaning('REVISION');
12848 l_row_type.CNT := i.CNT;
12849 l_row_type.NEW_CNT := i.NEW_CNT;
12850 l_row_type.TAG := l_tag('REVISION');
12851 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12852 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12853 l_return_table(l_return_table.LAST) := l_row_type;
12854 END IF;
12855 END LOOP;
12856
12857 FOR i IN cr_structure (p_set_process_id, p_organization_id)
12858 LOOP
12859 IF i.CNT > 0 THEN
12860 l_return_table.EXTEND();
12861 l_row_type.MEANING := l_meaning('STRUCTURE');
12862 l_row_type.CNT := i.CNT;
12863 l_row_type.NEW_CNT := i.NEW_CNT;
12864 l_row_type.TAG := l_tag('STRUCTURE');
12865 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12866 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12867 l_return_table(l_return_table.LAST) := l_row_type;
12868 END IF;
12869 END LOOP;
12870
12871 FOR i IN cr_people (p_set_process_id, p_organization_id)
12872 LOOP
12873 IF i.CNT > 0 THEN
12874 l_return_table.EXTEND();
12875 l_row_type.MEANING := l_meaning('PEOPLE');
12876 l_row_type.CNT := i.CNT;
12877 l_row_type.NEW_CNT := i.NEW_CNT;
12878 l_row_type.TAG := l_tag('PEOPLE');
12879 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12880 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12881 l_return_table(l_return_table.LAST) := l_row_type;
12882 END IF;
12883 END LOOP;
12884
12885 FOR i IN cr_category_assignment (p_set_process_id, p_organization_id)
12886 LOOP
12887 IF i.CNT > 0 THEN
12888 l_return_table.EXTEND();
12889 l_row_type.MEANING := l_meaning('CATEGORY_ASSIGN');
12890 l_row_type.CNT := i.CNT;
12891 l_row_type.NEW_CNT := i.NEW_CNT;
12892 l_row_type.TAG := l_tag('CATEGORY_ASSIGN');
12893 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12894 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12895 l_return_table(l_return_table.LAST) := l_row_type;
12896 END IF;
12897 END LOOP;
12898
12899 FOR i IN cr_aml (p_set_process_id, p_organization_id)
12900 LOOP
12901 IF i.CNT > 0 THEN
12902 l_return_table.EXTEND();
12903 l_row_type.MEANING := l_meaning( 'AML');
12904 l_row_type.CNT := i.CNT;
12905 -- Bug: 5262421, if l_import_xref_only is Y, then in after import total only show 0
12906 IF NVL(l_import_xref_only, 'N') = 'Y' THEN
12907 l_row_type.NEW_CNT := 0;
12908 l_row_type.UPDATE_CNT := 0;
12909 l_row_type.AFTER_IMPORT_TOTAL := 0;
12910 ELSE
12911 l_row_type.NEW_CNT := i.NEW_CNT;
12912 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12913 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12914 END IF;
12915 l_row_type.TAG := l_tag( 'AML');
12916 l_return_table(l_return_table.LAST) := l_row_type;
12917 END IF;
12918 END LOOP;
12919
12920 FOR i IN cr_component_ops (p_set_process_id, p_organization_id)
12921 LOOP
12922 IF i.CNT > 0 THEN
12923 l_return_table.EXTEND();
12924 l_row_type.MEANING := l_meaning('COMPONENT_OPS');
12925 l_row_type.CNT := i.CNT;
12926 l_row_type.NEW_CNT := i.NEW_CNT;
12927 l_row_type.TAG := l_tag('COMPONENT_OPS');
12928 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12929 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12930 l_return_table(l_return_table.LAST) := l_row_type;
12931 END IF;
12932 END LOOP;
12933
12934 FOR i IN cr_ref_desgs (p_set_process_id, p_organization_id)
12935 LOOP
12936 IF i.CNT > 0 THEN
12937 l_return_table.EXTEND();
12938 l_row_type.MEANING := l_meaning('REF_DESGS');
12939 l_row_type.CNT := i.CNT;
12940 l_row_type.NEW_CNT := i.NEW_CNT;
12941 l_row_type.TAG := l_tag('REF_DESGS');
12942 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12943 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12944 l_return_table(l_return_table.LAST) := l_row_type;
12945 END IF;
12946 END LOOP;
12947
12948 FOR i IN cr_sub_comps (p_set_process_id, p_organization_id)
12949 LOOP
12950 IF i.CNT > 0 THEN
12951 l_return_table.EXTEND();
12952 l_row_type.MEANING := l_meaning('SUB_COMPS');
12953 l_row_type.CNT := i.CNT;
12954 l_row_type.NEW_CNT := i.NEW_CNT;
12955 l_row_type.TAG := l_tag('SUB_COMPS');
12956 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12957 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12958 l_return_table(l_return_table.LAST) := l_row_type;
12959 END IF;
12960 END LOOP;
12961
12962 FOR i IN cr_bill_of_mtls (p_set_process_id, p_organization_id )
12963 LOOP
12964 IF i.CNT > 0 THEN
12965 l_return_table.EXTEND();
12966 l_row_type.MEANING := l_meaning('BILL_OF_MTLS');
12967 l_row_type.CNT := i.CNT;
12968 l_row_type.NEW_CNT := i.NEW_CNT;
12969 l_row_type.TAG := l_tag('BILL_OF_MTLS');
12970 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12971 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12972 l_return_table(l_return_table.LAST) := l_row_type;
12973 END IF;
12974 END LOOP;
12975
12976 FOR i IN cr_item_sup (p_set_process_id, p_organization_id )
12977 LOOP
12978 IF i.CNT > 0 THEN
12979 l_return_table.EXTEND();
12980 IF i.DATA_LEVEL_NAME = 'ITEM_SUP' THEN
12981 l_row_type.MEANING := l_meaning('ITEM_SUP');
12982 l_row_type.TAG := l_tag('ITEM_SUP');
12983 ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE' THEN
12984 l_row_type.MEANING := l_meaning('ITEM_SUP_SITE');
12985 l_row_type.TAG := l_tag('ITEM_SUP_SITE');
12986 ELSIF i.DATA_LEVEL_NAME = 'ITEM_SUP_SITE_ORG' THEN
12987 l_row_type.MEANING := l_meaning('ITEM_ORG_SUP_SITE');
12988 l_row_type.TAG := l_tag('ITEM_ORG_SUP_SITE');
12989 END IF;
12990 l_row_type.CNT := i.CNT;
12991 l_row_type.NEW_CNT := i.NEW_CNT;
12992 l_row_type.UPDATE_CNT := i.UPDATE_CNT;
12993 l_row_type.AFTER_IMPORT_TOTAL := i.NEW_CNT + i.UPDATE_CNT;
12994 l_return_table(l_return_table.LAST) := l_row_type;
12995 END IF;
12996 END LOOP;
12997
12998 RETURN l_return_table ;
12999 EXCEPTION
13000 WHEN OTHERS THEN
13001 l_row_type := SYSTEM.EGO_IMPORT_CNT_REC('',0,0,0,0,0);
13002 l_return_table := SYSTEM.EGO_IMPORT_CNT_TABLE();
13003 l_row_type.MEANING := SQLERRM;
13004 l_return_table.EXTEND();
13005 l_return_table(l_return_table.LAST) := l_row_type;
13006 RETURN l_return_table;
13007 END GET_IMPORT_DETAILS_DATA;
13008
13009 /*
13010 * This method updates the request_ids to ego_import_batches_b table.
13011 */
13012 PROCEDURE Update_Request_Id_To_Batch (
13013 p_import_request_id IN NUMBER,
13014 p_match_request_id IN NUMBER,
13015 p_batch_id IN NUMBER)
13016 IS
13017 BEGIN
13018 IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13019 UPDATE EGO_IMPORT_BATCHES_B
13020 SET LAST_MATCH_REQUEST_ID = DECODE(p_match_request_id, NULL, LAST_MATCH_REQUEST_ID, 0, LAST_MATCH_REQUEST_ID, p_match_request_id),
13021 LAST_IMPORT_REQUEST_ID = DECODE(p_import_request_id, NULL, LAST_IMPORT_REQUEST_ID, 0, LAST_IMPORT_REQUEST_ID, p_import_request_id)
13022 WHERE BATCH_ID = p_batch_id;
13023 END IF; -- IF ( NVL(p_import_request_id, 0) > 0 ) OR ( NVL(p_match_request_id, 0) > 0 ) THEN
13024 END Update_Request_Id_To_Batch;
13025
13026 END EGO_IMPORT_PVT;