DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_ARTICLES_IMPORT_GRP

Source


1 PACKAGE BODY okc_articles_import_grp AS
2 /* $Header: OKCGAIMB.pls 120.28.12020000.3 2012/07/20 14:30:38 serukull ship $ */
3 
4   l_debug VARCHAR2(1) := NVL(FND_PROFILE.VALUE('AFLOG_ENABLED'),'N');
5   -- global array for temporary clob
6   g_temp_clob_tbl              article_txt_tbl_type:= article_txt_tbl_type();
7 
8   ---------------------------------------------------------------------------
9   -- GLOBAL MESSAGE CONSTANTS
10   ---------------------------------------------------------------------------
11   G_FND_APP                    CONSTANT VARCHAR2(200)   := OKC_API.G_FND_APP;
12   G_INVALID_VALUE              CONSTANT VARCHAR2(200)   := OKC_API.G_INVALID_VALUE;
13   G_COL_NAME_TOKEN             CONSTANT VARCHAR2(200)   := OKC_API.G_COL_NAME_TOKEN;
14   ---------------------------------------------------------------------------
15   -- GLOBAL VARIABLES
16   ---------------------------------------------------------------------------
17   G_PKG_NAME                   CONSTANT   VARCHAR2(200) := 'OKC_ARTICLES_IMPORT_GRP';
18   G_APP_NAME                   CONSTANT   VARCHAR2(3)   :=  OKC_API.G_APP_NAME;
19 
20   ------------------------------------------------------------------------------
21   -- GLOBAL CONSTANTS
22   ------------------------------------------------------------------------------
23   G_FALSE                      CONSTANT   VARCHAR2(1) := FND_API.G_FALSE;
24   G_TRUE                       CONSTANT   VARCHAR2(1) := FND_API.G_TRUE;
25   G_RET_STS_SUCCESS            CONSTANT   varchar2(1) := FND_API.G_RET_STS_SUCCESS;
26   G_RET_STS_ERROR              CONSTANT   varchar2(1) := FND_API.G_RET_STS_ERROR;
27   G_RET_STS_UNEXP_ERROR        CONSTANT   varchar2(1) := FND_API.G_RET_STS_UNEXP_ERROR;
28 
29   G_UNEXPECTED_ERROR           CONSTANT   varchar2(200) := 'OKC_UNEXPECTED_ERROR';
30   G_SQLERRM_TOKEN              CONSTANT   varchar2(200) := 'ERROR_MESSAGE';
31   G_SQLCODE_TOKEN              CONSTANT   varchar2(200) := 'ERROR_CODE';
32   G_GLOBAL_ORG_ID              NUMBER     := NVL(FND_PROFILE.VALUE('OKC_GLOBAL_ORG_ID'),-99);
33   -- MOAC
34   -- G_CURRENT_ORG_ID             NUMBER     := -99;
35   G_CURRENT_ORG_ID             NUMBER     ;
36   G_FETCHSIZE_LIMIT            NUMBER     := 300;
37 
38 -- For Error
39    TYPE list_err_batch_process_id      IS TABLE OF OKC_ART_INT_ERRORS.BATCH_PROCESS_ID%TYPE INDEX BY BINARY_INTEGER ;
40    TYPE list_err_interface_id          IS TABLE OF OKC_ART_INT_ERRORS.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
41    TYPE list_err_article_title         IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
42    TYPE list_err_error_number          IS TABLE OF OKC_ART_INT_ERRORS.ERROR_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
43    TYPE list_err_object_version_number IS TABLE OF OKC_ART_INT_ERRORS.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
44    TYPE list_err_error_type            IS TABLE OF OKC_ART_INT_ERRORS.ERROR_TYPE%TYPE INDEX BY BINARY_INTEGER ;
45    TYPE list_err_error_description     IS TABLE OF OKC_ART_INT_ERRORS.ERROR_DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
46    TYPE list_err_entity                IS TABLE OF OKC_ART_INT_ERRORS.ENTITY%TYPE INDEX BY BINARY_INTEGER ;
47 
48    err_batch_process_id_tbl             list_err_batch_process_id ;
49    err_interface_id_tbl                 list_err_interface_id ;
50    err_article_title_tbl                list_err_article_title ;
51    err_error_number_tbl                 list_err_error_number ;
52    err_object_version_number_tbl        list_err_object_version_number ;
53    err_error_type_tbl                   list_err_error_type ;
54    err_error_description_tbl            list_err_error_description ;
55    err_entity_tbl                       list_err_entity ;
56 
57 -- MOAC
58 /*
59 -- One Time fetch and cache the current Org.
60   CURSOR CUR_ORG_CSR IS
61         SELECT NVL(TO_NUMBER(DECODE(SUBSTRB(USERENV('CLIENT_INFO'),1,1), ' ', NULL,
62                                                    SUBSTRB(USERENV('CLIENT_INFO'),1,10))),-99)
63         FROM DUAL;
64 */
65 
66 /*===================================================
67  | Private Functions
68  +==================================================*/
69 
70  FUNCTION is_number(p_string IN VARCHAR2)
71  RETURN BOOLEAN IS
72     val NUMBER;
73  BEGIN
74     val := TO_NUMBER(p_string);
75     RETURN TRUE;
76  EXCEPTION
77     WHEN OTHERS THEN
78     RETURN FALSE;
79  END is_number;
80 
81  FUNCTION is_date(p_string IN VARCHAR2)
82  RETURN BOOLEAN IS
83     val DATE;
84  BEGIN
85    val := TO_DATE(p_string,'YYYY/MM/DD');
86     RETURN TRUE;
87  EXCEPTION
88     WHEN OTHERS THEN
89     RETURN FALSE;
90  END is_date;
91 
92  FUNCTION is_datetime(p_string IN VARCHAR2)
93  RETURN BOOLEAN IS
94     val DATE;
95  BEGIN
96    val := TO_DATE(p_string,'YYYY/MM/DD HH24:MI:SS');
97     RETURN TRUE;
98  EXCEPTION
99     WHEN OTHERS THEN
100     RETURN FALSE;
101  END is_datetime;
102 
103  FUNCTION is_value_valid(p_format_type IN VARCHAR2,
104                          p_string      IN VARCHAR2)
105  RETURN BOOLEAN IS
106     val Boolean;
107  BEGIN
108    IF p_format_type = 'N' THEN
109       IF is_number(p_string) THEN
110 	    RETURN TRUE;
111       ELSE
112 	    RETURN FALSE;
113       END IF;
114    ELSIF p_format_type = 'C' THEN
115       val := is_date(nvl(p_string,'XX'));
116       IF val = FALSE THEN
117 	    RETURN TRUE;
118       ELSE
119 	    RETURN FALSE;
120       END IF;
121    ELSIF p_format_type = 'X' THEN
122       IF is_date(p_string) THEN
123 	    RETURN TRUE;
124       ELSE
125 	    RETURN FALSE;
126       END IF;
127    ELSIF p_format_type = 'Y' THEN
128       IF is_datetime(p_string) THEN
129 	    RETURN TRUE;
130       ELSE
131 	    RETURN FALSE;
132       END IF;
133    ELSE
134 	    RETURN FALSE;
135    END IF;
136  EXCEPTION
137     WHEN OTHERS THEN
138     RETURN FALSE;
139  END is_value_valid;
140 
141 /*===================================================
142  | Prints summary of the run in cuncurrent output new for XML Import
143  +==================================================*/
144 
145   PROCEDURE new_wrap_up( p_batch_number   IN VARCHAR2,
146 	                    p_entity         IN VARCHAR2,
147                          p_batch_procs_id IN NUMBER
148 				   ) IS
149 
150     CURSOR get_info_csr IS
151 	 SELECT
152 	       total_rows_processed,total_rows_failed,
153 	       f.meaning entity_meaning
154 	 FROM OKC_ART_INT_BATPROCS_ALL a,
155 	      fnd_lookups f
156       WHERE UPPER(a.entity) = f.lookup_code
157       and   f.lookup_type = 'OKC_ARTICLE_IMPORT_ENTITY'
158 	 and   a.batch_process_id = p_batch_procs_id
159 	 and   a.batch_number = p_batch_number
160 	 and   a.entity = p_entity
161 	 and   rownum =1;
162 
163   BEGIN
164      FND_MSG_PUB.initialize;
165 
166 
167      FOR get_info_rec in get_info_csr LOOP
168      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
169                         p_msg_name     => 'OKC_ART_IMP_OUT1',
170                         p_token1       => 'ENTITY',
171                         p_token1_value => get_info_rec.entity_meaning,
172                         p_token2       => 'TOTAL_ROWS',
173                         p_token2_value => get_info_rec.total_rows_processed,
174                         p_token3       => 'TOTAL_SUCCESS',
175                         p_token3_value => get_info_rec.total_rows_processed-get_info_rec.total_rows_failed,
176                         p_token4       => 'TOTAL_FAILED',
177                         p_token4_value => get_info_rec.total_rows_failed);
178 
179      END LOOP;
180       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
181 
182       FND_MSG_PUB.initialize;
183      commit;
184    END new_wrap_up;
185 
186 
187 /*===================================================
188  | Prints error report in cuncurrent output for XML based Clause Import
189  +==================================================*/
190   PROCEDURE post_wrap_up(p_batch_number IN VARCHAR2,
191                          p_entity       IN VARCHAR2,
192 					p_batch_procs_id   IN NUMBER
193 				) IS
194     CURSOR get_art_info_csr IS
195     SELECT a.interface_id,a.entity,error_description,
196            b.article_title,b.article_number,
197 		 hr.name org_name
198     from okc_art_int_errors a,okc_art_interface_all b,
199          hr_organization_units hr
200     where a.interface_id = b.interface_id
201     and b.org_id = hr.organization_id
202     and b.batch_number = p_batch_number
203     and a.batch_process_id = p_batch_procs_id
204     and a.entity = p_entity
205     and a.entity = 'CLAUSE';
206 
207     CURSOR get_var_info_csr IS
208     SELECT a.interface_id,a.entity,error_description,
209            b.variable_code,b.variable_name
210     from okc_art_int_errors a,okc_variables_interface b
211     where a.interface_id = b.interface_id
212     and b.batch_number = p_batch_number
213     and a.batch_process_id = p_batch_procs_id
214     and a.entity = p_entity
215     and a.entity = 'VARIABLE';
216 
217     CURSOR get_val_info_csr IS
218     SELECT a.interface_id,a.entity,error_description,
219            b.flex_value,b.flex_value_set_name
220     from okc_art_int_errors a,okc_vs_values_interface b
221     where a.interface_id = b.interface_id
222     and b.batch_number = p_batch_number
223     and a.batch_process_id = p_batch_procs_id
224     and a.entity = p_entity
225     and a.entity = 'VALUE';
226 
227     CURSOR get_vs_info_csr IS
228     SELECT a.interface_id,a.entity,error_description,
229            b.flex_value_set_name
230     from okc_art_int_errors a,okc_valuesets_interface b
231     where a.interface_id = b.interface_id
232     and b.batch_number = p_batch_number
233     and a.batch_process_id = p_batch_procs_id
234     and a.entity = p_entity
235     and a.entity = 'VALUESET';
236 
237     CURSOR get_rel_info_csr IS
238     SELECT a.interface_id,a.entity,error_description,
239            b.source_article_title,b.target_article_title,relationship_type,
240 		 hr.name org_name
241     from okc_art_int_errors a,okc_art_rels_interface b,
242          hr_organization_units hr
243     where a.interface_id = b.interface_id
244     and b.batch_number = p_batch_number
245     and a.batch_process_id = p_batch_procs_id
246     and b.org_id = hr.organization_id
247     and a.entity = p_entity
248     and a.entity = 'RELATIONSHIP';
249 
250 
251     cur_inf_id NUMBER :=0;
252     l_insert_errors_exception     EXCEPTION;
253     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
254 BEGIN
255 IF p_entity = 'VARIABLE' THEN
256     FOR get_var_info_rec in get_var_info_csr LOOP
257 			IF cur_inf_id < 1 THEN
258                FND_MSG_PUB.initialize;
259                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
260                 p_msg_name     => 'OKC_ART_IMP_HDR_VAR');
261 			  cur_inf_id := cur_inf_id + 1;
262                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
263                FND_MSG_PUB.initialize;
264                END IF;
265 
266                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
267                 p_msg_name     => 'OKC_ART_IMP_OUT_VAR',
268                 p_token1       => 'INTERFACE_ID',
269                 p_token1_value => get_var_info_rec.interface_id,
270                 p_token2       => 'VAR_NAME',
271                 p_token2_value => get_var_info_rec.variable_name,
272                 p_token3       => 'ERR_MSG',
273                 p_token3_value => get_var_info_rec.error_description);
274                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
275                FND_MSG_PUB.initialize;
276 
277     END LOOP;
278 ELSIF p_entity = 'VALUESET' THEN
279     FOR get_vs_info_rec in get_vs_info_csr LOOP
280 			IF cur_inf_id < 1 THEN
281                FND_MSG_PUB.initialize;
282                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
283                 p_msg_name     => 'OKC_ART_IMP_HDR_VS');
284 			  cur_inf_id := cur_inf_id + 1;
285                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
286                FND_MSG_PUB.initialize;
287                END IF;
288 
289                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
290                 p_msg_name     => 'OKC_ART_IMP_OUT_VS',
291                 p_token1       => 'INTERFACE_ID',
292                 p_token1_value => get_vs_info_rec.interface_id,
293                 p_token2       => 'VS_NAME',
294                 p_token2_value => get_vs_info_rec.flex_value_set_name,
295                 p_token3       => 'ERR_MSG',
296                 p_token3_value => get_vs_info_rec.error_description);
297                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
298                FND_MSG_PUB.initialize;
299 
300     END LOOP;
301 ELSIF p_entity = 'RELATIONSHIP' THEN
302     FOR get_rel_info_rec in get_rel_info_csr LOOP
303 			IF cur_inf_id < 1 THEN
304                FND_MSG_PUB.initialize;
305                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
306                 p_msg_name     => 'OKC_ART_IMP_HDR_REL');
307 			  cur_inf_id := cur_inf_id + 1;
308                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
309                FND_MSG_PUB.initialize;
310                END IF;
311 
312                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
313                 p_msg_name     => 'OKC_ART_IMP_OUT_REL',
314                 p_token1       => 'INTERFACE_ID',
315                 p_token1_value => get_rel_info_rec.interface_id,
316                 p_token2       => 'ARTICLE_TITLE1',
317                 p_token2_value => get_rel_info_rec.source_article_title,
318                 p_token3       => 'ARTICLE_TITLE2',
319                 p_token3_value => get_rel_info_rec.target_article_title,
320                 p_token4       => 'REL_TYPE',
321                 p_token4_value => get_rel_info_rec.relationship_type,
322                 p_token5       => 'OPER_UNIT',
323                 p_token5_value => get_rel_info_rec.org_name,
324                 p_token6       => 'ERR_MSG',
325                 p_token6_value => get_rel_info_rec.error_description);
326                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
327                FND_MSG_PUB.initialize;
328 
329     END LOOP;
330 ELSIF p_entity = 'VALUE' THEN
331     FOR get_val_info_rec in get_val_info_csr LOOP
332 			IF cur_inf_id < 1 THEN
333                FND_MSG_PUB.initialize;
334                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
335                 p_msg_name     => 'OKC_ART_IMP_HDR_VAL');
336 			  cur_inf_id := cur_inf_id + 1;
337                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
338                FND_MSG_PUB.initialize;
339                END IF;
340 
341                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
342                 p_msg_name     => 'OKC_ART_IMP_OUT_VAL',
343                 p_token1       => 'INTERFACE_ID',
344                 p_token1_value => get_val_info_rec.interface_id,
345                 p_token2       => 'VAL',
346                 p_token2_value => get_val_info_rec.flex_value,
347                 p_token3       => 'VS_NAME',
348                 p_token3_value => get_val_info_rec.flex_value_set_name,
349                 p_token4       => 'ERR_MSG',
350                 p_token4_value => get_val_info_rec.error_description);
351                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
352                FND_MSG_PUB.initialize;
353 
354     END LOOP;
355 ELSIF p_entity = 'CLAUSE' THEN
356 
357     FOR get_art_info_rec in get_art_info_csr LOOP
358 
359 			IF cur_inf_id < 1 THEN
360                FND_MSG_PUB.initialize;
361                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
362                 p_msg_name     => 'OKC_ART_IMP_HDR_CLAUSE');
363 			  cur_inf_id := cur_inf_id + 1;
364                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
365                 FND_MSG_PUB.initialize;
366 
367                END IF;
368 
369                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
370                 p_msg_name     => 'OKC_ART_IMP_OUT_CLAUSE',
371                 p_token1       => 'INTERFACE_ID',
372                 p_token1_value => get_art_info_rec.interface_id,
373                 p_token2       => 'ARTICLE_TITLE',
374                 p_token2_value => get_art_info_rec.article_title,
375                 p_token3       => 'ARTICLE_NUMBER',
376                 p_token3_value => get_art_info_rec.article_number,
377                 p_token4       => 'OPER_UNIT',
378                 p_token4_value => get_art_info_rec.org_name,
379                 p_token5       => 'ERR_MSG',
380                 p_token5_value => get_art_info_rec.error_description);
381 
382                 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
383                 FND_MSG_PUB.initialize;
384     END LOOP;
385 END IF;
386 
387 EXCEPTION
388    WHEN OTHERS THEN
389      IF (l_debug = 'Y') THEN
390        okc_debug.log('500: Leaving post_wrap_up because of EXCEPTION: '||sqlerrm, 2);
391      END IF;
392      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
393                         p_msg_name     => G_UNEXPECTED_ERROR,
394                         p_token1       => G_SQLCODE_TOKEN,
395                         p_token1_value => sqlcode,
396                         p_token2       => G_SQLERRM_TOKEN,
397                         p_token2_value => sqlerrm);
398 
399    END post_wrap_up;
400 
401 /*===================================================
402  | Prints Header in cuncurrent output for XML based Clause Import
403  +==================================================*/
404 
405   PROCEDURE pre_wrap_up(p_validate_only IN VARCHAR2,
406                         p_batch_number  IN VARCHAR2,
407 				    p_batch_procs_id   IN NUMBER
408 				) IS
409     l_validate_meaning VARCHAR2(80);
410     l_import_src_meaning VARCHAR2(1);
411 
412     CURSOR lookup_meaning_csr (cp_code IN VARCHAR2) IS
413       SELECT meaning
414       FROM   fnd_lookups
415       WHERE  lookup_type = 'OKC_YN' and lookup_code = cp_code;
416 
417     CURSOR import_src_csr IS
418       SELECT import_source
419 	 FROM   OKC_ART_INT_BATPROCS_ALL
420 	 WHERE batch_process_id = p_batch_procs_id
421 	 and   batch_number = p_batch_number
422 	 and   rownum =1;
423 
424     -- FOR XML Based CLause Import
425     CURSOR get_info_csr IS
426 	 SELECT a.source_file_name,
427 	        nvl(hr.name,' ') org_name,
428 		   --to_char( a.start_date,'DD-MON-YYYY HH24:MI:SS') start_date,
429 		   fnd_date.date_to_displaydt( a.start_date, FND_DATE.calendar_aware_alt) start_date,
430 	        f.meaning validate_meaning,
431 		   nvl(f1.meaning,' ') global_flag_meaning,
432 		   nvl(f2.meaning,' ') status_meaning
433 	 FROM OKC_ART_INT_BATPROCS_ALL a,
434 	      fnd_lookups f,fnd_lookups f1,fnd_lookups f2,hr_organization_units hr
435       WHERE a.validate_only_yn = f.lookup_code
436       and   f.lookup_type = 'OKC_YN'
437       and   a.global_flag = f1.lookup_code (+)
438       and   f1.lookup_type (+)= 'OKC_YN'
439       and   a.clause_Status = f2.lookup_code (+)
440       and   f2.lookup_type (+) = 'OKC_ARTICLE_STATUS'
441 	 and   a.org_id = hr.organization_id (+)
442 	 and   a.batch_process_id = p_batch_procs_id
443 	 and   batch_number = p_batch_number
444 	 and   a.import_source IS NOT NULL
445 	 and   rownum =1;
446 
447     -- For Non-XML Based Clause Import (Old Import)
448     CURSOR get_old_info_csr IS
449 	 SELECT
450 		   fnd_date.date_to_displaydt( a.start_date, FND_DATE.calendar_aware_alt) start_date,
451 	        f.meaning validate_meaning,a.fetch_size
452 	 FROM OKC_ART_INT_BATPROCS_ALL a,
453 	      fnd_lookups f
454       WHERE a.validate_only_yn = f.lookup_code
455       and   f.lookup_type = 'OKC_YN'
456 	 and   a.batch_process_id = p_batch_procs_id
457 	 and   a.batch_number = p_batch_number
458 	 and   a.import_source IS  NULL
459 	 and   rownum =1;
460 
461 
462   BEGIN
463      FND_MSG_PUB.initialize;
464 
465      --initialize validate_meaning with p_validate_only
466      --and fetch the translated lookup meaning for this
467 	/*
468      l_validate_meaning    := p_validate_only;
469 
470      OPEN lookup_meaning_csr(p_validate_only);
471      FETCH lookup_meaning_csr INTO l_validate_meaning;
472      CLOSE lookup_meaning_csr;
473 	*/
474 	-- Get the Import Source to find out whether it is XML Based Import or not
475 	-- Based on that show the Output Layout Header
476      OPEN import_src_csr;
477      FETCH import_src_csr INTO l_import_src_meaning;
478      CLOSE import_src_csr;
479 
480      IF  l_import_src_meaning is  not null THEN
481      FOR get_info_rec in get_info_csr LOOP
482      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
483                         p_msg_name     => 'OKC_ART_IMP_HDR',
484                         p_token1       => 'BATCH_NUMBER',
485                         p_token1_value => p_batch_number,
486 				    p_token2       => 'DATE',
487 				    p_token2_value  => get_info_rec.start_date,
488                         p_token3       => 'FILE_NAME',
489                         p_token3_value => get_info_rec.source_file_name,
490                         p_token4       => 'OPER_UNIT',
491                         p_token4_value => get_info_rec.org_name,
492                         p_token5       => 'GC_IND',
493                         p_token5_value => get_info_rec.global_flag_meaning,
494                         p_token6       => 'C_STATUS',
495                         p_token6_value => get_info_rec.status_meaning,
496                         p_token7       => 'VALIDATE_ONLY',
497                         p_token7_value => get_info_rec.validate_meaning
498 				    );
499      END LOOP;
500 	ELSE
501      FOR get_old_info_rec in get_old_info_csr LOOP
502      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
503                         p_msg_name     => 'OKC_ART_IMP_HDR1',
504                         p_token1       => 'BATCH_NUMBER',
505                         p_token1_value => p_batch_number,
506 				    p_token2       => 'DATE',
507 				    p_token2_value  => get_old_info_rec.start_date,
508                         p_token3       => 'VALIDATE_ONLY',
509                         p_token3_value => get_old_info_rec.validate_meaning,
510                         p_token4       => 'C_SIZE',
511                         p_token4_value => get_old_info_rec.fetch_size
512 				    );
513      END LOOP;
514 
515 	END IF;
516      FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
517 
518      FND_MSG_PUB.initialize;
519      commit;
520    END pre_wrap_up;
521 
522 /*===================================================
523  | PROCEDURE conc. program for purge interface table
524  +==================================================*/
525  PROCEDURE conc_purge_interface (errbuf           OUT NOCOPY VARCHAR2,
526                                  retcode          OUT NOCOPY VARCHAR2,
527                                  p_start_date     IN VARCHAR2,
528                                  p_end_date       IN VARCHAR2,
529                                  p_process_status IN VARCHAR2,
530                                  p_batch_number   IN VARCHAR2
531                                  ) IS
532   l_api_name        CONSTANT VARCHAR2(30) := 'conc_purge_interface';
533   l_api_version     CONSTANT VARCHAR2(30) := 1.0;
534   l_start_date      DATE;
535   l_end_date        DATE;
536 
537   l_check_access                 VARCHAR2(1);
538 
539   Cursor Pur_org_csr IS
540   SELECT DISTINCT a.org_id org_id,nvl(hr.name,' ') org_name
541   FROM okc_art_interface_all a,hr_organization_units hr
542   WHERE a.org_id IS NOT NULL
543   AND batch_number = p_batch_number
544   AND a.org_id = hr.organization_id(+)
545   UNION ALL
546   SELECT DISTINCT a.org_id org_id,nvl(hr.name,' ') org_name
547   FROM okc_art_rels_interface a,hr_organization_units hr
548   WHERE a.org_id IS NOT NULL
549   AND batch_number = p_batch_number
550   AND a.org_id = hr.organization_id(+)
551   AND NOT EXISTS
552   (SELECT 1 FROM okc_art_interface_all b
553    WHERE  a.org_id = b.org_id
554    AND    b.batch_number = p_batch_number);
555 
556   BEGIN
557 
558   IF (l_debug = 'Y') THEN
559      okc_debug.Set_Indentation(l_api_name);
560      okc_debug.Log('10: Entering ',2);
561   END IF;
562 
563   mo_global.set_policy_context('M', NULL);
564 
565   FOR rec in Pur_org_csr LOOP
566   -- Check Access and report error
567   l_check_access := mo_global.check_access(p_org_id => rec.org_id);
568   IF l_check_access = 'Y' THEN
569   -- MOAC
570   mo_global.set_policy_context('S', rec.org_id);
571   G_CURRENT_ORG_ID := rec.org_id;
572 
573   --Initialize the return code
574   retcode := 0;
575   -- MOAC
576   --G_CURRENT_ORG_ID := mo_global.get_current_org_id();
577   /*
578   OPEN cur_org_csr;
579   FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
580   CLOSE cur_org_csr;
581   */
582 
583   IF G_CURRENT_ORG_ID IS NULL THEN
584      Okc_Api.Set_Message(G_APP_NAME, 'OKC_ART_NULL_ORG_ID');
585 	RAISE FND_API.G_EXC_ERROR;
586   END IF;
587 
588   l_start_date := nvl(fnd_date.canonical_to_date(p_start_date),
589                       to_date('01-01-0001', 'DD-MM-YYYY'));
590   l_end_date := nvl(fnd_date.canonical_to_date(p_end_date), sysdate+1);
591 
592 
593   IF (     p_end_date is NULL
594        AND p_start_date is NULL
595        AND p_process_status is NULL
596        AND p_batch_number is NULL)  THEN
597      Okc_Api.Set_Message(p_app_name    => G_APP_NAME,
598                          p_msg_name    => 'OKC_ART_WARN_PUR_ALL_DELETED');
599      DELETE FROM OKC_ART_INT_ERRORS
600             WHERE batch_process_id in
601                             ( SELECT batch_process_id
602                               FROM OKC_ART_INT_BATPROCS_ALL
603                               WHERE org_id = G_CURRENT_ORG_ID
604                                 AND batch_number in
605                                    (SELECT batch_number
606                                     FROM OKC_ART_INTERFACE_ALL
607                                     WHERE org_id = G_CURRENT_ORG_ID));
608 
609      DELETE FROM OKC_ART_INTERFACE_ALL
610         WHERE org_id = G_CURRENT_ORG_ID;
611 
612      -- Below Added for FAR/DFAR Content Import
613      DELETE FROM OKC_VARIABLES_INTERFACE ;
614      DELETE FROM OKC_ART_RELS_INTERFACE
615         WHERE org_id = G_CURRENT_ORG_ID ;
616      DELETE FROM OKC_VALUESETS_INTERFACE ;
617      DELETE FROM OKC_VS_VALUES_INTERFACE ;
618 
619   ELSE
620       DELETE FROM OKC_ART_INT_ERRORS
621           WHERE interface_id in ( SELECT interface_id
622                                   FROM  OKC_ART_INTERFACE_ALL
623                                   WHERE last_update_date >= trunc(l_start_date)
624                                   AND last_update_date <= l_end_date
625                                   AND (batch_number = p_batch_number OR p_batch_number IS NULL)
626                                   AND (process_status = p_process_status OR p_process_status IS NULL)
627                                   AND org_id = G_CURRENT_ORG_ID);
628       DELETE FROM OKC_ART_INTERFACE_ALL
629             WHERE last_update_date >= trunc(l_start_date)
630             AND last_update_date <= l_end_date
631             AND (batch_number = p_batch_number OR p_batch_number IS NULL)
632             AND (process_status = p_process_status OR p_process_status IS NULL)
633             AND org_id = G_CURRENT_ORG_ID;
634 
635      -- Below Added for FAR/DFAR Content Import
636       DELETE FROM OKC_VARIABLES_INTERFACE
637             WHERE last_update_date >= trunc(l_start_date)
638             AND last_update_date <= l_end_date
639             AND (batch_number = p_batch_number OR p_batch_number IS NULL)
640             AND (process_status = p_process_status OR p_process_status IS NULL)
641             ;
642       DELETE FROM OKC_ART_RELS_INTERFACE
643             WHERE last_update_date >= trunc(l_start_date)
644             AND last_update_date <= l_end_date
645             AND (batch_number = p_batch_number OR p_batch_number IS NULL)
646             AND (process_status = p_process_status OR p_process_status IS NULL)
647             AND org_id = G_CURRENT_ORG_ID;
648       DELETE FROM OKC_VALUESETS_INTERFACE
649             WHERE last_update_date >= trunc(l_start_date)
650             AND last_update_date <= l_end_date
651             AND (batch_number = p_batch_number OR p_batch_number IS NULL)
652             AND (process_status = p_process_status OR p_process_status IS NULL)
653             ;
654       DELETE FROM OKC_VS_VALUES_INTERFACE
655             WHERE last_update_date >= trunc(l_start_date)
656             AND last_update_date <= l_end_date
657             AND (batch_number = p_batch_number OR p_batch_number IS NULL)
658             AND (process_status = p_process_status OR p_process_status IS NULL)
659             ;
660       -- this will clean the remaining error not related to interface_id
661       -- such as SQL exception etc.
662       DELETE FROM OKC_ART_INT_ERRORS
663             WHERE batch_process_id in ( SELECT batch_process_id
664                                         FROM OKC_ART_INT_BATPROCS_ALL
665                                         WHERE org_id = G_CURRENT_ORG_ID
666                                          AND batch_number not in
667                                           (SELECT batch_number
668                                            FROM OKC_ART_INTERFACE_ALL
669                                            WHERE org_id = G_CURRENT_ORG_ID));
670 
671   END IF;
672 
673   COMMIT;
674 
675   END IF;
676   END LOOP;
677 
678 
679   IF (l_debug = 'Y') THEN
680      okc_debug.Log('1000: Leaving ',2);
681      okc_debug.Reset_Indentation;
682   END IF;
683 
684   EXCEPTION
685    WHEN FND_API.G_EXC_ERROR THEN
686       retcode := 2;
687       errbuf  := substr(sqlerrm,1,200);
688       IF FND_MSG_PUB.Count_Msg > 0 Then
689          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
690          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
691          END LOOP;
692       END IF;
693       FND_MSG_PUB.initialize;
694 
695       IF (l_debug = 'Y') THEN
696          okc_debug.Log('3000: Leaving ',2);
697          okc_debug.Reset_Indentation;
698       END IF;
699    WHEN OTHERS THEN
700         retcode := 2;
701         errbuf  := substr(sqlerrm,1,200);
702         rollback;
703         IF (l_debug = 'Y') THEN
704            okc_debug.Log('5000: Leaving due to an Unexpected Exception',2);
705            okc_debug.Reset_Indentation;
706         END IF;
707  END conc_purge_interface;
708 
709 
710 /*===================================================
711  | PROCEDURE conc. program wrapper for import_articles
712  +==================================================*/
713  PROCEDURE conc_import_articles (
714                                  x_return_status  OUT NOCOPY VARCHAR2,
715                                  x_msg_count      OUT NOCOPY NUMBER,
716                                  x_msg_data       OUT NOCOPY VARCHAR2,
717 
718                                  p_batch_procs_id IN NUMBER,
719                                  p_batch_number   IN VARCHAR2,
720                                  p_validate_only  IN VARCHAR2,
721                                  p_fetchsize      IN NUMBER
722                                  ) IS
723   l_api_name        CONSTANT VARCHAR2(30) := 'conc_import_articles';
724   l_api_version     CONSTANT VARCHAR2(30) := 1.0;
725   l_return_status            VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
726   l_msg_count                NUMBER;
727   l_msg_data                 VARCHAR2(1000);
728   l_init_msg_list            VARCHAR2(3) := 'F';
729   l_user_id                  NUMBER;
730   l_login_id                 NUMBER;
731   l_program_id               OKC_ART_INTERFACE_ALL.PROGRAM_ID%TYPE;
732   l_program_login_id         OKC_ART_INTERFACE_ALL.PROGRAM_LOGIN_ID%TYPE;
733   l_program_appl_id          OKC_ART_INTERFACE_ALL.PROGRAM_APPLICATION_ID%TYPE;
734   l_request_id               OKC_ART_INTERFACE_ALL.REQUEST_ID%TYPE;
735   l_batch_process_id         NUMBER;
736   lc_batch_process_id        NUMBER;
737   l_first_time               VARCHAR2(1) := 'Y';
738   l_wrap_up                  VARCHAR2(1) := 'Y';
739   l_tot_art_rows_processed       NUMBER := 0;
740   l_tot_art_rows_failed          NUMBER := 0;
741   l_tot_art_rows_warned          NUMBER := 0;
742   l_part_art_rows_processed      NUMBER := 0;
743   l_part_art_rows_failed         NUMBER := 0;
744   l_part_art_rows_warned         NUMBER := 0;
745   l_tot_rel_rows_processed       NUMBER := 0;
746   l_tot_rel_rows_failed          NUMBER := 0;
747   l_tot_rel_rows_warned          NUMBER := 0;
748   l_part_rel_rows_processed      NUMBER := 0;
749   l_part_rel_rows_failed         NUMBER := 0;
750   l_part_rel_rows_warned         NUMBER := 0;
751 
752   SUBTYPE entity IS OKC_ART_INT_BATPROCS_ALL.ENTITY%TYPE;
753 
754  TYPE entity_tbl_type IS TABLE OF entity;
755  l_entity_tbl_type    entity_tbl_type;
756 
757 
758   l_check_access                 VARCHAR2(1);
759 
760   Cursor Org_csr IS
761   SELECT DISTINCT a.org_id org_id,nvl(hr.name,' ') org_name
762   FROM okc_art_interface_all a,hr_organization_units hr
763   WHERE a.org_id IS NOT NULL
764   AND batch_number = p_batch_number
765   AND a.org_id = hr.organization_id(+)
766   UNION ALL
767   SELECT DISTINCT a.org_id org_id,nvl(hr.name,' ') org_name
768   FROM okc_art_rels_interface a,hr_organization_units hr
769   WHERE a.org_id IS NOT NULL
770   AND batch_number = p_batch_number
771   AND a.org_id = hr.organization_id(+)
772   AND NOT EXISTS
773   (SELECT 1 FROM okc_art_interface_all b
774    WHERE  a.org_id = b.org_id
775    AND    b.batch_number = p_batch_number);
776 
777 
778   BEGIN
779   IF (l_debug = 'Y') THEN
780      okc_debug.Set_Indentation(l_api_name);
781      okc_debug.Log('10: Entering ',2);
782   END IF;
783 
784   mo_global.set_policy_context('M', NULL);
785 
786   FOR rec in Org_Csr LOOP
787   -- Check Access and report error
788   l_check_access := mo_global.check_access(p_org_id => rec.org_id);
789   IF l_check_access = 'Y' THEN
790   -- MOAC
791   mo_global.set_policy_context('S', rec.org_id);
792   G_CURRENT_ORG_ID := rec.org_id;
793 
794 
795   --IF G_CURRENT_ORG_ID IS NULL THEN
796   --   Okc_Api.Set_Message(G_APP_NAME, 'OKC_ART_NULL_ORG_ID');
797   --	RAISE FND_API.G_EXC_ERROR;
798   --END IF;
799 ------------------------------------------------------------------------
800 -- Create a batch process id and an initial row for process statistics
801 -------------------------------------------------------------------------
802   IF l_first_time = 'Y' then
803     l_user_id  := Fnd_Global.user_id;
804     l_login_id := Fnd_Global.login_id;
805     l_return_status := G_RET_STS_SUCCESS;
806 
807     IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
808      l_program_id := NULL;
809     ELSE
810      l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
811     END IF;
812 
813     IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
814      l_program_login_id := NULL;
815     ELSE
816      l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
817     END IF;
818 
819     IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
820      l_program_appl_id := NULL;
821     ELSE
822      l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
823     END IF;
824 
825     IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
826      l_request_id := NULL;
827     ELSE
828      l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
829     END IF;
830 
831 
832     IF p_batch_procs_id = 0 THEN
833        -- Need to initialize the record for each entity
834        l_entity_tbl_type := entity_tbl_type('Clause','Variable','Relationship','Valueset','Value');
835 	  -- Generate batch_process_id
836 	  SELECT
837        OKC_ART_INT_BATPROCS_ALL_S1.nextval into lc_batch_process_id
838 	  FROM DUAL;
839 
840     FOR i IN 1..l_entity_tbl_type.LAST LOOP
841 
842     INSERT INTO OKC_ART_INT_BATPROCS_ALL
843       (
844       BATCH_PROCESS_ID,
845       OBJECT_VERSION_NUMBER,
846       BATCH_NUMBER,
847       ORG_ID,
848       VALIDATE_ONLY_YN,
849       FETCH_SIZE,
850       START_DATE,
851       END_DATE,
852       TOTAL_ROWS_PROCESSED,
853       TOTAL_ROWS_FAILED,
854       TOTAL_ROWS_WARNED,
855       CREATED_BY,
856       CREATION_DATE,
857       LAST_UPDATE_DATE,
858       LAST_UPDATED_BY,
859       LAST_UPDATE_LOGIN,
860       PROGRAM_ID,
861       PROGRAM_LOGIN_ID,
862       PROGRAM_APPLICATION_ID,
863       REQUEST_ID,
864 	 ENTITY
865       )
866     VALUES
867       (
868        lc_batch_process_id,
869        1.0,
870        p_batch_number,
871        G_CURRENT_ORG_ID,
872        p_validate_only,
873        p_fetchsize,
874        sysdate,
875        NULL,
876        NULL,
877        NULL,
878        NULL,
879        l_user_id,
880        sysdate,
881        sysdate,
882        l_user_id,
883        l_login_id,
884        l_program_id,
885        l_program_login_id,
886        l_program_appl_id,
887        l_request_id   ,
888 	  l_entity_tbl_type(i)
889       ) returning BATCH_PROCESS_ID INTO l_batch_process_id;
890     commit;
891 
892     END LOOP;
893     l_entity_tbl_type.delete;
894 
895   ELSE
896     l_batch_process_id := p_batch_procs_id;
897   END IF;
898 
899   IF l_wrap_up = 'Y' THEN
900   pre_wrap_up(p_validate_only,p_batch_number,l_batch_process_id);
901   l_wrap_up := 'N' ;
902   END IF;
903 
904   BEGIN
905     OKC_ARTICLES_IMPORT_GRP.import_fnd_flex_value_sets(
906                               x_return_status  => l_return_status,
907                               x_msg_count      => x_msg_count,
908                               x_msg_data       => x_msg_data,
909                               p_batch_procs_id => l_batch_process_id,
910                               p_batch_number   => p_batch_number,
911                               p_validate_only  => p_validate_only,
912                               p_fetchsize      => p_fetchsize );
913 
914 
915   IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
916        RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
917   ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
918        RAISE OKC_API.G_EXCEPTION_ERROR;
919   END IF;
920 
921   IF (l_debug = 'Y') THEN
922      okc_debug.Log('1000: Leaving conc_import_articles',2);
923      okc_debug.Reset_Indentation;
924   END IF;
925   x_return_status := G_RET_STS_SUCCESS;
926 
927   EXCEPTION
928    WHEN OKC_API.G_EXCEPTION_ERROR THEN
929       x_return_status := G_RET_STS_ERROR;
930       IF FND_MSG_PUB.Count_Msg > 0 Then
931          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
932          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
933          END LOOP;
934       END IF;
935       FND_MSG_PUB.initialize;
936 
937       IF (l_debug = 'Y') THEN
938          okc_debug.Log('3000: Leaving conc_import_articles',2);
939          okc_debug.Reset_Indentation;
940       END IF;
941    WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
942        x_return_status := G_RET_STS_UNEXP_ERROR;
943        IF FND_MSG_PUB.Count_Msg > 0 Then
944          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
945          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
946          END LOOP;
947        END IF;
948        FND_MSG_PUB.initialize;
949        IF (l_debug = 'Y') THEN
950          okc_debug.Log('4000: Leaving conc_import_articles',2);
951          okc_debug.Reset_Indentation;
952        END IF;
953 
954    WHEN OTHERS THEN
955         x_return_status := G_RET_STS_UNEXP_ERROR;
956         IF FND_MSG_PUB.Count_Msg > 0 Then
957          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
958          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
959          END LOOP;
960         END IF;
961         FND_MSG_PUB.initialize;
962         IF (l_debug = 'Y') THEN
963            okc_debug.Log('5000: Leaving conc_import_articles',2);
964            okc_debug.Reset_Indentation;
965         END IF;
966   END ;
967   BEGIN
968     OKC_ARTICLES_IMPORT_GRP.import_fnd_flex_values(
969                               x_return_status  => l_return_status,
970                               x_msg_count      => x_msg_count,
971                               x_msg_data       => x_msg_data,
972                               p_batch_procs_id => l_batch_process_id,
973                               p_batch_number   => p_batch_number,
974                               p_validate_only  => p_validate_only,
975                               p_fetchsize      => p_fetchsize );
976 
977 
978   IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
979        RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
980   ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
981        RAISE OKC_API.G_EXCEPTION_ERROR;
982   END IF;
983 
984   IF (l_debug = 'Y') THEN
985      okc_debug.Log('1000: Leaving conc_import_articles',2);
986      okc_debug.Reset_Indentation;
987   END IF;
988   x_return_status := G_RET_STS_SUCCESS;
989 
990   EXCEPTION
991    WHEN OKC_API.G_EXCEPTION_ERROR THEN
992       x_return_status := G_RET_STS_ERROR;
993       IF FND_MSG_PUB.Count_Msg > 0 Then
994          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
995          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
996          END LOOP;
997       END IF;
998       FND_MSG_PUB.initialize;
999 
1000       IF (l_debug = 'Y') THEN
1001          okc_debug.Log('3000: Leaving conc_import_articles',2);
1002          okc_debug.Reset_Indentation;
1003       END IF;
1004    WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1005        x_return_status := G_RET_STS_UNEXP_ERROR;
1006        IF FND_MSG_PUB.Count_Msg > 0 Then
1007          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1008          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1009          END LOOP;
1010        END IF;
1011        FND_MSG_PUB.initialize;
1012        IF (l_debug = 'Y') THEN
1013          okc_debug.Log('4000: Leaving conc_import_articles',2);
1014          okc_debug.Reset_Indentation;
1015        END IF;
1016 
1017    WHEN OTHERS THEN
1018         x_return_status := G_RET_STS_UNEXP_ERROR;
1019         IF FND_MSG_PUB.Count_Msg > 0 Then
1020          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1021          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1022          END LOOP;
1023         END IF;
1024         FND_MSG_PUB.initialize;
1025         IF (l_debug = 'Y') THEN
1026            okc_debug.Log('5000: Leaving conc_import_articles',2);
1027            okc_debug.Reset_Indentation;
1028         END IF;
1029   END ;
1030   BEGIN
1031     OKC_ARTICLES_IMPORT_GRP.import_variables(
1032                               x_return_status  => l_return_status,
1033                               x_msg_count      => x_msg_count,
1034                               x_msg_data       => x_msg_data,
1035                               p_batch_procs_id => l_batch_process_id,
1036                               p_batch_number   => p_batch_number,
1037                               p_validate_only  => p_validate_only,
1038                               p_fetchsize      => p_fetchsize );
1039 
1040 
1041   IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
1042        RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1043   ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
1044        RAISE OKC_API.G_EXCEPTION_ERROR;
1045   END IF;
1046 
1047   IF (l_debug = 'Y') THEN
1048      okc_debug.Log('1000: Leaving conc_import_articles',2);
1049      okc_debug.Reset_Indentation;
1050   END IF;
1051   x_return_status := G_RET_STS_SUCCESS;
1052 
1053   EXCEPTION
1054    WHEN OKC_API.G_EXCEPTION_ERROR THEN
1055       x_return_status := G_RET_STS_ERROR;
1056       IF FND_MSG_PUB.Count_Msg > 0 Then
1057          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1058          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1059          END LOOP;
1060       END IF;
1061       FND_MSG_PUB.initialize;
1062 
1063       IF (l_debug = 'Y') THEN
1064          okc_debug.Log('3000: Leaving conc_import_articles',2);
1065          okc_debug.Reset_Indentation;
1066       END IF;
1067    WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1068        x_return_status := G_RET_STS_UNEXP_ERROR;
1069        IF FND_MSG_PUB.Count_Msg > 0 Then
1070          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1071          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1072          END LOOP;
1073        END IF;
1074        FND_MSG_PUB.initialize;
1075        IF (l_debug = 'Y') THEN
1076          okc_debug.Log('4000: Leaving conc_import_articles',2);
1077          okc_debug.Reset_Indentation;
1078        END IF;
1079 
1080    WHEN OTHERS THEN
1081         x_return_status := G_RET_STS_UNEXP_ERROR;
1082         IF FND_MSG_PUB.Count_Msg > 0 Then
1083          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1084          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1085          END LOOP;
1086         END IF;
1087         FND_MSG_PUB.initialize;
1088         IF (l_debug = 'Y') THEN
1089            okc_debug.Log('5000: Leaving conc_import_articles',2);
1090            okc_debug.Reset_Indentation;
1091         END IF;
1092   END ;
1093   END IF;  -- If l_first_time = 'Y'
1094   BEGIN
1095     l_part_art_rows_processed      := 0;
1096     l_part_art_rows_failed         := 0;
1097     l_part_art_rows_warned         := 0;
1098     OKC_ARTICLES_IMPORT_GRP.import_articles(
1099                               x_return_status  => l_return_status,
1100                               x_msg_count      => x_msg_count,
1101                               x_msg_data       => x_msg_data,
1102                               p_batch_procs_id => l_batch_process_id,
1103                               p_batch_number   => p_batch_number,
1104                               p_validate_only  => p_validate_only,
1105                               p_fetchsize      => p_fetchsize,
1106 						p_rows_processed => l_part_art_rows_processed,
1107 						p_rows_failed    => l_part_art_rows_failed,
1108 						p_rows_warned    => l_part_art_rows_warned);
1109 
1110     l_tot_art_rows_processed       := l_tot_art_rows_processed + l_part_art_rows_processed;
1111     l_tot_art_rows_failed          := l_tot_art_rows_failed + l_part_art_rows_failed;
1112     l_tot_art_rows_warned          := l_tot_art_rows_warned + l_part_art_rows_warned;
1113 
1114 
1115 
1116   IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
1117        RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1118   ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
1119        RAISE OKC_API.G_EXCEPTION_ERROR;
1120   END IF;
1121 
1122   IF (l_debug = 'Y') THEN
1123      okc_debug.Log('1000: Leaving conc_import_articles',2);
1124      okc_debug.Reset_Indentation;
1125   END IF;
1126   x_return_status := G_RET_STS_SUCCESS;
1127 
1128   EXCEPTION
1129    WHEN OKC_API.G_EXCEPTION_ERROR THEN
1130       x_return_status := G_RET_STS_ERROR;
1131       IF FND_MSG_PUB.Count_Msg > 0 Then
1132          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1133          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1134          END LOOP;
1135       END IF;
1136       FND_MSG_PUB.initialize;
1137 
1138       IF (l_debug = 'Y') THEN
1139          okc_debug.Log('3000: Leaving conc_import_articles',2);
1140          okc_debug.Reset_Indentation;
1141       END IF;
1142    WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1143        x_return_status := G_RET_STS_UNEXP_ERROR;
1144        IF FND_MSG_PUB.Count_Msg > 0 Then
1145          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1146          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1147          END LOOP;
1148        END IF;
1149        FND_MSG_PUB.initialize;
1150        IF (l_debug = 'Y') THEN
1151          okc_debug.Log('4000: Leaving conc_import_articles',2);
1152          okc_debug.Reset_Indentation;
1153        END IF;
1154 
1155    WHEN OTHERS THEN
1156         x_return_status := G_RET_STS_UNEXP_ERROR;
1157         IF FND_MSG_PUB.Count_Msg > 0 Then
1158          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1159          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1160          END LOOP;
1161         END IF;
1162         FND_MSG_PUB.initialize;
1163         IF (l_debug = 'Y') THEN
1164            okc_debug.Log('5000: Leaving conc_import_articles',2);
1165            okc_debug.Reset_Indentation;
1166         END IF;
1167   END ;
1168   BEGIN
1169     l_part_rel_rows_processed      := 0;
1170     l_part_rel_rows_failed         := 0;
1171     l_part_rel_rows_warned         := 0;
1172     OKC_ARTICLES_IMPORT_GRP.import_relationships(
1173                               x_return_status  => l_return_status,
1174                               x_msg_count      => x_msg_count,
1175                               x_msg_data       => x_msg_data,
1176                               p_batch_procs_id => l_batch_process_id,
1177                               p_batch_number   => p_batch_number,
1178                               p_validate_only  => p_validate_only,
1179                               p_fetchsize      => p_fetchsize,
1180 						p_rows_processed => l_part_rel_rows_processed,
1181 						p_rows_failed    => l_part_rel_rows_failed,
1182 						p_rows_warned    => l_part_rel_rows_warned);
1183 
1184     l_tot_rel_rows_processed       := l_tot_rel_rows_processed + l_part_rel_rows_processed;
1185     l_tot_rel_rows_failed          := l_tot_rel_rows_failed + l_part_rel_rows_failed;
1186     l_tot_rel_rows_warned          := l_tot_rel_rows_warned + l_part_rel_rows_warned;
1187 
1188 
1189   IF l_return_status = OKC_API.G_RET_STS_UNEXP_ERROR THEN
1190        RAISE OKC_API.G_EXCEPTION_UNEXPECTED_ERROR;
1191   ELSIF l_return_status = OKC_API.G_RET_STS_ERROR THEN
1192        RAISE OKC_API.G_EXCEPTION_ERROR;
1193   END IF;
1194 
1195   IF (l_debug = 'Y') THEN
1196      okc_debug.Log('1000: Leaving conc_import_articles',2);
1197      okc_debug.Reset_Indentation;
1198   END IF;
1199   x_return_status := G_RET_STS_SUCCESS;
1200 
1201   EXCEPTION
1202    WHEN OKC_API.G_EXCEPTION_ERROR THEN
1203       x_return_status := G_RET_STS_ERROR;
1204       IF FND_MSG_PUB.Count_Msg > 0 Then
1205          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1206          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1207          END LOOP;
1208       END IF;
1209       FND_MSG_PUB.initialize;
1210 
1211       IF (l_debug = 'Y') THEN
1212          okc_debug.Log('3000: Leaving conc_import_articles',2);
1213          okc_debug.Reset_Indentation;
1214       END IF;
1215    WHEN OKC_API.G_EXCEPTION_UNEXPECTED_ERROR THEN
1216        x_return_status := G_RET_STS_UNEXP_ERROR;
1217        IF FND_MSG_PUB.Count_Msg > 0 Then
1218          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1219          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1220          END LOOP;
1221        END IF;
1222        FND_MSG_PUB.initialize;
1223        IF (l_debug = 'Y') THEN
1224          okc_debug.Log('4000: Leaving conc_import_articles',2);
1225          okc_debug.Reset_Indentation;
1226        END IF;
1227 
1228    WHEN OTHERS THEN
1229         x_return_status := G_RET_STS_UNEXP_ERROR;
1230         IF FND_MSG_PUB.Count_Msg > 0 Then
1231          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1232          FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1233          END LOOP;
1234         END IF;
1235         FND_MSG_PUB.initialize;
1236         IF (l_debug = 'Y') THEN
1237            okc_debug.Log('5000: Leaving conc_import_articles',2);
1238            okc_debug.Reset_Indentation;
1239         END IF;
1240   END ;
1241   l_first_time := 'N';
1242   ELSE
1243   IF l_wrap_up = 'Y' THEN
1244   pre_wrap_up(p_validate_only,p_batch_number,p_batch_procs_id);
1245   l_wrap_up := 'N';
1246   END IF;
1247      FND_MSG_PUB.initialize;
1248      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1249                         p_msg_name     => 'OKC_ART_NOT_VALID_ORG',
1250                         p_token1       => 'ORG_NAME',
1251                         p_token1_value => rec.org_name);
1252      FND_FILE.PUT_LINE(FND_FILE.LOG, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
1253 
1254      FND_MSG_PUB.initialize;
1255      commit;
1256 
1257   END IF;
1258   END LOOP;
1259 
1260   --Update Batch Process Table with the clause related process counts
1261   UPDATE OKC_ART_INT_BATPROCS_ALL
1262   SET
1263   TOTAL_ROWS_PROCESSED       = l_tot_art_rows_processed,
1264   TOTAL_ROWS_FAILED          = l_tot_art_rows_failed,
1265   TOTAL_ROWS_WARNED          = l_tot_art_rows_warned,
1266   END_DATE                   = SYSDATE,
1267   PROGRAM_ID                 = l_program_id,
1268   REQUEST_ID                 = l_request_id,
1269   PROGRAM_LOGIN_ID           = l_program_login_id,
1270   PROGRAM_APPLICATION_ID     = l_program_appl_id,
1271   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
1272   LAST_UPDATED_BY            = l_user_id,
1273   LAST_UPDATE_LOGIN          = l_login_id,
1274   LAST_UPDATE_DATE           = SYSDATE
1275   WHERE
1276   BATCH_PROCESS_ID  = l_batch_process_id
1277   AND ENTITY = 'Clause';
1278 
1279   --Update Batch Process Table with the relationship related counts
1280   UPDATE OKC_ART_INT_BATPROCS_ALL
1281   SET
1282   TOTAL_ROWS_PROCESSED       = l_tot_rel_rows_processed,
1283   TOTAL_ROWS_FAILED          = l_tot_rel_rows_failed,
1284   TOTAL_ROWS_WARNED          = l_tot_rel_rows_warned,
1285   END_DATE                   = SYSDATE,
1286   PROGRAM_ID                 = l_program_id,
1287   REQUEST_ID                 = l_request_id,
1288   PROGRAM_LOGIN_ID           = l_program_login_id,
1289   PROGRAM_APPLICATION_ID     = l_program_appl_id,
1290   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
1291   LAST_UPDATED_BY            = l_user_id,
1292   LAST_UPDATE_LOGIN          = l_login_id,
1293   LAST_UPDATE_DATE           = SYSDATE
1294   WHERE
1295   BATCH_PROCESS_ID  = l_batch_process_id
1296   AND ENTITY = 'Relationship' ;
1297 
1298       new_wrap_up(p_batch_number,'Clause',l_batch_process_id);
1299       new_wrap_up(p_batch_number,'Relationship',l_batch_process_id);
1300       new_wrap_up(p_batch_number,'Variable',l_batch_process_id);
1301       new_wrap_up(p_batch_number,'Valueset',l_batch_process_id);
1302       new_wrap_up(p_batch_number,'Value',l_batch_process_id);
1303       FND_MSG_PUB.initialize;
1304       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1305                         p_msg_name     => 'OKC_ART_IMP_ERR');
1306 
1307       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
1308 
1309       FND_MSG_PUB.initialize;
1310       post_wrap_up(p_batch_number,'CLAUSE',l_batch_process_id);
1311       post_wrap_up(p_batch_number,'RELATIONSHIP',l_batch_process_id);
1312       post_wrap_up(p_batch_number,'VARIABLE',l_batch_process_id);
1313       post_wrap_up(p_batch_number,'VALUESET',l_batch_process_id);
1314       post_wrap_up(p_batch_number,'VALUE',l_batch_process_id);
1315 
1316       FND_MSG_PUB.initialize;
1317      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1318                         p_msg_name     => 'OKC_ART_IMP_OUT_EOR');
1319 
1320       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
1321 
1322       FND_MSG_PUB.initialize;
1323  END conc_import_articles;
1324 
1325 /*===================================================
1326  | Get Sequence Number for New Article or New Version
1327  +==================================================*/
1328 
1329   FUNCTION Get_Seq_Id (
1330     p_object_type               IN VARCHAR2,
1331     x_object_id                 OUT NOCOPY NUMBER
1332   ) RETURN VARCHAR2 IS
1333     CURSOR l_art_csr IS
1334        SELECT OKC_ARTICLES_ALL_S1.NEXTVAL FROM DUAL;
1335     CURSOR l_ver_csr IS
1336        SELECT OKC_ARTICLE_VERSIONS_S1.NEXTVAL FROM DUAL;
1337   BEGIN
1338     IF (l_debug = 'Y') THEN
1339        Okc_Debug.Log('100: Entered get_seq_id', 2);
1340     END IF;
1341 
1342     IF p_object_type = 'ART' THEN
1343       OPEN l_art_csr;
1344       FETCH l_art_csr INTO x_object_id                ;
1345       IF l_art_csr%NOTFOUND THEN
1346         RAISE NO_DATA_FOUND;
1347       END IF;
1348       CLOSE l_art_csr;
1349     ELSIF p_object_type = 'VER' THEN
1350       OPEN l_ver_csr;
1351       FETCH l_ver_csr INTO x_object_id                ;
1352       IF l_ver_csr%NOTFOUND THEN
1353         RAISE NO_DATA_FOUND;
1354       END IF;
1355       CLOSE l_ver_csr;
1356     END IF;
1357 
1358     IF (l_debug = 'Y') THEN
1359      Okc_Debug.Log('200: Leaving get_seq_id', 2);
1360     END IF;
1361     RETURN G_RET_STS_SUCCESS;
1362   EXCEPTION
1363     WHEN OTHERS THEN
1364 
1365       IF (l_debug = 'Y') THEN
1366         Okc_Debug.Log('300: Leaving get_seq_id because of EXCEPTION: '||sqlerrm, 2);
1367       END IF;
1368 
1369       Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1370                         p_msg_name     => G_UNEXPECTED_ERROR,
1371                         p_token1       => G_SQLCODE_TOKEN,
1372                         p_token1_value => sqlcode,
1373                         p_token2       => G_SQLERRM_TOKEN,
1374                         p_token2_value => sqlerrm);
1375 
1376       IF l_art_csr%ISOPEN THEN
1377         CLOSE l_art_csr;
1378       END IF;
1379       IF l_ver_csr%ISOPEN THEN
1380         CLOSE l_ver_csr;
1381       END IF;
1382 
1383       RETURN G_RET_STS_UNEXP_ERROR ;
1384 
1385   END Get_Seq_Id;
1386 
1387 
1388 /*=====================================================================
1389 | PROCEDURE insert_error_array
1390 | This procedure will insert the error array built by build_error_array
1391 +====================================================================*/
1392 PROCEDURE insert_error_array(
1393   x_return_status                OUT NOCOPY VARCHAR2,
1394   x_msg_count                    OUT NOCOPY NUMBER,
1395   x_msg_data                     OUT NOCOPY VARCHAR2
1396 )IS
1397   l_user_id                  NUMBER;
1398   l_login_id                 NUMBER;
1399   l_program_id               OKC_ART_INT_ERRORS.PROGRAM_ID%TYPE;
1400   l_program_login_id         OKC_ART_INT_ERRORS.PROGRAM_LOGIN_ID%TYPE;
1401   l_program_appl_id          OKC_ART_INT_ERRORS.PROGRAM_APPLICATION_ID%TYPE;
1402   l_request_id               OKC_ART_INT_ERRORS.REQUEST_ID%TYPE;
1403   i_err NUMBER :=0;
1404   cur_inf_id NUMBER :=0;
1405   cur_inf_id1 NUMBER :=0;
1406     l_insert_errors_exception     EXCEPTION;
1407     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
1408 BEGIN
1409     l_user_id  := Fnd_Global.user_id;
1410     l_login_id := Fnd_Global.login_id;
1411 
1412     IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
1413      l_program_id := NULL;
1414     ELSE
1415      l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
1416     END IF;
1417 
1418     IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
1419      l_program_login_id := NULL;
1420     ELSE
1421      l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
1422     END IF;
1423 
1424     IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
1425      l_program_appl_id := NULL;
1426     ELSE
1427      l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
1428     END IF;
1429 
1430     IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
1431      l_request_id := NULL;
1432     ELSE
1433      l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
1434     END IF;
1435 
1436   IF ( err_batch_process_id_tbl.COUNT > 0) THEN
1437        FOR i_err in err_batch_process_id_tbl.FIRST
1438                     .. err_batch_process_id_tbl.LAST LOOP
1439 
1440 
1441          INSERT INTO OKC_ART_INT_ERRORS
1442           (
1443             BATCH_PROCESS_ID,
1444             INTERFACE_ID,
1445             ERROR_NUMBER,
1446             OBJECT_VERSION_NUMBER,
1447             ERROR_TYPE,
1448             ERROR_DESCRIPTION,
1449             CREATED_BY,
1450             CREATION_DATE,
1451             LAST_UPDATE_DATE,
1452             LAST_UPDATED_BY,
1453             LAST_UPDATE_LOGIN,
1454             PROGRAM_ID,
1455             PROGRAM_LOGIN_ID,
1456             PROGRAM_APPLICATION_ID,
1457             REQUEST_ID,
1458 		  ENTITY
1459           )
1460         VALUES
1461           (
1462             err_batch_process_id_tbl(i_err),
1463             err_interface_id_tbl(i_err),
1464             err_error_number_tbl(i_err),
1465             err_object_version_number_tbl(i_err),
1466             err_error_type_tbl(i_err),
1467             err_error_description_tbl(i_err),
1468             l_user_id,
1469             sysdate,
1470             sysdate,
1471             l_user_id,
1472             l_login_id,
1473             l_program_id,
1474             l_program_login_id,
1475             l_program_appl_id,
1476             l_request_id,
1477             err_entity_tbl(i_err)
1478          );
1479 
1480 
1481 	    -- End Added for XML Based Clause Import
1482 
1483            IF cur_inf_id <> err_interface_id_tbl(i_err) THEN
1484                cur_inf_id := err_interface_id_tbl(i_err);
1485                FND_MSG_PUB.initialize;
1486                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1487                 p_msg_name     => 'OKC_ART_IMP_LOG_HEADER',
1488                 p_token1       => 'ENTITY',
1489                 p_token1_value => err_entity_tbl(i_err),
1490                 p_token2       => 'ARTICLE_TITLE',
1491                 p_token2_value => err_article_title_tbl(i_err),
1492                 p_token3       => 'INTERFACE_ID',
1493                 p_token3_value => err_interface_id_tbl(i_err));
1494                 FND_FILE.PUT_LINE(FND_FILE.LOG, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
1495                FND_MSG_PUB.initialize;
1496            END IF;
1497            FND_FILE.PUT_LINE(FND_FILE.LOG, err_error_description_tbl(i_err));
1498            FND_FILE.PUT_LINE(FND_FILE.LOG, '');
1499 
1500        END LOOP;
1501     END IF;
1502     --recycle it
1503     err_batch_process_id_tbl.DELETE;
1504     err_article_title_tbl.DELETE;
1505     err_interface_id_tbl.DELETE;
1506     err_error_number_tbl.DELETE;
1507     err_object_version_number_tbl.DELETE;
1508     err_error_type_tbl.DELETE;
1509     err_entity_tbl.DELETE;
1510     err_error_description_tbl.DELETE;
1511 
1512 EXCEPTION
1513    WHEN OTHERS THEN
1514      IF (l_debug = 'Y') THEN
1515        okc_debug.log('500: Leaving insert_error_array because of EXCEPTION: '||sqlerrm, 2);
1516      END IF;
1517      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1518                         p_msg_name     => G_UNEXPECTED_ERROR,
1519                         p_token1       => G_SQLCODE_TOKEN,
1520                         p_token1_value => sqlcode,
1521                         p_token2       => G_SQLERRM_TOKEN,
1522                         p_token2_value => sqlerrm);
1523 
1524    x_return_status := l_insert_errors_error;
1525 
1526 END insert_error_array;
1527 
1528 /*=====================================================================
1529  | PROCEDURE build_error_array
1530  |
1531  | This internal procedure will build the error array
1532  | from the fnd message stack
1533  +====================================================================*/
1534 
1535 PROCEDURE build_error_array(
1536     p_msg_data                     IN VARCHAR2 := NULL,
1537     p_context                      IN VARCHAR2,
1538     p_batch_process_id             IN NUMBER,
1539     p_interface_id                 IN NUMBER,
1540     p_article_title                IN VARCHAR2 := NULL,
1541     p_error_type                   IN VARCHAR2,
1542     p_entity                       IN VARCHAR2
1543 ) IS
1544   l_error_index              NUMBER          := 1;
1545   l_return_status            VARCHAR2(1)  := OKC_API.G_RET_STS_SUCCESS;
1546   l_msg_count                NUMBER;
1547   l_msg_data                 VARCHAR2(1000);
1548 BEGIN
1549     IF FND_MSG_PUB.Count_Msg >= 1 Then
1550       FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1551        err_batch_process_id_tbl(l_error_index) :=   p_batch_process_id;
1552        err_interface_id_tbl(l_error_index) :=  p_interface_id ;
1553        err_article_title_tbl(l_error_index) := p_article_title ;
1554        err_error_number_tbl(l_error_index) :=  l_error_index ;
1555        err_object_version_number_tbl(l_error_index) :=  1.0 ;
1556        err_error_type_tbl(l_error_index) :=   p_error_type ;
1557        err_entity_tbl(l_error_index) :=   p_entity ;
1558      --err_error_description_tbl(l_error_index) :=   p_context ||':'|| FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE );
1559        err_error_description_tbl(l_error_index) :=   FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE );
1560        l_error_index := l_error_index + 1;
1561       END LOOP;
1562     ELSE IF p_msg_data is not NULL Then
1563       err_batch_process_id_tbl(l_error_index) :=   p_batch_process_id;
1564       err_interface_id_tbl(l_error_index) :=  p_interface_id ;
1565       err_article_title_tbl(l_error_index) := p_article_title;
1566       err_error_number_tbl(l_error_index) :=  l_error_index ;
1567       err_object_version_number_tbl(l_error_index) :=  1.0 ;
1568       err_error_type_tbl(l_error_index) :=   p_error_type ;
1569       err_entity_tbl(l_error_index) :=   p_entity ;
1570       err_error_description_tbl(l_error_index) :=   p_msg_data;
1571       l_error_index := l_error_index + 1;
1572       END IF;
1573     END IF;
1574 
1575     insert_error_array(
1576      x_return_status => l_return_status,
1577      x_msg_count     => l_msg_count,
1578      x_msg_data      => l_msg_data
1579     );
1580 
1581   FND_MSG_PUB.initialize;
1582 END build_error_array;
1583 
1584 
1585 /*===================================================
1586  | Get build array message and rest of Fnd Message stack
1587  | and print it in Concurrent Log
1588  |
1589  | This would be a last step to print error messages
1590  | If err vararray has data, then it means it was not
1591  | pushed into database, so it should be printed in concurrent
1592  | output with remaining data in fnd message stack.
1593  +==================================================*/
1594 
1595   PROCEDURE get_print_msgs_stack(p_msg_data IN VARCHAR2) IS
1596      i_err NUMBER := 0;
1597      cur_inf_id NUMBER := 0;
1598   BEGIN
1599      IF err_batch_process_id_tbl.COUNT > 0 THEN
1600         FOR i_err IN err_batch_process_id_tbl.FIRST
1601             .. err_batch_process_id_tbl.LAST LOOP
1602            --
1603            -- whenever there is a change in interface id, we will change header
1604            --
1605            IF cur_inf_id <> err_interface_id_tbl(i_err) THEN
1606                cur_inf_id := err_interface_id_tbl(i_err);
1607                FND_MSG_PUB.initialize;
1608                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1609                 p_msg_name     => 'OKC_ART_IMP_LOG_HEADER',
1610                 p_token1       => 'ENTITY',
1611                 p_token1_value => err_entity_tbl(i_err),
1612                 p_token2       => 'ARTICLE_TITLE',
1613                 p_token2_value => err_article_title_tbl(i_err));
1614                 FND_FILE.PUT_LINE(FND_FILE.LOG, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
1615            END IF;
1616 
1617            FND_FILE.PUT_LINE(FND_FILE.LOG, err_error_description_tbl(i_err));
1618            FND_FILE.PUT_LINE(FND_FILE.LOG, '');
1619 
1620         END LOOP;
1621      END IF;
1622 
1623      IF FND_MSG_PUB.Count_Msg > 1 Then
1624          FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
1625            FND_FILE.PUT_LINE(FND_FILE.LOG,FND_MSG_PUB.Get(i,p_encoded =>FND_API.G_FALSE ));
1626          END LOOP;
1627      ELSE
1628          FND_FILE.PUT_LINE(FND_FILE.LOG,p_msg_data);
1629      END IF;
1630 
1631      --recycle it
1632      FND_MSG_PUB.initialize;
1633 
1634   END get_print_msgs_stack;
1635 
1636 
1637 /*===================================================
1638  | Prints summary of the run in cuncurrent output
1639  +==================================================*/
1640 
1641   PROCEDURE wrap_up(p_validate_only IN VARCHAR2,
1642                     p_batch_number  IN VARCHAR2,
1643 				p_tot_rows_processed IN NUMBER,
1644 				p_tot_rows_failed IN NUMBER,
1645 				p_tot_rows_warned IN NUMBER,
1646 				p_batch_process_id IN NUMBER DEFAULT NULL,
1647 				p_entity IN VARCHAR2 DEFAULT NULL
1648 				) IS
1649     l_batch_process_id NUMBER;
1650     l_validate_meaning VARCHAR2(80);
1651     l_entity_meaning   VARCHAR2(80);
1652     l_entity           VARCHAR2(30);
1653     l_org_name         HR_ORGANIZATION_UNITS.NAME%TYPE;
1654     l_tot_rows_processed  NUMBER;
1655     l_tot_rows_failed  NUMBER;
1656     l_tot_rows_warned  NUMBER;
1657 
1658     CURSOR lookup_meaning_csr (cp_code IN VARCHAR2) IS
1659       SELECT meaning
1660       FROM   fnd_lookups
1661       WHERE  lookup_type = 'OKC_YN' and lookup_code = cp_code;
1662 
1663     CURSOR org_name_csr (cp_org_id IN NUMBER) IS
1664       SELECT NAME
1665       FROM HR_ORGANIZATION_UNITS
1666       WHERE ORGANIZATION_ID = cp_org_id;
1667 
1668     CURSOR entity_meaning_csr (cp_ent_code IN VARCHAR2) IS
1669       SELECT meaning
1670       FROM   fnd_lookups
1671       WHERE  lookup_type = 'OKC_ARTICLE_IMPORT_ENTITY' and lookup_code = cp_ent_code;
1672   BEGIN
1673      FND_MSG_PUB.initialize;
1674 
1675      --initialize validate_meaning with p_validate_only
1676      --and fetch the translated lookup meaning for this
1677      l_entity              := p_entity;
1678      l_batch_process_id    := p_batch_process_id;
1679      l_validate_meaning    := p_validate_only;
1680      l_tot_rows_processed  := p_tot_rows_processed;
1681      l_tot_rows_failed     := p_tot_rows_failed;
1682      l_tot_rows_warned     := p_tot_rows_warned;
1683 
1684      OPEN lookup_meaning_csr(p_validate_only);
1685      FETCH lookup_meaning_csr INTO l_validate_meaning;
1686      CLOSE lookup_meaning_csr;
1687 
1688 
1689      OPEN entity_meaning_csr(p_entity);
1690      FETCH entity_meaning_csr INTO l_entity_meaning;
1691      CLOSE entity_meaning_csr;
1692 
1693 	-- MOAC
1694 	G_CURRENT_ORG_ID := mo_global.get_current_org_id();
1695 
1696 	IF G_CURRENT_ORG_ID IS NULL THEN
1697 	   Okc_Api.Set_Message(G_APP_NAME,'OKC_ART_NULL_ORG_ID');
1698 	   RAISE FND_API.G_EXC_ERROR;
1699      END IF;
1700 
1701      OPEN org_name_csr (G_CURRENT_ORG_ID);
1702      FETCH org_name_csr INTO l_org_name;
1703      CLOSE org_name_csr;
1704 
1705 /* commented for XML Based clause Import
1706      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1707                         p_msg_name     => 'OKC_ART_IMP_OUTPUT',
1708                         p_token1       => 'ENTITY',
1709                         p_token1_value => p_entity,
1710                         p_token2       => 'BATCH_NUMBER',
1711                         p_token2_value => p_batch_number,
1712                         p_token3       => 'BATCH_PROCESS_ID',
1713                         p_token3_value => l_batch_process_id,
1714                         p_token4       => 'TOTAL_ROWS',
1715                         p_token4_value => l_tot_rows_processed,
1716                         p_token5       => 'TOTAL_SUCCESS',
1717                         p_token5_value => l_tot_rows_processed-l_tot_rows_failed,
1718                         p_token6       => 'TOTAL_FAILED',
1719                         p_token6_value => l_tot_rows_failed,
1720                         p_token7       => 'TOTAL_WARNED',
1721                         p_token7_value => l_tot_rows_warned,
1722                         p_token8       => 'ORG_NAME',
1723                         p_token8_value => l_org_name,
1724                         p_token9       => 'VALIDATE_ONLY',
1725                         p_token9_value => l_validate_meaning);
1726 */
1727      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
1728                         p_msg_name     => 'OKC_ART_IMP_OUT1',
1729                         p_token1       => 'ENTITY',
1730                         p_token1_value => l_entity_meaning,
1731                         p_token2       => 'TOTAL_ROWS',
1732                         p_token2_value => l_tot_rows_processed,
1733                         p_token3       => 'TOTAL_SUCCESS',
1734                         p_token3_value => l_tot_rows_processed-l_tot_rows_failed,
1735                         p_token4       => 'TOTAL_FAILED',
1736                         p_token4_value => l_tot_rows_failed);
1737 
1738       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
1739 
1740       FND_MSG_PUB.initialize;
1741      commit;
1742    END wrap_up;
1743 
1744 /*===================================================
1745  | PROCEDURE import articles details
1746  +==================================================*/
1747   PROCEDURE import_articles(
1748     x_return_status                OUT NOCOPY VARCHAR2,
1749     x_msg_count                    OUT NOCOPY NUMBER,
1750     x_msg_data                     OUT NOCOPY VARCHAR2,
1751 
1752     p_batch_procs_id               IN NUMBER,
1753     p_batch_number                 IN VARCHAR2,
1754     p_validate_only                IN VARCHAR2 := 'Y',
1755     p_fetchsize                    IN NUMBER := 100,
1756     p_rows_processed               OUT NOCOPY NUMBER,
1757     p_rows_failed                  OUT NOCOPY NUMBER,
1758     p_rows_warned                  OUT NOCOPY NUMBER
1759   ) IS
1760     l_api_version                 CONSTANT NUMBER := 1;
1761     l_api_name                    CONSTANT VARCHAR2(30) := 'import_articles';
1762     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
1763     l_row_notfound                BOOLEAN := FALSE;
1764     l_user_id                     NUMBER;
1765     l_login_id                    NUMBER;
1766     l_insert_errors_exception     EXCEPTION;
1767     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
1768     l_userenv_lang                VARCHAR2(10);
1769 
1770 -- Some (minimal) Article Level attributes are nvl-ed in the case of update and
1771 -- new version as they cannot be changed after the first version is created.
1772 -- User must pass all other attibutes irregardless of the mode (except of course
1773 -- the ids)
1774 
1775     CURSOR l_interface_csr ( cp_local_org_id IN NUMBER,
1776                              cp_batch_number IN VARCHAR2) IS
1777       SELECT
1778            INTRFC.INTERFACE_ID     ,
1779            INTRFC.BATCH_NUMBER             ,
1780            INTRFC.OBJECT_VERSION_NUMBER  ,
1781            INTRFC.ARTICLE_TITLE    ,
1782            INTRFC.ORG_ID       ,
1783            INTRFC.PROCESS_STATUS           ,
1784            INTRFC.ACTION                  ,
1785            NVL(INTRFC.ARTICLE_NUMBER, ART.ARTICLE_NUMBER)   ,
1786            NVL(INTRFC.ARTICLE_INTENT, ART.ARTICLE_INTENT)   ,
1787            ART.ARTICLE_INTENT         X_ARTICLE_INTENT      ,
1788            INTRFC.ARTICLE_LANGUAGE  ,
1789            ART.ARTICLE_LANGUAGE       X_ARTICLE_LANGUAGE    ,
1790            NVL(INTRFC.ARTICLE_TYPE, ART.ARTICLE_TYPE)   ,
1791            ART.ARTICLE_ID   ,
1792            INTRFC.ART_SYSTEM_REFERENCE_CODE,
1793            INTRFC.ART_SYSTEM_REFERENCE_ID1,
1794            INTRFC.ART_SYSTEM_REFERENCE_ID2,
1795            INTRFC.ARTICLE_VERSION_NUMBER  ,
1796            INTRFC.ARTICLE_TEXT    ,
1797            INTRFC.PROVISION_YN  ,
1798            INTRFC.INSERT_BY_REFERENCE ,
1799            INTRFC.LOCK_TEXT   ,
1800            INTRFC.GLOBAL_YN   ,
1801            INTRFC.ARTICLE_STATUS    ,
1802            INTRFC.START_DATE    ,
1803            INTRFC.END_DATE    ,
1804            INTRFC.DISPLAY_NAME    ,
1805            INTRFC.ARTICLE_DESCRIPTION     ,
1806            INTRFC.DATE_APPROVED   ,
1807            INTRFC.DEFAULT_SECTION   ,
1808            INTRFC.REFERENCE_SOURCE        ,
1809            INTRFC.REFERENCE_TEXT          ,
1810            INTRFC.VER_SYSTEM_REFERENCE_CODE ,
1811            INTRFC.VER_SYSTEM_REFERENCE_ID1  ,
1812            INTRFC.VER_SYSTEM_REFERENCE_ID2  ,
1813            INTRFC.ADDITIONAL_INSTRUCTIONS         ,
1814 		 INTRFC.DATE_PUBLISHED,
1815            INTRFC.ATTRIBUTE_CATEGORY,
1816            INTRFC.ATTRIBUTE1  ,
1817            INTRFC.ATTRIBUTE2  ,
1818            INTRFC.ATTRIBUTE3  ,
1819            INTRFC.ATTRIBUTE4  ,
1820            INTRFC.ATTRIBUTE5  ,
1821            INTRFC.ATTRIBUTE6  ,
1822            INTRFC.ATTRIBUTE7  ,
1823            INTRFC.ATTRIBUTE8  ,
1824            INTRFC.ATTRIBUTE9  ,
1825            INTRFC.ATTRIBUTE10 ,
1826            INTRFC.ATTRIBUTE11 ,
1827            INTRFC.ATTRIBUTE12 ,
1828            INTRFC.ATTRIBUTE13 ,
1829            INTRFC.ATTRIBUTE14 ,
1830            INTRFC.ATTRIBUTE15,
1831  --Clause editing in word
1832            INTRFC.EDITED_IN_WORD,
1833            INTRFC.ARTICLE_TEXT_IN_WORD,
1834            TO_NUMBER(NULL) ARTICLE_VERSION_ID
1835       FROM OKC_ART_INTERFACE_ALL INTRFC, OKC_ARTICLES_ALL ART
1836       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
1837          AND INTRFC.ORG_ID = cp_local_org_id
1838          AND BATCH_NUMBER = cp_batch_number
1839          AND RTRIM(INTRFC.ARTICLE_TITLE) = ART.ARTICLE_TITLE(+)
1840          AND INTRFC.ORG_ID = ART.ORG_ID(+)
1841          AND ART.STANDARD_YN(+) = 'Y'
1842       ORDER BY RTRIM(INTRFC.ARTICLE_TITLE) ASC;
1843 
1844 -- Cursor returns article status, version id and version number
1845 -- for the most recent version with article_id
1846 
1847     CURSOR get_max_article_version_csr    (cp_article_id IN NUMBER) IS
1848      SELECT
1849           ARTICLE_VERSION_ID,
1850           ARTICLE_VERSION_NUMBER,
1851           ARTICLE_STATUS,
1852 	  START_DATE,
1853  --Clause Editing
1854            EDITED_IN_WORD
1855      FROM OKC_ARTICLE_VERSIONS A
1856      WHERE article_id = cp_article_id
1857        and start_date = (SELECT max(start_date)
1858                          FROM   okc_article_versions
1859                          WHERE  article_id = a.article_id);
1860 
1861 -- Cursor to get article level information for V, U interface row
1862     CURSOR get_article_info_csr    (cp_article_id IN NUMBER) IS
1863      SELECT
1864           ARTICLE_INTENT,
1865           ARTICLE_LANGUAGE
1866      FROM OKC_ARTICLES_ALL
1867      WHERE  ARTICLE_ID = cp_article_id;
1868 
1869 -- Cursor to validate article type
1870 -- If article type is not active any more but it is not valid
1871     CURSOR validate_article_type_csr ( cp_article_type IN VARCHAR2,
1872                                        cp_article_id IN NUMBER,
1873                                        cp_action IN VARCHAR2) IS
1874      SELECT lookup_code
1875      FROM  fnd_lookups
1876      WHERE lookup_type = 'OKC_SUBJECT'
1877        AND lookup_code = cp_article_type
1878        AND start_date_active <= trunc(sysdate)
1879        AND nvl(end_date_active,sysdate+1) >= trunc(sysdate);
1880 
1881 -- Check validity of valueset
1882 --  Split into two cursor for performance as var_name may not be used frequently
1883     CURSOR l_check_valid_valueset_csr (cp_variable_code IN VARCHAR2) IS
1884       SELECT FLX.FLEX_VALUE_SET_ID,
1885              BVB.VARIABLE_TYPE
1886       FROM
1887          OKC_BUS_VARIABLES_B BVB,
1888          FND_FLEX_VALUE_SETS FLX
1889       WHERE BVB.VARIABLE_CODE = cp_variable_code
1890       --AND BVB.VARIABLE_TYPE = 'U'
1891       AND FLX.FLEX_VALUE_SET_ID(+) = BVB.VALUE_SET_ID;
1892 
1893     CURSOR l_var_name_csr (cp_variable_code IN VARCHAR2,
1894                            cp_lang IN VARCHAR2) IS
1895       SELECT BVT.VARIABLE_NAME
1896       FROM
1897          OKC_BUS_VARIABLES_TL BVT
1898       WHERE BVT.VARIABLE_CODE = cp_variable_code
1899       AND BVT.LANGUAGE = cp_lang;
1900 
1901 -- Interface Rows
1902 
1903     TYPE l_inf_interface_id             IS TABLE OF OKC_ART_INTERFACE_ALL.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
1904     TYPE l_inf_batch_number             IS TABLE OF OKC_ART_INTERFACE_ALL.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1905     TYPE l_inf_object_version_number    IS TABLE OF OKC_ART_INTERFACE_ALL.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1906     TYPE l_inf_article_title            IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
1907     TYPE l_inf_org_id                   IS TABLE OF OKC_ART_INTERFACE_ALL.ORG_ID%TYPE INDEX BY BINARY_INTEGER ;
1908     TYPE l_inf_process_status           IS TABLE OF OKC_ART_INTERFACE_ALL.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
1909     TYPE l_inf_action                   IS TABLE OF OKC_ART_INTERFACE_ALL.ACTION%TYPE INDEX BY BINARY_INTEGER ;
1910     TYPE l_inf_article_number           IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1911     TYPE l_inf_article_intent           IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
1912     TYPE l_inf_article_language         IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
1913     TYPE l_inf_article_type             IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TYPE%TYPE INDEX BY BINARY_INTEGER ;
1914     TYPE l_inf_article_id               IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_ID%TYPE INDEX BY BINARY_INTEGER ;
1915     TYPE l_inf_art_reference_code       IS TABLE OF OKC_ART_INTERFACE_ALL.ART_SYSTEM_REFERENCE_CODE%TYPE INDEX BY BINARY_INTEGER ;
1916     TYPE l_inf_art_reference_id1        IS TABLE OF OKC_ART_INTERFACE_ALL.ART_SYSTEM_REFERENCE_ID1%TYPE INDEX BY BINARY_INTEGER ;
1917     TYPE l_inf_art_reference_id2        IS TABLE OF OKC_ART_INTERFACE_ALL.ART_SYSTEM_REFERENCE_ID2%TYPE INDEX BY BINARY_INTEGER ;
1918     TYPE l_inf_article_text             IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TEXT%TYPE INDEX BY BINARY_INTEGER ;
1919     TYPE l_inf_provision_yn             IS TABLE OF OKC_ART_INTERFACE_ALL.PROVISION_YN%TYPE INDEX BY BINARY_INTEGER ;
1920     TYPE l_inf_insert_by_reference      IS TABLE OF OKC_ART_INTERFACE_ALL.INSERT_BY_REFERENCE%TYPE INDEX BY BINARY_INTEGER ;
1921     TYPE l_inf_lock_text                IS TABLE OF OKC_ART_INTERFACE_ALL.LOCK_TEXT%TYPE INDEX BY BINARY_INTEGER ;
1922     TYPE l_inf_global_yn                IS TABLE OF OKC_ART_INTERFACE_ALL.GLOBAL_YN%TYPE INDEX BY BINARY_INTEGER ;
1923     TYPE l_inf_article_status           IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_STATUS%TYPE INDEX BY BINARY_INTEGER ;
1924     TYPE l_inf_start_date               IS TABLE OF OKC_ART_INTERFACE_ALL.START_DATE%TYPE INDEX BY BINARY_INTEGER ;
1925     TYPE l_inf_end_date                 IS TABLE OF OKC_ART_INTERFACE_ALL.END_DATE%TYPE INDEX BY BINARY_INTEGER ;
1926     TYPE l_inf_display_name             IS TABLE OF OKC_ART_INTERFACE_ALL.DISPLAY_NAME%TYPE INDEX BY BINARY_INTEGER ;
1927     TYPE l_inf_article_description      IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
1928     TYPE l_inf_date_approved            IS TABLE OF OKC_ART_INTERFACE_ALL.DATE_APPROVED%TYPE INDEX BY BINARY_INTEGER ;
1929     TYPE l_inf_default_section          IS TABLE OF OKC_ART_INTERFACE_ALL.DEFAULT_SECTION%TYPE INDEX BY BINARY_INTEGER ;
1930     TYPE l_inf_reference_source         IS TABLE OF OKC_ART_INTERFACE_ALL.REFERENCE_SOURCE%TYPE INDEX BY BINARY_INTEGER ;
1931     TYPE l_inf_reference_text           IS TABLE OF OKC_ART_INTERFACE_ALL.REFERENCE_TEXT%TYPE INDEX BY BINARY_INTEGER ;
1932     TYPE l_inf_ver_reference_code       IS TABLE OF OKC_ART_INTERFACE_ALL.VER_SYSTEM_REFERENCE_CODE%TYPE INDEX BY BINARY_INTEGER ;
1933     TYPE l_inf_ver_reference_id1        IS TABLE OF OKC_ART_INTERFACE_ALL.VER_SYSTEM_REFERENCE_ID1%TYPE INDEX BY BINARY_INTEGER ;
1934     TYPE l_inf_ver_reference_id2        IS TABLE OF OKC_ART_INTERFACE_ALL.VER_SYSTEM_REFERENCE_ID2%TYPE INDEX BY BINARY_INTEGER ;
1935     TYPE l_inf_instructions             IS TABLE OF OKC_ART_INTERFACE_ALL.ADDITIONAL_INSTRUCTIONS%TYPE INDEX BY BINARY_INTEGER ;
1936     TYPE l_inf_date_published           IS TABLE OF OKC_ART_INTERFACE_ALL.DATE_PUBLISHED%TYPE INDEX BY BINARY_INTEGER ;
1937     TYPE l_inf_attribute_category       IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE_CATEGORY%TYPE INDEX BY BINARY_INTEGER ;
1938     TYPE l_inf_attribute1               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE1%TYPE INDEX BY BINARY_INTEGER ;
1939     TYPE l_inf_attribute2               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE2%TYPE INDEX BY BINARY_INTEGER ;
1940     TYPE l_inf_attribute3               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE3%TYPE INDEX BY BINARY_INTEGER ;
1941     TYPE l_inf_attribute4               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE4%TYPE INDEX BY BINARY_INTEGER ;
1942     TYPE l_inf_attribute5               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE5%TYPE INDEX BY BINARY_INTEGER ;
1943     TYPE l_inf_attribute6               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE6%TYPE INDEX BY BINARY_INTEGER ;
1944     TYPE l_inf_attribute7               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE7%TYPE INDEX BY BINARY_INTEGER ;
1945     TYPE l_inf_attribute8               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE8%TYPE INDEX BY BINARY_INTEGER ;
1946     TYPE l_inf_attribute9               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE9%TYPE INDEX BY BINARY_INTEGER ;
1947     TYPE l_inf_attribute10              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE10%TYPE INDEX BY BINARY_INTEGER ;
1948     TYPE l_inf_attribute11              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE11%TYPE INDEX BY BINARY_INTEGER ;
1949     TYPE l_inf_attribute12              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE12%TYPE INDEX BY BINARY_INTEGER ;
1950     TYPE l_inf_attribute13              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE13%TYPE INDEX BY BINARY_INTEGER ;
1951     TYPE l_inf_attribute14              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE14%TYPE INDEX BY BINARY_INTEGER ;
1952     TYPE l_inf_attribute15              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE15%TYPE INDEX BY BINARY_INTEGER ;
1953  --Clause Editing
1954      TYPE l_inf_edited_in_word           IS TABLE OF OKC_ART_INTERFACE_ALL.EDITED_IN_WORD%TYPE INDEX BY BINARY_INTEGER ;
1955      TYPE l_inf_article_text_in_word     IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TEXT_IN_WORD%TYPE INDEX BY BINARY_INTEGER ;
1956     TYPE l_inf_article_version_id       IS TABLE OF OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE INDEX BY BINARY_INTEGER ;
1957     TYPE l_inf_article_version_number   IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1958     TYPE l_inf_adoption_type            IS TABLE OF OKC_ARTICLE_VERSIONS.ADOPTION_TYPE%TYPE INDEX BY BINARY_INTEGER ;
1959     --clm
1960 --    TYPE l_inf_variable_code            IS TABLE OF OKC_ARTICLE_VERSIONS.VARIABLE_CODE%TYPE INDEX BY BINARY_INTEGER ;
1961 
1962 -- For Article Variables
1963     TYPE list_artv_article_version_id   IS TABLE OF OKC_ARTICLE_VARIABLES.ARTICLE_VERSION_ID%TYPE INDEX BY BINARY_INTEGER ;
1964     TYPE list_artv_variable_code        IS TABLE OF OKC_ARTICLE_VARIABLES.VARIABLE_CODE%TYPE INDEX BY BINARY_INTEGER ;
1965     TYPE list_artv_action               IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER ;
1966 
1967     l_article_language                  VARCHAR2(3);
1968 
1969 -- Variables for interface
1970    inf_interface_id_tbl                 l_inf_interface_id ;
1971    inf_batch_number_tbl                 l_inf_batch_number ;
1972    inf_object_version_number_tbl        l_inf_object_version_number ;
1973    inf_article_title_tbl                l_inf_article_title ;
1974    inf_org_id_tbl                       l_inf_org_id ;
1975    inf_process_status_tbl               l_inf_process_status ;
1976    inf_action_tbl                       l_inf_action ;
1977    inf_article_number_tbl               l_inf_article_number ;
1978    inf_article_intent_tbl               l_inf_article_intent ;
1979    inf_x_article_intent_tbl             l_inf_article_intent ;
1980    inf_article_language_tbl             l_inf_article_language ;
1981    inf_x_article_language_tbl           l_inf_article_language ;
1982    inf_article_type_tbl                 l_inf_article_type ;
1983    inf_article_id_tbl                   l_inf_article_id ;
1984    inf_art_reference_code_tbl           l_inf_art_reference_code ;
1985    inf_art_reference_id1_tbl            l_inf_art_reference_id1 ;
1986    inf_art_reference_id2_tbl            l_inf_art_reference_id2 ;
1987    inf_article_text_tbl                 l_inf_article_text ;
1988    inf_provision_yn_tbl                 l_inf_provision_yn ;
1989    inf_insert_by_reference_tbl          l_inf_insert_by_reference ;
1990    inf_lock_text_tbl                    l_inf_lock_text ;
1991    inf_global_yn_tbl                    l_inf_global_yn ;
1992    inf_article_status_tbl               l_inf_article_status ;
1993    inf_start_date_tbl                   l_inf_start_date ;
1994    inf_end_date_tbl                     l_inf_end_date ;
1995    inf_display_name_tbl                 l_inf_display_name ;
1996    inf_article_description_tbl          l_inf_article_description ;
1997    inf_date_approved_tbl                l_inf_date_approved ;
1998    inf_default_section_tbl              l_inf_default_section ;
1999    inf_reference_source_tbl             l_inf_reference_source ;
2000    inf_reference_text_tbl               l_inf_reference_text ;
2001    inf_ver_reference_code_tbl           l_inf_ver_reference_code ;
2002    inf_ver_reference_id1_tbl            l_inf_ver_reference_id1 ;
2003    inf_ver_reference_id2_tbl            l_inf_ver_reference_id2 ;
2004    inf_instructions_tbl                 l_inf_instructions ;
2005    inf_date_published_tbl               l_inf_date_published ;
2006    inf_attribute_category_tbl           l_inf_attribute_category ;
2007    inf_attribute1_tbl                   l_inf_attribute1 ;
2008    inf_attribute2_tbl                   l_inf_attribute2 ;
2009    inf_attribute3_tbl                   l_inf_attribute3 ;
2010    inf_attribute4_tbl                   l_inf_attribute4 ;
2011    inf_attribute5_tbl                   l_inf_attribute5 ;
2012    inf_attribute6_tbl                   l_inf_attribute6 ;
2013    inf_attribute7_tbl                   l_inf_attribute7 ;
2014    inf_attribute8_tbl                   l_inf_attribute8 ;
2015    inf_attribute9_tbl                   l_inf_attribute9 ;
2016    inf_attribute10_tbl                  l_inf_attribute10 ;
2017    inf_attribute11_tbl                  l_inf_attribute11 ;
2018    inf_attribute12_tbl                  l_inf_attribute12 ;
2019    inf_attribute13_tbl                  l_inf_attribute13 ;
2020    inf_attribute14_tbl                  l_inf_attribute14 ;
2021    inf_attribute15_tbl                  l_inf_attribute15 ;
2022  --Clause Editing
2023    inf_edited_in_word_tbl               l_inf_edited_in_word ;
2024    inf_article_text_in_word_tbl         l_inf_article_text_in_word ;
2025    inf_article_version_id_tbl           l_inf_article_version_id ;
2026    inf_earlier_version_id_tbl           l_inf_article_version_id ;
2027    inf_article_version_number_tbl       l_inf_article_version_number ;
2028    inf_adoption_type_tbl                l_inf_adoption_type;
2029    --clm
2030 --   inf_variable_code_tbl                 l_inf_variable_code;
2031 
2032    artv_article_version_id_tbl          list_artv_article_version_id ;
2033    artv_variable_code_tbl               OKC_ARTICLES_GRP.variable_code_tbl_type ;
2034    artv_action_tbl                      list_artv_action ;
2035    l_variable_code_tbl                  OKC_ARTICLES_GRP.variable_code_tbl_type ;
2036 
2037    I NUMBER := 0;
2038    j NUMBER := 0;
2039    k NUMBER := 0;
2040    x NUMBER := 0;
2041    l_earlier_version_id                 OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE;
2042    l_article_version_id                 OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE;
2043    l_article_status                     OKC_ARTICLE_VERSIONS.ARTICLE_STATUS%TYPE;
2044    l_start_date                         OKC_ARTICLE_VERSIONS.START_DATE%TYPE;
2045    l_edited_in_word                     OKC_ARTICLE_VERSIONS.EDITED_IN_WORD%TYPE;
2046    l_tmp_article_status                 OKC_ARTICLE_VERSIONS.ARTICLE_STATUS%TYPE;
2047    l_earlier_version_number             OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_NUMBER%TYPE;
2048    l_earlier_adoption_type              OKC_ARTICLE_VERSIONS.ADOPTION_TYPE%TYPE;
2049    l_article_number                     OKC_ARTICLES_ALL.ARTICLE_NUMBER%TYPE;
2050    l_article_version_number             OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_NUMBER%TYPE;
2051    l_variables_to_insert_tbl            OKC_ARTICLES_GRP.variable_code_tbl_type;
2052    l_variables_to_delete_tbl            OKC_ARTICLES_GRP.variable_code_tbl_type;
2053    l_adoption_type                      OKC_ARTICLE_VERSIONS.ADOPTION_TYPE%TYPE;
2054    l_program_id                         OKC_ART_INTERFACE_ALL.PROGRAM_ID%TYPE;
2055    l_program_login_id                   OKC_ART_INTERFACE_ALL.PROGRAM_LOGIN_ID%TYPE;
2056    l_program_appl_id                    OKC_ART_INTERFACE_ALL.PROGRAM_APPLICATION_ID%TYPE;
2057    l_request_id                         OKC_ART_INTERFACE_ALL.REQUEST_ID%TYPE;
2058    l_variable_name                      OKC_BUS_VARIABLES_TL.VARIABLE_NAME%TYPE;
2059    l_variable_type                      OKC_BUS_VARIABLES_B.VARIABLE_TYPE%TYPE;
2060    l_value_set_id                       FND_FLEX_VALUE_SETS.FLEX_VALUE_SET_ID%TYPE;
2061    l_return_status                      VARCHAR2(1);
2062    api_return_status                    VARCHAR2(1);
2063    l_doc_sequence_type                  CHAR(1);
2064    l_error_index                        NUMBER          := 1;
2065    l_replace_text                       VARCHAR2(1)     := 'N';
2066    l_batch_process_id                   NUMBER          := 1;
2067    l_context                            VARCHAR2(50)    := NULL;
2068    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
2069    l_tot_rows_processed                 NUMBER          := 0;
2070    l_tot_rows_failed                    NUMBER          := 0;
2071    l_tot_rows_warned                    NUMBER          := 0;
2072    l_part_rows_processed                NUMBER          := 0;
2073    l_part_rows_failed                   NUMBER          := 0;
2074    l_part_rows_warned                   NUMBER          := 0;
2075    l_bulk_failed                        VARCHAR2(1)     := 'Y';
2076    l_exist_approver                     VARCHAR2(5)     := 'NOK';
2077    save_threshold                       WF_ENGINE.threshold%TYPE;
2078 
2079 ------------------------------------------------------------------------
2080 --  PROCEDURE import_articles body starts
2081 -------------------------------------------------------------------------
2082 
2083 BEGIN
2084 
2085 
2086 IF (l_debug = 'Y') THEN
2087   okc_debug.log('100: Entered article_import', 2);
2088 END IF;
2089 
2090 
2091 ------------------------------------------------------------------------
2092 --  Variable Initialization
2093 -------------------------------------------------------------------------
2094 
2095 -- Standard Start of API savepoint
2096 FND_MSG_PUB.initialize;
2097 --  Initialize API return status to success
2098 x_return_status := FND_API.G_RET_STS_SUCCESS;
2099 l_return_status := G_RET_STS_SUCCESS;
2100 --  Cache user_id, login_id and org_id
2101 l_user_id  := Fnd_Global.user_id;
2102 l_login_id := Fnd_Global.login_id;
2103 l_userenv_lang := USERENV('LANG');
2104 
2105 -- MOAC
2106 G_CURRENT_ORG_ID := mo_global.get_current_org_id();
2107 /*
2108 OPEN cur_org_csr;
2109 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
2110 CLOSE cur_org_csr;
2111 */
2112 -- MOAC
2113 IF G_CURRENT_ORG_ID IS NULL THEN
2114    Okc_Api.Set_Message(G_APP_NAME,'OKC_ART_NULL_ORG_ID');
2115    RAISE FND_API.G_EXC_ERROR;
2116 END IF;
2117 
2118 
2119 IF G_CURRENT_ORG_ID = G_GLOBAL_ORG_ID THEN
2120    l_adoption_type := NULL;
2121 ELSE
2122    l_adoption_type := 'LOCAL';
2123 END IF;
2124 
2125 
2126 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
2127    l_program_id := NULL;
2128 ELSE
2129    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
2130 END IF;
2131 
2132 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
2133    l_program_login_id := NULL;
2134 ELSE
2135    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
2136 END IF;
2137 
2138 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
2139    l_program_appl_id := NULL;
2140 ELSE
2141    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
2142 END IF;
2143 
2144 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
2145    l_request_id := NULL;
2146 ELSE
2147    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
2148 END IF;
2149 
2150 l_batch_process_id := p_batch_procs_id;
2151 ------------------------------------------------------------------------
2152 --  Parameter Validation
2153 -------------------------------------------------------------------------
2154 
2155 IF (p_fetchsize > G_FETCHSIZE_LIMIT) THEN
2156    x_return_status := G_RET_STS_ERROR;
2157    l_return_status := G_RET_STS_ERROR;
2158 
2159    Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2160                        p_msg_name     => 'OKC_ART_IMP_LIM_FETCHSIZE');
2161 
2162    build_error_array(
2163        p_msg_data     => x_msg_data,
2164        p_context      => NULL,
2165        p_batch_process_id => l_batch_process_id,
2166        p_interface_id  => -99,
2167        p_article_title => NULL,
2168        p_error_type    => l_return_status,
2169 	  p_entity        => 'CLAUSE'
2170    );
2171 
2172    RAISE FND_API.G_EXC_ERROR ;
2173 END IF;
2174 
2175 ------------------------------------------------------------------------
2176 --  Global TempClob Array Initialization
2177 -------------------------------------------------------------------------
2178     g_temp_clob_tbl.extend(p_fetchsize);
2179     FOR i in 1..p_fetchsize LOOP
2180        -- Create Temporary Clob.  Clob is created not in session level to prevent
2181        -- from running ouf of session memory
2182        DBMS_LOB.CREATETEMPORARY(g_temp_clob_tbl(i), TRUE);
2183     END LOOP;
2184 
2185 -------------------------------------------------------------------------
2186 --------------- the outermost loop of this procedure --------------------
2187 -- Bulk fetch all interface rows based on the fetchsize passed by the user
2188 -------------------------------------------------------------------------
2189 
2190 l_context :='BULK FETCH CLAUSE INTERFACE ROW';
2191 OPEN l_interface_csr ( G_CURRENT_ORG_ID ,
2192                        p_batch_number );
2193 LOOP
2194 BEGIN
2195     FETCH l_interface_csr BULK COLLECT INTO
2196         inf_interface_id_tbl   ,
2197         inf_batch_number_tbl   ,
2198         inf_object_version_number_tbl  ,
2199         inf_article_title_tbl ,
2200         inf_org_id_tbl   ,
2201         inf_process_status_tbl   ,
2202         inf_action_tbl   ,
2203         inf_article_number_tbl   ,
2204         inf_article_intent_tbl   ,
2205         inf_x_article_intent_tbl ,
2206         inf_article_language_tbl   ,
2207         inf_x_article_language_tbl ,
2208         inf_article_type_tbl   ,
2209         inf_article_id_tbl   ,
2210         inf_art_reference_code_tbl   ,
2211         inf_art_reference_id1_tbl   ,
2212         inf_art_reference_id2_tbl   ,
2213         inf_article_version_number_tbl   ,
2214         inf_article_text_tbl   ,
2215         inf_provision_yn_tbl   ,
2216         inf_insert_by_reference_tbl   ,
2217         inf_lock_text_tbl   ,
2218         inf_global_yn_tbl   ,
2219         inf_article_status_tbl   ,
2220         inf_start_date_tbl   ,
2221         inf_end_date_tbl   ,
2222         inf_display_name_tbl   ,
2223         inf_article_description_tbl   ,
2224         inf_date_approved_tbl   ,
2225         inf_default_section_tbl   ,
2226         inf_reference_source_tbl   ,
2227         inf_reference_text_tbl   ,
2228         inf_ver_reference_code_tbl   ,
2229         inf_ver_reference_id1_tbl   ,
2230         inf_ver_reference_id2_tbl   ,
2231         inf_instructions_tbl   ,
2232         inf_date_published_tbl   ,
2233         inf_attribute_category_tbl   ,
2234         inf_attribute1_tbl   ,
2235         inf_attribute2_tbl   ,
2236         inf_attribute3_tbl   ,
2237         inf_attribute4_tbl   ,
2238         inf_attribute5_tbl   ,
2239         inf_attribute6_tbl   ,
2240         inf_attribute7_tbl   ,
2241         inf_attribute8_tbl   ,
2242         inf_attribute9_tbl   ,
2243         inf_attribute10_tbl   ,
2244         inf_attribute11_tbl   ,
2245         inf_attribute12_tbl   ,
2246         inf_attribute13_tbl   ,
2247         inf_attribute14_tbl   ,
2248         inf_attribute15_tbl   ,
2249         inf_edited_in_word_tbl   ,
2250         inf_article_text_in_word_tbl   ,
2251         inf_article_version_id_tbl  LIMIT p_fetchsize;
2252     EXIT WHEN inf_interface_id_tbl.COUNT = 0 ;
2253 
2254     ------------------------------------------------------------------------
2255     -- Variable initialization
2256     -------------------------------------------------------------------------
2257     --For each fetch, article variable table index should be initialized
2258     j := 1;
2259     --##count:initialization
2260     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
2261     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
2262     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
2263     l_part_rows_processed   := 0;
2264     l_part_rows_failed      := 0;
2265     l_part_rows_warned      := 0;
2266     l_bulk_failed           := 'N';
2267     ---------------------------------------------------------------------------
2268     --------------------- Inner Loop thru fetched rows for---------------------
2269     -- validation, parse and validate article text, create a variable list
2270     -- prepare rows for DML if validate_only is 'N'
2271     /***  Processing Rule to set process_status
2272     Because we want to collect as much info as possible, we need to
2273     maintain process status while keeping the process moving.
2274     So, we'll set l_return_status as validation goes on and
2275     at the end we will set inf_process_status_tbl(i) with l_return_status
2276     for final result.  However, we will get out of this process if there
2277     is a significant error such as 'U'.
2278     The return status examined
2279     -api_return_status : return status for api call
2280     -l_return_status : validation result of each row
2281     -x_return_status : final result status for concurrent program request
2282     Rule to set return status
2283     If api_return_status for api call is
2284     * 'S' then continue
2285     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
2286         and build_error_array then continue
2287     * 'E' and it is significant then set l_return_status = 'E' and raise
2288       Exception
2289     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
2290        'E' at the end of validation
2291     * 'U' then set l_return_status = 'U' and raise 'U' exception
2292     * At the end, if it goes thru with no Exception,
2293     Check if l_return_status is 'E' then raise Exception
2294        Otherwise (meaning l_return_status is 'S' or 'W'),
2295           inf_process_status_tbl(i) = l_return_status
2296     * In the exception, we will set
2297           inf_process_status_tbl(i) = l_return_status and build_error_array
2298     ***/
2299     -------------------------------------------------------------------------
2300 
2301     FOR i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST LOOP
2302       BEGIN
2303       -- Increment total processed rows
2304       --##Count
2305       --l_tot_rows_processed := l_tot_rows_processed+1;
2306       l_part_rows_processed := l_part_rows_processed+1;
2307       -- Initialization for each iteration
2308       l_row_notfound       := FALSE;
2309       l_return_status      := G_RET_STS_SUCCESS;
2310       --for validate_row, we will pass 'DRAFT' status for 'APPROVED'
2311       --and 'PENDING_APPROVAL' status as it just means for submission for approval
2312       --or approved
2313       l_tmp_article_status := inf_article_status_tbl(i);
2314       -- following variables are not fetched from interface table
2315       -- thus initialize it here
2316       inf_earlier_version_id_tbl(i) := -99;
2317       inf_adoption_type_tbl(i) := l_adoption_type;
2318 
2319 
2320       l_context := 'CLAUSE VALIDATING';
2321 
2322       -- To find duplicate title in the batch after RTRIM is performed Bug 3487759
2323       IF i>1 THEN
2324          x := i-1;
2325          IF RTRIM(inf_article_title_tbl(i)) = RTRIM(inf_article_title_tbl(x)) THEN
2326             Okc_Api.Set_Message(G_APP_NAME, 'OKC_ART_DUP_TITLE_ORG');
2327             l_return_status := G_RET_STS_ERROR;
2328             RAISE FND_API.G_EXC_ERROR;
2329          END IF;
2330       END IF;
2331       -- Logic to decide what to do in case of Action='S'
2332 	 -- If there is no existing article in system then it is 'N' otherwise 'V'
2333 
2334 	 IF inf_action_tbl(i) = 'S' THEN
2335          IF inf_article_id_tbl(i) IS NULL THEN
2336 	       inf_action_tbl(i) := 'N';
2337 	    ELSE
2338 -- Changes for Bug# 6891498 Begins
2339  	            OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2340  	            FETCH get_max_article_version_csr INTO l_article_version_id,
2341  	                                                   l_article_version_number,
2342  	                                                   l_article_status,
2343  	                                                   l_start_date,
2344                                                            l_edited_in_word;
2345  	            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2346  	            CLOSE get_max_article_version_csr;
2347  	             IF nvl(l_article_status,'*') in ('DRAFT', 'REJECTED') THEN
2348  	               inf_action_tbl(i) := 'U';
2349  	             ELSE
2350 -- Changes for Bug# 6891498 Ends
2351 	       inf_action_tbl(i) := 'V';
2352            END IF; -- For Bug# 6891498
2353  --Clause Editing start
2354   IF nvl(l_edited_in_word,'N') = 'Y' AND inf_edited_in_word_tbl(i) = 'N' THEN
2355                          Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2356                                 p_msg_name     => 'OKC_ART_IMP_INV_EDT_WORD_UPD');
2357                         l_return_status := G_RET_STS_ERROR;
2358                         RAISE FND_API.G_EXC_ERROR ;
2359                     END IF;
2360  --Clause Editing end
2361 	    END IF;
2362 	 END IF;
2363 
2364 	 IF inf_action_tbl(i) = 'N' THEN
2365 
2366           inf_article_id_tbl(i) := NULL;
2367           IF nvl(inf_article_status_tbl(i), '*') not in
2368                  ('DRAFT','APPROVED','PENDING_APPROVAL')  THEN
2369                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2370                       p_msg_name     => 'OKC_ART_IMP_INV_STS_NEWA',
2371                       p_token1       => 'STATUS1',
2372                       p_token1_value => 'DRAFT',
2373                       p_token2       => 'STATUS2',
2374                       p_token2_value => 'APPROVED',
2375                       p_token3       => 'STATUS3',
2376                       p_token3_value => 'PENDING_APPROVAL');
2377               l_return_status := G_RET_STS_ERROR;
2378              RAISE FND_API.G_EXC_ERROR ;
2379           END IF;
2380 
2381           --TRIM trailing space because article title in library table has been trimmed
2382           --for successful comparison, this should be trimmed
2383           inf_article_title_tbl(i) := RTRIM(inf_article_title_tbl(i));
2384 
2385           -- Set article version number as 1
2386           inf_article_version_number_tbl(i) := 1;
2387 
2388           --validate this article with 'DRAFT'
2389           l_tmp_article_status := 'DRAFT';
2390 
2391       ELSIF inf_action_tbl(i) = 'U' THEN
2392 
2393           IF inf_article_id_tbl(i) is NULL THEN
2394                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2395                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2396                       p_token1       => 'ARTICLE_TITLE',
2397                       p_token1_value => inf_article_title_tbl(i));
2398               l_return_status := G_RET_STS_ERROR;
2399              RAISE FND_API.G_EXC_ERROR ;
2400           END IF;
2401 
2402           OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2403            FETCH get_max_article_version_csr INTO l_article_version_id,
2404                                                   l_article_version_number,
2405                                                   l_article_status,
2406 						  l_start_date,
2407 						  l_edited_in_word;
2408            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2409           CLOSE get_max_article_version_csr;
2410 
2411           IF nvl(l_article_status,'*') not in ('DRAFT', 'REJECTED') THEN
2412                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2413                       p_msg_name     => 'OKC_ART_IMP_INV_CUR_STS_UPD');
2414               l_return_status := G_RET_STS_ERROR;
2415               RAISE FND_API.G_EXC_ERROR ;
2416           END IF;
2417  --Clause Editing start
2418   IF nvl(l_edited_in_word,'N') = 'Y' AND inf_edited_in_word_tbl(i) = 'N' THEN
2419                          Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2420                                 p_msg_name     => 'OKC_ART_IMP_INV_EDT_WORD_NV');
2421                         l_return_status := G_RET_STS_ERROR;
2422                         RAISE FND_API.G_EXC_ERROR ;
2423                     END IF;
2424  --Clause Editing end
2425           -- this status may be null for update row
2426           -- inf_article_status_tbl(i) := l_article_status;
2427           -- set the version number
2428           inf_article_version_number_tbl(i) := l_article_version_number;
2429           -- set article version id
2430           inf_article_version_id_tbl(i)  := l_article_version_id;
2431 
2432           IF nvl(inf_article_status_tbl(i), '*') not in
2433                  ('DRAFT','REJECTED','APPROVED','PENDING_APPROVAL')  THEN
2434                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2435                       p_msg_name     => 'OKC_ART_IMP_INV_STS_UPD',
2436                       p_token1       => 'STATUS1',
2437                       p_token1_value => 'DRAFT',
2438                       p_token2       => 'STATUS2',
2439                       p_token2_value => 'REJECTED',
2440                       p_token3       => 'STATUS3',
2441                       p_token3_value => 'APPROVED',
2442                       p_token4       => 'STATUS4',
2443                       p_token4_value => 'PENDING_APPROVAL');
2444                 l_return_status := G_RET_STS_ERROR;
2445              RAISE FND_API.G_EXC_ERROR ;
2446           END IF;
2447 
2448           --if interface article status is DRAFT and REJECTED then keep
2449           --the one in the library table.  We don't want user to be able to change them
2450           --validate this article with 'DRAFT' for 'DRAFT', 'APPROVED', 'PENDING_APPROVAL'
2451           --or 'REJECTED' for 'REJECTED'
2452           IF nvl(inf_article_status_tbl(i), '*') in ('DRAFT', 'REJECTED') THEN
2453               inf_article_status_tbl(i) := l_article_status;
2454               l_tmp_article_status := l_article_status;
2455           ELSE
2456               l_tmp_article_status := 'DRAFT';
2457           END IF;
2458 
2459 
2460           -- User entered attribute in article level (intent, language) may not be
2461           -- accurate because we do not validate them for Update
2462           -- so here we need to fill some important attribute
2463           -- in interface table from database
2464           inf_article_intent_tbl(i) := inf_x_article_intent_tbl(i);
2465           inf_article_language_tbl(i) := inf_x_article_language_tbl(i);
2466 
2467       ELSIF inf_action_tbl(i) = 'V' THEN
2468 
2469           inf_article_version_id_tbl(i) := NULL;
2470           IF inf_article_id_tbl(i) is NULL THEN
2471                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2472                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2473                       p_token1       => 'ARTICLE_TITLE',
2474                       p_token1_value => inf_article_title_tbl(i));
2475               l_return_status := G_RET_STS_ERROR;
2476              RAISE FND_API.G_EXC_ERROR ;
2477           END IF;
2478 
2479           IF nvl(inf_article_status_tbl(i), '*') not in
2480                  ('DRAFT','APPROVED','PENDING_APPROVAL')  THEN
2481                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2482                       p_msg_name     => 'OKC_ART_IMP_INV_STS_NEWA',
2483                       p_token1       => 'STATUS1',
2484                       p_token1_value => 'DRAFT',
2485                       p_token2       => 'STATUS2',
2486                       p_token2_value => 'APPROVED',
2487                       p_token3       => 'STATUS3',
2488                       p_token3_value => 'PENDING_APPROVAL');
2489                 l_return_status := G_RET_STS_ERROR;
2490                 RAISE FND_API.G_EXC_ERROR;
2491           END IF;
2492 
2493 
2494           -- User entered attribute in article level (intent, language)may not be
2495           -- accurate because we do not validate them for New Version
2496           -- so here we need to fill some important attribute
2497           -- in interface table from database
2498           inf_article_intent_tbl(i) := inf_x_article_intent_tbl(i);
2499           inf_article_language_tbl(i) := inf_x_article_language_tbl(i);
2500 
2501           OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2502            FETCH get_max_article_version_csr INTO l_article_version_id,
2503                                                   l_article_version_number,
2504                                                   l_article_status,
2505 						  l_start_date,
2506 						  l_edited_in_word;
2507            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2508           CLOSE get_max_article_version_csr;
2509      --Clause Editing
2510  IF nvl(l_edited_in_word,'N') = 'Y' AND inf_edited_in_word_tbl(i) = 'N' THEN
2511                          Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2512                                 p_msg_name     => 'OKC_ART_IMP_INV_EDT_WORD_NV');
2513                         l_return_status := G_RET_STS_ERROR;
2514                         RAISE FND_API.G_EXC_ERROR ;
2515                     END IF;
2516  --Clause Editing
2517           -- Set article version number
2518           inf_article_version_number_tbl(i) := l_article_version_number +1;
2519 
2520           --validate article with 'DRAFT' status
2521           --because validate_row api validation for 'Approved' article
2522           --is more suitable for article in 'Approved' status already
2523           --but in import, status 'Approved' means submission for approval
2524           l_tmp_article_status := 'DRAFT';
2525       ELSIF inf_action_tbl(i) = 'D' THEN
2526 
2527           IF inf_article_id_tbl(i) is NULL THEN
2528                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2529                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2530                       p_token1       => 'ARTICLE_TITLE',
2531                       p_token1_value => inf_article_title_tbl(i));
2532               l_return_status := G_RET_STS_ERROR;
2533               RAISE FND_API.G_EXC_ERROR ;
2534           END IF;
2535 
2536           IF inf_end_date_tbl(i) IS NULL THEN
2537                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2538                                       p_msg_name => 'OKC_ART_NULL_END_DATE');
2539                   l_return_status := G_RET_STS_ERROR;
2540                   RAISE FND_API.G_EXC_ERROR;
2541           END IF;
2542 
2543           OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2544           FETCH get_max_article_version_csr INTO l_article_version_id,
2545                                                   l_article_version_number,
2546                                                   l_article_status,
2547 						  l_start_date,
2548 						  l_edited_in_word;
2549            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2550            CLOSE get_max_article_version_csr;
2551 
2552            IF l_row_notfound THEN
2553                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2554                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2555                       p_token1       => 'ARTICLE_TITLE',
2556                       p_token1_value => inf_article_title_tbl(i));
2557 
2558                 l_return_status := G_RET_STS_ERROR;
2559                 RAISE FND_API.G_EXC_ERROR;
2560          ELSE
2561 
2562             IF l_start_date IS NOT NULL
2563             THEN
2564                IF l_start_date > inf_end_date_tbl(i) THEN
2565                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2566                                       p_msg_name => 'OKC_INVALID_END_DATE');
2567                   l_return_status := G_RET_STS_ERROR;
2568                   RAISE FND_API.G_EXC_ERROR;
2569                END IF;
2570             END IF;
2571          END IF;
2572 
2573           -- set the version number
2574           inf_article_version_number_tbl(i) := l_article_version_number;
2575           -- set article version id
2576           inf_article_version_id_tbl(i)  := l_article_version_id;
2577 
2578       ELSE
2579 
2580           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2581                   p_msg_name     => 'OKC_ART_INV_IMP_ACTION');
2582           l_return_status := G_RET_STS_ERROR;
2583           RAISE FND_API.G_EXC_ERROR ;
2584       END IF;
2585 
2586       -----------------------------------------------------------
2587       -- Common validation or attribute settting
2588       -- regardless of status and import action
2589       -- this validation is not included in validate api
2590       -----------------------------------------------------------
2591 
2592       -- Do not import article if status or org_id or global_flag is not provided
2593 	 IF inf_article_status_tbl(i) IS NULL OR
2594 	    inf_org_id_tbl(i) IS NULL OR
2595 	    inf_global_yn_tbl(i) IS NULL THEN
2596 		    Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2597 		                        p_msg_name     => 'OKC_ART_ATTRS_NOT_PROVIDED');
2598 	         l_return_status := G_RET_STS_ERROR;
2599       END IF;
2600 
2601       -- Do not import 'PENDING_APPROVAL' article if approver is not set
2602       IF nvl(inf_article_status_tbl(i), '*') = 'PENDING_APPROVAL' THEN
2603          l_exist_approver := OKC_ARTWF_PVT.pre_submit_validation(G_CURRENT_ORG_ID);
2604          IF l_exist_approver = 'NOK' THEN
2605            l_return_status := G_RET_STS_ERROR;
2606          END IF;
2607       END IF;
2608 
2609       -- Do not import article if orig_system_reference_code begins with 'OKCMIG'
2610       IF instr(nvl(inf_art_reference_code_tbl(i), '*'), 'OKCMIG') = 1 THEN
2611             Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2612                   p_msg_name     => 'OKC_ART_IMP_RES_SYS_REF_CODE');
2613             l_return_status := G_RET_STS_ERROR;
2614       END IF;
2615 
2616       IF instr(nvl(inf_ver_reference_code_tbl(i), '*'), 'OKCMIG') = 1 THEN
2617             Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2618                   p_msg_name     => 'OKC_ART_IMP_RES_SYS_REF_CODE');
2619             l_return_status := G_RET_STS_ERROR;
2620       END IF;
2621 
2622 
2623       --for non 'APPROVED' article, make DATE_APPROVED null
2624       IF nvl(inf_article_status_tbl(i),'*') <> 'APPROVED' THEN
2625         inf_date_approved_tbl(i) := NULL;
2626       END IF;
2627 
2628       --if article status is in 'APPROVED' and date_approved is null
2629       --then set date approved as sysdate
2630       --otherwise, the validate api will complain
2631       IF nvl(inf_article_status_tbl(i), '*') in ('APPROVED') AND
2632          inf_date_approved_tbl(i) is NULL THEN
2633          inf_date_approved_tbl(i) := sysdate;
2634       END IF;
2635 
2636       --Bug 3680486: no provision for sell intent clause
2637       IF     nvl(inf_article_intent_tbl(i), '*') = 'S'
2638          AND nvl(inf_provision_yn_tbl(i), '*') = 'Y' THEN
2639             Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2640                   p_msg_name     => 'OKC_ART_INVALID_PROVISIONYN');
2641             l_return_status := G_RET_STS_ERROR;
2642       END IF;
2643 
2644       -- Validate attrs of the interface row
2645       IF inf_action_tbl(i) = 'N' THEN
2646           api_return_status :=
2647           OKC_ARTICLES_ALL_PVT.VALIDATE_RECORD(
2648                 p_validation_level           => FND_API.G_VALID_LEVEL_FULL,
2649                 p_import_action              => inf_action_tbl(i),
2650                 p_article_id                 => inf_article_id_tbl(i),
2651                 p_article_title              => inf_article_title_tbl(i),
2652                 p_org_id                     => G_CURRENT_ORG_ID,
2653                 p_article_number             => inf_article_number_tbl(i),
2654                 p_standard_yn                => 'Y',
2655                 p_article_intent             => inf_article_intent_tbl(i),
2656                 p_article_language           => inf_article_language_tbl(i),
2657                 p_article_type               => inf_article_type_tbl(i),
2658                 p_orig_system_reference_code => inf_art_reference_code_tbl(i),
2659                 p_orig_system_reference_id1  => inf_art_reference_id1_tbl(i),
2660                 p_orig_system_reference_id2  => inf_art_reference_id2_tbl(i),
2661                 p_attribute_category         => NULL ,
2662                 p_attribute1                 => NULL ,
2663                 p_attribute2                 => NULL ,
2664                 p_attribute3                 => NULL ,
2665                 p_attribute4                 => NULL ,
2666                 p_attribute5                 => NULL ,
2667                 p_attribute6                 => NULL ,
2668                 p_attribute7                 => NULL ,
2669                 p_attribute8                 => NULL ,
2670                 p_attribute9                 => NULL ,
2671                 p_attribute10                => NULL ,
2672                 p_attribute11                => NULL ,
2673                 p_attribute12                => NULL ,
2674                 p_attribute13                => NULL ,
2675                 p_attribute14                => NULL ,
2676                 p_attribute15                => NULL
2677           );
2678       --
2679       -- If error is Unexpected then raise exception
2680       -- Otherwise, keep going
2681       --
2682       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2683          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2684       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2685          l_return_status := G_RET_STS_ERROR;
2686       END IF;
2687           api_return_status :=
2688             OKC_ARTICLE_VERSIONS_PVT.validate_record(
2689                 p_validation_level           => FND_API.G_VALID_LEVEL_FULL,
2690                 p_import_action              => inf_action_tbl(i),
2691                 x_earlier_adoption_type      => l_earlier_adoption_type,
2692                 x_earlier_version_id         => l_earlier_version_id,
2693                 x_earlier_version_number     => l_earlier_version_number,
2694                 x_article_language           => l_article_language,
2695                 p_article_version_id         => inf_article_version_id_tbl(i),
2696                 p_article_id                 => inf_article_id_tbl(i),
2697                 p_article_version_number     => inf_article_version_number_tbl(i),
2698                 p_article_text               => inf_article_text_tbl(i),
2699                 p_provision_yn               => inf_provision_yn_tbl(i),
2700                 p_insert_by_reference        => inf_insert_by_reference_tbl(i),
2701                 p_lock_text                  => inf_lock_text_tbl(i),
2702                 p_global_yn                  => inf_global_yn_tbl(i),
2703                 p_article_language           => inf_article_language_tbl(i),
2704                 p_article_status             => l_tmp_article_status,
2705                 p_sav_release                => NULL,
2706                 p_start_date                 => inf_start_date_tbl(i),
2707                 p_end_date                   => inf_end_date_tbl(i),
2708                 p_std_article_version_id     => NULL,
2709                 p_display_name               => inf_display_name_tbl(i),
2710                 p_translated_yn              => NULL,
2711                 p_article_description        => inf_article_description_tbl(i),
2712                 p_date_approved              => inf_date_approved_tbl(i),
2713                 p_default_section            => inf_default_section_tbl(i),
2714                 p_reference_source           => inf_reference_source_tbl(i),
2715                 p_reference_text             => inf_reference_text_tbl(i),
2716                 p_orig_system_reference_code => inf_art_reference_code_tbl(i),
2717                 p_orig_system_reference_id1  => inf_art_reference_id1_tbl(i),
2718                 p_orig_system_reference_id2  => inf_art_reference_id2_tbl(i),
2719                 p_program_id                 => NULL,
2720                 p_program_application_id     => NULL,
2721                 p_request_id                 => NULL,
2722                 p_current_org_id             => G_CURRENT_ORG_ID,
2723                 p_additional_instructions    => inf_instructions_tbl(i),
2724                 p_variation_description      => NULL,
2725                 p_date_published             => inf_date_published_tbl(i) ,
2726                 p_attribute_category         => inf_attribute_category_tbl(i) ,
2727                 p_attribute1                 => inf_attribute1_tbl(i) ,
2728                 p_attribute2                 => inf_attribute2_tbl(i) ,
2729                 p_attribute3                 => inf_attribute3_tbl(i) ,
2730                 p_attribute4                 => inf_attribute4_tbl(i) ,
2731                 p_attribute5                 => inf_attribute5_tbl(i) ,
2732                 p_attribute6                 => inf_attribute6_tbl(i) ,
2733                 p_attribute7                 => inf_attribute7_tbl(i) ,
2734                 p_attribute8                 => inf_attribute8_tbl(i) ,
2735                 p_attribute9                 => inf_attribute9_tbl(i) ,
2736                 p_attribute10                => inf_attribute10_tbl(i) ,
2737                 p_attribute11                => inf_attribute11_tbl(i) ,
2738                 p_attribute12                => inf_attribute12_tbl(i) ,
2739                 p_attribute13                => inf_attribute13_tbl(i) ,
2740                 p_attribute14                => inf_attribute14_tbl(i) ,
2741                 p_attribute15                => inf_attribute15_tbl(i) ,
2742  --Clause Editing
2743                 p_edited_in_word             => inf_edited_in_word_tbl(i) ,
2744                 p_article_text_in_word       => inf_article_text_in_word_tbl(i)
2745                 --clm
2746                 --p_variable_code              => inf_variable_code_tbl(i)
2747             );
2748 
2749       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2750          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2751       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2752          l_return_status := G_RET_STS_ERROR;
2753       END IF;
2754 
2755       ELSIF inf_action_tbl(i) in ('U','V') THEN
2756          --validating only article type because only article type is updated
2757          l_row_notfound := FALSE;
2758          OPEN validate_article_type_csr (inf_article_type_tbl(i),
2759                                          inf_article_id_tbl(i),
2760                                          inf_action_tbl(i));
2761            FETCH validate_article_type_csr INTO inf_article_type_tbl(i);
2762            l_row_notfound := validate_article_type_csr%NOTFOUND;
2763          CLOSE validate_article_type_csr;
2764 
2765          IF l_row_notfound THEN
2766                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2767                       p_msg_name     => 'OKC_ART_INVALID_ARTICLE_TYPE',
2768                       p_token1       => 'ARTICLE_TITLE',
2769                       p_token1_value => inf_article_title_tbl(i));
2770               l_return_status := G_RET_STS_ERROR;
2771 
2772          END IF;
2773 
2774             -- nvl for nullable column to avoid getting database value
2775             -- in the validate API
2776           api_return_status :=
2777             OKC_ARTICLE_VERSIONS_PVT.validate_record(
2778                 p_validation_level           => FND_API.G_VALID_LEVEL_FULL,
2779                 p_import_action              => inf_action_tbl(i),
2780                 x_earlier_adoption_type      => l_earlier_adoption_type,
2781                 x_earlier_version_id         => l_earlier_version_id,
2782                 x_earlier_version_number     => l_earlier_version_number,
2783                 x_article_language           => l_article_language,
2784                 p_article_version_id         => inf_article_version_id_tbl(i),
2785                 p_article_id                 => inf_article_id_tbl(i),
2786                 p_article_version_number     => inf_article_version_number_tbl(i),
2787                 p_article_text               => inf_article_text_tbl(i),
2788                 p_provision_yn               => inf_provision_yn_tbl(i),
2789                 p_insert_by_reference        => inf_insert_by_reference_tbl(i),
2790                 p_lock_text                  => inf_lock_text_tbl(i),
2791                 p_global_yn                  => inf_global_yn_tbl(i),
2792                 p_article_language           => inf_article_language_tbl(i),
2793                 p_article_status             => l_tmp_article_status,
2794                 p_sav_release                => NULL,
2795                 p_start_date                 => inf_start_date_tbl(i),
2796                 p_end_date                   => inf_end_date_tbl(i),
2797                 p_std_article_version_id     => NULL,
2798                 p_display_name               => inf_display_name_tbl(i),
2799                 p_translated_yn              => NULL,
2800                 p_article_description        => inf_article_description_tbl(i),
2801                 p_date_approved              => inf_date_approved_tbl(i),
2802                 p_default_section            => inf_default_section_tbl(i),
2803                 p_reference_source           => inf_reference_source_tbl(i),
2804                 p_reference_text             => inf_reference_text_tbl(i),
2805                 p_orig_system_reference_code => inf_art_reference_code_tbl(i),
2806                 p_orig_system_reference_id1  => inf_art_reference_id1_tbl(i),
2807                 p_orig_system_reference_id2  => inf_art_reference_id2_tbl(i),
2808                 p_program_id                 => NULL,
2809                 p_program_application_id     => NULL,
2810                 p_request_id                 => NULL,
2811                 p_current_org_id             => G_CURRENT_ORG_ID,
2812                 p_additional_instructions    => inf_instructions_tbl(i),
2813                 p_variation_description      => NULL,
2814                 p_date_published             => inf_date_published_tbl(i) ,
2815                 p_attribute_category         => inf_attribute_category_tbl(i) ,
2816                 p_attribute1                 => inf_attribute1_tbl(i) ,
2817                 p_attribute2                 => inf_attribute2_tbl(i) ,
2818                 p_attribute3                 => inf_attribute3_tbl(i) ,
2819                 p_attribute4                 => inf_attribute4_tbl(i) ,
2820                 p_attribute5                 => inf_attribute5_tbl(i) ,
2821                 p_attribute6                 => inf_attribute6_tbl(i) ,
2822                 p_attribute7                 => inf_attribute7_tbl(i) ,
2823                 p_attribute8                 => inf_attribute8_tbl(i) ,
2824                 p_attribute9                 => inf_attribute9_tbl(i) ,
2825                 p_attribute10                => inf_attribute10_tbl(i) ,
2826                 p_attribute11                => inf_attribute11_tbl(i) ,
2827                 p_attribute12                => inf_attribute12_tbl(i) ,
2828                 p_attribute13                => inf_attribute13_tbl(i) ,
2829                 p_attribute14                => inf_attribute14_tbl(i) ,
2830                 p_attribute15                => inf_attribute15_tbl(i) ,
2831                 p_edited_in_word             => inf_edited_in_word_tbl(i) ,
2832                 p_article_text_in_word       => inf_article_text_in_word_tbl(i)
2833                 --clm
2834                 --p_variable_code              => inf_variable_code_tbl(i)
2835             );
2836       END IF;
2837 
2838 
2839       --
2840       --
2841       -- If error is Unexpected then raise exception
2842       -- Otherwise, keep going
2843       --
2844       --
2845       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2846          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2847       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2848          l_return_status := G_RET_STS_ERROR;
2849       END IF;
2850 
2851       -- Continue with the rest of validation unless some unexpected error is encountered.
2852       -- It is always a good idea to show all errors at one shot.
2853       -- Parse through the article text and build the list of variables to be used.
2854       -- For validate only mode = N change the user friendly variable tags with valid XML and variable codes.
2855 
2856       IF p_validate_only = 'N' THEN
2857          l_replace_text := 'Y';
2858       ELSE
2859          l_replace_text := 'N';
2860       END IF;
2861 
2862       --
2863       -- Copying the clob in interface into temporary clob
2864       --
2865       --
2866 
2867       DBMS_LOB.TRIM(g_temp_clob_tbl(i), 0);
2868 
2869       OKC_ARTICLES_GRP.parse_n_replace_text(
2870             p_api_version                  => l_api_version,
2871             p_init_msg_list                => l_init_msg_list,
2872             p_article_text                 => inf_article_text_tbl(i),
2873             p_dest_clob                    => g_temp_clob_tbl(i),
2874             p_calling_mode                 => 'IMPORT',
2875 		  p_batch_number                 => p_batch_number,  -- Bug 4659659
2876             p_replace_text                 => l_replace_text,
2877             p_article_intent               => inf_article_intent_tbl(i),
2878             p_language                     => inf_article_language_tbl(i),
2879             x_return_status                => api_return_status,
2880             x_msg_count                    => x_msg_count,
2881             x_msg_data                     => x_msg_data,
2882             x_variables_tbl                => l_variable_code_tbl
2883       ) ;
2884 
2885       -- Add value_set check for 'PENDING_APPROVAL' and 'APPROVED' clause
2886       IF (inf_article_status_tbl(i) in ('PENDING_APPROVAL','APPROVED')) THEN
2887         IF l_variable_code_tbl.COUNT > 0 THEN
2888            k:=0;
2889            FOR k in l_variable_code_tbl.FIRST ..l_variable_code_tbl.LAST LOOP
2890               OPEN  l_check_valid_valueset_csr (l_variable_code_tbl(k));
2891               FETCH l_check_valid_valueset_csr  INTO l_value_set_id,
2892                                                      l_variable_type;
2893               CLOSE l_check_valid_valueset_csr;
2894 
2895               IF l_value_set_id is NULL AND l_variable_type = 'U' THEN
2896                 OPEN  l_var_name_csr (l_variable_code_tbl(k),
2897                                       inf_article_language_tbl(i));
2898                 FETCH l_var_name_csr  INTO l_variable_name;
2899                 CLOSE l_var_name_csr;
2900                  Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2901                           p_msg_name     => 'OKC_ART_INV_VALUESET',
2902                           p_token1       => 'VARIABLE_NAME',
2903                           p_token1_value => l_variable_name,
2904                           p_token2       => 'ARTICLE_TITLE',
2905                           p_token2_value => inf_article_title_tbl(i),
2906                           p_token3       => 'ARTICLE_VERSION',
2907                           p_token3_value => inf_article_version_number_tbl(i));
2908                   api_return_status := G_RET_STS_ERROR;
2909               END IF;
2910            END LOOP;
2911         END IF;
2912       END IF;
2913 
2914       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2915             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2916       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2917             RAISE FND_API.G_EXC_ERROR ;
2918       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
2919             RAISE FND_API.G_EXC_ERROR ;
2920       END IF;
2921 
2922       ------------------------------------------------------------------------
2923       -- Now that we have validated and data is clean we can fetch sequences and ids
2924       -- for new articles for DML and also set the process status to Success
2925       -------------------------------------------------------------------------
2926       IF p_validate_only = 'N' THEN
2927           l_context:='PREPARING DML FOR CLAUSE';
2928 
2929           IF inf_action_tbl(i) = 'N' THEN
2930           -- Generate article number based on autonumbering
2931 
2932               -- When article number is not given, then we get number from autonumber API
2933               IF nvl(inf_article_number_tbl(i),'-99') = '-99' THEN
2934                 OKC_ARTICLES_GRP.GET_ARTICLE_SEQ_NUMBER
2935                     (p_article_number =>inf_article_number_tbl(i),
2936                      p_seq_type_info_only  => 'N',
2937                      p_org_id  => G_CURRENT_ORG_ID,
2938                      x_article_number => l_article_number,
2939                      x_doc_sequence_type => l_doc_sequence_type,
2940                      x_return_status   => api_return_status
2941                       ) ;
2942 
2943                IF api_return_status = G_RET_STS_SUCCESS Then
2944                  inf_article_number_tbl(i) := l_article_number;
2945                ELSIF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2946                  l_return_status := api_return_status;
2947                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2948                ELSE
2949                  l_return_status := api_return_status; -- whatever error, it will overwrite it
2950                END IF;
2951              END IF;
2952 
2953           -- Get article id.
2954               api_return_status := Get_Seq_Id (p_object_type => 'ART',
2955                                              x_object_id  =>  inf_article_id_tbl(i));
2956               IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2957                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2958               ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2959                 l_return_status := api_return_status;
2960                 RAISE FND_API.G_EXC_ERROR ;
2961               END IF;
2962 
2963               api_return_status := Get_Seq_Id (p_object_type => 'VER',
2964                                              x_object_id  =>  inf_article_version_id_tbl(i));
2965               IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2966                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2967               ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2968                 l_return_status := api_return_status;
2969                 RAISE FND_API.G_EXC_ERROR ;
2970               END IF;
2971 
2972           -- Create variable association for the new article - 1st version.
2973             IF l_variable_code_tbl.COUNT > 0 THEN
2974                FOR k in l_variable_code_tbl.FIRST ..l_variable_code_tbl.LAST LOOP
2975                   artv_variable_code_tbl(j) := l_variable_code_tbl(k);
2976                   artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
2977                   artv_action_tbl(j) := 'N';
2978                   j := j+1;
2979                END LOOP;
2980 
2981             END IF;
2982 
2983 
2984             ELSIF inf_action_tbl(i) = 'V' THEN -- new version
2985 
2986               -- if status is APPROVED then save id of prev. version
2987               -- to set end date of previous version
2988               IF inf_article_status_tbl(i) = 'APPROVED' THEN
2989                   inf_earlier_version_id_tbl(i) := l_earlier_version_id;
2990               END IF;
2991 
2992             -- Get article version id.
2993 
2994             api_return_status := Get_Seq_Id (p_object_type => 'VER',
2995                                              x_object_id  =>  inf_article_version_id_tbl(i));
2996             IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2997                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2998             ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2999                 l_return_status := api_return_status;
3000                 RAISE FND_API.G_EXC_ERROR ;
3001             END IF;
3002 
3003           -- Create variable association for the new version.
3004             IF l_variable_code_tbl.COUNT > 0 THEN
3005 
3006                FOR k in l_variable_code_tbl.FIRST ..l_variable_code_tbl.LAST LOOP
3007                   artv_variable_code_tbl(j) := l_variable_code_tbl(k);
3008                   artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
3009                   artv_action_tbl(j) := 'N';
3010                   j := j+1;
3011                END LOOP;
3012             END IF;
3013 
3014           -- Set adoption type with earlier adoption type
3015             inf_adoption_type_tbl(i) := l_earlier_adoption_type;
3016 
3017 
3018           ELSIF inf_action_tbl(i) = 'U' THEN
3019 
3020           -- Find out the variables that need to be added as these are new
3021           -- or those that need to be deleted as they are no longer used.
3022 
3023               OKC_ARTICLES_GRP.UPDATE_ARTICLE_VARIABLES (
3024                             p_article_version_id => inf_article_version_id_tbl(i),
3025                             p_variable_code_tbl => l_variable_code_tbl,
3026                             p_do_dml => 'N', -- indicates not to do dml in the API
3027                             x_variables_to_insert_tbl => l_variables_to_insert_tbl,
3028                             x_variables_to_delete_tbl => l_variables_to_delete_tbl,
3029                             x_return_status => api_return_status);
3030               IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
3031                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3032               ELSIF (api_return_status = G_RET_STS_ERROR) THEN
3033                 RAISE FND_API.G_EXC_ERROR ;
3034               END IF;
3035 
3036           -- New Variables
3037               IF l_variables_to_insert_tbl.COUNT > 0 THEN
3038 
3039                 FOR k in l_variables_to_insert_tbl.FIRST ..l_variables_to_insert_tbl.LAST LOOP
3040                   artv_variable_code_tbl(j) := l_variables_to_insert_tbl(k);
3041                   artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
3042                   artv_action_tbl(j) := 'N';
3043                   j := j+1;
3044                 END LOOP;
3045               END IF;
3046           -- Variables no longer used.
3047               IF l_variables_to_delete_tbl.COUNT > 0 THEN
3048                  FOR k in l_variables_to_delete_tbl.FIRST ..l_variables_to_delete_tbl.LAST LOOP
3049                    artv_variable_code_tbl(j) := l_variables_to_delete_tbl(k);
3050                    artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
3051                    artv_action_tbl(j) := 'D';
3052                    j := j+1;
3053                  END LOOP;
3054                END IF;
3055 
3056           END IF; -- end of IF inf_action_tbl(i) = 'N'
3057 
3058           --Delete variables cache tables for next interface row
3059           l_variables_to_insert_tbl.DELETE;
3060           l_variables_to_delete_tbl.DELETE;
3061           l_variable_code_tbl.DELETE;
3062 
3063       END IF; -- validate_only = 'N'
3064 
3065       -- Summarize report for this row
3066       -- Status 'F' is for internal use meaning parsing failure marked in
3067       -- java concurrent program
3068       IF (l_return_status = G_RET_STS_SUCCESS) THEN
3069          IF (nvl(inf_process_status_tbl(i), 'E') = 'E') THEN
3070            inf_process_status_tbl(i) := G_RET_STS_SUCCESS;
3071          ELSIF ( inf_process_status_tbl(i) = 'F') THEN
3072            -- ##count parser failure as error
3073            --l_tot_rows_failed := l_tot_rows_failed+1;
3074            l_part_rows_failed := l_part_rows_failed+1;
3075            inf_process_status_tbl(i) := G_RET_STS_ERROR;
3076          END IF;
3077       ELSIF (l_return_status = l_sts_warning) THEN
3078          IF (nvl(inf_process_status_tbl(i),'E') = 'E') THEN
3079            inf_process_status_tbl(i) := l_sts_warning;
3080            --##count
3081            --l_tot_rows_warned := l_tot_rows_warned+1;
3082            l_part_rows_warned := l_part_rows_warned+1;
3083          ELSIF (inf_process_status_tbl(i) = 'F') THEN
3084            -- ##count parser failure as error
3085            --l_tot_rows_failed := l_tot_rows_failed+1;
3086            l_part_rows_failed := l_part_rows_failed+1;
3087            inf_process_status_tbl(i) := G_RET_STS_ERROR;
3088          END IF;
3089       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
3090            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3091       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
3092            RAISE FND_API.G_EXC_ERROR;
3093       END IF;
3094 
3095     -------------------------
3096     -------------------------
3097     -- Exception Block for each iteration in Loop
3098     -- validation and unexpected errors
3099     -- In case of unexpected error, escape the loop
3100     -------------------------
3101     -------------------------
3102 
3103       EXCEPTION
3104           WHEN FND_API.G_EXC_ERROR THEN
3105               IF (l_debug = 'Y') THEN
3106                  okc_debug.log('300: In Articles_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
3107               END IF;
3108               --l_return_status := G_RET_STS_ERROR ;
3109               build_error_array(
3110                  p_msg_data     => x_msg_data,
3111                  p_context      => l_context,
3112                  p_batch_process_id => l_batch_process_id,
3113                  p_interface_id  => inf_interface_id_tbl(i),
3114                  p_article_title => inf_article_title_tbl(i),
3115                  p_error_type    => G_RET_STS_ERROR,
3116 			  p_entity        => 'CLAUSE'
3117                 );
3118                inf_process_status_tbl(i) := G_RET_STS_ERROR;
3119                --##count
3120                --l_tot_rows_failed := l_tot_rows_failed+1;
3121                l_part_rows_failed := l_part_rows_failed+1;
3122                -- Continue to next row
3123 
3124           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3125               IF (l_debug = 'Y') THEN
3126                  okc_debug.log('400: Leaving Articles_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
3127               END IF;
3128 
3129               --
3130               -- Freeing temporary clobs
3131               --
3132               j := g_temp_clob_tbl.FIRST;
3133               LOOP
3134                DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3135                EXIT WHEN (j = g_temp_clob_tbl.LAST);
3136                j := g_temp_clob_tbl.NEXT(j);
3137               END LOOP;
3138               g_temp_clob_tbl.DELETE;
3139               --
3140               -- Freeing temporary clobs
3141               --
3142 
3143               IF l_interface_csr%ISOPEN THEN
3144                  CLOSE l_interface_csr;
3145               END IF;
3146 
3147               IF get_max_article_version_csr%ISOPEN THEN
3148                  CLOSE get_max_article_version_csr;
3149               END IF;
3150 
3151               IF get_article_info_csr%ISOPEN THEN
3152                  CLOSE get_article_info_csr;
3153               END IF;
3154 
3155               IF validate_article_type_csr%ISOPEN THEN
3156                  CLOSE validate_article_type_csr;
3157               END IF;
3158               --Set_Message
3159               l_return_status := G_RET_STS_UNEXP_ERROR ;
3160               x_return_status := G_RET_STS_UNEXP_ERROR ;
3161 
3162               build_error_array(
3163                  p_msg_data     => x_msg_data,
3164                  p_context      => l_context,
3165                  p_batch_process_id => l_batch_process_id,
3166                  p_interface_id  => inf_interface_id_tbl(i),
3167                  p_article_title => inf_article_title_tbl(i),
3168                  p_error_type    => G_RET_STS_UNEXP_ERROR,
3169 			  p_entity        => 'CLAUSE'
3170                  );
3171                inf_process_status_tbl(i) := G_RET_STS_ERROR;
3172                --##count
3173                --l_tot_rows_failed := l_tot_rows_failed+1;
3174                l_part_rows_failed := l_part_rows_failed+1;
3175               exit; -- exit the current fetch
3176 
3177           WHEN OTHERS THEN
3178               IF (l_debug = 'Y') THEN
3179                 okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||sqlerrm, 2);
3180               END IF;
3181 
3182 
3183               --
3184               -- Freeing temporary clobs
3185               --
3186               j := g_temp_clob_tbl.FIRST;
3187               LOOP
3188                DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3189                EXIT WHEN (j = g_temp_clob_tbl.LAST);
3190                j := g_temp_clob_tbl.NEXT(j);
3191               END LOOP;
3192               g_temp_clob_tbl.DELETE;
3193               --
3194               -- Freeing temporary clobs
3195               --
3196 
3197               IF l_interface_csr%ISOPEN THEN
3198                  CLOSE l_interface_csr;
3199               END IF;
3200 
3201               IF get_max_article_version_csr%ISOPEN THEN
3202                  CLOSE get_max_article_version_csr;
3203               END IF;
3204 
3205               IF get_article_info_csr%ISOPEN THEN
3206                 CLOSE get_article_info_csr;
3207               END IF;
3208 
3209               IF validate_article_type_csr%ISOPEN THEN
3210                  CLOSE validate_article_type_csr;
3211               END IF;
3212               l_return_status := G_RET_STS_UNEXP_ERROR ;
3213               x_return_status := G_RET_STS_UNEXP_ERROR ;
3214 
3215               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3216                                 p_msg_name     => G_UNEXPECTED_ERROR,
3217                                 p_token1       => G_SQLCODE_TOKEN,
3218                                 p_token1_value => sqlcode,
3219                                 p_token2       => G_SQLERRM_TOKEN,
3220                                 p_token2_value => sqlerrm);
3221 
3222               build_error_array(
3223                  p_msg_data     => G_UNEXPECTED_ERROR,
3224                  p_context      => l_context,
3225                  p_batch_process_id => l_batch_process_id,
3226                  p_interface_id  => inf_interface_id_tbl(i),
3227                  p_article_title => inf_article_title_tbl(i),
3228                  p_error_type    => G_RET_STS_ERROR,
3229 			  p_entity        => 'CLAUSE'
3230                 );
3231                inf_process_status_tbl(i) := G_RET_STS_ERROR;
3232                --##count
3233                --l_tot_rows_failed := l_tot_rows_failed+1;
3234                l_part_rows_failed := l_part_rows_failed+1;
3235               exit;  -- exit the current fetch
3236           END;
3237     -------------------------
3238     -------------------------
3239     -- Exception Block for each iteration in Loop ends
3240     -------------------------
3241     -------------------------
3242 
3243 
3244      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
3245     ------------------------------------------------------------------------
3246     -------------- End of Inner Loop thru fetched row for---------------------
3247     -- validation, parse and validate article text, create a variable list
3248     -- prepare rows for DML if validate_only is 'N'
3249     -------------------------------------------------------------------------
3250     -- In order to propagate Unexpected error raise it if it is 'U'
3251     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
3252          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3253     END IF;
3254 
3255     -------------------------
3256     -------------------------
3257     -- Exception Block for Inner Loop starts
3258     -- Handles unexpected errors as last step
3259     -------------------------
3260     -------------------------
3261     EXCEPTION
3262          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3263              IF (l_debug = 'Y') THEN
3264                 okc_debug.log('400: Leaving Articles_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
3265              END IF;
3266              --
3267              -- Freeing temporary clobs
3268              --
3269              j := g_temp_clob_tbl.FIRST;
3270              LOOP
3271                DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3272                 EXIT WHEN (j = g_temp_clob_tbl.LAST);
3273                 j := g_temp_clob_tbl.NEXT(j);
3274              END LOOP;
3275              g_temp_clob_tbl.DELETE;
3276              --
3277              -- Freeing temporary clobs
3278              --
3279 
3280              IF l_interface_csr%ISOPEN THEN
3281                 CLOSE l_interface_csr;
3282              END IF;
3283              IF get_max_article_version_csr%ISOPEN THEN
3284                 CLOSE get_max_article_version_csr;
3285              END IF;
3286              IF get_article_info_csr%ISOPEN THEN
3287                CLOSE get_article_info_csr;
3288              END IF;
3289              IF validate_article_type_csr%ISOPEN THEN
3290                 CLOSE validate_article_type_csr;
3291              END IF;
3292              l_return_status := G_RET_STS_UNEXP_ERROR ;
3293              x_return_status := G_RET_STS_UNEXP_ERROR ;
3294              exit; -- exit outermost loop
3295 
3296         WHEN OTHERS THEN
3297              IF (l_debug = 'Y') THEN
3298                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||sqlerrm, 2);
3299              END IF;
3300 
3301              --
3302              -- Freeing temporary clobs
3303              --
3304              j := g_temp_clob_tbl.FIRST;
3305              LOOP
3306               DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3307               EXIT WHEN (j = g_temp_clob_tbl.LAST);
3308               j := g_temp_clob_tbl.NEXT(j);
3309              END LOOP;
3310              g_temp_clob_tbl.DELETE;
3311              --
3312              -- Freeing temporary clobs
3313              --
3314 
3315              IF l_interface_csr%ISOPEN THEN
3316                 CLOSE l_interface_csr;
3317              END IF;
3318              IF get_max_article_version_csr%ISOPEN THEN
3319                 CLOSE get_max_article_version_csr;
3320              END IF;
3321              IF get_article_info_csr%ISOPEN THEN
3322                CLOSE get_article_info_csr;
3323              END IF;
3324              IF validate_article_type_csr%ISOPEN THEN
3325                 CLOSE validate_article_type_csr;
3326              END IF;
3327              l_return_status := G_RET_STS_UNEXP_ERROR ;
3328              x_return_status := G_RET_STS_UNEXP_ERROR ;
3329              exit; -- exit outermost loop
3330      END;
3331 
3332     -------------------------
3333     -------------------------
3334     -- Exception Block for Each Iteration of outermost Loop ends
3335     -------------------------
3336     -------------------------
3337 
3338     ------------------------------------------------------------------------
3339     --------------------- Start Do_DML for Article Library   ---------------
3340     -- Insert or Update Article, Article Version
3341     -- Insert variable association
3342     -------------------------------------------------------------------------
3343     -- initialize l_return_status to track status of DML execution
3344      l_return_status := G_RET_STS_SUCCESS;
3345 
3346 
3347     IF p_validate_only = 'N' THEN
3348          BEGIN
3349          SAVEPOINT bulkdml;
3350 
3351          i := 0;
3352         -- Bulk insert New Valid Records
3353          BEGIN
3354          l_context := 'INSERTING NEW CLAUSE';
3355 
3356            FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3357             INSERT INTO OKC_ARTICLES_ALL(
3358              ARTICLE_ID,
3359              ARTICLE_TITLE,
3360              ORG_ID,
3361              ARTICLE_NUMBER,
3362              STANDARD_YN,
3363              ARTICLE_INTENT,
3364              ARTICLE_LANGUAGE,
3365              ARTICLE_TYPE,
3366              ORIG_SYSTEM_REFERENCE_CODE,
3367              ORIG_SYSTEM_REFERENCE_ID1,
3368              ORIG_SYSTEM_REFERENCE_ID2,
3369              CZ_TRANSFER_STATUS_FLAG,
3370              PROGRAM_ID,
3371              PROGRAM_LOGIN_ID,
3372              PROGRAM_APPLICATION_ID,
3373              REQUEST_ID,
3374              OBJECT_VERSION_NUMBER,
3375              CREATED_BY,
3376              CREATION_DATE,
3377              LAST_UPDATED_BY,
3378              LAST_UPDATE_LOGIN,
3379              LAST_UPDATE_DATE)
3380            SELECT
3381              inf_article_id_tbl(i),
3382              inf_article_title_tbl(i),
3383              G_CURRENT_ORG_ID,
3384              inf_article_number_tbl(i),
3385              'Y',
3386              inf_article_intent_tbl(i),
3387              nvl(inf_article_language_tbl(i),l_userenv_lang),
3388              inf_article_type_tbl(i),
3389              inf_art_reference_code_tbl(i),
3390              inf_art_reference_id1_tbl(i),
3391              inf_art_reference_id2_tbl(i),
3392              'N',
3393              l_program_id,
3394              l_program_login_id,
3395              l_program_appl_id,
3396              l_request_id,
3397              1.0,
3398              l_user_id,
3399              sysdate,
3400              l_user_id,
3401              l_login_id,
3402              sysdate
3403            FROM DUAL
3404            WHERE inf_action_tbl(i)  = 'N' and
3405                  inf_process_status_tbl(i)  in ('S', 'W')  ;
3406 
3407         -- Using a " select from dual" aproach as above prevents creation of
3408         -- additional PL/SQL tables for bulk insert of
3409         -- articles if we were to use a FORALL INSERT INTO .... VALUES .... approach.
3410         -- We cannot use FORALL INSERT INTO .... VALUES ....using
3411         -- the existing inf*tbl since the error rows need to be
3412         -- filtered out.
3413 
3414         EXCEPTION
3415            WHEN OTHERS THEN
3416              IF (l_debug = 'Y') THEN
3417                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3418              END IF;
3419              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3420           END;
3421 
3422          --
3423          --  End of Insert into OKC_ARTICLES_ALL
3424          --
3425          --
3426 
3427          i := 0;
3428          BEGIN
3429          l_context := 'INSERTING NEW VERSION OF CLAUSE';
3430 
3431          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3432            INSERT INTO OKC_ARTICLE_VERSIONS(
3433              ARTICLE_VERSION_ID,
3434               ARTICLE_ID,
3435               ARTICLE_VERSION_NUMBER,
3436               ARTICLE_TEXT,
3437               PROVISION_YN,
3438               INSERT_BY_REFERENCE,
3439               LOCK_TEXT,
3440               GLOBAL_YN,
3441               ARTICLE_LANGUAGE,
3442               ARTICLE_STATUS,
3443               SAV_RELEASE,
3444               START_DATE,
3445               END_DATE,
3446               STD_ARTICLE_VERSION_ID,
3447               DISPLAY_NAME,
3448               TRANSLATED_YN,
3449               ARTICLE_DESCRIPTION,
3450               DATE_APPROVED,
3451               DEFAULT_SECTION,
3452               REFERENCE_SOURCE,
3453               REFERENCE_TEXT,
3454               ORIG_SYSTEM_REFERENCE_CODE,
3455               ORIG_SYSTEM_REFERENCE_ID1,
3456               ORIG_SYSTEM_REFERENCE_ID2,
3457               ADDITIONAL_INSTRUCTIONS,
3458               VARIATION_DESCRIPTION,
3459 		    DATE_PUBLISHED,
3460               ADOPTION_TYPE,
3461               PROGRAM_ID,
3462               PROGRAM_LOGIN_ID,
3463               PROGRAM_APPLICATION_ID,
3464               REQUEST_ID,
3465               ATTRIBUTE_CATEGORY,
3466               ATTRIBUTE1,
3467               ATTRIBUTE2,
3468               ATTRIBUTE3,
3469               ATTRIBUTE4,
3470               ATTRIBUTE5,
3471               ATTRIBUTE6,
3472               ATTRIBUTE7,
3473               ATTRIBUTE8,
3474               ATTRIBUTE9,
3475               ATTRIBUTE10,
3476               ATTRIBUTE11,
3477               ATTRIBUTE12,
3478               ATTRIBUTE13,
3479               ATTRIBUTE14,
3480               ATTRIBUTE15,
3481  --Clause Editing
3482               EDITED_IN_WORD,
3483               ARTICLE_TEXT_IN_WORD,
3484               OBJECT_VERSION_NUMBER,
3485               CREATED_BY,
3486               CREATION_DATE,
3487               LAST_UPDATED_BY,
3488               LAST_UPDATE_LOGIN,
3489               LAST_UPDATE_DATE)
3490            SELECT
3491               inf_article_version_id_tbl(i),
3492               inf_article_id_tbl(i),
3493               inf_article_version_number_tbl(i),
3494               g_temp_clob_tbl(i),
3495               inf_provision_yn_tbl(i),
3496               inf_insert_by_reference_tbl(i),
3497               inf_lock_text_tbl(i),
3498               inf_global_yn_tbl(i),
3499               nvl(inf_article_language_tbl(i),l_userenv_lang),
3500               inf_article_status_tbl(i),
3501               NULL,
3502               trunc(inf_start_date_tbl(i)),
3503               trunc(inf_end_date_tbl(i)),
3504               NULL,
3505               inf_display_name_tbl(i),
3506               NULL,
3507               inf_article_description_tbl(i),
3508               inf_date_approved_tbl(i),
3509               inf_default_section_tbl(i),
3510               inf_reference_source_tbl(i),
3511               inf_reference_text_tbl(i),
3512               inf_ver_reference_code_tbl(i),
3513               inf_ver_reference_id1_tbl(i),
3514               inf_ver_reference_id2_tbl(i),
3515               inf_instructions_tbl(i),
3516               NULL,
3517               inf_date_published_tbl(i),
3518               inf_adoption_type_tbl(i),
3519               l_program_id,
3520               l_program_login_id,
3521               l_program_appl_id,
3522               l_request_id,
3523               inf_attribute_category_tbl(i),
3524               inf_attribute1_tbl(i),
3525               inf_attribute2_tbl(i),
3526               inf_attribute3_tbl(i),
3527               inf_attribute4_tbl(i),
3528               inf_attribute5_tbl(i),
3529               inf_attribute6_tbl(i),
3530               inf_attribute7_tbl(i),
3531               inf_attribute8_tbl(i),
3532               inf_attribute9_tbl(i),
3533               inf_attribute10_tbl(i),
3534               inf_attribute11_tbl(i),
3535               inf_attribute12_tbl(i),
3536               inf_attribute13_tbl(i),
3537               inf_attribute14_tbl(i),
3538               inf_attribute15_tbl(i),
3539  --Clause Editing
3540               inf_edited_in_word_tbl(i),
3541               inf_article_text_in_word_tbl(i),
3542               1.0,
3543               l_user_id,
3544               sysdate,
3545               l_user_id,
3546               l_login_id,
3547               sysdate
3548            FROM OKC_ARTICLES_ALL
3549            WHERE inf_action_tbl(i)  IN ( 'N', 'V')
3550              AND inf_process_status_tbl(i) in ('S', 'W')
3551              AND article_id = inf_article_id_tbl(i);
3552 
3553         EXCEPTION
3554            WHEN OTHERS THEN
3555              IF (l_debug = 'Y') THEN
3556                okc_debug.log('500: Leaving Article Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3557              END IF;
3558              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3559           END;
3560 
3561           --
3562           -- End of Insert into OKC_ARTICLE_VERSIONS
3563           --
3564           --
3565 
3566           i := 0;
3567           BEGIN
3568              IF artv_variable_code_tbl.COUNT > 0 Then
3569                 l_context := 'INSERT ASSOCIATION FOR VARIABLES';
3570 
3571                 i := 0;
3572 
3573                 FORALL i in artv_variable_code_tbl.FIRST .. artv_variable_code_tbl.LAST
3574                  INSERT INTO OKC_ARTICLE_VARIABLES
3575                    (
3576                    ARTICLE_VERSION_ID    ,
3577                    VARIABLE_CODE         ,
3578                    OBJECT_VERSION_NUMBER ,
3579                    CREATED_BY            ,
3580                    CREATION_DATE         ,
3581                    LAST_UPDATE_DATE      ,
3582                    LAST_UPDATED_BY       ,
3583                    LAST_UPDATE_LOGIN
3584                    )
3585                  SELECT
3586                    artv_article_version_id_tbl(i),
3587                    artv_variable_code_tbl(i),
3588                    1.0,
3589                    l_user_id,
3590                    sysdate,
3591                    sysdate,
3592                    l_user_id,
3593                    l_login_id
3594                  FROM OKC_ARTICLE_VERSIONS
3595                  WHERE artv_action_tbl(i) = 'N'
3596                    AND article_version_id = artv_article_version_id_tbl(i);
3597 
3598               END IF;
3599 
3600               IF artv_variable_code_tbl.COUNT > 0 Then
3601                 l_context := 'DELETE ASSOCIATION FOR VARIABLES';
3602                 FORALL i in artv_variable_code_tbl.FIRST .. artv_variable_code_tbl.LAST
3603                   DELETE FROM OKC_ARTICLE_VARIABLES
3604                    WHERE VARIABLE_CODE = artv_variable_code_tbl(i)
3605                    AND ARTICLE_VERSION_ID = artv_article_version_id_tbl(i)
3606                    AND artv_action_tbl(i) = 'D';
3607               END IF;
3608         EXCEPTION
3609            WHEN OTHERS THEN
3610              IF (l_debug = 'Y') THEN
3611                okc_debug.log('500: Leaving Article Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3612              END IF;
3613              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3614           END;
3615 
3616          artv_article_version_id_tbl.DELETE;
3617          artv_variable_code_tbl.DELETE;
3618          artv_action_tbl.DELETE;
3619 
3620          --
3621          -- End of OKC_ARTICLES_VARIABLES
3622          --
3623          --
3624 
3625          i := 0;
3626          BEGIN
3627            l_context := 'SET END DATE IN PREV. VER';
3628 
3629          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3630            UPDATE OKC_ARTICLE_VERSIONS
3631             SET END_DATE              = trunc(inf_start_date_tbl(i)-1),
3632               PROGRAM_ID                 = l_program_id,
3633               REQUEST_ID                 = l_request_id,
3634               PROGRAM_LOGIN_ID           = l_program_login_id,
3635               PROGRAM_APPLICATION_ID     = l_program_appl_id,
3636               OBJECT_VERSION_NUMBER      = object_version_number + 1,
3637               LAST_UPDATED_BY            = l_user_id,
3638               LAST_UPDATE_LOGIN          = l_login_id,
3639               LAST_UPDATE_DATE           = SYSDATE
3640            WHERE inf_action_tbl(i)  = 'V'
3641              AND inf_process_status_tbl(i) in ('S','W')
3642              AND inf_earlier_version_id_tbl(i) <> -99
3643              AND article_version_id = inf_earlier_version_id_tbl(i);
3644         EXCEPTION
3645            WHEN OTHERS THEN
3646              IF (l_debug = 'Y') THEN
3647                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3648              END IF;
3649              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3650           END;
3651           --
3652           -- End of Insert into OKC_ARTICLE_VERSIONS
3653           --
3654           --
3655 
3656          i := 0;
3657          BEGIN
3658            l_context := 'UPDATING CLAUSE TYPE FOR ACTION V AND U';
3659 
3660          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3661            UPDATE OKC_ARTICLES_ALL
3662            SET ARTICLE_TYPE               = inf_article_type_tbl(i),
3663                PROGRAM_ID                 = l_program_id,
3664                REQUEST_ID                 = l_request_id,
3665                PROGRAM_LOGIN_ID           = l_program_login_id,
3666                PROGRAM_APPLICATION_ID     = l_program_appl_id,
3667                OBJECT_VERSION_NUMBER      = object_version_number + 1,
3668                LAST_UPDATED_BY            = l_user_id,
3669                LAST_UPDATE_LOGIN          = l_login_id,
3670                LAST_UPDATE_DATE           = SYSDATE
3671            WHERE inf_action_tbl(i)  in ('U', 'V')
3672              AND inf_process_status_tbl(i) in ('S','W')
3673              AND article_id = inf_article_id_tbl(i);
3674         EXCEPTION
3675            WHEN OTHERS THEN
3676              IF (l_debug = 'Y') THEN
3677                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3678              END IF;
3679              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3680           END;
3681          ---
3682 	    ---
3683 	    ---
3684          i := 0;
3685          BEGIN
3686            l_context := 'UPDATING CLAUSE END DATE FOR ACTION D ';
3687 
3688          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3689            UPDATE OKC_ARTICLE_VERSIONS
3690            SET END_DATE                   = trunc(inf_end_date_tbl(i)),
3691                PROGRAM_ID                 = l_program_id,
3692                REQUEST_ID                 = l_request_id,
3693                PROGRAM_LOGIN_ID           = l_program_login_id,
3694                PROGRAM_APPLICATION_ID     = l_program_appl_id,
3695                OBJECT_VERSION_NUMBER      = object_version_number + 1,
3696                LAST_UPDATED_BY            = l_user_id,
3697                LAST_UPDATE_LOGIN          = l_login_id,
3698                LAST_UPDATE_DATE           = SYSDATE
3699            WHERE inf_action_tbl(i)  in ('D')
3700              AND inf_process_status_tbl(i) in ('S','W')
3701              AND article_version_id = inf_article_version_id_tbl(i);
3702         EXCEPTION
3703            WHEN OTHERS THEN
3704              IF (l_debug = 'Y') THEN
3705                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3706              END IF;
3707              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3708           END;
3709 
3710          ---
3711 	    ---
3712 	    ---
3713           i := 0;
3714           BEGIN
3715            l_context := 'UPDATING CLAUSE VERSION';
3716 
3717            FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3718              UPDATE OKC_ARTICLE_VERSIONS VO SET (
3719                 ARTICLE_TEXT,
3720                 PROVISION_YN,
3721                 INSERT_BY_REFERENCE,
3722                 LOCK_TEXT,
3723                 GLOBAL_YN,
3724                 ARTICLE_STATUS,
3725                 START_DATE,
3726                 END_DATE,
3727                 DISPLAY_NAME,
3728                 ARTICLE_DESCRIPTION,
3729                 DEFAULT_SECTION,
3730                 REFERENCE_SOURCE,
3731                 REFERENCE_TEXT,
3732                 ORIG_SYSTEM_REFERENCE_CODE,
3733                 ORIG_SYSTEM_REFERENCE_ID1,
3734                 ORIG_SYSTEM_REFERENCE_ID2,
3735                 ADDITIONAL_INSTRUCTIONS,
3736 			 DATE_PUBLISHED,
3737                 PROGRAM_ID,
3738                 PROGRAM_LOGIN_ID,
3739                 PROGRAM_APPLICATION_ID,
3740                 REQUEST_ID,
3741                 ATTRIBUTE_CATEGORY,
3742                 ATTRIBUTE1,
3743                 ATTRIBUTE2,
3744                 ATTRIBUTE3,
3745                 ATTRIBUTE4,
3746                 ATTRIBUTE5,
3747                 ATTRIBUTE6,
3748                 ATTRIBUTE7,
3749                 ATTRIBUTE8,
3750                 ATTRIBUTE9,
3751                 ATTRIBUTE10,
3752                 ATTRIBUTE11,
3753                 ATTRIBUTE12,
3754                 ATTRIBUTE13,
3755                 ATTRIBUTE14,
3756                 ATTRIBUTE15,
3757  --Clause Editing
3758                 EDITED_IN_WORD,
3759                 ARTICLE_TEXT_IN_WORD,
3760                 OBJECT_VERSION_NUMBER,
3761                 LAST_UPDATED_BY,
3762                 LAST_UPDATE_LOGIN,
3763                 LAST_UPDATE_DATE) = (
3764              SELECT
3765                 g_temp_clob_tbl(i),
3766                 inf_provision_yn_tbl(i),
3767                 inf_insert_by_reference_tbl(i),
3768                 inf_lock_text_tbl(i),
3769                 inf_global_yn_tbl(i),
3770                 inf_article_status_tbl(i),
3771                 trunc(inf_start_date_tbl(i)),
3772                 trunc(inf_end_date_tbl(i)),
3773                 inf_display_name_tbl(i),
3774                 inf_article_description_tbl(i),
3775                 inf_default_section_tbl(i),
3776                 inf_reference_source_tbl(i),
3777                 inf_reference_text_tbl(i),
3778                 inf_ver_reference_code_tbl(i),
3779                 inf_ver_reference_id1_tbl(i),
3780                 inf_ver_reference_id2_tbl(i),
3781                 inf_instructions_tbl(i),
3782                 inf_date_published_tbl(i),
3783                 l_program_id,
3784                 l_program_login_id,
3785                 l_program_appl_id,
3786                 l_request_id,
3787                 inf_attribute_category_tbl(i),
3788                 inf_attribute1_tbl(i),
3789                 inf_attribute2_tbl(i),
3790                 inf_attribute3_tbl(i),
3791                 inf_attribute4_tbl(i),
3792                 inf_attribute5_tbl(i),
3793                 inf_attribute6_tbl(i),
3794                 inf_attribute7_tbl(i),
3795                 inf_attribute8_tbl(i),
3796                 inf_attribute9_tbl(i),
3797                 inf_attribute10_tbl(i),
3798                 inf_attribute11_tbl(i),
3799                 inf_attribute12_tbl(i),
3800                 inf_attribute13_tbl(i),
3801                 inf_attribute14_tbl(i),
3802                 inf_attribute15_tbl(i),
3803  --Clause Editing
3804                 inf_edited_in_word_tbl(i),
3805                 inf_article_text_in_word_tbl(i),
3806                 vi.object_version_number+1,
3807                 l_user_id,
3808                 l_login_id,
3809                 sysdate
3810              FROM OKC_ART_INTERFACE_ALL VI
3811              WHERE inf_action_tbl(i)  = 'U'
3812              AND nvl(process_status, 'E') in ('E')
3813              AND inf_process_status_tbl(i) in ('S', 'W')
3814              AND VI.interface_id = inf_interface_id_tbl(i))
3815           WHERE  vo.article_version_id = inf_article_version_id_tbl(i)
3816             AND  inf_process_status_tbl(i) in ('S','W')
3817             AND  inf_action_tbl(i) = 'U';
3818 
3819         EXCEPTION
3820            WHEN OTHERS THEN
3821              IF (l_debug = 'Y') THEN
3822                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3823              END IF;
3824              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3825         END;
3826           --
3827           -- End of Update OKC_ARTICLE_VERSIONS
3828           --
3829           --
3830 
3831 
3832 
3833           --
3834           -- Start Auto Adoption
3835           --
3836           --
3837           -- Auto adopt all approved global articles in New/New Version case.
3838 
3839           IF G_CURRENT_ORG_ID = G_GLOBAL_ORG_ID THEN
3840             BEGIN
3841               i := 0;
3842               l_context := 'AUTO ADOPTION';
3843               For i IN inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST LOOP
3844                 IF   nvl(inf_process_status_tbl(i),'E') <> 'E'
3845                  and nvl(inf_article_status_tbl(i), '*') = 'APPROVED'
3846                  and inf_global_yn_tbl(i) = 'Y' THEN
3847                      OKC_ADOPTIONS_GRP.AUTO_ADOPT_ARTICLES
3848                      (
3849                         p_api_version                  => l_api_version ,
3850                         p_init_msg_list                => l_init_msg_list ,
3851                         x_return_status                => api_return_status ,
3852                         x_msg_count                    => x_msg_count,
3853                         x_msg_data                     => x_msg_data,
3854                         p_relationship_yn              => 'N',
3855                         p_adoption_yn                  => 'Y',
3856                         p_fetchsize                    => 100,
3857                         p_global_article_id            => inf_article_id_tbl(i),
3858                         p_global_article_version_id    => inf_article_version_id_tbl(i)
3859                      );
3860 
3861                     IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
3862                       -- in order to mark interface_id, we build error_array in the loop
3863                       build_error_array(
3864                         p_msg_data     => x_msg_data,
3865                         p_context      => l_context,
3866                         p_batch_process_id => l_batch_process_id,
3867                         p_interface_id  => inf_interface_id_tbl(i),
3868                         p_article_title => inf_article_title_tbl(i),
3869                         p_error_type    => G_RET_STS_ERROR,
3870 				    p_entity        => 'CLAUSE'
3871                       );
3872                       inf_process_status_tbl(i):= G_RET_STS_ERROR;
3873                       -- Unexpected Error occurred rollback
3874                       RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3875                     ELSIF (api_return_status = G_RET_STS_ERROR) THEN
3876                       -- Set return status as 'E' and move on to next record
3877                       -- l_return_status := G_RET_STS_ERROR;
3878                       build_error_array(
3879                         p_msg_data     => x_msg_data,
3880                         p_context      => l_context,
3881                         p_batch_process_id => l_batch_process_id,
3882                         p_interface_id  => inf_interface_id_tbl(i),
3883                         p_article_title => inf_article_title_tbl(i),
3884                         p_error_type    => G_RET_STS_ERROR,
3885 				    p_entity        => 'CLAUSE'
3886                       );
3887                       inf_process_status_tbl(i):= G_RET_STS_ERROR;
3888                       RAISE FND_API.G_EXC_ERROR;
3889                     END IF;
3890                 END IF;
3891               END LOOP;
3892 
3893 
3894           EXCEPTION
3895              WHEN OTHERS THEN
3896                IF (l_debug = 'Y') THEN
3897                  okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3898                END IF;
3899                RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3900             END;
3901        END IF;  ---- If CURRENT_ORG_ID = GLOBAL_ORG_ID
3902 
3903       --
3904       -- End of Auto Adoption
3905       --
3906       --
3907 
3908       -- Exception for bulk DML block
3909       EXCEPTION
3910         WHEN OTHERS THEN
3911              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
3912               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3913                                   p_msg_name     => G_UNEXPECTED_ERROR,
3914                                   p_token1       => G_SQLCODE_TOKEN,
3915                                   p_token1_value => sqlcode,
3916                                   p_token2       => G_SQLERRM_TOKEN,
3917                                   p_token2_value => sqlerrm);
3918               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
3919                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
3920                                   p_token1       => 'CONTEXT',
3921                                   p_token1_value => l_context);
3922 
3923               build_error_array(
3924                                  p_msg_data     => null,
3925                                  p_context      => l_context,
3926                                  p_batch_process_id => l_batch_process_id,
3927                                  p_interface_id  => -99,
3928                                  p_article_title => NULL,
3929                                  p_error_type    => G_RET_STS_ERROR,
3930 						   p_entity        => 'CLAUSE'
3931               );
3932               l_return_status := G_RET_STS_UNEXP_ERROR;
3933               x_return_status := G_RET_STS_UNEXP_ERROR;
3934 
3935               --##count:rollback the count
3936               l_part_rows_failed := l_part_rows_processed;
3937               l_part_rows_warned := 0;
3938 
3939               ROLLBACK TO SAVEPOINT bulkdml;
3940               exit; -- exit outermost loop
3941       END;
3942 
3943     END IF; --- validate_only = 'N'
3944 
3945     ------------------------------------------------------------------------
3946     --------------------- End of Do_DML for Article Library   ---------------
3947     -------------------------------------------------------------------------
3948 
3949     ------------------------------------------------------------------------
3950     --------------- Start of Do_DML for import related tables   ------------
3951     -- Update interface table
3952     -- Insert Errors into Error table
3953     -------------------------------------------------------------------------
3954     -- Update Interface Table
3955     i:=0;
3956     BEGIN
3957      l_context := 'UPDATING CLAUSE INTERFACE TABLE';
3958      FORALL i in inf_interface_id_tbl.FIRST..inf_interface_id_tbl.LAST
3959        UPDATE OKC_ART_INTERFACE_ALL
3960        SET
3961            -- We don't want to update process_status to 'S' or 'W' in validation_mode
3962            -- because it is not going to be picked up in next run if we do so
3963            PROCESS_STATUS = decode(p_validate_only||inf_process_status_tbl(i)||l_bulk_failed,
3964                                                'NEN','E',
3965                                                'NSN','S',
3966                                                'NWN','W',
3967                                                'NEY','E',
3968                                                'NSY',NULL,
3969                                                'NWY',NULL,
3970                                                'YEY','E',
3971                                                'YEN','E',
3972                                                'NFY','E',
3973                                                'YFY','E',
3974                                                'NFN','E',
3975                                                'YFN','E',NULL),
3976            ARTICLE_VERSION_NUMBER     = inf_article_version_number_tbl(i),
3977            PROGRAM_ID                 = l_program_id,
3978            REQUEST_ID                 = l_request_id,
3979            PROGRAM_LOGIN_ID           = l_program_login_id,
3980            PROGRAM_APPLICATION_ID     = l_program_appl_id,
3981            OBJECT_VERSION_NUMBER      = inf_object_version_number_tbl(i) + 1,
3982            LAST_UPDATED_BY            = l_user_id,
3983            LAST_UPDATE_LOGIN          = l_login_id,
3984            LAST_UPDATE_DATE           = SYSDATE
3985          WHERE
3986            interface_id = inf_interface_id_tbl(i);
3987     EXCEPTION
3988            WHEN OTHERS THEN
3989              IF (l_debug = 'Y') THEN
3990                okc_debug.log('500: Leaving Article_Import because of EXCEPTION: '||sqlerrm, 2);
3991              END IF;
3992              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3993                         p_msg_name     => G_UNEXPECTED_ERROR,
3994                         p_token1       => G_SQLCODE_TOKEN,
3995                         p_token1_value => sqlcode,
3996                         p_token2       => G_SQLERRM_TOKEN,
3997                         p_token2_value => sqlerrm);
3998              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
3999                         p_msg_name     => 'OKC_ART_INT_UPDATE_FAILED');
4000              build_error_array(
4001                        p_msg_data     => null,
4002                        p_context      => l_context,
4003                        p_batch_process_id => l_batch_process_id,
4004                        p_interface_id  => -99,
4005                        p_article_title => NULL,
4006                        p_error_type    => G_RET_STS_ERROR,
4007 				   p_entity        => 'CLAUSE'
4008              );
4009              l_return_status := G_RET_STS_UNEXP_ERROR ;
4010              x_return_status := G_RET_STS_UNEXP_ERROR ;
4011              --##count:rollback the count
4012              l_part_rows_failed := l_part_rows_processed;
4013              l_part_rows_warned := 0;
4014 
4015              --RAISE FND_API.G_EXC_ERROR ;
4016     END;
4017     --
4018     -- End of Update OKC_ART_INTERFACE_ALL
4019     --
4020     --
4021     --Insert Errors into Error table for this fetch
4022     insert_error_array(
4023      x_return_status => api_return_status,
4024      x_msg_count     => x_msg_count,
4025      x_msg_data      => x_msg_data
4026     );
4027 
4028 
4029     IF (api_return_status = l_insert_errors_error) THEN
4030       NULL;
4031      -- Ignore
4032      -- RAISE l_insert_errors_exception;
4033     END IF;
4034     ------------------------------------------------------------------------
4035     --------------- End of Do_DML for import related tables   ------------
4036     -------------------------------------------------------------------------
4037     commit;
4038     -- Now delete cache for next bulk fetch
4039 
4040 
4041     inf_interface_id_tbl.DELETE;
4042     inf_batch_number_tbl.DELETE;
4043     inf_object_version_number_tbl.DELETE;
4044     inf_article_title_tbl.DELETE;
4045     inf_org_id_tbl.DELETE;
4046     inf_process_status_tbl.DELETE;
4047     inf_action_tbl.DELETE;
4048     inf_article_number_tbl.DELETE;
4049     inf_article_intent_tbl.DELETE;
4050     inf_article_language_tbl.DELETE;
4051     inf_article_type_tbl.DELETE;
4052     inf_article_id_tbl.DELETE;
4053     inf_art_reference_code_tbl.DELETE;
4054     inf_art_reference_id1_tbl.DELETE;
4055     inf_art_reference_id2_tbl.DELETE;
4056     inf_article_version_number_tbl.DELETE;
4057     inf_article_text_tbl.DELETE;
4058     inf_provision_yn_tbl.DELETE;
4059     inf_insert_by_reference_tbl.DELETE;
4060     inf_lock_text_tbl.DELETE;
4061     inf_global_yn_tbl.DELETE;
4062     inf_article_status_tbl.DELETE;
4063     inf_start_date_tbl.DELETE;
4064     inf_end_date_tbl.DELETE;
4065     inf_display_name_tbl.DELETE;
4066     --inf_translated_yn_tbl.DELETE;
4067     inf_article_description_tbl.DELETE;
4068     inf_date_approved_tbl.DELETE;
4069     inf_default_section_tbl.DELETE;
4070     inf_reference_source_tbl.DELETE;
4071     inf_reference_text_tbl.DELETE;
4072     inf_ver_reference_code_tbl.DELETE;
4073     inf_ver_reference_id1_tbl.DELETE;
4074     inf_ver_reference_id2_tbl.DELETE;
4075     inf_instructions_tbl.DELETE;
4076     inf_date_published_tbl.DELETE;
4077     inf_attribute_category_tbl.DELETE;
4078     inf_attribute1_tbl.DELETE;
4079     inf_attribute2_tbl.DELETE;
4080     inf_attribute3_tbl.DELETE;
4081     inf_attribute4_tbl.DELETE;
4082     inf_attribute5_tbl.DELETE;
4083     inf_attribute6_tbl.DELETE;
4084     inf_attribute7_tbl.DELETE;
4085     inf_attribute8_tbl.DELETE;
4086     inf_attribute9_tbl.DELETE;
4087     inf_attribute10_tbl.DELETE;
4088     inf_attribute11_tbl.DELETE;
4089     inf_attribute12_tbl.DELETE;
4090     inf_attribute13_tbl.DELETE;
4091     inf_attribute14_tbl.DELETE;
4092     inf_attribute15_tbl.DELETE;
4093  --Clause Editing
4094     inf_edited_in_word_tbl.DELETE;
4095     inf_article_text_in_word_tbl.DELETE;
4096     inf_article_version_id_tbl.DELETE;
4097     inf_earlier_version_id_tbl.DELETE;
4098     inf_adoption_type_tbl.DELETE;
4099     err_batch_process_id_tbl.DELETE;
4100     err_article_title_tbl.DELETE;
4101     err_interface_id_tbl.DELETE;
4102     err_error_number_tbl.DELETE;
4103     err_object_version_number_tbl.DELETE;
4104     err_error_type_tbl.DELETE;
4105     err_entity_tbl.DELETE;
4106     err_error_description_tbl.DELETE;
4107 
4108    EXIT WHEN l_interface_csr%NOTFOUND;
4109 END LOOP;
4110 
4111 
4112 -----------------------------------------------------------------------
4113 -- End of outermost loop for bulk fetch
4114 -----------------------------------------------------------------------
4115 
4116 IF l_interface_csr%ISOPEN THEN
4117 CLOSE l_interface_csr;
4118 END IF;
4119 
4120 --
4121 -- Freeing temporary clobs
4122 --
4123 --
4124 
4125 j := g_temp_clob_tbl.FIRST;
4126 LOOP
4127  DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4128 EXIT WHEN (j = g_temp_clob_tbl.LAST);
4129 j := g_temp_clob_tbl.NEXT(j);
4130 END LOOP;
4131 g_temp_clob_tbl.DELETE;
4132 
4133 --
4134 -- Freeing temporary clobs
4135 --
4136 --
4137 
4138 --##count:add up last processed counts
4139 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
4140 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
4141 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
4142 
4143 BEGIN
4144 --If there are successful records and validate mode is off
4145 
4146 IF     p_validate_only = 'N'
4147    AND (l_tot_rows_processed - l_tot_rows_failed) > 0 THEN
4148    okc_artwf_pvt.start_wf_after_import( p_req_id => l_request_id,
4149                                         p_batch_number => p_batch_number,
4150                                         p_org_id => G_CURRENT_ORG_ID);
4151 END IF;
4152 
4153 EXCEPTION
4154 
4155 WHEN OTHERS THEN
4156       IF (l_debug = 'Y') THEN
4157         okc_debug.log('500: Leaving Articles_Import because of EXCEPTION in workflow: '||sqlerrm, 2);
4158       END IF;
4159       Okc_API.Set_Message(p_app_name     => G_APP_NAME,
4160                           p_msg_name     => 'OKC_ART_IMP_WF_FAILED');
4161 
4162       build_error_array(
4163                        p_msg_data     => null,
4164                        p_context      => l_context,
4165                        p_batch_process_id => l_batch_process_id,
4166                        p_interface_id  => -99,
4167                        p_article_title => NULL,
4168                        p_error_type    => G_RET_STS_ERROR,
4169 				   p_entity        => 'CLAUSE'
4170       );
4171 
4172       l_return_status := G_RET_STS_UNEXP_ERROR ;
4173       x_return_status := G_RET_STS_UNEXP_ERROR ;
4174       --RAISE FND_API.G_EXC_ERROR ;
4175 END;
4176 /*********
4177 --Update Batch Process Table as a last step
4178 UPDATE OKC_ART_INT_BATPROCS_ALL
4179 SET
4180   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
4181   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
4182   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
4183   END_DATE                   = SYSDATE,
4184   PROGRAM_ID                 = l_program_id,
4185   REQUEST_ID                 = l_request_id,
4186   PROGRAM_LOGIN_ID           = l_program_login_id,
4187   PROGRAM_APPLICATION_ID     = l_program_appl_id,
4188   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
4189   LAST_UPDATED_BY            = l_user_id,
4190   LAST_UPDATE_LOGIN          = l_login_id,
4191   LAST_UPDATE_DATE           = SYSDATE
4192 WHERE
4193   BATCH_PROCESS_ID  = l_batch_process_id
4194   AND ENTITY = 'Clause';
4195 *****************/
4196 p_rows_processed := l_tot_rows_processed;
4197 p_rows_failed := l_tot_rows_failed;
4198 p_rows_warned := l_tot_rows_warned;
4199 IF err_error_number_tbl.COUNT > 0 THEN
4200  insert_error_array(
4201    x_return_status => api_return_status,
4202    x_msg_count     => x_msg_count,
4203    x_msg_data      => x_msg_data
4204  );
4205 END IF;
4206 
4207 -- Print statistic of this run in the log
4208 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
4209 --wrap_up(p_validate_only,p_batch_number,l_tot_rows_processed,l_tot_rows_failed,l_tot_rows_warned,l_batch_process_id,'CLAUSE');
4210 commit; -- Final commit for status update
4211 
4212 IF (l_debug = 'Y') THEN
4213  okc_debug.log('200: Leaving articles import', 2);
4214 END IF;
4215 --x_return_status := l_return_status; this may cause to erase error x_return_status
4216 
4217 EXCEPTION
4218 
4219   WHEN FND_API.G_EXC_ERROR THEN
4220       IF (l_debug = 'Y') THEN
4221          okc_debug.log('300: Leaving Articles_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
4222       END IF;
4223       --Insert Errors into Error table if there is any
4224       insert_error_array(
4225        x_return_status => x_return_status,
4226        x_msg_count     => x_msg_count,
4227        x_msg_data      => x_msg_data
4228       );
4229       commit;
4230       x_return_status := G_RET_STS_ERROR ;
4231 
4232       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4233       IF (l_debug = 'Y') THEN
4234          okc_debug.log('400: Leaving Articles_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
4235       END IF;
4236 
4237       --Insert Errors into Error table if there is any
4238 
4239       insert_error_array(
4240        x_return_status => x_return_status,
4241        x_msg_count     => x_msg_count,
4242        x_msg_data      => x_msg_data
4243       );
4244       commit;
4245       --
4246       -- Freeing temporary clobs
4247       --
4248       --
4249 
4250       IF g_temp_clob_tbl.COUNT > 0 THEN
4251         j := g_temp_clob_tbl.FIRST;
4252         LOOP
4253          DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4254         EXIT WHEN (j = g_temp_clob_tbl.LAST);
4255         j := g_temp_clob_tbl.NEXT(j);
4256         END LOOP;
4257         g_temp_clob_tbl.DELETE;
4258       END IF;
4259       --
4260       -- Freeing temporary clobs
4261       --
4262       --
4263 
4264       IF l_interface_csr%ISOPEN THEN
4265          CLOSE l_interface_csr;
4266       END IF;
4267       IF get_max_article_version_csr%ISOPEN THEN
4268          CLOSE get_max_article_version_csr;
4269       END IF;
4270       IF get_article_info_csr%ISOPEN THEN
4271          CLOSE get_article_info_csr;
4272       END IF;
4273       IF validate_article_type_csr%ISOPEN THEN
4274          CLOSE validate_article_type_csr;
4275       END IF;
4276 
4277       x_return_status := G_RET_STS_UNEXP_ERROR ;
4278       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
4279         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
4280       END IF;
4281       get_print_msgs_stack(p_msg_data => x_msg_data);
4282 
4283   WHEN l_insert_errors_exception THEN
4284       --
4285       -- In this exception handling, we don't insert error array again
4286       -- because error happend in the module
4287       --
4288       IF (l_debug = 'Y') THEN
4289         okc_debug.log('500: Leaving Articles_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
4290       END IF;
4291       --
4292       -- Freeing temporary clobs
4293       --
4294       --
4295 
4296       IF g_temp_clob_tbl.COUNT > 0 THEN
4297         j := g_temp_clob_tbl.FIRST;
4298         LOOP
4299          DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4300         EXIT WHEN (j = g_temp_clob_tbl.LAST);
4301         j := g_temp_clob_tbl.NEXT(j);
4302         END LOOP;
4303         g_temp_clob_tbl.DELETE;
4304       END IF;
4305 
4306       --
4307       -- Freeing temporary clobs
4308       --
4309       --
4310 
4311       IF l_interface_csr%ISOPEN THEN
4312          CLOSE l_interface_csr;
4313       END IF;
4314 
4315       IF get_max_article_version_csr%ISOPEN THEN
4316          CLOSE get_max_article_version_csr;
4317       END IF;
4318 
4319       IF get_article_info_csr%ISOPEN THEN
4320          CLOSE get_article_info_csr;
4321       END IF;
4322 
4323       IF validate_article_type_csr%ISOPEN THEN
4324          CLOSE validate_article_type_csr;
4325       END IF;
4326 
4327 
4328       --x_return_status := G_RET_STS_UNEXP_ERROR ;
4329       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
4330         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
4331       END IF;
4332 
4333       get_print_msgs_stack(p_msg_data => x_msg_data);
4334       commit;
4335 
4336   WHEN OTHERS THEN
4337       IF (l_debug = 'Y') THEN
4338         okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||sqlerrm, 2);
4339       END IF;
4340       --Insert Errors into Error table if there is any
4341       insert_error_array(
4342        x_return_status => x_return_status,
4343        x_msg_count     => x_msg_count,
4344        x_msg_data      => x_msg_data
4345       );
4346       commit;
4347       --
4348       -- Freeing temporary clobs
4349       --
4350       --
4351       IF g_temp_clob_tbl.COUNT > 0 THEN
4352         j := g_temp_clob_tbl.FIRST;
4353         LOOP
4354          DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4355         EXIT WHEN (j = g_temp_clob_tbl.LAST);
4356         j := g_temp_clob_tbl.NEXT(j);
4357         END LOOP;
4358         g_temp_clob_tbl.DELETE;
4359       END IF;
4360       --
4361       -- Freeing temporary clobs
4362       --
4363       --
4364 
4365       IF l_interface_csr%ISOPEN THEN
4366          CLOSE l_interface_csr;
4367       END IF;
4368       IF get_max_article_version_csr%ISOPEN THEN
4369          CLOSE get_max_article_version_csr;
4370       END IF;
4371       IF get_article_info_csr%ISOPEN THEN
4372          CLOSE get_article_info_csr;
4373       END IF;
4374       IF validate_article_type_csr%ISOPEN THEN
4375          CLOSE validate_article_type_csr;
4376       END IF;
4377 
4378       x_return_status := G_RET_STS_UNEXP_ERROR ;
4379       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
4380         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
4381       END IF;
4382       get_print_msgs_stack(p_msg_data => x_msg_data);
4383 
4384 END import_articles;
4385 
4386 PROCEDURE import_variables(
4387     x_return_status                OUT NOCOPY VARCHAR2,
4388     x_msg_count                    OUT NOCOPY NUMBER,
4389     x_msg_data                     OUT NOCOPY VARCHAR2,
4390 
4391     p_batch_procs_id               IN NUMBER,
4392     p_batch_number                 IN VARCHAR2,
4393     p_validate_only                IN VARCHAR2 := 'Y',
4394     p_fetchsize                    IN NUMBER := 100
4395    ) IS
4396     l_api_version                 CONSTANT NUMBER := 1;
4397     l_api_name                    CONSTANT VARCHAR2(30) := 'import_variables';
4398     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
4399     l_row_notfound                BOOLEAN := FALSE;
4400     l_user_id                     NUMBER;
4401     l_login_id                    NUMBER;
4402     l_insert_errors_exception     EXCEPTION;
4403     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
4404 
4405     CURSOR l_var_interface_csr ( cp_batch_number IN VARCHAR2) IS
4406       SELECT
4407            VARINT.INTERFACE_ID     ,
4408            VARINT.BATCH_NUMBER             ,
4409            VARINT.OBJECT_VERSION_NUMBER  ,
4410            RTRIM(VARINT.VARIABLE_CODE) VARIABLE_CODE    ,
4411            VARINT.VARIABLE_NAME    ,
4412            VARINT.PROCESS_STATUS           ,
4413            VARINT.ACTION                  ,
4414            VARINT.LANGUAGE  ,
4415 		 VARINT.DESCRIPTION,
4416 		 VARINT.VARIABLE_TYPE,
4417 		 VARINT.VARIABLE_INTENT,
4418 		 VARINT.CONTRACT_EXPERT_YN,
4419 		 VARINT.XPRT_VALUE_SET_NAME,
4420 		 VARINT.DISABLED_YN,
4421 		 VARINT.EXTERNAL_YN,
4422 		 VARINT.VARIABLE_DATATYPE,
4423 		 VARINT.APPLICATION_ID,
4424 		 VARINT.VALUE_SET_NAME,
4425 		 VARINT.VARIABLE_DEFAULT_VALUE,
4426 		 VARINT.ORIG_SYSTEM_REFERENCE_CODE,
4427 		 VARINT.ORIG_SYSTEM_REFERENCE_ID1,
4428 		 VARINT.ORIG_SYSTEM_REFERENCE_ID2,
4429 		 VARINT.DATE_PUBLISHED,
4430            VARINT.ATTRIBUTE_CATEGORY,
4431            VARINT.ATTRIBUTE1  ,
4432            VARINT.ATTRIBUTE2  ,
4433            VARINT.ATTRIBUTE3  ,
4434            VARINT.ATTRIBUTE4  ,
4435            VARINT.ATTRIBUTE5  ,
4436            VARINT.ATTRIBUTE6  ,
4437            VARINT.ATTRIBUTE7  ,
4438            VARINT.ATTRIBUTE8  ,
4439            VARINT.ATTRIBUTE9  ,
4440            VARINT.ATTRIBUTE10 ,
4441            VARINT.ATTRIBUTE11 ,
4442            VARINT.ATTRIBUTE12 ,
4443            VARINT.ATTRIBUTE13 ,
4444            VARINT.ATTRIBUTE14 ,
4445            VARINT.ATTRIBUTE15 ,
4446 		 VAR.VARIABLE_CODE EXISTING_CODE,
4447 		 VAR.DATE_PUBLISHED EXISTING_DPUBLISHED,
4448 		 VARTL.LANGUAGE EXISTING_LANGUAGE
4449       FROM OKC_VARIABLES_INTERFACE VARINT, OKC_BUS_VARIABLES_B VAR,
4450 	      OKC_BUS_VARIABLES_TL VARTL
4451       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
4452          AND BATCH_NUMBER = cp_batch_number
4453          AND RTRIM(VARINT.VARIABLE_CODE) = VAR.VARIABLE_CODE(+)
4454          AND RTRIM(VARINT.VARIABLE_CODE) = VARTL.VARIABLE_CODE(+)
4455          AND VARINT.LANGUAGE = VARTL.LANGUAGE(+)
4456       ORDER BY RTRIM(VARINT.VARIABLE_CODE) ASC;
4457 
4458 -- Cursor to check that variable code is unique in the system
4459 
4460       CURSOR l_code_exist_csr (cp_var_code IN VARCHAR2) IS
4461 	 SELECT '1' FROM OKC_BUS_VARIABLES_B
4462 	 WHERE variable_code = cp_var_code;
4463 
4464 -- Cursor to check that variable name and intent is unique in the system
4465 
4466     CURSOR get_var_unq_csr    (cp_var_name IN VARCHAR2,
4467                                 cp_var_intent IN VARCHAR2) IS
4468      SELECT
4469            '1'
4470      FROM OKC_BUS_VARIABLES_B B,OKC_BUS_VARIABLES_TL TL
4471      WHERE B.VARIABLE_CODE = TL.VARIABLE_CODE AND
4472 	      B.VARIABLE_INTENT = cp_var_intent AND
4473 		 TL.VARIABLE_NAME = cp_var_name;
4474 
4475 -- Cursor to check that variable code is not duplicate in the system
4476 
4477     CURSOR get_var_info_csr    (cp_var_code IN VARCHAR2 ) IS
4478     SELECT
4479            '1'
4480      FROM OKC_BUS_VARIABLES_B B,OKC_BUS_VARIABLES_TL TL
4481      WHERE B.VARIABLE_CODE = TL.VARIABLE_CODE AND
4482 	      B.VARIABLE_CODE = cp_var_code;
4483 
4484 -- Cursor to derive value set id from value set name
4485 
4486     CURSOR get_valset_id_csr    (cp_valset_name IN VARCHAR2 ) IS
4487     SELECT
4488            FLX.FLEX_VALUE_SET_ID ,
4489 		 DECODE(FORMAT_TYPE,'C','V','X','D',FORMAT_TYPE) FORMAT_TYPE
4490      FROM  FND_FLEX_VALUE_SETS FLX
4491      WHERE FLX.FLEX_VALUE_SET_NAME = cp_valset_name;
4492 
4493 
4494 -- Cursor to check valueset exists in the valueset interface Table
4495     CURSOR valset_exists_csr (cp_valset_name IN VARCHAR2,
4496                               cp_batch_number IN VARCHAR2) IS
4497     SELECT '1'
4498     FROM OKC_VALUESETS_INTERFACE
4499     WHERE flex_value_set_name = cp_valset_name
4500     AND   batch_number = cp_batch_number
4501     AND   nvl(process_status,'X') not in ('E');
4502 
4503 -- Cursor to verify language is installed
4504     CURSOR check_lang_csr(lang_code IN VARCHAR2) IS
4505     SELECT '1'
4506     FROM FND_LANGUAGES
4507     WHERE INSTALLED_FLAG IN ('I','B')
4508     AND   language_code = lang_code;
4509 
4510 -- Variable Interface Rows
4511 
4512     TYPE l_vinf_interface_id             IS TABLE OF OKC_VARIABLES_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
4513     TYPE l_vinf_batch_number             IS TABLE OF OKC_VARIABLES_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
4514     TYPE l_vinf_object_version_number    IS TABLE OF OKC_VARIABLES_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
4515     TYPE l_vinf_variable_code            IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_CODE%TYPE INDEX BY BINARY_INTEGER ;
4516     TYPE l_vinf_variable_name            IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_NAME%TYPE INDEX BY BINARY_INTEGER ;
4517     TYPE l_vinf_process_status           IS TABLE OF OKC_VARIABLES_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
4518     TYPE l_vinf_action                   IS TABLE OF OKC_VARIABLES_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
4519     TYPE l_vinf_language                 IS TABLE OF OKC_VARIABLES_INTERFACE.LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
4520     TYPE l_vinf_description              IS TABLE OF OKC_VARIABLES_INTERFACE.DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
4521     TYPE l_vinf_variable_type            IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_TYPE%TYPE INDEX BY BINARY_INTEGER ;
4522     TYPE l_vinf_variable_intent          IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
4523     TYPE l_vinf_contract_expert_yn       IS TABLE OF OKC_VARIABLES_INTERFACE.CONTRACT_EXPERT_YN%TYPE INDEX BY BINARY_INTEGER ;
4524     TYPE l_vinf_xprt_value_set_name      IS TABLE OF OKC_VARIABLES_INTERFACE.XPRT_VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
4525     TYPE l_vinf_disabled_yn              IS TABLE OF OKC_VARIABLES_INTERFACE.DISABLED_YN%TYPE INDEX BY BINARY_INTEGER ;
4526     TYPE l_vinf_external_yn              IS TABLE OF OKC_VARIABLES_INTERFACE.EXTERNAL_YN%TYPE INDEX BY BINARY_INTEGER ;
4527     TYPE l_vinf_variable_datatype        IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_DATATYPE%TYPE INDEX BY BINARY_INTEGER ;
4528     TYPE l_vinf_application_id           IS TABLE OF OKC_VARIABLES_INTERFACE.APPLICATION_ID%TYPE INDEX BY BINARY_INTEGER ;
4529     TYPE l_vinf_value_set_name           IS TABLE OF OKC_VARIABLES_INTERFACE.VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
4530     TYPE l_vinf_var_default_value        IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_DEFAULT_VALUE%TYPE INDEX BY BINARY_INTEGER ;
4531     TYPE l_vinf_system_reference_code    IS TABLE OF OKC_VARIABLES_INTERFACE.ORIG_SYSTEM_REFERENCE_CODE%TYPE INDEX BY BINARY_INTEGER ;
4532     TYPE l_vinf_system_reference_id1     IS TABLE OF OKC_VARIABLES_INTERFACE.ORIG_SYSTEM_REFERENCE_ID1%TYPE INDEX BY BINARY_INTEGER ;
4533     TYPE l_vinf_system_reference_id2     IS TABLE OF OKC_VARIABLES_INTERFACE.ORIG_SYSTEM_REFERENCE_ID2%TYPE INDEX BY BINARY_INTEGER ;
4534     TYPE l_vinf_date_published           IS TABLE OF OKC_VARIABLES_INTERFACE.DATE_PUBLISHED%TYPE INDEX BY BINARY_INTEGER ;
4535     TYPE l_vinf_attribute_category       IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE_CATEGORY%TYPE INDEX BY BINARY_INTEGER ;
4536     TYPE l_vinf_attribute1               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE1%TYPE INDEX BY BINARY_INTEGER ;
4537     TYPE l_vinf_attribute2               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE2%TYPE INDEX BY BINARY_INTEGER ;
4538     TYPE l_vinf_attribute3               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE3%TYPE INDEX BY BINARY_INTEGER ;
4539     TYPE l_vinf_attribute4               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE4%TYPE INDEX BY BINARY_INTEGER ;
4540     TYPE l_vinf_attribute5               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE5%TYPE INDEX BY BINARY_INTEGER ;
4541     TYPE l_vinf_attribute6               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE6%TYPE INDEX BY BINARY_INTEGER ;
4542     TYPE l_vinf_attribute7               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE7%TYPE INDEX BY BINARY_INTEGER ;
4543     TYPE l_vinf_attribute8               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE8%TYPE INDEX BY BINARY_INTEGER ;
4544     TYPE l_vinf_attribute9               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE9%TYPE INDEX BY BINARY_INTEGER ;
4545     TYPE l_vinf_attribute10              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE10%TYPE INDEX BY BINARY_INTEGER ;
4546     TYPE l_vinf_attribute11              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE11%TYPE INDEX BY BINARY_INTEGER ;
4547     TYPE l_vinf_attribute12              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE12%TYPE INDEX BY BINARY_INTEGER ;
4548     TYPE l_vinf_attribute13              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE13%TYPE INDEX BY BINARY_INTEGER ;
4549     TYPE l_vinf_attribute14              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE14%TYPE INDEX BY BINARY_INTEGER ;
4550     TYPE l_vinf_attribute15              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE15%TYPE INDEX BY BINARY_INTEGER ;
4551 
4552 
4553     TYPE l_vinf_existing_code            IS TABLE OF OKC_BUS_VARIABLES_B.VARIABLE_CODE%TYPE INDEX BY BINARY_INTEGER ;
4554     TYPE l_vinf_existing_dpublished      IS TABLE OF OKC_BUS_VARIABLES_B.DATE_PUBLISHED%TYPE INDEX BY BINARY_INTEGER ;
4555     TYPE l_vinf_value_set_id             IS TABLE OF OKC_BUS_VARIABLES_B.VALUE_SET_ID%TYPE INDEX BY BINARY_INTEGER ;
4556     TYPE l_vinf_existing_language        IS TABLE OF OKC_BUS_VARIABLES_TL.LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
4557 
4558 
4559    l_return_status                      VARCHAR2(1);
4560    l_error_index                        NUMBER          := 1;
4561    l_batch_process_id                   NUMBER          := 1;
4562    l_context                            VARCHAR2(50)    := NULL;
4563    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
4564    l_tot_rows_processed                 NUMBER          := 0;
4565    l_tot_rows_failed                    NUMBER          := 0;
4566    l_tot_rows_warned                    NUMBER          := 0;
4567    l_part_rows_processed                NUMBER          := 0;
4568    l_part_rows_failed                   NUMBER          := 0;
4569    l_part_rows_warned                   NUMBER          := 0;
4570    l_bulk_failed                        VARCHAR2(1)     := 'Y';
4571 
4572 -- Variables for variables interface
4573    vinf_interface_id_tbl                 l_vinf_interface_id ;
4574    vinf_batch_number_tbl                 l_vinf_batch_number ;
4575    vinf_object_version_number_tbl        l_vinf_object_version_number ;
4576    vinf_variable_code_tbl                l_vinf_variable_code ;
4577    vinf_variable_name_tbl                l_vinf_variable_name ;
4578    vinf_process_status_tbl               l_vinf_process_status ;
4579    vinf_action_tbl                       l_vinf_action ;
4580    vinf_language_tbl                     l_vinf_language ;
4581    vinf_description_tbl                  l_vinf_description ;
4582    vinf_variable_type_tbl                l_vinf_variable_type ;
4583    vinf_variable_intent_tbl              l_vinf_variable_intent ;
4584    vinf_contract_expert_yn_tbl           l_vinf_contract_expert_yn ;
4585    vinf_xprt_value_set_name_tbl          l_vinf_xprt_value_set_name ;
4586    vinf_disabled_yn_tbl                  l_vinf_disabled_yn ;
4587    vinf_external_yn_tbl                  l_vinf_external_yn ;
4588    vinf_variable_datatype_tbl            l_vinf_variable_datatype ;
4589    vinf_application_id_tbl               l_vinf_application_id ;
4590    vinf_value_set_name_tbl               l_vinf_value_set_name ;
4591    vinf_var_default_value_tbl            l_vinf_var_default_value ;
4592    vinf_system_reference_code_tbl        l_vinf_system_reference_code ;
4593    vinf_system_reference_id1_tbl         l_vinf_system_reference_id1 ;
4594    vinf_system_reference_id2_tbl         l_vinf_system_reference_id2 ;
4595    vinf_date_published_tbl               l_vinf_date_published ;
4596    vinf_attribute_category_tbl           l_vinf_attribute_category ;
4597    vinf_attribute1_tbl                   l_vinf_attribute1 ;
4598    vinf_attribute2_tbl                   l_vinf_attribute2 ;
4599    vinf_attribute3_tbl                   l_vinf_attribute3 ;
4600    vinf_attribute4_tbl                   l_vinf_attribute4 ;
4601    vinf_attribute5_tbl                   l_vinf_attribute5 ;
4602    vinf_attribute6_tbl                   l_vinf_attribute6 ;
4603    vinf_attribute7_tbl                   l_vinf_attribute7 ;
4604    vinf_attribute8_tbl                   l_vinf_attribute8 ;
4605    vinf_attribute9_tbl                   l_vinf_attribute9 ;
4606    vinf_attribute10_tbl                  l_vinf_attribute10 ;
4607    vinf_attribute11_tbl                  l_vinf_attribute11 ;
4608    vinf_attribute12_tbl                  l_vinf_attribute12 ;
4609    vinf_attribute13_tbl                  l_vinf_attribute13 ;
4610    vinf_attribute14_tbl                  l_vinf_attribute14 ;
4611    vinf_attribute15_tbl                  l_vinf_attribute15 ;
4612 
4613 
4614    vinf_existing_code_tbl                l_vinf_existing_code ;
4615    vinf_existing_dpublished_tbl          l_vinf_existing_dpublished ;
4616    vinf_value_set_id_tbl                 l_vinf_value_set_id ;
4617    vinf_existing_language_tbl            l_vinf_existing_language ;
4618 
4619    I NUMBER := 0;
4620    j NUMBER := 0;
4621    k NUMBER := 0;
4622    x NUMBER := 0;
4623    l_program_id                         OKC_VARIABLES_INTERFACE.PROGRAM_ID%TYPE;
4624    l_program_login_id                   OKC_VARIABLES_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
4625    l_program_appl_id                    OKC_VARIABLES_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
4626    l_request_id                         OKC_VARIABLES_INTERFACE.REQUEST_ID%TYPE;
4627    l_dummy_unq VARCHAR2(1) := '?';
4628    l_dummy     VARCHAR2(1) := '?';
4629    l_vs_id     VARCHAR2(1) := NULL;
4630    l_language  varchar2(1) := '?';
4631    l_value_set_id                       FND_FLEX_VALUE_SETS.FLEX_VALUE_SET_ID%TYPE;
4632    l_variable_datatype                 OKC_BUS_VARIABLES_B.VARIABLE_DATATYPE%TYPE;
4633 
4634 BEGIN
4635 IF (l_debug = 'Y') THEN
4636   okc_debug.log('100: Entered variables_import', 2);
4637 END IF;
4638 
4639 ------------------------------------------------------------------------
4640 --  Variable Initialization
4641 -------------------------------------------------------------------------
4642 
4643 -- Standard Start of API savepoint
4644 FND_MSG_PUB.initialize;
4645 --  Initialize API return status to success
4646 x_return_status := FND_API.G_RET_STS_SUCCESS;
4647 l_return_status := G_RET_STS_SUCCESS;
4648 --  Cache user_id, login_id and org_id
4649 l_user_id  := Fnd_Global.user_id;
4650 l_login_id := Fnd_Global.login_id;
4651 
4652 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
4653    l_program_id := NULL;
4654 ELSE
4655    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
4656 END IF;
4657 
4658 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
4659    l_program_login_id := NULL;
4660 ELSE
4661    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
4662 END IF;
4663 
4664 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
4665    l_program_appl_id := NULL;
4666 ELSE
4667    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
4668 END IF;
4669 
4670 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
4671    l_request_id := NULL;
4672 ELSE
4673    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
4674 END IF;
4675 
4676 l_batch_process_id := p_batch_procs_id;
4677 -------------------------------------------------------------------------
4678 --------------- the outermost loop of this procedure --------------------
4679 -- Bulk fetch all interface rows based on the fetchsize passedby the user
4680 -------------------------------------------------------------------------
4681 
4682 l_context :='BULK FETCH VARIABLE INTERFACE ROW';
4683 OPEN l_var_interface_csr ( p_batch_number );
4684 LOOP
4685 BEGIN
4686     FETCH l_var_interface_csr BULK COLLECT INTO
4687           vinf_interface_id_tbl                  ,
4688           vinf_batch_number_tbl                  ,
4689           vinf_object_version_number_tbl         ,
4690           vinf_variable_code_tbl                 ,
4691           vinf_variable_name_tbl                 ,
4692           vinf_process_status_tbl                ,
4693           vinf_action_tbl                        ,
4694           vinf_language_tbl                      ,
4695           vinf_description_tbl                   ,
4696           vinf_variable_type_tbl                 ,
4697           vinf_variable_intent_tbl               ,
4698           vinf_contract_expert_yn_tbl            ,
4699           vinf_xprt_value_set_name_tbl           ,
4700           vinf_disabled_yn_tbl                   ,
4701           vinf_external_yn_tbl                   ,
4702           vinf_variable_datatype_tbl             ,
4703           vinf_application_id_tbl                ,
4704           vinf_value_set_name_tbl                ,
4705           vinf_var_default_value_tbl        ,
4706           vinf_system_reference_code_tbl    ,
4707           vinf_system_reference_id1_tbl     ,
4708           vinf_system_reference_id2_tbl     ,
4709           vinf_date_published_tbl                ,
4710           vinf_attribute_category_tbl            ,
4711           vinf_attribute1_tbl                    ,
4712           vinf_attribute2_tbl                    ,
4713           vinf_attribute3_tbl                    ,
4714           vinf_attribute4_tbl                    ,
4715           vinf_attribute5_tbl                    ,
4716           vinf_attribute6_tbl                    ,
4717           vinf_attribute7_tbl                    ,
4718           vinf_attribute8_tbl                    ,
4719           vinf_attribute9_tbl                    ,
4720           vinf_attribute10_tbl                   ,
4721           vinf_attribute11_tbl                   ,
4722           vinf_attribute12_tbl                   ,
4723           vinf_attribute13_tbl                   ,
4724           vinf_attribute14_tbl                   ,
4725           vinf_attribute15_tbl                   ,
4726           vinf_existing_code_tbl                 ,
4727           vinf_existing_dpublished_tbl           ,
4728           vinf_existing_language_tbl  LIMIT p_fetchsize;
4729     EXIT WHEN vinf_interface_id_tbl.COUNT = 0 ;
4730 
4731     ------------------------------------------------------------------------
4732     -- Variable initialization
4733     -------------------------------------------------------------------------
4734     --For each fetch, variable variable table index should be initialized
4735     j := 1;
4736     --##count:initialization
4737     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
4738     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
4739     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
4740     l_part_rows_processed   := 0;
4741     l_part_rows_failed      := 0;
4742     l_part_rows_warned      := 0;
4743     l_bulk_failed           := 'N';
4744     ---------------------------------------------------------------------------
4745     --------------------- Inner Loop thru fetched rows for---------------------
4746     -- validation, parse and validate article text, create a variable list
4747     -- prepare rows for DML if validate_only is 'N'
4748     /***  Processing Rule to set process_status
4749     Because we want to collect as much info as possible, we need to
4750     maintain process status while keeping the process moving.
4751     So, we'll set l_return_status as validation goes on and
4752     at the end we will set inf_process_status_tbl(i) with l_return_status
4753     for final result.  However, we will get out of this process if there
4754     is a significant error such as 'U'.
4755     The return status examined
4756     -api_return_status : return status for api call
4757     -l_return_status : validation result of each row
4758     -x_return_status : final result status for concurrent program request
4759     Rule to set return status
4760     If api_return_status for api call is
4761     * 'S' then continue
4762     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
4763         and build_error_array then continue
4764     * 'E' and it is significant then set l_return_status = 'E' and raise
4765       Exception
4766     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
4767        'E' at the end of validation
4768     * 'U' then set l_return_status = 'U' and raise 'U' exception
4769     * At the end, if it goes thru with no Exception,
4770     Check if l_return_status is 'E' then raise Exception
4771        Otherwise (meaning l_return_status is 'S' or 'W'),
4772           vinf_process_status_tbl(i) = l_return_status
4773     * In the exception, we will set
4774           vinf_process_status_tbl(i) = l_return_status and build_error_array
4775     ***/
4776     -------------------------------------------------------------------------
4777 
4778     FOR i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
4779       BEGIN
4780       -- Increment total processed rows
4781       --##Count
4782       l_part_rows_processed := l_part_rows_processed+1;
4783       -- Initialization for each iteration
4784       l_row_notfound       := FALSE;
4785       l_return_status      := G_RET_STS_SUCCESS;
4786 
4787       -- following variables are not fetched from interface table
4788       -- thus initialize it here
4789       vinf_value_set_id_tbl(i) := NULL;
4790       vinf_variable_datatype_tbl(i) := NULL;
4791 
4792       l_context := 'VARIABLE VALIDATING';
4793 
4794       -- To find duplicate variable code in the batch
4795       IF i>1 THEN
4796          x := i-1;
4797          IF ((RTRIM(vinf_variable_code_tbl(i)) = RTRIM(vinf_variable_code_tbl(x)))
4798 	    --THEN
4799 	   AND (vinf_language_tbl(i)) = (vinf_language_tbl(x))) THEN
4800             Okc_Api.Set_Message(G_APP_NAME,
4801 		                      'OKC_VAR_DUP_TITLE_ORG',
4802 						  'VAR_CODE',
4803 						  vinf_variable_code_tbl(i),
4804 						  'LANG',
4805 						  vinf_language_tbl(i));
4806             l_return_status := G_RET_STS_ERROR;
4807             RAISE FND_API.G_EXC_ERROR;
4808          END IF;
4809       END IF;
4810       -- Logic to decide what to do in case of Action='S'
4811 	 -- If there is no existing variable in system then it is 'N' otherwise 'U'
4812 
4813 	 IF vinf_action_tbl(i) = 'S' THEN
4814          IF vinf_existing_code_tbl(i) IS NULL THEN
4815 	       vinf_action_tbl(i) := 'N';
4816 	    ELSE
4817 	       vinf_action_tbl(i) := 'U';
4818 	    END IF;
4819 	 END IF;
4820 
4821 
4822       IF vinf_action_tbl(i) = 'N' THEN
4823 
4824           --TRIM trailing space because
4825           vinf_variable_code_tbl(i) := RTRIM(vinf_variable_code_tbl(i));
4826 
4827       ELSIF vinf_action_tbl(i) in ('U','D') THEN
4828 
4829           IF vinf_existing_code_tbl(i) is NULL THEN
4830                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
4831                       p_msg_name     => 'OKC_VAR_CODE_NOT_FOUND',
4832                       p_token1       => 'VARIABLE_CODE',
4833                       p_token1_value => vinf_variable_code_tbl(i));
4834               l_return_status := G_RET_STS_ERROR;
4835              RAISE FND_API.G_EXC_ERROR ;
4836           END IF;
4837 
4838       ELSE
4839 
4840           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
4841                   p_msg_name     => 'OKC_VAR_INV_IMP_ACTION');
4842           l_return_status := G_RET_STS_ERROR;
4843           RAISE FND_API.G_EXC_ERROR ;
4844       END IF;
4845 
4846       -----------------------------------------------------------
4847       -- Common validation or attribute settting
4848       -- regardless of status and import action
4849       -- this validation is not included in validate api
4850       -----------------------------------------------------------
4851       -- Get Value set id and Datatype from Value set name provided by the user
4852          OPEN  get_valset_id_csr(vinf_value_set_name_tbl(i));
4853 	    FETCH get_valset_id_csr into l_value_set_id,l_variable_datatype;
4854 	    CLOSE get_valset_id_csr;
4855 	    IF l_value_set_id is null THEN
4856 	        IF p_validate_only = 'Y' THEN
4857                 OPEN valset_exists_csr (vinf_value_set_name_tbl(i),
4858 		                              vinf_batch_number_tbl(i));
4859 	           FETCH valset_exists_csr into l_vs_id;
4860 	           CLOSE valset_exists_csr;
4861 		      IF l_vs_id is null THEN
4862                 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4863                                     p_msg_name => 'OKC_ART_VAL_SET_NOT_FOUND');
4864                 l_return_status := G_RET_STS_ERROR;
4865 			 ELSE
4866 		      -- Reset Local Variables
4867 			 l_vs_id := NULL;
4868 
4869 		      END IF;
4870              ELSE
4871                 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4872                                    p_msg_name => 'OKC_ART_VAL_SET_NOT_FOUND');
4873                 l_return_status := G_RET_STS_ERROR;
4874 		   END IF;
4875 
4876          ELSE
4877 	       vinf_value_set_id_tbl(i) := l_value_set_id;
4878 		  vinf_variable_datatype_tbl(i)    := l_variable_datatype;
4879 		  -- Reset Local Variables
4880 		  l_value_set_id := NULL;
4881 		  l_variable_datatype := NULL;
4882          END IF;
4883 
4884 
4885       -- Checking Date Published Validation
4886       IF vinf_existing_dpublished_tbl(i) >= vinf_date_published_tbl(i) THEN
4887             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4888                                 p_msg_name => 'OKC_INVALID_DATE_PUBLISHED');
4889             l_return_status := G_RET_STS_ERROR;
4890       END IF;
4891 
4892       -- Checking Variable Flags
4893       IF nvl(vinf_disabled_yn_tbl(i), '*') not in ('Y','N') THEN
4894             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4895                                 p_msg_name => 'OKC_INVALID_DISABLED_FLAG');
4896             l_return_status := G_RET_STS_ERROR;
4897       END IF;
4898 
4899       IF nvl(vinf_external_yn_tbl(i), '*') not in ('Y','N') THEN
4900             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4901                                 p_msg_name => 'OKC_INVALID_EXTERNAL_FLAG');
4902             l_return_status := G_RET_STS_ERROR;
4903       END IF;
4904 
4905       IF nvl(vinf_contract_expert_yn_tbl(i), '*') not in ('Y','N') THEN
4906             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4907                                 p_msg_name => 'OKC_INVALID_CONTRACT_EXPERT_FLAG');
4908             l_return_status := G_RET_STS_ERROR;
4909       END IF;
4910 
4911       IF nvl(vinf_variable_intent_tbl(i), '*') not in ('B','S') THEN
4912             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4913                                 p_msg_name => 'OKC_INVALID_INTENT_FLAG');
4914             l_return_status := G_RET_STS_ERROR;
4915       END IF;
4916 
4917       IF nvl(vinf_variable_type_tbl(i), '*') <> 'U' THEN
4918             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4919                                 p_msg_name => 'OKC_INVALID_VARIABLE_TYPE');
4920             l_return_status := G_RET_STS_ERROR;
4921       END IF;
4922 
4923       -- Checking Variable Type and Value set id
4924       IF nvl(vinf_variable_type_tbl(i), '*')  = 'U' THEN
4925 	    IF vinf_value_set_name_tbl(i) is null THEN
4926             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4927                                 p_msg_name => 'OKC_VS_NOT_DEFINED');
4928             l_return_status := G_RET_STS_ERROR;
4929          END IF;
4930       END IF;
4931 
4932 
4933       IF nvl(vinf_contract_expert_yn_tbl(i), '*') not in ('Y','N') THEN
4934             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4935                                 p_msg_name => 'OKC_INVALID_CONTRACT_EXPERT_FLAG');
4936             l_return_status := G_RET_STS_ERROR;
4937       END IF;
4938 
4939      -- Validate Contract Expert related data
4940 
4941       IF ((vinf_xprt_value_set_name_tbl(i) is not null OR
4942 	    vinf_contract_expert_yn_tbl(i) = 'Y' ) AND
4943 	    vinf_variable_type_tbl(i) <> 'S')
4944 	    THEN
4945             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4946                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4947             l_return_status := G_RET_STS_ERROR;
4948       END IF;
4949 
4950       IF ((vinf_xprt_value_set_name_tbl(i) is not null OR
4951 	    vinf_contract_expert_yn_tbl(i) = 'Y' ) AND
4952 	    vinf_variable_type_tbl(i) <> 'S')
4953 	    THEN
4954             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4955                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4956             l_return_status := G_RET_STS_ERROR;
4957       END IF;
4958 
4959       IF ((vinf_variable_datatype_tbl(i)  = 'D') AND
4960 	    ((vinf_contract_expert_yn_tbl(i) = 'Y' ) OR
4961 	    (vinf_xprt_value_set_name_tbl(i) <> 'S')))
4962 	    THEN
4963             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4964                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4965             l_return_status := G_RET_STS_ERROR;
4966       END IF;
4967 
4968       IF ((vinf_variable_datatype_tbl(i)  = 'V') AND
4969 	    (vinf_contract_expert_yn_tbl(i) = 'Y' ) AND
4970 	    (vinf_xprt_value_set_name_tbl(i) is null) )
4971 	    THEN
4972             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4973                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4974             l_return_status := G_RET_STS_ERROR;
4975       END IF;
4976 
4977       IF ((vinf_contract_expert_yn_tbl(i) = 'N') AND
4978 	    (vinf_xprt_value_set_name_tbl(i) is not null) )
4979 	    THEN
4980             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4981                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4982             l_return_status := G_RET_STS_ERROR;
4983       END IF;
4984       -- Check for Valid External Flag
4985       IF ((vinf_variable_intent_tbl(i)  = 'S') AND
4986 	    (vinf_external_yn_tbl(i)  = 'Y') )
4987 	    THEN
4988             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4989                                 p_msg_name => 'OKC_ART_VAR_INVALID_EXTERNALYN',
4990 						  p_token1   => 'VAR_NAME',
4991 						  p_token1_value => vinf_variable_name_tbl(i));
4992             l_return_status := G_RET_STS_ERROR;
4993       END IF;
4994 
4995       -- Validate "Language" is installed or not
4996          OPEN  check_lang_csr(vinf_language_tbl(i));
4997 	    FETCH check_lang_csr into l_language;
4998 	    CLOSE check_lang_csr;
4999 	    --IF check_lang_csr%NOTFOUND  THEN
5000 	    IF l_language <> '1'  THEN
5001             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
5002                                 p_msg_name => 'OKC_LANG_NOT_INSTALLED',
5003                                 p_token1       => 'LANGUAGE',
5004                                 p_token1_value => vinf_language_tbl(i));
5005             l_return_status := G_RET_STS_ERROR;
5006 		  ELSE
5007             l_language := '?';
5008          END IF;
5009 
5010 
5011       -- Validate attrs of the interface row
5012       IF vinf_action_tbl(i) = 'N' THEN
5013       -- Checking uniqueness of variable name and intent
5014          OPEN  get_var_unq_csr(vinf_variable_name_tbl(i),
5015 	                           vinf_variable_intent_tbl(i));
5016 	    FETCH get_var_unq_csr into l_dummy_unq;
5017 	    CLOSE get_var_unq_csr;
5018 	    IF l_dummy_unq = '1' THEN
5019             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
5020                                 p_msg_name => 'OKC_ART_VAR_NAME_NOT_UNIQUE');
5021             l_return_status := G_RET_STS_ERROR;
5022          END IF;
5023 
5024       -- Checking variable code is unique in the system
5025          OPEN  get_var_info_csr(vinf_variable_code_tbl(i));
5026 	    FETCH get_var_info_csr into l_dummy;
5027 	    CLOSE get_var_info_csr;
5028 	    IF l_dummy = '1' THEN
5029             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
5030                                 p_msg_name => 'OKC_ART_VAR_CODE_NOT_UNIQUE');
5031             l_return_status := G_RET_STS_ERROR;
5032          END IF;
5033 
5034       ELSIF vinf_action_tbl(i) = 'U' THEN
5035 	     NULL;
5036       END IF;
5037 
5038       ------------------------------------------------------------------------
5039       -- Now that we have validated and data is clean we can fetch sequences and ids
5040       -- for new variables for DML and also set the process status to Success
5041       -------------------------------------------------------------------------
5042 
5043       -- Summarize report for this row
5044       -- Status 'F' is for internal use meaning parsing failure marked in
5045       -- java concurrent program
5046       IF (l_return_status = G_RET_STS_SUCCESS) THEN
5047          IF (nvl(vinf_process_status_tbl(i), 'E') = 'E') THEN
5048            vinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
5049          ELSIF ( vinf_process_status_tbl(i) = 'F') THEN
5050            -- ##count parser failure as error
5051            --l_tot_rows_failed := l_tot_rows_failed+1;
5052            l_part_rows_failed := l_part_rows_failed+1;
5053            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5054          END IF;
5055       ELSIF (l_return_status = l_sts_warning) THEN
5056          IF (nvl(vinf_process_status_tbl(i),'E') = 'E') THEN
5057            vinf_process_status_tbl(i) := l_sts_warning;
5058            --##count
5059            --l_tot_rows_warned := l_tot_rows_warned+1;
5060            l_part_rows_warned := l_part_rows_warned+1;
5061          ELSIF (vinf_process_status_tbl(i) = 'F') THEN
5062            -- ##count parser failure as error
5063            --l_tot_rows_failed := l_tot_rows_failed+1;
5064            l_part_rows_failed := l_part_rows_failed+1;
5065            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5066          END IF;
5067       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
5068            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5069       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
5070            RAISE FND_API.G_EXC_ERROR;
5071       END IF;
5072 
5073     -------------------------
5074     -------------------------
5075     -- Exception Block for each iteration in Loop
5076     -- validation and unexpected errors
5077     -- In case of unexpected error, escape the loop
5078     -------------------------
5079     -------------------------
5080 
5081 
5082       EXCEPTION
5083           WHEN FND_API.G_EXC_ERROR THEN
5084               IF (l_debug = 'Y') THEN
5085                  okc_debug.log('300: In Variables_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
5086               END IF;
5087               --l_return_status := G_RET_STS_ERROR ;
5088               build_error_array(
5089                  p_msg_data     => x_msg_data,
5090                  p_context      => l_context,
5091                  p_batch_process_id => l_batch_process_id,
5092                  p_interface_id  => vinf_interface_id_tbl(i),
5093                  p_article_title => vinf_variable_code_tbl(i),
5094                  p_error_type    => G_RET_STS_ERROR,
5095 			  p_entity        => 'VARIABLE'
5096                 );
5097                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5098                --##count
5099                --l_tot_rows_failed := l_tot_rows_failed+1;
5100                l_part_rows_failed := l_part_rows_failed+1;
5101                -- Continue to next row
5102 
5103           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5104               IF (l_debug = 'Y') THEN
5105                  okc_debug.log('400: Leaving Variables_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
5106               END IF;
5107 
5108               IF l_var_interface_csr%ISOPEN THEN
5109                  CLOSE l_var_interface_csr;
5110               END IF;
5111 
5112               --Set_Message
5113               l_return_status := G_RET_STS_UNEXP_ERROR ;
5114               x_return_status := G_RET_STS_UNEXP_ERROR ;
5115 
5116               build_error_array(
5117                  p_msg_data     => x_msg_data,
5118                  p_context      => l_context,
5119                  p_batch_process_id => l_batch_process_id,
5120                  p_interface_id  => vinf_interface_id_tbl(i),
5121                  p_article_title => vinf_variable_code_tbl(i),
5122                  p_error_type    => G_RET_STS_UNEXP_ERROR,
5123 			  p_entity        => 'VARIABLE'
5124                  );
5125                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5126                --##count
5127                --l_tot_rows_failed := l_tot_rows_failed+1;
5128                l_part_rows_failed := l_part_rows_failed+1;
5129               exit; -- exit the current fetch
5130 
5131           WHEN OTHERS THEN
5132               IF (l_debug = 'Y') THEN
5133                 okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5134               END IF;
5135 
5136               IF l_var_interface_csr%ISOPEN THEN
5137                  CLOSE l_var_interface_csr;
5138               END IF;
5139 
5140               l_return_status := G_RET_STS_UNEXP_ERROR ;
5141               x_return_status := G_RET_STS_UNEXP_ERROR ;
5142 
5143               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
5144                                 p_msg_name     => G_UNEXPECTED_ERROR,
5145                                 p_token1       => G_SQLCODE_TOKEN,
5146                                 p_token1_value => sqlcode,
5147                                 p_token2       => G_SQLERRM_TOKEN,
5148                                 p_token2_value => sqlerrm);
5149 
5150               build_error_array(
5151                  p_msg_data     => G_UNEXPECTED_ERROR,
5152                  p_context      => l_context,
5153                  p_batch_process_id => l_batch_process_id,
5154                  p_interface_id  => vinf_interface_id_tbl(i),
5155                  p_article_title => vinf_variable_code_tbl(i),
5156                  p_error_type    => G_RET_STS_ERROR,
5157 			  p_entity        => 'VARIABLE'
5158                 );
5159                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5160                --##count
5161                --l_tot_rows_failed := l_tot_rows_failed+1;
5162                l_part_rows_failed := l_part_rows_failed+1;
5163               exit;  -- exit the current fetch
5164           END;
5165     -------------------------
5166     -------------------------
5167     -- Exception Block for each iteration in Loop ends
5168     -------------------------
5169     -------------------------
5170 
5171 
5172      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
5173     ------------------------------------------------------------------------
5174     -------------- End of Inner Loop thru fetched row for---------------------
5175     -- validation,
5176     -------------------------------------------------------------------------
5177     -- In order to propagate Unexpected error raise it if it is 'U'
5178     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
5179          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5180     END IF;
5181 
5182     -------------------------
5183     -------------------------
5184     -- Exception Block for Inner Loop starts
5185     -- Handles unexpected errors as last step
5186     -------------------------
5187     -------------------------
5188     EXCEPTION
5189          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5190              IF (l_debug = 'Y') THEN
5191                 okc_debug.log('400: Leaving Variables_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
5192              END IF;
5193 
5194              IF l_var_interface_csr%ISOPEN THEN
5195                 CLOSE l_var_interface_csr;
5196              END IF;
5197              l_return_status := G_RET_STS_UNEXP_ERROR ;
5198              x_return_status := G_RET_STS_UNEXP_ERROR ;
5199              exit; -- exit outermost loop
5200 
5201         WHEN OTHERS THEN
5202              IF (l_debug = 'Y') THEN
5203                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5204              END IF;
5205 
5206              IF l_var_interface_csr%ISOPEN THEN
5207                 CLOSE l_var_interface_csr;
5208              END IF;
5209              l_return_status := G_RET_STS_UNEXP_ERROR ;
5210              x_return_status := G_RET_STS_UNEXP_ERROR ;
5211              exit; -- exit outermost loop
5212      END;
5213 
5214     -------------------------
5215     -------------------------
5216     -- Exception Block for Each Iteration of outermost Loop ends
5217     -------------------------
5218     -------------------------
5219 
5220     ------------------------------------------------------------------------
5221     --------------------- Start Do_DML for Variables   ---------------
5222     -- Insert or Update Variable
5223     -------------------------------------------------------------------------
5224     -- initialize l_return_status to track status of DML execution
5225      l_return_status := G_RET_STS_SUCCESS;
5226 
5227 
5228     IF p_validate_only = 'N' THEN
5229          BEGIN
5230          SAVEPOINT bulkdml;
5231 
5232          i := 0;
5233         -- Bulk insert New Valid Records
5234          BEGIN
5235          l_context := 'INSERTING NEW VARIABLE INTO B TABLE';
5236 
5237            FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5238             INSERT INTO OKC_BUS_VARIABLES_B(
5239              VARIABLE_CODE,
5240              OBJECT_VERSION_NUMBER,
5241              VARIABLE_TYPE,
5242              EXTERNAL_YN,
5243              VARIABLE_INTENT,
5244              CONTRACT_EXPERT_YN,
5245 	        DISABLED_YN,
5246 	        VARIABLE_DATATYPE,
5247 	        APPLICATION_ID,
5248 	        VALUE_SET_ID,
5249 	        VARIABLE_DEFAULT_VALUE,
5250 	    	   XPRT_VALUE_SET_NAME,
5251 	        DATE_PUBLISHED,
5252              ORIG_SYSTEM_REFERENCE_CODE,
5253              ORIG_SYSTEM_REFERENCE_ID1,
5254              ORIG_SYSTEM_REFERENCE_ID2,
5255     --         PROGRAM_ID,
5256     --         PROGRAM_LOGIN_ID,
5257     --         PROGRAM_APPLICATION_ID,
5258     --         REQUEST_ID,
5259              ATTRIBUTE_CATEGORY,
5260              ATTRIBUTE1,
5261              ATTRIBUTE2,
5262              ATTRIBUTE3,
5263              ATTRIBUTE4,
5264              ATTRIBUTE5,
5265              ATTRIBUTE6,
5266              ATTRIBUTE7,
5267              ATTRIBUTE8,
5268              ATTRIBUTE9,
5269              ATTRIBUTE10,
5270              ATTRIBUTE11,
5271              ATTRIBUTE12,
5272              ATTRIBUTE13,
5273              ATTRIBUTE14,
5274              ATTRIBUTE15,
5275              CREATED_BY,
5276              CREATION_DATE,
5277              LAST_UPDATED_BY,
5278              LAST_UPDATE_LOGIN,
5279              LAST_UPDATE_DATE,
5280               VARIABLE_SOURCE)   --Added for Bug 10227193
5281            SELECT
5282              vinf_variable_code_tbl(i),
5283 		   1.0,
5284              vinf_variable_type_tbl(i),
5285              vinf_external_yn_tbl(i),
5286              vinf_variable_intent_tbl(i),
5287              vinf_contract_expert_yn_tbl(i),
5288              vinf_disabled_yn_tbl(i),
5289              vinf_variable_datatype_tbl(i),
5290              vinf_application_id_tbl(i),
5291              vinf_value_set_id_tbl(i),
5292              vinf_var_default_value_tbl(i),
5293              vinf_xprt_value_set_name_tbl(i),
5294              vinf_date_published_tbl(i),
5295              vinf_system_reference_code_tbl(i),
5296              vinf_system_reference_id1_tbl(i),
5297              vinf_system_reference_id2_tbl(i),
5298      --        l_program_id,
5299      --        l_program_login_id,
5300      --        l_program_appl_id,
5301      --        l_request_id,
5302              vinf_attribute_category_tbl(i),
5303              vinf_attribute1_tbl(i),
5304              vinf_attribute2_tbl(i),
5305              vinf_attribute3_tbl(i),
5306              vinf_attribute4_tbl(i),
5307              vinf_attribute5_tbl(i),
5308              vinf_attribute6_tbl(i),
5309              vinf_attribute7_tbl(i),
5310              vinf_attribute8_tbl(i),
5311              vinf_attribute9_tbl(i),
5312              vinf_attribute10_tbl(i),
5313              vinf_attribute11_tbl(i),
5314              vinf_attribute12_tbl(i),
5315              vinf_attribute13_tbl(i),
5316              vinf_attribute14_tbl(i),
5317              vinf_attribute15_tbl(i),
5318              l_user_id,
5319              sysdate,
5320              l_user_id,
5321              l_login_id,
5322              sysdate,
5323               'M'            --Added for Bug 10227193
5324            FROM DUAL
5325            WHERE vinf_action_tbl(i)  = 'N' and
5326                  vinf_process_status_tbl(i)  in ('S', 'W') and
5327 			  vinf_language_tbl(i) = USERENV('LANG');
5328 
5329         -- Using a " select from dual" aproach as above prevents creation of
5330         -- additional PL/SQL tables for bulk insert of
5331         -- variables if we were to use a FORALL INSERT INTO .... VALUES .... approach.
5332         -- We cannot use FORALL INSERT INTO .... VALUES ....using
5333         -- the existing inf*tbl since the error rows need to be
5334         -- filtered out.
5335 
5336         EXCEPTION
5337            WHEN OTHERS THEN
5338              IF (l_debug = 'Y') THEN
5339                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5340              END IF;
5341              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5342           END;
5343 
5344          --
5345          --  End of Insert into OKC_BUS_VARIABLES_B
5346          --
5347          --
5348 
5349          i := 0;
5350          BEGIN
5351          l_context := 'INSERTING VARIABLE INTO TL TABLE';
5352 
5353          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5354            INSERT INTO OKC_BUS_VARIABLES_TL(
5355               VARIABLE_CODE,
5356               VARIABLE_NAME,
5357               LANGUAGE,
5358               SOURCE_LANG,
5359               DESCRIPTION,
5360               CREATED_BY,
5361               CREATION_DATE,
5362               LAST_UPDATED_BY,
5363               LAST_UPDATE_LOGIN,
5364               LAST_UPDATE_DATE)
5365            SELECT
5366               vinf_variable_code_tbl(i),
5367               vinf_variable_name_tbl(i),
5368               vinf_language_tbl(i),
5369               userenv('LANG'),
5370               vinf_description_tbl(i),
5371               l_user_id,
5372               sysdate,
5373               l_user_id,
5374               l_login_id,
5375               sysdate
5376            FROM OKC_BUS_VARIABLES_B
5377            WHERE vinf_action_tbl(i)  IN ('N')
5378              AND vinf_process_status_tbl(i) in ('S', 'W')
5379              AND variable_code  = vinf_variable_code_tbl(i);
5380 
5381         EXCEPTION
5382            WHEN OTHERS THEN
5383              IF (l_debug = 'Y') THEN
5384                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5385              END IF;
5386              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5387           END;
5388 
5389           --
5390           -- End of Insert into OKC_BUS_VARIABLES_TL
5391           --
5392           --
5393 
5394          i := 0;
5395          BEGIN
5396            l_context := 'UPDATING DATE_PUBLISHED FOR ACTION U';
5397 
5398          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5399            UPDATE OKC_BUS_VARIABLES_B
5400            SET DATE_PUBLISHED             = vinf_date_published_tbl(i),
5401                LAST_UPDATED_BY            = l_user_id,
5402                LAST_UPDATE_LOGIN          = l_login_id,
5403                LAST_UPDATE_DATE           = SYSDATE
5404            WHERE vinf_action_tbl(i)  =  ('U')
5405              AND vinf_process_status_tbl(i) in ('S','W')
5406              AND variable_code = vinf_variable_code_tbl(i)
5407 		   AND vinf_existing_language_tbl(i) IS NOT NULL;
5408         EXCEPTION
5409            WHEN OTHERS THEN
5410              IF (l_debug = 'Y') THEN
5411                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5412              END IF;
5413              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5414           END;
5415 
5416           --
5417           -- End of Update OKC_BUS_VARIABLES_B
5418           --
5419           --
5420          i := 0;
5421          BEGIN
5422            l_context := 'UPDATING DESCRIPTION FOR ACTION U';
5423 
5424          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5425            UPDATE OKC_BUS_VARIABLES_TL
5426            SET DESCRIPTION                = vinf_description_tbl(i),
5427                --PROGRAM_ID                 = l_program_id,
5428                --REQUEST_ID                 = l_request_id,
5429                --PROGRAM_LOGIN_ID           = l_program_login_id,
5430                --PROGRAM_APPLICATION_ID     = l_program_appl_id,
5431                LAST_UPDATED_BY            = l_user_id,
5432                LAST_UPDATE_LOGIN          = l_login_id,
5433                LAST_UPDATE_DATE           = SYSDATE
5434            WHERE vinf_action_tbl(i)  =  ('U')
5435              AND vinf_process_status_tbl(i) in ('S','W')
5436              AND variable_code = vinf_variable_code_tbl(i)
5437 		   AND vinf_existing_language_tbl(i) IS NOT NULL;
5438         EXCEPTION
5439            WHEN OTHERS THEN
5440              IF (l_debug = 'Y') THEN
5441                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5442              END IF;
5443              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5444           END;
5445 
5446           --
5447           -- End of Update OKC_BUS_VARIABLES_TL
5448           --
5449           --
5450 
5451          i := 0;
5452          BEGIN
5453          l_context := 'INSERTING VARIABLE INTO TL TABLE FOR ACTION U';
5454 
5455          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5456            INSERT INTO OKC_BUS_VARIABLES_TL(
5457               VARIABLE_CODE,
5458               VARIABLE_NAME,
5459               LANGUAGE,
5460               SOURCE_LANG,
5461               DESCRIPTION,
5462               CREATED_BY,
5463               CREATION_DATE,
5464               LAST_UPDATED_BY,
5465               LAST_UPDATE_LOGIN,
5466               LAST_UPDATE_DATE)
5467            SELECT
5468               vinf_variable_code_tbl(i),
5469               vinf_variable_name_tbl(i),
5470               vinf_language_tbl(i),
5471               userenv('LANG'),
5472               vinf_description_tbl(i),
5473               l_user_id,
5474               sysdate,
5475               l_user_id,
5476               l_login_id,
5477               sysdate
5478            FROM OKC_BUS_VARIABLES_B
5479            WHERE vinf_action_tbl(i) = ('U')
5480              AND vinf_process_status_tbl(i) in ('S', 'W')
5481              AND variable_code  = vinf_variable_code_tbl(i)
5482 		   AND vinf_existing_language_tbl(i) IS NULL;
5483 
5484         EXCEPTION
5485            WHEN OTHERS THEN
5486              IF (l_debug = 'Y') THEN
5487                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5488              END IF;
5489              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5490           END;
5491 
5492           --
5493           -- End of Insert into OKC_BUS_VARIABLES_TL for Action U
5494           --
5495           --
5496 
5497          i := 0;
5498          BEGIN
5499            l_context := 'DISABLING VARIABLE FOR ACTION D';
5500 
5501          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5502            UPDATE OKC_BUS_VARIABLES_B
5503            SET DISABLED_YN                  = vinf_disabled_yn_tbl(i),
5504                --PROGRAM_ID                 = l_program_id,
5505                --REQUEST_ID                 = l_request_id,
5506                --PROGRAM_LOGIN_ID           = l_program_login_id,
5507                --PROGRAM_APPLICATION_ID     = l_program_appl_id,
5508                LAST_UPDATED_BY            = l_user_id,
5509                LAST_UPDATE_LOGIN          = l_login_id,
5510                LAST_UPDATE_DATE           = SYSDATE
5511            WHERE vinf_action_tbl(i)  =  ('D')
5512              AND vinf_process_status_tbl(i) in ('S','W')
5513              AND variable_code = vinf_variable_code_tbl(i);
5514         EXCEPTION
5515            WHEN OTHERS THEN
5516              IF (l_debug = 'Y') THEN
5517                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5518              END IF;
5519              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5520           END;
5521 
5522           --
5523           -- End of Update OKC_BUS_VARIABLES_TL for Disable
5524           --
5525           --
5526 
5527 
5528       -- Exception for bulk DML block
5529       EXCEPTION
5530         WHEN OTHERS THEN
5531              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
5532               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
5533                                   p_msg_name     => G_UNEXPECTED_ERROR,
5534                                   p_token1       => G_SQLCODE_TOKEN,
5535                                   p_token1_value => sqlcode,
5536                                   p_token2       => G_SQLERRM_TOKEN,
5537                                   p_token2_value => sqlerrm);
5538               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
5539                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
5540                                   p_token1       => 'CONTEXT',
5541                                   p_token1_value => l_context);
5542 
5543               build_error_array(
5544                                  p_msg_data     => null,
5545                                  p_context      => l_context,
5546                                  p_batch_process_id => l_batch_process_id,
5547                                  p_interface_id  => -99,
5548                                  p_article_title => NULL,
5549                                  p_error_type    => G_RET_STS_ERROR,
5550 						   p_entity        => 'VARIABLE'
5551               );
5552               l_return_status := G_RET_STS_UNEXP_ERROR;
5553               x_return_status := G_RET_STS_UNEXP_ERROR;
5554 
5555               --##count:rollback the count
5556               l_part_rows_failed := l_part_rows_processed;
5557               l_part_rows_warned := 0;
5558 
5559               ROLLBACK TO SAVEPOINT bulkdml;
5560               exit; -- exit outermost loop
5561       END;
5562 
5563     END IF; --- validate_only = 'N'
5564 
5565     ------------------------------------------------------------------------
5566     --------------------- End of Do_DML for Variables   ---------------
5567     -------------------------------------------------------------------------
5568 
5569     ------------------------------------------------------------------------
5570     --------------- Start of Do_DML for import related tables   ------------
5571     -- Update interface table
5572     -- Insert Errors into Error table
5573     -------------------------------------------------------------------------
5574     -- Update Interface Table
5575     i:=0;
5576     BEGIN
5577      l_context := 'UPDATING VARIABLES INTERFACE TABLE';
5578      FORALL i in vinf_interface_id_tbl.FIRST..vinf_interface_id_tbl.LAST
5579        UPDATE OKC_VARIABLES_INTERFACE
5580        SET
5581            -- We don't want to update process_status to 'S' or 'W' in validation_mode
5582            -- because it is not going to be picked up in next run if we do so
5583            PROCESS_STATUS = decode(p_validate_only||vinf_process_status_tbl(i)||l_bulk_failed,
5584                                                'NEN','E',
5585                                                'NSN','S',
5586                                                'NWN','W',
5587                                                'NEY','E',
5588                                                'NSY',NULL,
5589                                                'NWY',NULL,
5590                                                'YEY','E',
5591                                                'YEN','E',
5592                                                'NFY','E',
5593                                                'YFY','E',
5594                                                'NFN','E',
5595                                                'YFN','E',NULL),
5596            PROGRAM_ID                 = l_program_id,
5597            REQUEST_ID                 = l_request_id,
5598            PROGRAM_LOGIN_ID           = l_program_login_id,
5599            PROGRAM_APPLICATION_ID     = l_program_appl_id,
5600            OBJECT_VERSION_NUMBER      = vinf_object_version_number_tbl(i) + 1,
5601            LAST_UPDATED_BY            = l_user_id,
5602            LAST_UPDATE_LOGIN          = l_login_id,
5603            LAST_UPDATE_DATE           = SYSDATE
5604          WHERE
5605            interface_id = vinf_interface_id_tbl(i);
5606     EXCEPTION
5607            WHEN OTHERS THEN
5608              IF (l_debug = 'Y') THEN
5609                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5610              END IF;
5611              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
5612                         p_msg_name     => G_UNEXPECTED_ERROR,
5613                         p_token1       => G_SQLCODE_TOKEN,
5614                         p_token1_value => sqlcode,
5615                         p_token2       => G_SQLERRM_TOKEN,
5616                         p_token2_value => sqlerrm);
5617              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
5618                         p_msg_name     => 'OKC_VAR_INT_UPDATE_FAILED');
5619              build_error_array(
5620                        p_msg_data     => null,
5621                        p_context      => l_context,
5622                        p_batch_process_id => l_batch_process_id,
5623                        p_interface_id  => -99,
5624                        p_article_title => NULL,
5625                        p_error_type    => G_RET_STS_ERROR,
5626 				   p_entity        => 'VARIABLE'
5627              );
5628 
5629 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
5630 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
5631 		       --##count:rollback the count
5632 		      l_part_rows_failed := l_part_rows_processed;
5633 		      l_part_rows_warned := 0;
5634 
5635              --RAISE FND_API.G_EXC_ERROR ;
5636   END;
5637    --
5638    -- End of Update OKC_VARIABLES_INTERFACE
5639    --
5640    --
5641 
5642     --
5643     --Insert Errors into Error table for this fetch
5644     --
5645 
5646     insert_error_array(
5647      x_return_status => x_return_status,
5648      x_msg_count     => x_msg_count,
5649      x_msg_data      => x_msg_data
5650     );
5651 
5652 
5653     IF (x_return_status = l_insert_errors_error) THEN
5654       NULL;
5655      -- Ignore
5656      -- RAISE l_insert_errors_exception;
5657     END IF;
5658 
5659     ------------------------------------------------------------------------
5660     --------------- End of Do_DML for import related tables   ------------
5661     -------------------------------------------------------------------------
5662     commit;
5663 
5664     -- Now delete cache for next bulk fetch
5665 
5666     vinf_interface_id_tbl.DELETE;
5667     vinf_batch_number_tbl.DELETE;
5668     vinf_object_version_number_tbl.DELETE;
5669     vinf_variable_code_tbl.DELETE;
5670     vinf_variable_name_tbl.DELETE;
5671     vinf_process_status_tbl.DELETE;
5672     vinf_action_tbl.DELETE;
5673     vinf_language_tbl.DELETE;
5674     vinf_description_tbl.DELETE;
5675     vinf_variable_type_tbl.DELETE;
5676     vinf_variable_intent_tbl.DELETE;
5677     vinf_contract_expert_yn_tbl.DELETE;
5678     vinf_xprt_value_set_name_tbl.DELETE;
5679     vinf_disabled_yn_tbl.DELETE;
5680     vinf_external_yn_tbl.DELETE;
5681     vinf_variable_datatype_tbl.DELETE;
5682     vinf_application_id_tbl.DELETE;
5683     vinf_value_set_name_tbl.DELETE;
5684     vinf_var_default_value_tbl.DELETE;
5685     vinf_system_reference_code_tbl.DELETE;
5686     vinf_system_reference_id1_tbl.DELETE;
5687     vinf_system_reference_id2_tbl.DELETE;
5688     vinf_date_published_tbl.DELETE;
5689     vinf_attribute_category_tbl.DELETE;
5690     vinf_attribute1_tbl.DELETE;
5691     vinf_attribute2_tbl.DELETE;
5692     vinf_attribute3_tbl.DELETE;
5693     vinf_attribute4_tbl.DELETE;
5694     vinf_attribute5_tbl.DELETE;
5695     vinf_attribute6_tbl.DELETE;
5696     vinf_attribute7_tbl.DELETE;
5697     vinf_attribute8_tbl.DELETE;
5698     vinf_attribute9_tbl.DELETE;
5699     vinf_attribute10_tbl.DELETE;
5700     vinf_attribute11_tbl.DELETE;
5701     vinf_attribute12_tbl.DELETE;
5702     vinf_attribute13_tbl.DELETE;
5703     vinf_attribute14_tbl.DELETE;
5704     vinf_attribute15_tbl.DELETE;
5705 
5706     vinf_value_set_id_tbl.DELETE;
5707     vinf_existing_code_tbl.DELETE;
5708     vinf_existing_dpublished_tbl.DELETE;
5709     vinf_existing_language_tbl.DELETE;
5710 
5711     err_batch_process_id_tbl.DELETE;
5712     err_article_title_tbl.DELETE;
5713     err_interface_id_tbl.DELETE;
5714     err_error_number_tbl.DELETE;
5715     err_object_version_number_tbl.DELETE;
5716     err_error_type_tbl.DELETE;
5717     err_entity_tbl.DELETE;
5718     err_error_description_tbl.DELETE;
5719 
5720    EXIT WHEN l_var_interface_csr%NOTFOUND;
5721 END LOOP;
5722 
5723 
5724 -----------------------------------------------------------------------
5725 -- End of outermost loop for bulk fetch
5726 -----------------------------------------------------------------------
5727 
5728 IF l_var_interface_csr%ISOPEN THEN
5729 CLOSE l_var_interface_csr;
5730 END IF;
5731 
5732  -- Insert records into OKC_BUS_VARIABLES_TL for missing languages
5733    IF p_validate_only = 'N' THEN
5734      BEGIN
5735      SAVEPOINT bulklanginsert;
5736      IF (l_debug = 'Y') THEN
5737        okc_debug.log('1000: Entering Insert Missing Lang Records', 2);
5738      END IF;
5739 
5740       INSERT INTO OKC_BUS_VARIABLES_TL (
5741         VARIABLE_CODE,
5742         VARIABLE_NAME,
5743         DESCRIPTION,
5744         CREATED_BY,
5745         CREATION_DATE,
5746         LAST_UPDATE_DATE,
5747         LAST_UPDATED_BY,
5748         LAST_UPDATE_LOGIN,
5749         LANGUAGE,
5750         SOURCE_LANG
5751       )
5752  	SELECT
5753         VART.VARIABLE_CODE,
5754         VART.VARIABLE_NAME,
5755         VART.DESCRIPTION,
5756         l_user_id,
5757         sysdate,
5758         sysdate,
5759         l_user_id,
5760         l_login_id,
5761         LANG.LANGUAGE_CODE,
5762         VART.SOURCE_LANG
5763       FROM OKC_BUS_VARIABLES_TL VART,
5764  		 FND_LANGUAGES LANG,
5765  		 OKC_VARIABLES_INTERFACE VARI
5766       WHERE LANG.INSTALLED_FLAG IN ('I', 'B')
5767       AND VART.VARIABLE_CODE = RTRIM(VARI.VARIABLE_CODE)
5768       AND NVL(VARI.PROCESS_STATUS,'*') = 'S'
5769       AND VARI.BATCH_NUMBER = p_batch_number
5770       AND VARI.ACTION  <> 'D'
5771       AND NOT EXISTS
5772        (SELECT NULL
5773         FROM OKC_BUS_VARIABLES_TL VART1
5774         WHERE VART1.VARIABLE_CODE = VART.VARIABLE_CODE
5775         AND VART1.LANGUAGE = LANG.LANGUAGE_CODE)
5776         AND VART.ROWID = (SELECT MIN(VART2.ROWID)
5777     	                 FROM OKC_BUS_VARIABLES_TL VART2
5778                         WHERE VART2.VARIABLE_CODE = VART.VARIABLE_CODE)
5779       AND VARI.ROWID = (SELECT MIN(VARI1.ROWID)
5780                   FROM OKC_VARIABLES_INTERFACE VARI1
5781                   WHERE RTRIM(VARI1.VARIABLE_CODE) = RTRIM(VARI.VARIABLE_CODE)
5782  				   AND VARI1.ACTION <> 'D'
5783  				   AND VARI1.BATCH_NUMBER = VARI.BATCH_NUMBER
5784  				   AND NVL(VARI1.PROCESS_STATUS,'*') = 'S');
5785       COMMIT;
5786 
5787      IF (l_debug = 'Y') THEN
5788        okc_debug.log('1100: Leaving Insert Missing Lang Records', 2);
5789      END IF;
5790 
5791      EXCEPTION
5792        WHEN OTHERS THEN
5793          IF (l_debug = 'Y') THEN
5794            okc_debug.log('1200: Leaving Missing langauge Insert because of EXCEPTION: '||l_context||sqlerrm, 2);
5795          END IF;
5796          ROLLBACK TO SAVEPOINT bulklanginsert;
5797      END;
5798 
5799    END IF;  --p_validate_only = 'N' THEN
5800 
5801 --##count:add up last processed counts
5802 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
5803 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
5804 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
5805 
5806 --Update Batch Process Table as a last step
5807 UPDATE OKC_ART_INT_BATPROCS_ALL
5808 SET
5809   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
5810   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
5811   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
5812   END_DATE                   = SYSDATE,
5813   PROGRAM_ID                 = l_program_id,
5814   REQUEST_ID                 = l_request_id,
5815   PROGRAM_LOGIN_ID           = l_program_login_id,
5816   PROGRAM_APPLICATION_ID     = l_program_appl_id,
5817   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
5818   LAST_UPDATED_BY            = l_user_id,
5819   LAST_UPDATE_LOGIN          = l_login_id,
5820   LAST_UPDATE_DATE           = SYSDATE
5821 WHERE
5822   BATCH_PROCESS_ID  = l_batch_process_id
5823   AND ENTITY = 'Variable';
5824 
5825 IF err_error_number_tbl.COUNT > 0 THEN
5826  insert_error_array(
5827    x_return_status => x_return_status,
5828    x_msg_count     => x_msg_count,
5829    x_msg_data      => x_msg_data
5830  );
5831 END IF;
5832 
5833 -- Print statistic of this run in the log
5834 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
5835 --wrap_up(p_validate_only,p_batch_number,l_tot_rows_processed,l_tot_rows_failed,l_tot_rows_warned,l_batch_process_id,'VARIABLE');
5836 commit; -- Final commit for status update
5837 
5838 IF (l_debug = 'Y') THEN
5839  okc_debug.log('2000: Leaving variables import', 2);
5840 END IF;
5841 --x_return_status := l_return_status; this may cause to erase error x_return_status
5842 
5843 EXCEPTION
5844 
5845   WHEN FND_API.G_EXC_ERROR THEN
5846       IF (l_debug = 'Y') THEN
5847          okc_debug.log('3000: Leaving Variables_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
5848       END IF;
5849       --Insert Errors into Error table if there is any
5850       insert_error_array(
5851        x_return_status => x_return_status,
5852        x_msg_count     => x_msg_count,
5853        x_msg_data      => x_msg_data
5854       );
5855       x_return_status := G_RET_STS_ERROR ;
5856 
5857       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5858       IF (l_debug = 'Y') THEN
5859          okc_debug.log('4000: Leaving Variables_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
5860       END IF;
5861       --Insert Errors into Error table if there is any
5862 
5863       insert_error_array(
5864        x_return_status => x_return_status,
5865        x_msg_count     => x_msg_count,
5866        x_msg_data      => x_msg_data
5867       );
5868       commit;
5869 
5870       IF l_var_interface_csr%ISOPEN THEN
5871          CLOSE l_var_interface_csr;
5872       END IF;
5873 
5874       x_return_status := G_RET_STS_UNEXP_ERROR ;
5875       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
5876         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
5877       END IF;
5878       get_print_msgs_stack(p_msg_data => x_msg_data);
5879 
5880   WHEN l_insert_errors_exception THEN
5881       --
5882       -- In this exception handling, we don't insert error array again
5883       -- because error happend in the module
5884       --
5885       IF (l_debug = 'Y') THEN
5886         okc_debug.log('5000: Leaving Variables_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
5887       END IF;
5888 
5889       IF l_var_interface_csr%ISOPEN THEN
5890          CLOSE l_var_interface_csr;
5891       END IF;
5892 
5893 
5894       --x_return_status := G_RET_STS_UNEXP_ERROR ;
5895       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
5896         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
5897       END IF;
5898       get_print_msgs_stack(p_msg_data => x_msg_data);
5899       commit;
5900 
5901   WHEN OTHERS THEN
5902       IF (l_debug = 'Y') THEN
5903         okc_debug.log('5000: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5904       END IF;
5905       --Insert Errors into Error table if there is any
5906       insert_error_array(
5907        x_return_status => x_return_status,
5908        x_msg_count     => x_msg_count,
5909        x_msg_data      => x_msg_data
5910       );
5911       commit;
5912       --
5913       IF l_var_interface_csr%ISOPEN THEN
5914          CLOSE l_var_interface_csr;
5915       END IF;
5916 
5917       x_return_status := G_RET_STS_UNEXP_ERROR ;
5918       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
5919         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
5920       END IF;
5921 	 get_print_msgs_stack(p_msg_data => x_msg_data);
5922 END import_variables;
5923 
5924 PROCEDURE import_relationships(
5925     x_return_status                OUT NOCOPY VARCHAR2,
5926     x_msg_count                    OUT NOCOPY NUMBER,
5927     x_msg_data                     OUT NOCOPY VARCHAR2,
5928 
5929     p_batch_procs_id               IN NUMBER,
5930     p_batch_number                 IN VARCHAR2,
5931     p_validate_only                IN VARCHAR2 := 'Y',
5932     p_fetchsize                    IN NUMBER := 100,
5933     p_rows_processed               OUT NOCOPY NUMBER,
5934     p_rows_failed                  OUT NOCOPY NUMBER,
5935     p_rows_warned                  OUT NOCOPY NUMBER
5936    ) IS
5937     l_api_version                 CONSTANT NUMBER := 1;
5938     l_api_name                    CONSTANT VARCHAR2(30) := 'import_relationships';
5939     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
5940     l_row_notfound                BOOLEAN := FALSE;
5941     l_user_id                     NUMBER;
5942     l_login_id                    NUMBER;
5943     l_insert_errors_exception     EXCEPTION;
5944     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
5945 
5946     CURSOR l_rel_interface_csr ( cp_local_org_id IN NUMBER,
5947                                  cp_batch_number IN VARCHAR2) IS
5948       SELECT
5949            RELINT.INTERFACE_ID     ,
5950            RELINT.BATCH_NUMBER             ,
5951            RELINT.OBJECT_VERSION_NUMBER  ,
5952            RELINT.SOURCE_ARTICLE_TITLE    ,
5953            RELINT.TARGET_ARTICLE_TITLE    ,
5954            RELINT.ORG_ID,
5955            RELINT.RELATIONSHIP_TYPE       ,
5956            RELINT.PROCESS_STATUS           ,
5957            RELINT.ACTION                  ,
5958            RELS.ARTICLE_INTENT SOURCE_INTENT,
5959            RELS.ARTICLE_ID SOURCE_ARTICLE_ID    ,
5960            RELT.ARTICLE_INTENT TARGET_INTENT,
5961            RELT.ARTICLE_ID TARGET_ARTICLE_ID
5962       FROM OKC_ART_RELS_INTERFACE RELINT,
5963 	      OKC_ARTICLES_ALL RELS, OKC_ARTICLES_ALL RELT
5964       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
5965          AND BATCH_NUMBER = cp_batch_number
5966          AND RELINT.ORG_ID = cp_local_org_id
5967          AND RELINT.SOURCE_ARTICLE_TITLE = RELS.ARTICLE_TITLE(+)
5968 	    AND RELINT.ORG_ID = RELS.ORG_ID(+)
5969          AND RELINT.TARGET_ARTICLE_TITLE = RELT.ARTICLE_TITLE(+)
5970 	    AND RELINT.ORG_ID = RELT.ORG_ID(+)
5971       ORDER BY RELINT.SOURCE_ARTICLE_TITLE,RELINT.TARGET_ARTICLE_TITLE ASC;
5972 
5973       CURSOR l_rel_exist_csr (cp_src_article_id IN NUMBER,
5974 	                         cp_tar_article_id IN NUMBER,
5975 		                    cp_org_id IN NUMBER,
5976 						cp_rel_type IN VARCHAR2) IS
5977 	 SELECT '1' FROM OKC_ARTICLE_RELATNS_ALL
5978 	 WHERE source_article_id = cp_src_article_id
5979 	 AND  target_article_id = cp_tar_article_id
5980 	 AND  org_id = cp_org_id
5981 	 AND  relationship_type = cp_rel_type;
5982 
5983       CURSOR l_org_valid_csr (cp_org_id IN NUMBER) IS
5984 	 SELECT '1'
5985 	 FROM HR_ORGANIZATION_INFORMATION_V orgi, HR_ORGANIZATION_UNITS_V orgu
5986       WHERE orgi.org_information_context = 'OKC_TERMS_LIBRARY_DETAILS'
5987       AND   orgi.organization_id = orgu.organization_id
5988 	 AND   orgi.organization_id = cp_org_id;
5989 
5990       CURSOR l_provision_csr (cp_article_id IN NUMBER) IS
5991 	 SELECT provision_yn FROM OKC_ARTICLE_VERSIONS
5992 	 WHERE article_id = cp_article_id
5993 	 AND   article_version_number = 1;
5994 
5995    -- Cursor to check clause in the clause interface Table
5996        CURSOR clause_exists_csr (cp_article_title IN VARCHAR2,
5997 	                            cp_org_id IN NUMBER,
5998                                  cp_batch_number IN VARCHAR2) IS
5999        SELECT '1'
6000        FROM OKC_ART_INTERFACE_ALL
6001        WHERE article_title = cp_article_title
6002 	  AND   org_id = cp_org_id
6003        AND   batch_number = cp_batch_number
6004        AND   nvl(process_status,'X') not in ('E');
6005 
6006 
6007 -- Relationships Interface Rows
6008 
6009     TYPE l_rinf_interface_id             IS TABLE OF OKC_ART_RELS_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
6010     TYPE l_rinf_batch_number             IS TABLE OF OKC_ART_RELS_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
6011     TYPE l_rinf_object_version_number    IS TABLE OF OKC_ART_RELS_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
6012     TYPE l_rinf_source_article_title     IS TABLE OF OKC_ART_RELS_INTERFACE.SOURCE_ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
6013     TYPE l_rinf_target_article_title     IS TABLE OF OKC_ART_RELS_INTERFACE.TARGET_ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
6014     TYPE l_rinf_org_id                   IS TABLE OF OKC_ART_RELS_INTERFACE.ORG_ID%TYPE INDEX BY BINARY_INTEGER ;
6015     TYPE l_rinf_relationship_type        IS TABLE OF OKC_ART_RELS_INTERFACE.RELATIONSHIP_TYPE%TYPE INDEX BY BINARY_INTEGER ;
6016     TYPE l_rinf_process_status           IS TABLE OF OKC_ART_RELS_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
6017     TYPE l_rinf_action                   IS TABLE OF OKC_ART_RELS_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
6018 
6019     TYPE l_rinf_source_article_id        IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_ID%TYPE INDEX BY BINARY_INTEGER ;
6020     TYPE l_rinf_source_intent            IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
6021     TYPE l_rinf_target_article_id        IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_ID%TYPE INDEX BY BINARY_INTEGER ;
6022     TYPE l_rinf_target_intent            IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
6023 
6024 
6025    l_return_status                      VARCHAR2(1);
6026    l_error_index                        NUMBER          := 1;
6027    l_batch_process_id                   NUMBER          := 1;
6028    l_context                            VARCHAR2(50)    := NULL;
6029    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
6030    l_tot_rows_processed                 NUMBER          := 0;
6031    l_tot_rows_failed                    NUMBER          := 0;
6032    l_tot_rows_warned                    NUMBER          := 0;
6033    l_part_rows_processed                NUMBER          := 0;
6034    l_part_rows_failed                   NUMBER          := 0;
6035    l_part_rows_warned                   NUMBER          := 0;
6036    l_bulk_failed                        VARCHAR2(1)     := 'Y';
6037 
6038 -- Variables for relationships interface
6039    rinf_interface_id_tbl                 l_rinf_interface_id ;
6040    rinf_batch_number_tbl                 l_rinf_batch_number ;
6041    rinf_object_version_number_tbl        l_rinf_object_version_number ;
6042    rinf_source_article_title_tbl         l_rinf_source_article_title ;
6043    rinf_target_article_title_tbl         l_rinf_target_article_title ;
6044    rinf_org_id_tbl                       l_rinf_org_id ;
6045    rinf_relationship_type_tbl            l_rinf_relationship_type ;
6046    rinf_process_status_tbl               l_rinf_process_status ;
6047    rinf_action_tbl                       l_rinf_action ;
6048 
6049    rinf_source_article_id_tbl            l_rinf_source_article_id ;
6050    rinf_source_intent_tbl                l_rinf_source_intent ;
6051    rinf_target_article_id_tbl            l_rinf_target_article_id ;
6052    rinf_target_intent_tbl                l_rinf_target_intent ;
6053 
6054    I NUMBER := 0;
6055    j NUMBER := 0;
6056    k NUMBER := 0;
6057    x NUMBER := 0;
6058    l_program_id                         OKC_ART_RELS_INTERFACE.PROGRAM_ID%TYPE;
6059    l_program_login_id                   OKC_ART_RELS_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
6060    l_program_appl_id                    OKC_ART_RELS_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
6061    l_request_id                         OKC_ART_RELS_INTERFACE.REQUEST_ID%TYPE;
6062    l_dummy     VARCHAR2(1) := '2';
6063    l_dummy1    VARCHAR2(1) := '3';
6064    l_clause    VARCHAR2(1) := NULL;
6065    l_tmp_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
6066 
6067    l_source_provision VARCHAR2(1);
6068    l_target_provision VARCHAR2(1);
6069 
6070 BEGIN
6071 IF (l_debug = 'Y') THEN
6072   okc_debug.log('100: Entered relationships_import', 2);
6073 END IF;
6074 
6075 ------------------------------------------------------------------------
6076 --  Variable Initialization
6077 -------------------------------------------------------------------------
6078 
6079 
6080 -- Standard Start of API savepoint
6081 FND_MSG_PUB.initialize;
6082 --  Initialize API return status to success
6083 x_return_status := FND_API.G_RET_STS_SUCCESS;
6084 l_return_status := G_RET_STS_SUCCESS;
6085 --  Cache user_id, login_id and org_id
6086 l_user_id  := Fnd_Global.user_id;
6087 l_login_id := Fnd_Global.login_id;
6088 -- MOAC
6089 G_CURRENT_ORG_ID := mo_global.get_current_org_id();
6090 /*
6091   OPEN cur_org_csr;
6092   FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
6093   CLOSE cur_org_csr;
6094 */
6095 
6096 -- MOAC
6097 IF G_CURRENT_ORG_ID IS NULL THEN
6098    OKC_API.SET_MESSAGE(G_APP_NAME,'OKC_ART_NULL_ORG_ID');
6099    RAISE FND_API.G_EXC_ERROR ;
6100 END IF;
6101 
6102 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
6103    l_program_id := NULL;
6104 ELSE
6105    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
6106 END IF;
6107 
6108 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
6109    l_program_login_id := NULL;
6110 ELSE
6111    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
6112 END IF;
6113 
6114 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
6115    l_program_appl_id := NULL;
6116 ELSE
6117    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
6118 END IF;
6119 
6120 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
6121    l_request_id := NULL;
6122 ELSE
6123    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
6124 END IF;
6125 
6126 l_batch_process_id := p_batch_procs_id;
6127 -------------------------------------------------------------------------
6128 --------------- the outermost loop of this procedure --------------------
6129 -- Bulk fetch all interface rows based on the fetchsize passedby the user
6130 -------------------------------------------------------------------------
6131 l_context :='BULK FETCH RELATIONSHIP INTERFACE ROW';
6132 OPEN l_rel_interface_csr ( G_CURRENT_ORG_ID,p_batch_number );
6133 LOOP
6134 BEGIN
6135     FETCH l_rel_interface_csr BULK COLLECT INTO
6136           rinf_interface_id_tbl                  ,
6137           rinf_batch_number_tbl                  ,
6138           rinf_object_version_number_tbl         ,
6139           rinf_source_article_title_tbl         ,
6140           rinf_target_article_title_tbl         ,
6141           rinf_org_id_tbl         ,
6142           rinf_relationship_type_tbl         ,
6143           rinf_process_status_tbl                ,
6144           rinf_action_tbl                        ,
6145           rinf_source_intent_tbl                 ,
6146           rinf_source_article_id_tbl             ,
6147           rinf_target_intent_tbl                 ,
6148           rinf_target_article_id_tbl    LIMIT p_fetchsize;
6149     EXIT WHEN rinf_interface_id_tbl.COUNT = 0 ;
6150 
6151     ------------------------------------------------------------------------
6152     -- Variable initialization
6153     -------------------------------------------------------------------------
6154     --For each fetch, relationship variable table index should be initialized
6155     j := 1;
6156     --##count:initialization
6157     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
6158     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
6159     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
6160     l_part_rows_processed   := 0;
6161     l_part_rows_failed      := 0;
6162     l_part_rows_warned      := 0;
6163     l_bulk_failed           := 'N';
6164     ---------------------------------------------------------------------------
6165     --------------------- Inner Loop thru fetched rows for---------------------
6166     -- validation, parse and validate article text, create a variable list
6167     -- prepare rows for DML if validate_only is 'N'
6168     /***  Processing Rule to set process_status
6169     Because we want to collect as much info as possible, we need to
6170     maintain process status while keeping the process moving.
6171     So, we'll set l_return_status as validation goes on and
6172     at the end we will set inf_process_status_tbl(i) with l_return_status
6173     for final result.  However, we will get out of this process if there
6174     is a significant error such as 'U'.
6175     The return status examined
6176     -api_return_status : return status for api call
6177     -l_return_status : validation result of each row
6178     -x_return_status : final result status for concurrent program request
6179     Rule to set return status
6180     If api_return_status for api call is
6181     * 'S' then continue
6182     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
6183         and build_error_array then continue
6184     * 'E' and it is significant then set l_return_status = 'E' and raise
6185       Exception
6186     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
6187        'E' at the end of validation
6188     * 'U' then set l_return_status = 'U' and raise 'U' exception
6189     * At the end, if it goes thru with no Exception,
6190     Check if l_return_status is 'E' then raise Exception
6191        Otherwise (meaning l_return_status is 'S' or 'W'),
6192          rinf_process_status_tbl(i) = l_return_status
6193     * In the exception, we will set
6194          rinf_process_status_tbl(i) = l_return_status and build_error_array
6195     ***/
6196     -------------------------------------------------------------------------
6197 
6198     FOR i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST LOOP
6199       BEGIN
6200       -- Increment total processed rows
6201       --##Count
6202       l_part_rows_processed := l_part_rows_processed+1;
6203       -- Initialization for each iteration
6204       l_row_notfound       := FALSE;
6205       l_return_status      := G_RET_STS_SUCCESS;
6206 
6207       l_context := 'RELATIONSHIP VALIDATING';
6208 
6209       -- To find duplicate relationship in the batch
6210       IF i>1 THEN
6211          x := i-1;
6212          IF (RTRIM(rinf_source_article_title_tbl(i)) = RTRIM(rinf_source_article_title_tbl(x))) AND
6213             (RTRIM(rinf_target_article_title_tbl(i)) = RTRIM(rinf_target_article_title_tbl(x)))
6214 	    THEN
6215             Okc_Api.Set_Message(G_APP_NAME,
6216 		                      'OKC_REL_DUP_TITLE_ORG',
6217 						  'CLAUSE1',
6218 						  rinf_source_article_title_tbl(i),
6219 						  'CLAUSE2',
6220 						  rinf_target_article_title_tbl(i));
6221             l_return_status := G_RET_STS_ERROR;
6222             RAISE FND_API.G_EXC_ERROR;
6223          END IF;
6224       END IF;
6225       -- Logic to decide what to do in case of Action='S'
6226 
6227 	 IF rinf_action_tbl(i) = 'S' THEN
6228 	    rinf_action_tbl(i) := 'N';
6229 	 END IF;
6230 
6231 
6232       IF rinf_action_tbl(i) = 'N' THEN
6233 
6234           --TRIM trailing space because
6235           rinf_source_article_title_tbl(i) := RTRIM(rinf_source_article_title_tbl(i));
6236           rinf_target_article_title_tbl(i) := RTRIM(rinf_target_article_title_tbl(i));
6237 
6238 
6239         IF rinf_source_article_id_tbl(i) is NULL THEN
6240 	        IF p_validate_only = 'Y' THEN
6241                 OPEN clause_exists_csr (rinf_source_article_title_tbl(i),
6242 			                         rinf_org_id_tbl(i),
6243 		                              rinf_batch_number_tbl(i));
6244 	           FETCH clause_exists_csr into l_clause;
6245 	           CLOSE clause_exists_csr;
6246 		      IF l_clause is null THEN
6247                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6248                       p_msg_name     => 'OKC_SOURCE_ART_NOT_FOUND',
6249                       p_token1       => 'ARTICLE_TITLE',
6250                       p_token1_value => rinf_source_article_title_tbl(i));
6251                 l_return_status := G_RET_STS_ERROR;
6252                 RAISE FND_API.G_EXC_ERROR ;
6253 			 ELSE
6254 		      -- Reset Local Variables
6255 			 l_clause := NULL;
6256 		      END IF;
6257 	        ELSE
6258                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6259                       p_msg_name     => 'OKC_SOURCE_ART_NOT_FOUND',
6260                       p_token1       => 'ARTICLE_TITLE',
6261                       p_token1_value => rinf_source_article_title_tbl(i));
6262               l_return_status := G_RET_STS_ERROR;
6263              RAISE FND_API.G_EXC_ERROR ;
6264           END IF;
6265         END IF;
6266 
6267         IF rinf_target_article_id_tbl(i) is NULL THEN
6268 	        IF p_validate_only = 'Y' THEN
6269                 OPEN clause_exists_csr (rinf_target_article_title_tbl(i),
6270 			                         rinf_org_id_tbl(i),
6271 		                              rinf_batch_number_tbl(i));
6272 	           FETCH clause_exists_csr into l_clause;
6273 	           CLOSE clause_exists_csr;
6274 		      IF l_clause is null THEN
6275                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6276                       p_msg_name     => 'OKC_TARGET_ART_NOT_FOUND',
6277                       p_token1       => 'ARTICLE_TITLE',
6278                       p_token1_value => rinf_target_article_title_tbl(i));
6279                 l_return_status := G_RET_STS_ERROR;
6280                 RAISE FND_API.G_EXC_ERROR ;
6281 			 ELSE
6282 		      -- Reset Local Variables
6283 			 l_clause := NULL;
6284 		      END IF;
6285 	        ELSE
6286                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6287                       p_msg_name     => 'OKC_TARGET_ART_NOT_FOUND',
6288                       p_token1       => 'ARTICLE_TITLE',
6289                       p_token1_value => rinf_target_article_title_tbl(i));
6290               l_return_status := G_RET_STS_ERROR;
6291              RAISE FND_API.G_EXC_ERROR ;
6292           END IF;
6293        END IF;
6294 
6295 
6296 
6297 /*        IF rinf_source_article_id_tbl(i) is NULL THEN
6298                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6299                       p_msg_name     => 'OKC_SOURCE_ART_NOT_FOUND',
6300                       p_token1       => 'ARTICLE_TITLE',
6301                       p_token1_value => rinf_source_article_title_tbl(i));
6302               l_return_status := G_RET_STS_ERROR;
6303              RAISE FND_API.G_EXC_ERROR ;
6304           END IF;
6305 
6306           IF rinf_target_article_id_tbl(i) is NULL THEN
6307                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6308                       p_msg_name     => 'OKC_TARGET_ART_NOT_FOUND',
6309                       p_token1       => 'ARTICLE_TITLE',
6310                       p_token1_value => rinf_target_article_title_tbl(i));
6311               l_return_status := G_RET_STS_ERROR;
6312              RAISE FND_API.G_EXC_ERROR ;
6313           END IF;
6314 */
6315       ELSIF rinf_action_tbl(i) = 'D' THEN
6316 
6317       -- Check Relationship already exists or not
6318          OPEN  l_rel_exist_csr(rinf_source_article_id_tbl(i),
6319                                rinf_target_article_id_tbl(i),
6320                                rinf_org_id_tbl(i),
6321 						 rinf_relationship_type_tbl(i));
6322 	    FETCH l_rel_exist_csr into l_dummy;
6323 	    CLOSE l_rel_exist_csr;
6324 	    IF l_dummy <> '1' THEN
6325             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6326                                 p_msg_name => 'OKC_ART_REL_NOT_EXIST',
6327 						  p_token1   => 'ARTICLE1',
6328 						  p_token1_value => rinf_source_article_title_tbl(i),
6329 						  p_token2   => 'ARTICLE2',
6330 						  p_token2_value => rinf_target_article_title_tbl(i)
6331 						  );
6332 		  -- Reset local variable
6333 	       l_dummy := NULL;
6334             l_return_status := G_RET_STS_ERROR;
6335             RAISE FND_API.G_EXC_ERROR ;
6336 
6337          END IF;
6338       ELSE
6339 
6340           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6341                   p_msg_name     => 'OKC_REL_INV_IMP_ACTION');
6342           l_return_status := G_RET_STS_ERROR;
6343           RAISE FND_API.G_EXC_ERROR ;
6344       END IF;
6345 
6346       -----------------------------------------------------------
6347       -- Common validation or attribute settting
6348       -- regardless of status and import action
6349       -- this validation is not included in validate api
6350       -----------------------------------------------------------
6351       IF rinf_action_tbl(i) = 'N' THEN
6352 
6353 	 -- Check Source Article and Target Article should not be same
6354 
6355           IF rinf_target_article_id_tbl(i)  = rinf_source_article_id_tbl(i) THEN
6356             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6357                                 p_msg_name => 'OKC_IMP_SAME_ART_RELTNSHP',
6358 						  p_token1   => 'ARTICLE1',
6359 						  p_token1_value => rinf_source_article_title_tbl(i));
6360             l_return_status := G_RET_STS_ERROR;
6361          END IF;
6362 
6363       -- Check Org id is valid org and EIT is defined for this org
6364          OPEN  l_org_valid_csr(rinf_org_id_tbl(i));
6365 	    FETCH l_org_valid_csr into l_dummy1;
6366 	    CLOSE l_org_valid_csr;
6367 	    IF l_dummy1 <> '1' THEN
6368             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6369                                 p_msg_name => 'OKC_ART_ORG_INVALID');
6370             l_return_status := G_RET_STS_ERROR;
6371          END IF;
6372 
6373 
6374       -- Check Relationship already exists or not
6375          OPEN  l_rel_exist_csr(rinf_source_article_id_tbl(i),
6376 	                          rinf_target_article_id_tbl(i),
6377 						 rinf_org_id_tbl(i),
6378 						 rinf_relationship_type_tbl(i));
6379 	    FETCH l_rel_exist_csr into l_dummy;
6380 	    CLOSE l_rel_exist_csr;
6381 	    IF l_dummy = '1' THEN
6382             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6383                                 p_msg_name => 'OKC_ART_REL_EXIST',
6384 						  p_token1   => 'ARTICLE1',
6385 						  p_token1_value => rinf_source_article_title_tbl(i),
6386 						  p_token2   => 'ARTICLE2',
6387 						  p_token2_value => rinf_target_article_title_tbl(i));
6388             l_return_status := G_RET_STS_ERROR;
6389 		  -- Reset local variable
6390 	       l_dummy := NULL;
6391          END IF;
6392 
6393       -- Checking Relationship types
6394 /*
6395         IF nvl(rinf_relationship_type_tbl(i), '*') not in ('ALTERNATE','INCOMPATIBLE') THEN
6396             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6397                                 p_msg_name => 'OKC_INVALID_RELTYPE');
6398             l_return_status := G_RET_STS_ERROR;
6399       END IF;
6400 */
6401         IF rinf_relationship_type_tbl(i) IS NOT NULL THEN
6402 	      l_tmp_return_status := okc_util.check_lookup_code('OKC_ARTICLE_RELATIONSHIP_TYPE',rinf_relationship_type_tbl(i));
6403            IF (l_tmp_return_status <> G_RET_STS_SUCCESS) THEN
6404 		    Okc_Api.Set_Message(G_APP_NAME, G_INVALID_VALUE, G_COL_NAME_TOKEN, 'RELATIONSHIP_TYPE');
6405 		    l_return_status := G_RET_STS_ERROR;
6406 	      END IF;
6407 	   END IF;
6408 
6409        -- Soruce Article and Target Article should have same intent
6410           IF rinf_target_intent_tbl(i)  <> rinf_source_intent_tbl(i) THEN
6411             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6412                                 p_msg_name => 'OKC_ART_NOT_SAME_INTENT',
6413 						  p_token1   => 'ARTICLE1',
6414 						  p_token1_value => rinf_source_article_title_tbl(i),
6415 						  p_token2   => 'ARTICLE2',
6416 						  p_token2_value => rinf_target_article_title_tbl(i));
6417             l_return_status := G_RET_STS_ERROR;
6418          END IF;
6419        -- Soruce Article and Target Article should have same provision flag
6420 	   FOR source in l_provision_csr(rinf_source_article_id_tbl(i))
6421 	   LOOP
6422 	      l_source_provision := source.provision_yn;
6423            END LOOP;
6424 	   FOR target in l_provision_csr(rinf_target_article_id_tbl(i))
6425 	   LOOP
6426 	      l_target_provision := target.provision_yn;
6427            END LOOP;
6428 	   IF l_source_provision <> l_target_provision THEN
6429 		   okc_Api.Set_Message(p_app_name => G_APP_NAME,
6430 		                       p_msg_name => 'OKC_ART_IMP_PROVISION_RELATION',
6431 						   p_token1   => 'ARTICLE1',
6432 						   p_token1_value => rinf_source_article_title_tbl(i),
6433 						   p_token2   => 'ARTICLE2',
6434 						   p_token2_value => rinf_target_article_title_tbl(i));
6435 		    l_return_status := G_RET_STS_ERROR;
6436 	   END IF;
6437 
6438        END IF;
6439       ------------------------------------------------------------------------
6440       -- Now that we have validated and data is clean we can fetch sequences and ids
6441       -- for new relationships for DML and also set the process status to Success
6442       -------------------------------------------------------------------------
6443 
6444       -- Summarize report for this row
6445       -- Status 'F' is for internal use meaning parsing failure marked in
6446       -- java concurrent program
6447       IF (l_return_status = G_RET_STS_SUCCESS) THEN
6448          IF (nvl(rinf_process_status_tbl(i), 'E') = 'E') THEN
6449            rinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
6450          ELSIF ( rinf_process_status_tbl(i) = 'F') THEN
6451            -- ##count parser failure as error
6452            --l_tot_rows_failed := l_tot_rows_failed+1;
6453            l_part_rows_failed := l_part_rows_failed+1;
6454            rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6455          END IF;
6456       ELSIF (l_return_status = l_sts_warning) THEN
6457          IF (nvl(rinf_process_status_tbl(i),'E') = 'E') THEN
6458            rinf_process_status_tbl(i) := l_sts_warning;
6459            --##count
6460            --l_tot_rows_warned := l_tot_rows_warned+1;
6461            l_part_rows_warned := l_part_rows_warned+1;
6462          ELSIF (rinf_process_status_tbl(i) = 'F') THEN
6463            -- ##count parser failure as error
6464            --l_tot_rows_failed := l_tot_rows_failed+1;
6465            l_part_rows_failed := l_part_rows_failed+1;
6466            rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6467          END IF;
6468       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
6469            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6470       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
6471            RAISE FND_API.G_EXC_ERROR;
6472       END IF;
6473 
6474     -------------------------
6475     -------------------------
6476     -- Exception Block for each iteration in Loop
6477     -- validation and unexpected errors
6478     -- In case of unexpected error, escape the loop
6479     -------------------------
6480     -------------------------
6481 
6482 
6483       EXCEPTION
6484           WHEN FND_API.G_EXC_ERROR THEN
6485               IF (l_debug = 'Y') THEN
6486                  okc_debug.log('300: In Relationships_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
6487               END IF;
6488               --l_return_status := G_RET_STS_ERROR ;
6489               build_error_array(
6490                  p_msg_data     => x_msg_data,
6491                  p_context      => l_context,
6492                  p_batch_process_id => l_batch_process_id,
6493                  p_interface_id  => rinf_interface_id_tbl(i),
6494                  p_article_title => rinf_source_article_title_tbl(i),
6495                  p_error_type    => G_RET_STS_ERROR,
6496 			  p_entity        => 'RELATIONSHIP'
6497                 );
6498                rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6499                --##count
6500                --l_tot_rows_failed := l_tot_rows_failed+1;
6501                l_part_rows_failed := l_part_rows_failed+1;
6502                -- Continue to next row
6503 
6504           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6505               IF (l_debug = 'Y') THEN
6506                  okc_debug.log('400: Leaving Relationships_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
6507               END IF;
6508 
6509               IF l_rel_interface_csr%ISOPEN THEN
6510                  CLOSE l_rel_interface_csr;
6511               END IF;
6512 
6513               --Set_Message
6514               l_return_status := G_RET_STS_UNEXP_ERROR ;
6515               x_return_status := G_RET_STS_UNEXP_ERROR ;
6516 
6517               build_error_array(
6518                  p_msg_data     => x_msg_data,
6519                  p_context      => l_context,
6520                  p_batch_process_id => l_batch_process_id,
6521                  p_interface_id  => rinf_interface_id_tbl(i),
6522                  p_article_title => rinf_source_article_title_tbl(i),
6523                  p_error_type    => G_RET_STS_UNEXP_ERROR,
6524 			  p_entity        => 'RELATIONSHIP'
6525                  );
6526                rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6527                --##count
6528                --l_tot_rows_failed := l_tot_rows_failed+1;
6529                l_part_rows_failed := l_part_rows_failed+1;
6530               exit; -- exit the current fetch
6531 
6532           WHEN OTHERS THEN
6533               IF (l_debug = 'Y') THEN
6534                 okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
6535               END IF;
6536 
6537               IF l_rel_interface_csr%ISOPEN THEN
6538                  CLOSE l_rel_interface_csr;
6539               END IF;
6540 
6541               l_return_status := G_RET_STS_UNEXP_ERROR ;
6542               x_return_status := G_RET_STS_UNEXP_ERROR ;
6543 
6544               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6545                                 p_msg_name     => G_UNEXPECTED_ERROR,
6546                                 p_token1       => G_SQLCODE_TOKEN,
6547                                 p_token1_value => sqlcode,
6548                                 p_token2       => G_SQLERRM_TOKEN,
6549                                 p_token2_value => sqlerrm);
6550 
6551               build_error_array(
6552                  p_msg_data     => G_UNEXPECTED_ERROR,
6553                  p_context      => l_context,
6554                  p_batch_process_id => l_batch_process_id,
6555                  p_interface_id  => rinf_interface_id_tbl(i),
6556                  p_article_title => rinf_source_article_title_tbl(i),
6557                  p_error_type    => G_RET_STS_ERROR,
6558 			  p_entity        => 'RELATIONSHIP'
6559                 );
6560                rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6561                --##count
6562                --l_tot_rows_failed := l_tot_rows_failed+1;
6563                l_part_rows_failed := l_part_rows_failed+1;
6564               exit;  -- exit the current fetch
6565           END;
6566     -------------------------
6567     -------------------------
6568     -- Exception Block for each iteration in Loop ends
6569     -------------------------
6570     -------------------------
6571 
6572 
6573      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
6574     ------------------------------------------------------------------------
6575     -------------- End of Inner Loop thru fetched row for---------------------
6576     -- validation
6577     -------------------------------------------------------------------------
6578     -- In order to propagate Unexpected error raise it if it is 'U'
6579     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
6580          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6581     END IF;
6582 
6583     -------------------------
6584     -------------------------
6585     -- Exception Block for Inner Loop starts
6586     -- Handles unexpected errors as last step
6587     -------------------------
6588     -------------------------
6589     EXCEPTION
6590          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6591              IF (l_debug = 'Y') THEN
6592                 okc_debug.log('400: Leaving Relationships_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
6593              END IF;
6594 
6595              IF l_rel_interface_csr%ISOPEN THEN
6596                 CLOSE l_rel_interface_csr;
6597              END IF;
6598              l_return_status := G_RET_STS_UNEXP_ERROR ;
6599              x_return_status := G_RET_STS_UNEXP_ERROR ;
6600              exit; -- exit outermost loop
6601 
6602         WHEN OTHERS THEN
6603              IF (l_debug = 'Y') THEN
6604                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
6605              END IF;
6606 
6607              IF l_rel_interface_csr%ISOPEN THEN
6608                 CLOSE l_rel_interface_csr;
6609              END IF;
6610              l_return_status := G_RET_STS_UNEXP_ERROR ;
6611              x_return_status := G_RET_STS_UNEXP_ERROR ;
6612              exit; -- exit outermost loop
6613      END;
6614 
6615     -------------------------
6616     -------------------------
6617     -- Exception Block for Each Iteration of outermost Loop ends
6618     -------------------------
6619     -------------------------
6620 
6621     ------------------------------------------------------------------------
6622     --------------------- Start Do_DML for Relationships   ---------------
6623     -- Insert or Update Relationships
6624     -------------------------------------------------------------------------
6625     -- initialize l_return_status to track status of DML execution
6626      l_return_status := G_RET_STS_SUCCESS;
6627 
6628 
6629     IF p_validate_only = 'N' THEN
6630          BEGIN
6631          SAVEPOINT bulkdml;
6632 
6633          i := 0;
6634         -- Bulk insert New Valid Records
6635          BEGIN
6636          l_context := 'INSERTING FIRST NEW RELATIONSHIP INTO TABLE';
6637 
6638            FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6639             INSERT INTO OKC_ARTICLE_RELATNS_ALL(
6640              SOURCE_ARTICLE_ID,
6641              TARGET_ARTICLE_ID,
6642              ORG_ID,
6643              RELATIONSHIP_TYPE,
6644              OBJECT_VERSION_NUMBER,
6645              CREATED_BY,
6646              CREATION_DATE,
6647              LAST_UPDATED_BY,
6648              LAST_UPDATE_LOGIN,
6649              LAST_UPDATE_DATE)
6650            SELECT
6651              rinf_source_article_id_tbl(i),
6652              rinf_target_article_id_tbl(i),
6653              rinf_org_id_tbl(i),
6654              rinf_relationship_type_tbl(i),
6655 	     1.0,
6656              l_user_id,
6657              sysdate,
6658              l_user_id,
6659              l_login_id,
6660              sysdate
6661            FROM DUAL
6662            WHERE rinf_action_tbl(i)  = 'N' and
6663                  rinf_process_status_tbl(i)  in ('S', 'W')  ;
6664 
6665 
6666    FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6667             INSERT INTO OKC_ARTICLE_RELATNS_ALL(
6668              TARGET_ARTICLE_ID,
6669              SOURCE_ARTICLE_ID,
6670 	     ORG_ID,
6671 	     RELATIONSHIP_TYPE,
6672              OBJECT_VERSION_NUMBER,
6673              CREATED_BY,
6674              CREATION_DATE,
6675              LAST_UPDATED_BY,
6676              LAST_UPDATE_LOGIN,
6677              LAST_UPDATE_DATE)
6678            SELECT
6679              rinf_source_article_id_tbl(i),
6680              rinf_target_article_id_tbl(i),
6681              rinf_org_id_tbl(i),
6682              rinf_relationship_type_tbl(i),
6683 		   1.0,
6684              l_user_id,
6685              sysdate,
6686              l_user_id,
6687              l_login_id,
6688              sysdate
6689            FROM DUAL
6690            WHERE rinf_action_tbl(i)  = 'N' and
6691                  rinf_process_status_tbl(i)  in ('S', 'W')  ;
6692         EXCEPTION
6693            WHEN OTHERS THEN
6694              IF (l_debug = 'Y') THEN
6695                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
6696              END IF;
6697           END;
6698 
6699          --
6700          --  End of Insert into OKC_ARTICLE_RELATNS_ALL
6701          --
6702          --
6703 
6704 
6705          i := 0;
6706         -- Bulk delete Valid Records
6707          BEGIN
6708          l_context := 'DELETE RELATIONSHIP FROM TABLE';
6709 
6710            FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6711             DELETE FROM OKC_ARTICLE_RELATNS_ALL
6712             WHERE
6713              SOURCE_ARTICLE_ID = rinf_source_article_id_tbl(i) AND
6714              TARGET_ARTICLE_ID = rinf_target_article_id_tbl(i) AND
6715              ORG_ID = rinf_org_id_tbl(i) AND
6716              RELATIONSHIP_TYPE = rinf_relationship_type_tbl(i) AND
6717              rinf_action_tbl(i)  = 'D' AND
6718              rinf_process_status_tbl(i)  in ('S', 'W')  ;
6719 
6720 
6721            FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6722              DELETE FROM OKC_ARTICLE_RELATNS_ALL
6723 	     WHERE
6724 	     TARGET_ARTICLE_ID = rinf_source_article_id_tbl(i) AND
6725 	     SOURCE_ARTICLE_ID = rinf_target_article_id_tbl(i) AND
6726 	     ORG_ID = rinf_org_id_tbl(i) AND
6727 	     RELATIONSHIP_TYPE = rinf_relationship_type_tbl(i) AND
6728 	     rinf_action_tbl(i)  = 'D' AND
6729 	     rinf_process_status_tbl(i)  in ('S', 'W')  ;
6730 
6731         EXCEPTION
6732            WHEN OTHERS THEN
6733              IF (l_debug = 'Y') THEN
6734                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
6735              END IF;
6736           END;
6737 
6738          --
6739          --  End of Delete from OKC_ARTICLE_RELATNS_ALL
6740          --
6741          --
6742 
6743 
6744 
6745       -- Exception for bulk DML block
6746       EXCEPTION
6747         WHEN OTHERS THEN
6748              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
6749               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6750                                   p_msg_name     => G_UNEXPECTED_ERROR,
6751                                   p_token1       => G_SQLCODE_TOKEN,
6752                                   p_token1_value => sqlcode,
6753                                   p_token2       => G_SQLERRM_TOKEN,
6754                                   p_token2_value => sqlerrm);
6755               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
6756                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
6757                                   p_token1       => 'CONTEXT',
6758                                   p_token1_value => l_context);
6759 
6760               build_error_array(
6761                                  p_msg_data     => null,
6762                                  p_context      => l_context,
6763                                  p_batch_process_id => l_batch_process_id,
6764                                  p_interface_id  => -99,
6765                                  p_article_title => NULL,
6766                                  p_error_type    => G_RET_STS_ERROR,
6767 						   p_entity        => 'RELATIONSHIP'
6768               );
6769               l_return_status := G_RET_STS_UNEXP_ERROR;
6770               x_return_status := G_RET_STS_UNEXP_ERROR;
6771 
6772               --##count:rollback the count
6773               l_part_rows_failed := l_part_rows_processed;
6774               l_part_rows_warned := 0;
6775 
6776               ROLLBACK TO SAVEPOINT bulkdml;
6777               exit; -- exit outermost loop
6778       END;
6779 
6780     END IF; --- validate_only = 'N'
6781 
6782     ------------------------------------------------------------------------
6783     --------------------- End of Do_DML for Relationships   ---------------
6784     -------------------------------------------------------------------------
6785 
6786     ------------------------------------------------------------------------
6787     --------------- Start of Do_DML for import related tables   ------------
6788     -- Update interface table
6789     -- Insert Errors into Error table
6790     -------------------------------------------------------------------------
6791     -- Update Interface Table
6792     i:=0;
6793     BEGIN
6794      l_context := 'UPDATING RELATIONSHIPS INTERFACE TABLE';
6795      FORALL i in rinf_interface_id_tbl.FIRST..rinf_interface_id_tbl.LAST
6796        UPDATE OKC_ART_RELS_INTERFACE
6797        SET
6798            -- We don't want to update process_status to 'S' or 'W' in validation_mode
6799            -- because it is not going to be picked up in next run if we do so
6800            PROCESS_STATUS = decode(p_validate_only||rinf_process_status_tbl(i)||l_bulk_failed,
6801                                                'NEN','E',
6802                                                'NSN','S',
6803                                                'NWN','W',
6804                                                'NEY','E',
6805                                                'NSY',NULL,
6806                                                'NWY',NULL,
6807                                                'YEY','E',
6808                                                'YEN','E',
6809                                                'NFY','E',
6810                                                'YFY','E',
6811                                                'NFN','E',
6812                                                'YFN','E',NULL),
6813            PROGRAM_ID                 = l_program_id,
6814            REQUEST_ID                 = l_request_id,
6815            PROGRAM_LOGIN_ID           = l_program_login_id,
6816            PROGRAM_APPLICATION_ID     = l_program_appl_id,
6817            OBJECT_VERSION_NUMBER      = rinf_object_version_number_tbl(i) + 1,
6818            LAST_UPDATED_BY            = l_user_id,
6819            LAST_UPDATE_LOGIN          = l_login_id,
6820            LAST_UPDATE_DATE           = SYSDATE
6821          WHERE
6822            interface_id = rinf_interface_id_tbl(i);
6823     EXCEPTION
6824            WHEN OTHERS THEN
6825              IF (l_debug = 'Y') THEN
6826                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
6827              END IF;
6828              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6829                         p_msg_name     => G_UNEXPECTED_ERROR,
6830                         p_token1       => G_SQLCODE_TOKEN,
6831                         p_token1_value => sqlcode,
6832                         p_token2       => G_SQLERRM_TOKEN,
6833                         p_token2_value => sqlerrm);
6834              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
6835                         p_msg_name     => 'OKC_REL_INT_UPDATE_FAILED');
6836              build_error_array(
6837                        p_msg_data     => null,
6838                        p_context      => l_context,
6839                        p_batch_process_id => l_batch_process_id,
6840                        p_interface_id  => -99,
6841                        p_article_title => NULL,
6842                        p_error_type    => G_RET_STS_ERROR,
6843 				   p_entity        => 'RELATIONSHIP'
6844              );
6845 
6846 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
6847 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
6848 		       --##count:rollback the count
6849 		      l_part_rows_failed := l_part_rows_processed;
6850 		      l_part_rows_warned := 0;
6851 
6852              --RAISE FND_API.G_EXC_ERROR ;
6853   END;
6854    --
6855    -- End of Update OKC_RELATIONSHIPS_INTERFACE
6856    --
6857    --
6858 
6859     --
6860     --Insert Errors into Error table for this fetch
6861     --
6862     insert_error_array(
6863      x_return_status => x_return_status,
6864      x_msg_count     => x_msg_count,
6865      x_msg_data      => x_msg_data
6866     );
6867 
6868 
6869     IF (x_return_status = l_insert_errors_error) THEN
6870       NULL;
6871      -- Ignore
6872      -- RAISE l_insert_errors_exception;
6873     END IF;
6874 
6875     ------------------------------------------------------------------------
6876     --------------- End of Do_DML for import related tables   ------------
6877     -------------------------------------------------------------------------
6878     commit;
6879 
6880     -- Now delete cache for next bulk fetch
6881 
6882     rinf_interface_id_tbl.DELETE;
6883     rinf_batch_number_tbl.DELETE;
6884     rinf_object_version_number_tbl.DELETE;
6885     rinf_source_article_title_tbl.DELETE;
6886     rinf_target_article_title_tbl.DELETE;
6887     rinf_org_id_tbl.DELETE;
6888     rinf_relationship_type_tbl.DELETE;
6889     rinf_process_status_tbl.DELETE;
6890     rinf_action_tbl.DELETE;
6891     rinf_source_intent_tbl.DELETE;
6892     rinf_source_article_id_tbl.DELETE;
6893     rinf_target_intent_tbl.DELETE;
6894     rinf_target_article_id_tbl.DELETE;
6895 
6896     err_batch_process_id_tbl.DELETE;
6897     err_article_title_tbl.DELETE;
6898     err_interface_id_tbl.DELETE;
6899     err_error_number_tbl.DELETE;
6900     err_object_version_number_tbl.DELETE;
6901     err_error_type_tbl.DELETE;
6902     err_entity_tbl.DELETE;
6903     err_error_description_tbl.DELETE;
6904 
6905    EXIT WHEN l_rel_interface_csr%NOTFOUND;
6906 END LOOP;
6907 
6908 
6909 -----------------------------------------------------------------------
6910 -- End of outermost loop for bulk fetch
6911 -----------------------------------------------------------------------
6912 
6913 IF l_rel_interface_csr%ISOPEN THEN
6914 CLOSE l_rel_interface_csr;
6915 END IF;
6916 
6917 
6918 --##count:add up last processed counts
6919 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
6920 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
6921 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
6922 /*****************
6923 --Update Batch Process Table as a last step
6924 UPDATE OKC_ART_INT_BATPROCS_ALL
6925 SET
6926   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
6927   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
6928   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
6929   END_DATE                   = SYSDATE,
6930   PROGRAM_ID                 = l_program_id,
6931   REQUEST_ID                 = l_request_id,
6932   PROGRAM_LOGIN_ID           = l_program_login_id,
6933   PROGRAM_APPLICATION_ID     = l_program_appl_id,
6934   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
6935   LAST_UPDATED_BY            = l_user_id,
6936   LAST_UPDATE_LOGIN          = l_login_id,
6937   LAST_UPDATE_DATE           = SYSDATE
6938 WHERE
6939   BATCH_PROCESS_ID  = l_batch_process_id
6940   AND ENTITY = 'Relationship' ;
6941 *********************/
6942 
6943   p_rows_processed := l_tot_rows_processed;
6944   p_rows_failed := l_tot_rows_failed;
6945   p_rows_warned := l_tot_rows_warned;
6946 
6947 IF err_error_number_tbl.COUNT > 0 THEN
6948  insert_error_array(
6949    x_return_status => x_return_status,
6950    x_msg_count     => x_msg_count,
6951    x_msg_data      => x_msg_data
6952  );
6953 END IF;
6954 
6955 -- Print statistic of this run in the log
6956 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
6957 --wrap_up(p_validate_only,p_batch_number,l_tot_rows_processed,l_tot_rows_failed,l_tot_rows_warned,l_batch_process_id,'RELATIONSHIP');
6958 /*
6959       FND_MSG_PUB.initialize;
6960      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6961                         p_msg_name     => 'OKC_ART_IMP_ERR');
6962 
6963       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
6964 
6965       FND_MSG_PUB.initialize;
6966 */
6967 commit; -- Final commit for status update
6968 
6969 IF (l_debug = 'Y') THEN
6970  okc_debug.log('2000: Leaving relationships import', 2);
6971 END IF;
6972 --x_return_status := l_return_status; this may cause to erase error x_return_status
6973 
6974 EXCEPTION
6975 
6976   WHEN FND_API.G_EXC_ERROR THEN
6977       IF (l_debug = 'Y') THEN
6978          okc_debug.log('3000: Leaving Relationships_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
6979       END IF;
6980       --Insert Errors into Error table if there is any
6981       insert_error_array(
6982        x_return_status => x_return_status,
6983        x_msg_count     => x_msg_count,
6984        x_msg_data      => x_msg_data
6985       );
6986       x_return_status := G_RET_STS_ERROR ;
6987 
6988       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6989       IF (l_debug = 'Y') THEN
6990          okc_debug.log('4000: Leaving Relationships_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
6991       END IF;
6992       --Insert Errors into Error table if there is any
6993 
6994       insert_error_array(
6995        x_return_status => x_return_status,
6996        x_msg_count     => x_msg_count,
6997        x_msg_data      => x_msg_data
6998       );
6999       commit;
7000 
7001       IF l_rel_interface_csr%ISOPEN THEN
7002          CLOSE l_rel_interface_csr;
7003       END IF;
7004 
7005       x_return_status := G_RET_STS_UNEXP_ERROR ;
7006       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7007         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7008       END IF;
7009       get_print_msgs_stack(p_msg_data => x_msg_data);
7010 
7011   WHEN l_insert_errors_exception THEN
7012       --
7013       -- In this exception handling, we don't insert error array again
7014       -- because error happend in the module
7015       --
7016       IF (l_debug = 'Y') THEN
7017         okc_debug.log('5000: Leaving Relationships_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
7018       END IF;
7019 
7020       IF l_rel_interface_csr%ISOPEN THEN
7021          CLOSE l_rel_interface_csr;
7022       END IF;
7023 
7024 
7025       --x_return_status := G_RET_STS_UNEXP_ERROR ;
7026       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7027         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7028       END IF;
7029       get_print_msgs_stack(p_msg_data => x_msg_data);
7030       commit;
7031 
7032   WHEN OTHERS THEN
7033       IF (l_debug = 'Y') THEN
7034         okc_debug.log('5000: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
7035       END IF;
7036       --Insert Errors into Error table if there is any
7037       insert_error_array(
7038        x_return_status => x_return_status,
7039        x_msg_count     => x_msg_count,
7040        x_msg_data      => x_msg_data
7041       );
7042       commit;
7043       --
7044       IF l_rel_interface_csr%ISOPEN THEN
7045          CLOSE l_rel_interface_csr;
7046       END IF;
7047 
7048       x_return_status := G_RET_STS_UNEXP_ERROR ;
7049       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7050         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7051       END IF;
7052  get_print_msgs_stack(p_msg_data => x_msg_data);
7053 END import_relationships;
7054 
7055 PROCEDURE import_fnd_flex_value_sets(
7056     x_return_status                OUT NOCOPY VARCHAR2,
7057     x_msg_count                    OUT NOCOPY NUMBER,
7058     x_msg_data                     OUT NOCOPY VARCHAR2,
7059 
7060     p_batch_procs_id               IN NUMBER,
7061     p_batch_number                 IN VARCHAR2,
7062     p_validate_only                IN VARCHAR2 := 'Y',
7063     p_fetchsize                    IN NUMBER := 100
7064    ) IS
7065     l_api_version                 CONSTANT NUMBER := 1;
7066     l_api_name                    CONSTANT VARCHAR2(30) := 'import_fnd_flex_value_sets';
7067     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
7068     l_row_notfound                BOOLEAN := FALSE;
7069     l_user_id                     NUMBER;
7070     l_login_id                    NUMBER;
7071     l_insert_errors_exception     EXCEPTION;
7072     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
7073 
7074     CURSOR l_valset_interface_csr ( cp_batch_number IN VARCHAR2) IS
7075       SELECT
7076            VSINT.INTERFACE_ID           ,
7077            VSINT.BATCH_NUMBER           ,
7078            VSINT.OBJECT_VERSION_NUMBER  ,
7079            VSINT.FLEX_VALUE_SET_NAME    ,
7080            VSINT.VALIDATION_TYPE        ,
7081            VSINT.PROCESS_STATUS         ,
7082            VSINT.ACTION                 ,
7083            VSINT.FORMAT_TYPE            ,
7084            VSINT.MAXIMUM_SIZE           ,
7085            VSINT.DESCRIPTION            ,
7086            VSINT.MINIMUM_VALUE          ,
7087            VSINT.MAXIMUM_VALUE          ,
7088            VSINT.NUMBER_PRECISION       ,
7089            VSINT.UPPERCASE_ONLY_FLAG    ,
7090            VSINT.NUMBER_ONLY_FLAG
7091       FROM OKC_VALUESETS_INTERFACE VSINT
7092       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
7093          AND BATCH_NUMBER = cp_batch_number
7094       ORDER BY VSINT.FLEX_VALUE_SET_NAME ASC;
7095 
7096 -- Flex Valuesets Interface Rows
7097 
7098     TYPE l_vsinf_interface_id             IS TABLE OF OKC_VALUESETS_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
7099     TYPE l_vsinf_batch_number             IS TABLE OF OKC_VALUESETS_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
7100     TYPE l_vsinf_obj_ver_number    IS TABLE OF OKC_VALUESETS_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
7101     TYPE l_vsinf_flex_value_set_name      IS TABLE OF OKC_VALUESETS_INTERFACE.FLEX_VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
7102     TYPE l_vsinf_validation_type          IS TABLE OF OKC_VALUESETS_INTERFACE.VALIDATION_TYPE%TYPE INDEX BY BINARY_INTEGER ;
7103     TYPE l_vsinf_process_status           IS TABLE OF OKC_VALUESETS_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
7104     TYPE l_vsinf_action                   IS TABLE OF OKC_VALUESETS_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
7105     TYPE l_vsinf_format_type              IS TABLE OF OKC_VALUESETS_INTERFACE.FORMAT_TYPE%TYPE INDEX BY BINARY_INTEGER ;
7106     TYPE l_vsinf_maximum_size             IS TABLE OF OKC_VALUESETS_INTERFACE.MAXIMUM_SIZE%TYPE INDEX BY BINARY_INTEGER ;
7107     TYPE l_vsinf_description              IS TABLE OF OKC_VALUESETS_INTERFACE.DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
7108     TYPE l_vsinf_minimum_value            IS TABLE OF OKC_VALUESETS_INTERFACE.MINIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
7109     TYPE l_vsinf_maximum_value            IS TABLE OF OKC_VALUESETS_INTERFACE.MAXIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
7110     TYPE l_vsinf_number_precision         IS TABLE OF OKC_VALUESETS_INTERFACE.NUMBER_PRECISION%TYPE INDEX BY BINARY_INTEGER ;
7111     TYPE l_vsinf_uppercase_only_flag      IS TABLE OF OKC_VALUESETS_INTERFACE.UPPERCASE_ONLY_FLAG%TYPE INDEX BY BINARY_INTEGER ;
7112     TYPE l_vsinf_number_only_flag         IS TABLE OF OKC_VALUESETS_INTERFACE.NUMBER_ONLY_FLAG%TYPE INDEX BY BINARY_INTEGER ;
7113 
7114 
7115 
7116    l_return_status                      VARCHAR2(1);
7117    l_error_index                        NUMBER          := 1;
7118    l_batch_process_id                   NUMBER          := 1;
7119    l_context                            VARCHAR2(50)    := NULL;
7120    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
7121    l_tot_rows_processed                 NUMBER          := 0;
7122    l_tot_rows_failed                    NUMBER          := 0;
7123    l_tot_rows_warned                    NUMBER          := 0;
7124    l_part_rows_processed                NUMBER          := 0;
7125    l_part_rows_failed                   NUMBER          := 0;
7126    l_part_rows_warned                   NUMBER          := 0;
7127    l_bulk_failed                        VARCHAR2(1)     := 'Y';
7128 
7129 -- Variables for flex value sets interface
7130    vsinf_interface_id_tbl                 l_vsinf_interface_id ;
7131    vsinf_batch_number_tbl                 l_vsinf_batch_number ;
7132    vsinf_obj_ver_number_tbl               l_vsinf_obj_ver_number ;
7133    vsinf_flex_value_set_name_tbl          l_vsinf_flex_value_set_name ;
7134    vsinf_validation_type_tbl              l_vsinf_validation_type ;
7135    vsinf_process_status_tbl               l_vsinf_process_status ;
7136    vsinf_action_tbl                       l_vsinf_action ;
7137    vsinf_format_type_tbl                  l_vsinf_format_type ;
7138    vsinf_maximum_size_tbl                 l_vsinf_maximum_size ;
7139    vsinf_description_tbl                  l_vsinf_description ;
7140    vsinf_minimum_value_tbl                l_vsinf_minimum_value ;
7141    vsinf_maximum_value_tbl                l_vsinf_maximum_value ;
7142    vsinf_number_precision_tbl             l_vsinf_number_precision ;
7143    vsinf_uppercase_only_flag_tbl          l_vsinf_uppercase_only_flag ;
7144    vsinf_number_only_flag_tbl             l_vsinf_number_only_flag ;
7145 
7146 
7147    I NUMBER := 0;
7148    j NUMBER := 0;
7149    k NUMBER := 0;
7150    x NUMBER := 0;
7151    l_program_id                         OKC_VALUESETS_INTERFACE.PROGRAM_ID%TYPE;
7152    l_program_login_id                   OKC_VALUESETS_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
7153    l_program_appl_id                    OKC_VALUESETS_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
7154    l_request_id                         OKC_VALUESETS_INTERFACE.REQUEST_ID%TYPE;
7155    l_tmp_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
7156 
7157 
7158 BEGIN
7159 IF (l_debug = 'Y') THEN
7160   okc_debug.log('100: Entered valueset_import', 2);
7161 END IF;
7162 
7163 
7164 ------------------------------------------------------------------------
7165 --  Variable Initialization
7166 -------------------------------------------------------------------------
7167 
7168 -- Standard Start of API savepoint
7169 FND_MSG_PUB.initialize;
7170 --  Initialize API return status to success
7171 x_return_status := FND_API.G_RET_STS_SUCCESS;
7172 l_return_status := G_RET_STS_SUCCESS;
7173 --  Cache user_id, login_id and org_id
7174 l_user_id  := Fnd_Global.user_id;
7175 l_login_id := Fnd_Global.login_id;
7176 
7177 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
7178    l_program_id := NULL;
7179 ELSE
7180    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
7181 END IF;
7182 
7183 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
7184    l_program_login_id := NULL;
7185 ELSE
7186    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
7187 END IF;
7188 
7189 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
7190    l_program_appl_id := NULL;
7191 ELSE
7192    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
7193 END IF;
7194 
7195 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
7196    l_request_id := NULL;
7197 ELSE
7198    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
7199 END IF;
7200 
7201 
7202 l_batch_process_id := p_batch_procs_id;
7203 -------------------------------------------------------------------------
7204 --------------- the outermost loop of this procedure --------------------
7205 -- Bulk fetch all interface rows based on the fetchsize passedby the user
7206 -------------------------------------------------------------------------
7207 
7208 l_context :='BULK FETCH FLEX VALUE SETS INTERFACE ROW';
7209 OPEN l_valset_interface_csr ( p_batch_number );
7210 LOOP
7211 BEGIN
7212     FETCH l_valset_interface_csr BULK COLLECT INTO
7213           vsinf_interface_id_tbl                  ,
7214           vsinf_batch_number_tbl                  ,
7215           vsinf_obj_ver_number_tbl         ,
7216           vsinf_flex_value_set_name_tbl           ,
7217           vsinf_validation_type_tbl               ,
7218           vsinf_process_status_tbl                ,
7219           vsinf_action_tbl                        ,
7220           vsinf_format_type_tbl                   ,
7221           vsinf_maximum_size_tbl                  ,
7222           vsinf_description_tbl                   ,
7223           vsinf_minimum_value_tbl                 ,
7224           vsinf_maximum_value_tbl                 ,
7225           vsinf_number_precision_tbl              ,
7226           vsinf_uppercase_only_flag_tbl           ,
7227           vsinf_number_only_flag_tbl              LIMIT p_fetchsize;
7228     EXIT WHEN vsinf_interface_id_tbl.COUNT = 0 ;
7229 
7230     ------------------------------------------------------------------------
7231     -- Variable initialization
7232     -------------------------------------------------------------------------
7233     --For each fetch, valueset variable table index should be initialized
7234     j := 1;
7235     --##count:initialization
7236     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
7237     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
7238     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
7239     l_part_rows_processed   := 0;
7240     l_part_rows_failed      := 0;
7241     l_part_rows_warned      := 0;
7242     l_bulk_failed           := 'N';
7243     ---------------------------------------------------------------------------
7244     --------------------- Inner Loop thru fetched rows for---------------------
7245     -- validation, parse and validate article text, create a variable list
7246     -- prepare rows for DML if validate_only is 'N'
7247     /***  Processing Rule to set process_status
7248     Because we want to collect as much info as possible, we need to
7249     maintain process status while keeping the process moving.
7250     So, we'll set l_return_status as validation goes on and
7251     at the end we will set inf_process_status_tbl(i) with l_return_status
7252     for final result.  However, we will get out of this process if there
7253     is a significant error such as 'U'.
7254     The return status examined
7255     -api_return_status : return status for api call
7256     -l_return_status : validation result of each row
7257     -x_return_status : final result status for concurrent program request
7258     Rule to set return status
7259     If api_return_status for api call is
7260     * 'S' then continue
7261     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
7262         and build_error_array then continue
7263     * 'E' and it is significant then set l_return_status = 'E' and raise
7264       Exception
7265     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
7266        'E' at the end of validation
7267     * 'U' then set l_return_status = 'U' and raise 'U' exception
7268     * At the end, if it goes thru with no Exception,
7269     Check if l_return_status is 'E' then raise Exception
7270        Otherwise (meaning l_return_status is 'S' or 'W'),
7271           vsinf_process_status_tbl(i) = l_return_status
7272     * In the exception, we will set
7273           vsinf_process_status_tbl(i) = l_return_status and build_error_array
7274     ***/
7275     -------------------------------------------------------------------------
7276 
7277     FOR i in vsinf_interface_id_tbl.FIRST ..vsinf_interface_id_tbl.LAST LOOP
7278       BEGIN
7279       -- Increment total processed rows
7280       --##Count
7281       l_part_rows_processed := l_part_rows_processed+1;
7282       -- Initialization for each iteration
7283       l_row_notfound       := FALSE;
7284       l_return_status      := G_RET_STS_SUCCESS;
7285 
7286       l_context := 'VALUE SETS VALIDATING';
7287 
7288       -- To find duplicate value set in the batch
7289       IF i>1 THEN
7290          x := i-1;
7291          IF RTRIM(vsinf_flex_value_set_name_tbl(i)) = RTRIM(vsinf_flex_value_set_name_tbl(x))
7292 	    THEN
7293             Okc_Api.Set_Message(G_APP_NAME, 'OKC_VALSET_DUP_TITLE','VALUESET',vsinf_flex_value_set_name_tbl(i));
7294             l_return_status := G_RET_STS_ERROR;
7295             RAISE FND_API.G_EXC_ERROR;
7296          END IF;
7297       END IF;
7298       -- Logic to decide what to do in case of Action='S'
7299 
7300 	 IF vsinf_action_tbl(i) = 'S' THEN
7301 	    vsinf_action_tbl(i) := 'N';
7302 	 END IF;
7303 
7304 
7305       IF vsinf_action_tbl(i) = 'N' THEN
7306 
7307           --TRIM trailing space because
7308           vsinf_flex_value_set_name_tbl(i) := RTRIM(vsinf_flex_value_set_name_tbl(i));
7309          -- Need to do some  defaulting logic
7310 	       IF vsinf_format_type_tbl(i) = 'N' THEN
7311 		     vsinf_number_only_flag_tbl(i) := 'Y';
7312 		     vsinf_uppercase_only_flag_tbl(i) := 'N';
7313             END IF;
7314 	       IF vsinf_format_type_tbl(i) = 'C' THEN
7315 		     vsinf_number_only_flag_tbl(i) := 'N';
7316             END IF;
7317 	       IF vsinf_format_type_tbl(i) in ('X','Y') THEN
7318 		     vsinf_uppercase_only_flag_tbl(i) := 'Y';
7319             END IF;
7320 	       IF vsinf_format_type_tbl(i) = 'X' THEN
7321 		     vsinf_maximum_size_tbl(i) := 11;
7322             END IF;
7323 	       IF vsinf_format_type_tbl(i) = 'Y' THEN
7324 		     vsinf_maximum_size_tbl(i) := 20;
7325             END IF;
7326 
7327       ELSE
7328 
7329           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7330                   p_msg_name     => 'OKC_VALSET_INV_IMP_ACTION');
7331           l_return_status := G_RET_STS_ERROR;
7332           RAISE FND_API.G_EXC_ERROR ;
7333       END IF;
7334 
7335       -----------------------------------------------------------
7336       -- Common validation or attribute settting
7337       -- regardless of status and import action
7338       -- this validation is not included in validate api
7339       -----------------------------------------------------------
7340 	 -- Check if value set already exists in the System
7341 
7342           IF Fnd_Flex_Val_Api.Valueset_Exists(vsinf_flex_value_set_name_tbl(i)) THEN
7343             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7344                                 p_msg_name => 'OKC_IMP_VALSET_EXIST',
7345 						  p_token1   => 'VALUESET',
7346 						  p_token1_value => vsinf_flex_value_set_name_tbl(i)
7347 						  );
7348             l_return_status := G_RET_STS_ERROR;
7349             --RAISE FND_API.G_EXC_ERROR ;
7350          END IF;
7351 
7352       -- Check if format_type is set properly
7353 	 -- 'N' for Numeric
7354 	 -- 'C' for Character
7355 	 -- 'X' for Standard Date in Canonical Format YYYY/MM/DD
7356 	 -- 'Y' for Standard DateTime in Canonical Format YYYY/MM/DD HH24:MI:SS
7357 	 -- For Standard Date , Default Max size is 11
7358 	 -- For Standard DateTime , Default Max size is 12
7359 
7360       IF nvl(vsinf_format_type_tbl(i),'*') not in ('N','C','X','Y')  THEN
7361             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7362                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7363             l_return_status := G_RET_STS_ERROR;
7364       END IF;
7365 
7366       -- Check if Max Value and Min Value is passed then it is as per Format Type
7367       IF vsinf_minimum_value_tbl(i) IS NOT NULL THEN
7368 	    IF NOT is_value_valid(vsinf_format_type_tbl(i),vsinf_minimum_value_tbl(i)) THEN
7369             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7370                                 p_msg_name => 'OKC_INVALID_MINIMUM_VALUE');
7371             l_return_status := G_RET_STS_ERROR;
7372 
7373          END IF;
7374       END IF;
7375 
7376       IF vsinf_maximum_value_tbl(i) IS NOT NULL THEN
7377 	    IF NOT is_value_valid(vsinf_format_type_tbl(i),vsinf_maximum_value_tbl(i)) THEN
7378             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7379                                 p_msg_name => 'OKC_INVALID_MAXIMUM_VALUE');
7380             l_return_status := G_RET_STS_ERROR;
7381          END IF;
7382       END IF;
7383       -- Check Maximum Value is always greater than Mimium Value
7384       IF vsinf_minimum_value_tbl(i) IS NOT NULL AND
7385          vsinf_maximum_value_tbl(i) IS NOT NULL
7386 	 THEN
7387          IF vsinf_format_type_tbl(i) = 'N' THEN
7388 	      IF to_number(vsinf_minimum_value_tbl(i)) >=
7389 		      to_number(vsinf_maximum_value_tbl(i)) THEN
7390             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7391                                 p_msg_name => 'OKC_INVALID_RANGE');
7392             l_return_status := G_RET_STS_ERROR;
7393 		 END IF;
7394          ELSIF vsinf_format_type_tbl(i) = 'C' THEN
7395 	      IF vsinf_minimum_value_tbl(i) >= vsinf_maximum_value_tbl(i) THEN
7396             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7397                                 p_msg_name => 'OKC_INVALID_RANGE');
7398             l_return_status := G_RET_STS_ERROR;
7399 		 END IF;
7400          ELSIF vsinf_format_type_tbl(i) in ('X','Y') THEN
7401 	      IF to_date(vsinf_minimum_value_tbl(i),'YYYY/MM/DD HH24:MI:SS') >=
7402 		      to_date(vsinf_maximum_value_tbl(i),'YYYY/MM/DD HH24:MI:SS') THEN
7403             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7404                                 p_msg_name => 'OKC_INVALID_RANGE');
7405             l_return_status := G_RET_STS_ERROR;
7406 		 END IF;
7407 
7408 	    END IF;
7409       END IF;
7410 
7411       -- Check if uppercase_only_flag is set properly
7412       IF vsinf_uppercase_only_flag_tbl(i) not in ('Y','N') THEN
7413             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7414                                 p_msg_name => 'OKC_INVALID_UPPERCASE_FLAG');
7415             l_return_status := G_RET_STS_ERROR;
7416       END IF;
7417 
7418       -- Check if number_only_flag is set properly
7419       IF vsinf_number_only_flag_tbl(i) not in ('Y','N') THEN
7420             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7421                                 p_msg_name => 'OKC_INVALID_NUMBERONLY_FLAG');
7422             l_return_status := G_RET_STS_ERROR;
7423       END IF;
7424 
7425       -- Check if format_type and number_only_flag is set properly
7426       IF vsinf_format_type_tbl(i) = 'N' AND
7427 	    vsinf_number_only_flag_tbl(i)  = 'N' THEN
7428             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7429                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7430             l_return_status := G_RET_STS_ERROR;
7431       END IF;
7432 
7433       -- Check if format_type and uppercase_only_flag is set properly
7434       IF vsinf_format_type_tbl(i) = 'N' AND
7435 	    vsinf_uppercase_only_flag_tbl(i)  = 'Y' THEN
7436             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7437                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7438             l_return_status := G_RET_STS_ERROR;
7439       END IF;
7440 
7441       -- Check if format_type and number_only_flag is set properly
7442       IF vsinf_format_type_tbl(i) = 'C' AND
7443 	    (vsinf_uppercase_only_flag_tbl(i)  = 'Y' AND
7444 	     vsinf_number_only_flag_tbl(i) = 'Y') THEN
7445             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7446                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7447             l_return_status := G_RET_STS_ERROR;
7448       END IF;
7449 
7450       -- Check if format_type and maximum_size is set properly
7451       IF vsinf_format_type_tbl(i) = 'C' AND
7452 	    vsinf_maximum_size_tbl(i)  > 999  THEN
7453             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7454                                 p_msg_name => 'OKC_INVALID_MAXIMUMSIZE');
7455             l_return_status := G_RET_STS_ERROR;
7456       END IF;
7457 
7458       -- Check if format_type and maximum_size is set properly
7459       IF vsinf_format_type_tbl(i) = 'N' AND
7460 	        vsinf_maximum_size_tbl(i)  > 38  THEN
7461             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7462                                 p_msg_name => 'OKC_INVALID_MAXIMUMSIZE');
7463             l_return_status := G_RET_STS_ERROR;
7464       END IF;
7465 
7466 	 IF ( vsinf_number_precision_tbl(i) IS NOT NULL AND
7467 	      vsinf_format_type_tbl(i) <> 'N') THEN
7468 		 vsinf_number_precision_tbl(i) := NULL;
7469       END IF;
7470 /*
7471       -- Check if alphanumeric_allowed_flag is set properly
7472       IF nvl(vsinf_alphanumeric_allowed_flag_tbl(i), '*') not in ('Y','N') THEN
7473             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7474                                 p_msg_name => 'OKC_INVALID_ALPHANUMERIC_FLAG');
7475             l_return_status := G_RET_STS_ERROR;
7476       END IF;
7477 */
7478       -- Check if Validation Type is 'Independent' or 'None'
7479       IF nvl(vsinf_validation_type_tbl(i), '*') not in ('I','N') THEN
7480             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7481                                 p_msg_name => 'OKC_INVALID_VALIDATION_TYPE');
7482             l_return_status := G_RET_STS_ERROR;
7483       END IF;
7484 
7485       ------------------------------------------------------------------------
7486       -- Now that we have validated and data is clean we can fetch sequences and ids
7487       -- for new relationships for DML and also set the process status to Success
7488       -------------------------------------------------------------------------
7489 
7490       -- Summarize report for this row
7491       -- Status 'F' is for internal use meaning parsing failure marked in
7492       -- java concurrent program
7493       IF (l_return_status = G_RET_STS_SUCCESS) THEN
7494          IF (nvl(vsinf_process_status_tbl(i), 'E') = 'E') THEN
7495            vsinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
7496          ELSIF ( vsinf_process_status_tbl(i) = 'F') THEN
7497            -- ##count parser failure as error
7498            --l_tot_rows_failed := l_tot_rows_failed+1;
7499            l_part_rows_failed := l_part_rows_failed+1;
7500            vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7501          END IF;
7502       ELSIF (l_return_status = l_sts_warning) THEN
7503          IF (nvl(vsinf_process_status_tbl(i),'E') = 'E') THEN
7504            vsinf_process_status_tbl(i) := l_sts_warning;
7505            --##count
7506            --l_tot_rows_warned := l_tot_rows_warned+1;
7507            l_part_rows_warned := l_part_rows_warned+1;
7508          ELSIF (vsinf_process_status_tbl(i) = 'F') THEN
7509            -- ##count parser failure as error
7510            --l_tot_rows_failed := l_tot_rows_failed+1;
7511            l_part_rows_failed := l_part_rows_failed+1;
7512            vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7513          END IF;
7514       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
7515            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7516       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
7517            RAISE FND_API.G_EXC_ERROR;
7518       END IF;
7519 
7520     -------------------------
7521     -------------------------
7522     -- Exception Block for each iteration in Loop
7523     -- validation and unexpected errors
7524     -- In case of unexpected error, escape the loop
7525     -------------------------
7526     -------------------------
7527 
7528 
7529       EXCEPTION
7530           WHEN FND_API.G_EXC_ERROR THEN
7531               IF (l_debug = 'Y') THEN
7532                  okc_debug.log('300: In Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
7533               END IF;
7534               --l_return_status := G_RET_STS_ERROR ;
7535               build_error_array(
7536                  p_msg_data     => x_msg_data,
7537                  p_context      => l_context,
7538                  p_batch_process_id => l_batch_process_id,
7539                  p_interface_id  => vsinf_interface_id_tbl(i),
7540                  p_article_title => vsinf_flex_value_set_name_tbl(i),
7541                  p_error_type    => G_RET_STS_ERROR,
7542 			  p_entity        => 'VALUESET'
7543                 );
7544                vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7545                --##count
7546                --l_tot_rows_failed := l_tot_rows_failed+1;
7547                l_part_rows_failed := l_part_rows_failed+1;
7548                -- Continue to next row
7549 
7550           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7551               IF (l_debug = 'Y') THEN
7552                  okc_debug.log('400: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
7553               END IF;
7554 
7555               IF l_valset_interface_csr%ISOPEN THEN
7556                  CLOSE l_valset_interface_csr;
7557               END IF;
7558 
7559               --Set_Message
7560               l_return_status := G_RET_STS_UNEXP_ERROR ;
7561               x_return_status := G_RET_STS_UNEXP_ERROR ;
7562 
7563               build_error_array(
7564                  p_msg_data     => x_msg_data,
7565                  p_context      => l_context,
7566                  p_batch_process_id => l_batch_process_id,
7567                  p_interface_id  => vsinf_interface_id_tbl(i),
7568                  p_article_title => vsinf_flex_value_set_name_tbl(i),
7569                  p_error_type    => G_RET_STS_UNEXP_ERROR,
7570 			  p_entity        => 'VALUESET'
7571                  );
7572                vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7573                --##count
7574                --l_tot_rows_failed := l_tot_rows_failed+1;
7575                l_part_rows_failed := l_part_rows_failed+1;
7576               exit; -- exit the current fetch
7577 
7578           WHEN OTHERS THEN
7579               IF (l_debug = 'Y') THEN
7580                 okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
7581               END IF;
7582 
7583               IF l_valset_interface_csr%ISOPEN THEN
7584                  CLOSE l_valset_interface_csr;
7585               END IF;
7586 
7587               l_return_status := G_RET_STS_UNEXP_ERROR ;
7588               x_return_status := G_RET_STS_UNEXP_ERROR ;
7589 
7590               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7591                                 p_msg_name     => G_UNEXPECTED_ERROR,
7592                                 p_token1       => G_SQLCODE_TOKEN,
7593                                 p_token1_value => sqlcode,
7594                                 p_token2       => G_SQLERRM_TOKEN,
7595                                 p_token2_value => sqlerrm);
7596 
7597               build_error_array(
7598                  p_msg_data     => G_UNEXPECTED_ERROR,
7599                  p_context      => l_context,
7600                  p_batch_process_id => l_batch_process_id,
7601                  p_interface_id  => vsinf_interface_id_tbl(i),
7602                  p_article_title => vsinf_flex_value_set_name_tbl(i),
7603                  p_error_type    => G_RET_STS_ERROR,
7604 			  p_entity        => 'VALUESET'
7605                 );
7606                vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7607                --##count
7608                --l_tot_rows_failed := l_tot_rows_failed+1;
7609                l_part_rows_failed := l_part_rows_failed+1;
7610               exit;  -- exit the current fetch
7611           END;
7612     -------------------------
7613     -------------------------
7614     -- Exception Block for each iteration in Loop ends
7615     -------------------------
7616     -------------------------
7617 
7618 
7619      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
7620     ------------------------------------------------------------------------
7621     -------------- End of Inner Loop thru fetched row for---------------------
7622     -- validation
7623     -------------------------------------------------------------------------
7624     -- In order to propagate Unexpected error raise it if it is 'U'
7625     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
7626          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
7627     END IF;
7628 
7629     -------------------------
7630     -------------------------
7631     -- Exception Block for Inner Loop starts
7632     -- Handles unexpected errors as last step
7633     -------------------------
7634     -------------------------
7635     EXCEPTION
7636          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7637              IF (l_debug = 'Y') THEN
7638                 okc_debug.log('400: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
7639              END IF;
7640 
7641              IF l_valset_interface_csr%ISOPEN THEN
7642                 CLOSE l_valset_interface_csr;
7643              END IF;
7644              l_return_status := G_RET_STS_UNEXP_ERROR ;
7645              x_return_status := G_RET_STS_UNEXP_ERROR ;
7646              exit; -- exit outermost loop
7647 
7648         WHEN OTHERS THEN
7649              IF (l_debug = 'Y') THEN
7650                okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
7651              END IF;
7652 
7653              IF l_valset_interface_csr%ISOPEN THEN
7654                 CLOSE l_valset_interface_csr;
7655              END IF;
7656              l_return_status := G_RET_STS_UNEXP_ERROR ;
7657              x_return_status := G_RET_STS_UNEXP_ERROR ;
7658              exit; -- exit outermost loop
7659      END;
7660 
7661     -------------------------
7662     -------------------------
7663     -- Exception Block for Each Iteration of outermost Loop ends
7664     -------------------------
7665     -------------------------
7666 
7667     ------------------------------------------------------------------------
7668     --------------------- Start Do_DML for Fnd Flex Value Sets   ---------------
7669     -- Insert Fnd Flex Value Sets
7670     -------------------------------------------------------------------------
7671     -- initialize l_return_status to track status of DML execution
7672      l_return_status := G_RET_STS_SUCCESS;
7673 
7674 
7675     IF p_validate_only = 'N' THEN
7676          BEGIN
7677          SAVEPOINT bulkdml;
7678 
7679          i := 0;
7680         -- Bulk insert New Valid Records
7681          BEGIN
7682          l_context := 'INSERTING NEW VALUESETS INTO TABLE';
7683            FOR  i in vsinf_interface_id_tbl.FIRST ..vsinf_interface_id_tbl.LAST LOOP
7684 
7685 		  IF vsinf_action_tbl(i) = 'N' AND vsinf_process_status_tbl(i) in ('S','W') THEN
7686 	     	   IF vsinf_validation_type_tbl(i) = 'N' THEN
7687 
7688                       -- Set the Session Mode
7689 				  FND_FLEX_VAL_API.SET_SESSION_MODE('customer_data');
7690 
7691 				  -- Call the API to create value set
7692                       FND_FLEX_VAL_API.CREATE_VALUESET_NONE(
7693 		             VALUE_SET_NAME     => vsinf_flex_value_set_name_tbl(i),
7694 		             DESCRIPTION        => vsinf_description_tbl(i),
7695 	                  SECURITY_AVAILABLE => 'N',
7696 		             ENABLE_LONGLIST    => 'N',
7697 		             FORMAT_TYPE        => vsinf_format_type_tbl(i),
7698 		             MAXIMUM_SIZE       => vsinf_maximum_size_tbl(i),
7699 		             NUMBERS_ONLY       => vsinf_number_only_flag_tbl(i),
7700 		             UPPERCASE_ONLY     => vsinf_uppercase_only_flag_tbl(i),
7701 		             RIGHT_JUSTIFY_ZERO_FILL => 'N',
7702 		             MIN_VALUE          => vsinf_minimum_value_tbl(i),
7703 		             MAX_VALUE          => vsinf_maximum_value_tbl(i),
7704 				   PRECISION          => vsinf_number_precision_tbl(i));
7705 
7706 		        ELSIF vsinf_validation_type_tbl(i) = 'I' THEN
7707 
7708                       -- Set the Session Mode
7709 				  FND_FLEX_VAL_API.SET_SESSION_MODE('customer_data');
7710 
7711 				  -- Call the API to create value set
7712                       FND_FLEX_VAL_API.CREATE_VALUESET_INDEPENDENT(
7713 		             VALUE_SET_NAME     => vsinf_flex_value_set_name_tbl(i),
7714 		             DESCRIPTION        => vsinf_description_tbl(i),
7715 	                  SECURITY_AVAILABLE => 'N',
7716 		             ENABLE_LONGLIST    => 'N',
7717 		             FORMAT_TYPE        => vsinf_format_type_tbl(i),
7718 		             MAXIMUM_SIZE       => vsinf_maximum_size_tbl(i),
7719 		             NUMBERS_ONLY       => vsinf_number_only_flag_tbl(i),
7720 		             UPPERCASE_ONLY     => vsinf_uppercase_only_flag_tbl(i),
7721 		             RIGHT_JUSTIFY_ZERO_FILL => 'N',
7722 		             MIN_VALUE          => vsinf_minimum_value_tbl(i),
7723 		             MAX_VALUE          => vsinf_maximum_value_tbl(i),
7724 				   PRECISION          => vsinf_number_precision_tbl(i));
7725 
7726 		        END IF;
7727 		   END IF;
7728         END LOOP;
7729 
7730         EXCEPTION
7731            WHEN OTHERS THEN
7732              IF (l_debug = 'Y') THEN
7733                okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
7734              END IF;
7735              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
7736           END;
7737 
7738          --
7739          --  End of Insert into FND FLEX VALUE SETS
7740          --
7741          --
7742 
7743 
7744       -- Exception for bulk DML block
7745       EXCEPTION
7746         WHEN OTHERS THEN
7747              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
7748               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7749                                   p_msg_name     => G_UNEXPECTED_ERROR,
7750                                   p_token1       => G_SQLCODE_TOKEN,
7751                                   p_token1_value => sqlcode,
7752                                   p_token2       => G_SQLERRM_TOKEN,
7753                                   p_token2_value => sqlerrm);
7754               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
7755                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
7756                                   p_token1       => 'CONTEXT',
7757                                   p_token1_value => l_context);
7758 
7759               build_error_array(
7760                                  p_msg_data     => null,
7761                                  p_context      => l_context,
7762                                  p_batch_process_id => l_batch_process_id,
7763                                  p_interface_id  => -99,
7764                                  p_article_title => NULL,
7765                                  p_error_type    => G_RET_STS_ERROR,
7766 						   p_entity        => 'VALUESET'
7767               );
7768               l_return_status := G_RET_STS_UNEXP_ERROR;
7769               x_return_status := G_RET_STS_UNEXP_ERROR;
7770 
7771               --##count:rollback the count
7772               l_part_rows_failed := l_part_rows_processed;
7773               l_part_rows_warned := 0;
7774 
7775               ROLLBACK TO SAVEPOINT bulkdml;
7776               exit; -- exit outermost loop
7777       END;
7778 
7779     END IF; --- validate_only = 'N'
7780 
7781     ------------------------------------------------------------------------
7782     --------------------- End of Do_DML for Value sets   ---------------
7783     -------------------------------------------------------------------------
7784 
7785     ------------------------------------------------------------------------
7786     --------------- Start of Do_DML for import related tables   ------------
7787     -- Update interface table
7788     -- Insert Errors into Error table
7789     -------------------------------------------------------------------------
7790     -- Update Interface Table
7791     i:=0;
7792     BEGIN
7793      l_context := 'UPDATING VALUE SETS INTERFACE TABLE';
7794      FORALL i in vsinf_interface_id_tbl.FIRST..vsinf_interface_id_tbl.LAST
7795        UPDATE OKC_VALUESETS_INTERFACE
7796        SET
7797            -- We don't want to update process_status to 'S' or 'W' in validation_mode
7798            -- because it is not going to be picked up in next run if we do so
7799            PROCESS_STATUS = decode(p_validate_only||vsinf_process_status_tbl(i)||l_bulk_failed,
7800                                                'NEN','E',
7801                                                'NSN','S',
7802                                                'NWN','W',
7803                                                'NEY','E',
7804                                                'NSY',NULL,
7805                                                'NWY',NULL,
7806                                                'YEY','E',
7807                                                'YEN','E',
7808                                                'NFY','E',
7809                                                'YFY','E',
7810                                                'NFN','E',
7811                                                'YFN','E',NULL),
7812            PROGRAM_ID                 = l_program_id,
7813            REQUEST_ID                 = l_request_id,
7814            PROGRAM_LOGIN_ID           = l_program_login_id,
7815            PROGRAM_APPLICATION_ID     = l_program_appl_id,
7816            OBJECT_VERSION_NUMBER      = vsinf_obj_ver_number_tbl(i) + 1,
7817            LAST_UPDATED_BY            = l_user_id,
7818            LAST_UPDATE_LOGIN          = l_login_id,
7819            LAST_UPDATE_DATE           = SYSDATE
7820          WHERE
7821            interface_id = vsinf_interface_id_tbl(i);
7822     EXCEPTION
7823            WHEN OTHERS THEN
7824              IF (l_debug = 'Y') THEN
7825                okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
7826              END IF;
7827 
7828              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7829                         p_msg_name     => G_UNEXPECTED_ERROR,
7830                         p_token1       => G_SQLCODE_TOKEN,
7831                         p_token1_value => sqlcode,
7832                         p_token2       => G_SQLERRM_TOKEN,
7833                         p_token2_value => sqlerrm);
7834              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
7835                         p_msg_name     => 'OKC_VALSET_INT_UPDATE_FAILED');
7836 
7837              build_error_array(
7838                        p_msg_data     => null,
7839                        p_context      => l_context,
7840                        p_batch_process_id => l_batch_process_id,
7841                        p_interface_id  => -99,
7842                        p_article_title => NULL,
7843                        p_error_type    => G_RET_STS_ERROR,
7844 				   p_entity        => 'VALUESET'
7845              );
7846 
7847 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
7848 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
7849 		       --##count:rollback the count
7850 		      l_part_rows_failed := l_part_rows_processed;
7851 		      l_part_rows_warned := 0;
7852 
7853              --RAISE FND_API.G_EXC_ERROR ;
7854   END;
7855    --
7856    -- End of Update OKC_VALUESETS_INTERFACE
7857    --
7858    --
7859 
7860     --
7861     --Insert Errors into Error table for this fetch
7862     --
7863     insert_error_array(
7864      x_return_status => x_return_status,
7865      x_msg_count     => x_msg_count,
7866      x_msg_data      => x_msg_data
7867     );
7868 
7869 
7870     IF (x_return_status = l_insert_errors_error) THEN
7871       NULL;
7872      -- Ignore
7873      -- RAISE l_insert_errors_exception;
7874     END IF;
7875 
7876     ------------------------------------------------------------------------
7877     --------------- End of Do_DML for import related tables   ------------
7878     -------------------------------------------------------------------------
7879     commit;
7880 
7881     -- Now delete cache for next bulk fetch
7882 
7883     vsinf_interface_id_tbl.DELETE;
7884     vsinf_batch_number_tbl.DELETE;
7885     vsinf_obj_ver_number_tbl.DELETE;
7886     vsinf_flex_value_set_name_tbl.DELETE;
7887     vsinf_validation_type_tbl.DELETE;
7888     vsinf_process_status_tbl.DELETE;
7889     vsinf_action_tbl.DELETE;
7890     vsinf_format_type_tbl.DELETE;
7891     vsinf_maximum_size_tbl.DELETE;
7892     vsinf_description_tbl.DELETE;
7893     vsinf_minimum_value_tbl.DELETE;
7894     vsinf_maximum_value_tbl.DELETE;
7895     vsinf_number_precision_tbl.DELETE;
7896     vsinf_uppercase_only_flag_tbl.DELETE;
7897     vsinf_number_only_flag_tbl.DELETE;
7898 
7899     err_batch_process_id_tbl.DELETE;
7900     err_article_title_tbl.DELETE;
7901     err_interface_id_tbl.DELETE;
7902     err_error_number_tbl.DELETE;
7903     err_object_version_number_tbl.DELETE;
7904     err_error_type_tbl.DELETE;
7905     err_entity_tbl.DELETE;
7906     err_error_description_tbl.DELETE;
7907 
7908    EXIT WHEN l_valset_interface_csr%NOTFOUND;
7909 END LOOP;
7910 
7911 
7912 -----------------------------------------------------------------------
7913 -- End of outermost loop for bulk fetch
7914 -----------------------------------------------------------------------
7915 
7916 IF l_valset_interface_csr%ISOPEN THEN
7917 CLOSE l_valset_interface_csr;
7918 END IF;
7919 
7920 
7921 --##count:add up last processed counts
7922 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
7923 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
7924 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
7925 
7926 --Update Batch Process Table as a last step
7927 UPDATE OKC_ART_INT_BATPROCS_ALL
7928 SET
7929   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
7930   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
7931   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
7932   END_DATE                   = SYSDATE,
7933   PROGRAM_ID                 = l_program_id,
7934   REQUEST_ID                 = l_request_id,
7935   PROGRAM_LOGIN_ID           = l_program_login_id,
7936   PROGRAM_APPLICATION_ID     = l_program_appl_id,
7937   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
7938   LAST_UPDATED_BY            = l_user_id,
7939   LAST_UPDATE_LOGIN          = l_login_id,
7940   LAST_UPDATE_DATE           = SYSDATE
7941 WHERE
7942   BATCH_PROCESS_ID  = l_batch_process_id
7943   AND ENTITY = 'Valueset';
7944 IF err_error_number_tbl.COUNT > 0 THEN
7945  insert_error_array(
7946    x_return_status => x_return_status,
7947    x_msg_count     => x_msg_count,
7948    x_msg_data      => x_msg_data
7949  );
7950 END IF;
7951 
7952 -- Print statistic of this run in the log
7953 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
7954 --wrap_up(p_validate_only,p_batch_number,l_tot_rows_processed,l_tot_rows_failed,l_tot_rows_warned,l_batch_process_id,'VALUESET');
7955 commit; -- Final commit for status update
7956 
7957 IF (l_debug = 'Y') THEN
7958  okc_debug.log('2000: Leaving Fnd_flex_value_sets import', 2);
7959 END IF;
7960 --x_return_status := l_return_status; this may cause to erase error x_return_status
7961 
7962 EXCEPTION
7963 
7964   WHEN FND_API.G_EXC_ERROR THEN
7965       IF (l_debug = 'Y') THEN
7966          okc_debug.log('3000: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
7967       END IF;
7968       --Insert Errors into Error table if there is any
7969       insert_error_array(
7970        x_return_status => x_return_status,
7971        x_msg_count     => x_msg_count,
7972        x_msg_data      => x_msg_data
7973       );
7974       x_return_status := G_RET_STS_ERROR ;
7975 
7976       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7977       IF (l_debug = 'Y') THEN
7978          okc_debug.log('4000: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
7979       END IF;
7980       --Insert Errors into Error table if there is any
7981 
7982       insert_error_array(
7983        x_return_status => x_return_status,
7984        x_msg_count     => x_msg_count,
7985        x_msg_data      => x_msg_data
7986       );
7987       commit;
7988 
7989       IF l_valset_interface_csr%ISOPEN THEN
7990          CLOSE l_valset_interface_csr;
7991       END IF;
7992 
7993       x_return_status := G_RET_STS_UNEXP_ERROR ;
7994       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7995         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7996       END IF;
7997       get_print_msgs_stack(p_msg_data => x_msg_data);
7998 
7999   WHEN l_insert_errors_exception THEN
8000       --
8001       -- In this exception handling, we don't insert error array again
8002       -- because error happend in the module
8003       --
8004       IF (l_debug = 'Y') THEN
8005         okc_debug.log('5000: Leaving Fnd_flex_value_sets_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
8006       END IF;
8007 
8008       IF l_valset_interface_csr%ISOPEN THEN
8009          CLOSE l_valset_interface_csr;
8010       END IF;
8011 
8012 
8013       --x_return_status := G_RET_STS_UNEXP_ERROR ;
8014       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
8015         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
8016       END IF;
8017       get_print_msgs_stack(p_msg_data => x_msg_data);
8018       commit;
8019 
8020   WHEN OTHERS THEN
8021       IF (l_debug = 'Y') THEN
8022         okc_debug.log('5000: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
8023       END IF;
8024       --Insert Errors into Error table if there is any
8025       insert_error_array(
8026        x_return_status => x_return_status,
8027        x_msg_count     => x_msg_count,
8028        x_msg_data      => x_msg_data
8029       );
8030       commit;
8031       --
8032       IF l_valset_interface_csr%ISOPEN THEN
8033          CLOSE l_valset_interface_csr;
8034       END IF;
8035 
8036       x_return_status := G_RET_STS_UNEXP_ERROR ;
8037       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
8038         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
8039       END IF;
8040 	 get_print_msgs_stack(p_msg_data => x_msg_data);
8041 END import_fnd_flex_value_sets;
8042 
8043 PROCEDURE import_fnd_flex_values(
8044     x_return_status                OUT NOCOPY VARCHAR2,
8045     x_msg_count                    OUT NOCOPY NUMBER,
8046     x_msg_data                     OUT NOCOPY VARCHAR2,
8047 
8048     p_batch_procs_id               IN NUMBER,
8049     p_batch_number                 IN VARCHAR2,
8050     p_validate_only                IN VARCHAR2 := 'Y',
8051     p_fetchsize                    IN NUMBER := 100
8052    ) IS
8053     l_api_version                 CONSTANT NUMBER := 1;
8054     l_api_name                    CONSTANT VARCHAR2(30) := 'import_fnd_flex_values';
8055     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
8056     l_row_notfound                BOOLEAN := FALSE;
8057     l_user_id                     NUMBER;
8058     l_login_id                    NUMBER;
8059     l_insert_errors_exception     EXCEPTION;
8060     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
8061 
8062    CURSOR l_val_interface_csr ( cp_batch_number IN VARCHAR2) IS
8063       SELECT
8064            VINT.INTERFACE_ID           ,
8065            VINT.BATCH_NUMBER           ,
8066            VINT.OBJECT_VERSION_NUMBER  ,
8067            VINT.FLEX_VALUE_SET_NAME    ,
8068            VINT.FLEX_VALUE             ,
8069            VINT.PROCESS_STATUS         ,
8070            VINT.ACTION                 ,
8071            VINT.ENABLED_FLAG           ,
8072            VINT.START_DATE_ACTIVE      ,
8073            VINT.END_DATE_ACTIVE        ,
8074            VINT.LANGUAGE               ,
8075            VINT.DESCRIPTION            ,
8076            VINT.FLEX_VALUE_MEANING     ,
8077 	   VS.FLEX_VALUE_SET_ID        ,
8078 	   VS.VALIDATION_TYPE          ,
8079 	   VS.FORMAT_TYPE              ,
8080 	   VS.MAXIMUM_SIZE             ,
8081 	   VS.NUMBER_PRECISION         ,
8082 	   VS.ALPHANUMERIC_ALLOWED_FLAG,
8083 	   VS.UPPERCASE_ONLY_FLAG      ,
8084 	   VS.NUMERIC_MODE_ENABLED_FLAG,
8085 	   VS.MINIMUM_VALUE            ,
8086 	   VS.MAXIMUM_VALUE            ,
8087            TO_NUMBER(NULL) FLEX_VALUE_ID
8088       FROM OKC_VS_VALUES_INTERFACE VINT,FND_FLEX_VALUE_SETS VS
8089       WHERE VINT.FLEX_VALUE_SET_NAME = VS.FLEX_VALUE_SET_NAME
8090 	    AND nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
8091          AND BATCH_NUMBER = cp_batch_number
8092 	 UNION ALL
8093       SELECT
8094            VINT.INTERFACE_ID           ,
8095            VINT.BATCH_NUMBER           ,
8096            VINT.OBJECT_VERSION_NUMBER  ,
8097            VINT.FLEX_VALUE_SET_NAME    ,
8098            VINT.FLEX_VALUE             ,
8099            VINT.PROCESS_STATUS         ,
8100            VINT.ACTION                 ,
8101            VINT.ENABLED_FLAG           ,
8102            VINT.START_DATE_ACTIVE      ,
8103            VINT.END_DATE_ACTIVE        ,
8104            VINT.LANGUAGE               ,
8105            VINT.DESCRIPTION            ,
8106            VINT.FLEX_VALUE_MEANING     ,
8107 	      TO_NUMBER(NULL)  FLEX_VALUE_SET_ID        ,
8108 	      VS.VALIDATION_TYPE          ,
8109 	      VS.FORMAT_TYPE              ,
8110 	      VS.MAXIMUM_SIZE             ,
8111 	      VS.NUMBER_PRECISION         ,
8112 	      TO_CHAR(NULL) ALPHANUMERIC_ALLOWED_FLAG,
8113 	      VS.UPPERCASE_ONLY_FLAG      ,
8114 	      VS.NUMBER_ONLY_FLAG NUMERIC_MODE_ENABLED_FLAG,
8115 	      VS.MINIMUM_VALUE            ,
8116 	      VS.MAXIMUM_VALUE            ,
8117            TO_NUMBER(NULL) FLEX_VALUE_ID
8118       FROM OKC_VS_VALUES_INTERFACE VINT,OKC_VALUESETS_INTERFACE VS
8119       WHERE VINT.FLEX_VALUE_SET_NAME = VS.FLEX_VALUE_SET_NAME (+)
8120          AND VINT.BATCH_NUMBER = VS.BATCH_NUMBER (+)
8121 	    AND nvl(VS.PROCESS_STATUS,'*') NOT IN ('E')
8122          AND VINT.BATCH_NUMBER = cp_batch_number
8123 	    AND NOT EXISTS
8124 	    ( SELECT 1 FROM FND_FLEX_VALUE_SETS FVS
8125 	      WHERE FVS.FLEX_VALUE_SET_NAME = VINT.FLEX_VALUE_SET_NAME)
8126       ORDER BY FLEX_VALUE_SET_NAME,FLEX_VALUE ASC;
8127 
8128 
8129     CURSOR l_val_exist_csr ( l_flex_value IN VARCHAR2, l_flex_value_set_id IN NUMBER ) IS
8130       SELECT
8131            B.FLEX_VALUE_SET_ID         ,
8132            B.FLEX_VALUE_ID             ,
8133            B.FLEX_VALUE                ,
8134            B.START_DATE_ACTIVE         ,
8135            B.END_DATE_ACTIVE
8136       FROM FND_FLEX_VALUES B,FND_FLEX_VALUES_TL T
8137       WHERE B.FLEX_VALUE_ID = T.FLEX_VALUE_ID
8138       AND   T.LANGUAGE = userenv('LANG')
8139       AND   B.FLEX_VALUE = l_flex_value
8140       AND   B.FLEX_VALUE_SET_ID = l_flex_value_set_id;
8141 
8142    -- Cursor to check valueset in the valueset interface Table
8143        CURSOR valset_exists_csr (cp_vs_name IN VARCHAR2,
8144                                  cp_batch_number IN VARCHAR2) IS
8145        SELECT '1'
8146        FROM OKC_VALUESETS_INTERFACE
8147        WHERE flex_value_set_name = cp_vs_name
8148        AND   batch_number = cp_batch_number
8149        AND   nvl(process_status,'X') not in ('E');
8150 
8151 
8152 -- Flex Values Interface Rows
8153 
8154     TYPE l_vinf_interface_id             IS TABLE OF OKC_VS_VALUES_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
8155     TYPE l_vinf_batch_number             IS TABLE OF OKC_VS_VALUES_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
8156     TYPE l_vinf_obj_ver_number           IS TABLE OF OKC_VS_VALUES_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
8157     TYPE l_vinf_flex_value_set_name      IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
8158     TYPE l_vinf_flex_value               IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8159     TYPE l_vinf_process_status           IS TABLE OF OKC_VS_VALUES_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
8160     TYPE l_vinf_action                   IS TABLE OF OKC_VS_VALUES_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
8161     TYPE l_vinf_enabled_flag             IS TABLE OF OKC_VS_VALUES_INTERFACE.ENABLED_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8162     TYPE l_vinf_start_date_active        IS TABLE OF OKC_VS_VALUES_INTERFACE.START_DATE_ACTIVE%TYPE INDEX BY BINARY_INTEGER ;
8163     TYPE l_vinf_end_date_active          IS TABLE OF OKC_VS_VALUES_INTERFACE.END_DATE_ACTIVE%TYPE INDEX BY BINARY_INTEGER ;
8164     TYPE l_vinf_language                 IS TABLE OF OKC_VS_VALUES_INTERFACE.LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
8165     TYPE l_vinf_description              IS TABLE OF OKC_VS_VALUES_INTERFACE.DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
8166     TYPE l_vinf_flex_value_meaning       IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE_MEANING%TYPE INDEX BY BINARY_INTEGER ;
8167 
8168 
8169     TYPE l_vinf_flex_value_id            IS TABLE OF FND_FLEX_VALUES.flex_value_id%TYPE INDEX BY BINARY_INTEGER ;
8170     TYPE l_vinf_value_set_id             IS TABLE OF FND_FLEX_VALUE_SETS.flex_value_set_id%TYPE INDEX BY BINARY_INTEGER ;
8171     TYPE l_vinf_validation_type          IS TABLE OF FND_FLEX_VALUE_SETS.VALIDATION_TYPE%TYPE INDEX BY BINARY_INTEGER ;
8172     TYPE l_vinf_format_type              IS TABLE OF FND_FLEX_VALUE_SETS.FORMAT_TYPE%TYPE INDEX BY BINARY_INTEGER ;
8173     TYPE l_vinf_maximum_size             IS TABLE OF FND_FLEX_VALUE_SETS.MAXIMUM_SIZE%TYPE INDEX BY BINARY_INTEGER ;
8174     TYPE l_vinf_number_precision         IS TABLE OF FND_FLEX_VALUE_SETS.NUMBER_PRECISION%TYPE INDEX BY BINARY_INTEGER ;
8175     TYPE l_vinf_alphanum_allowed IS TABLE OF FND_FLEX_VALUE_SETS.ALPHANUMERIC_ALLOWED_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8176     TYPE l_vinf_uppercase_only       IS TABLE OF FND_FLEX_VALUE_SETS.UPPERCASE_ONLY_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8177     TYPE l_vinf_num_mode_enabled IS TABLE OF FND_FLEX_VALUE_SETS.NUMERIC_MODE_ENABLED_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8178     TYPE l_vinf_maximum_value             IS TABLE OF FND_FLEX_VALUE_SETS.MAXIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8179     TYPE l_vinf_minimum_value             IS TABLE OF FND_FLEX_VALUE_SETS.MINIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8180 
8181 
8182     TYPE l_vinf_flex_value_orig           IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8183 
8184    l_return_status                      VARCHAR2(1);
8185    l_error_index                        NUMBER          := 1;
8186    l_batch_process_id                   NUMBER          := 1;
8187    l_context                            VARCHAR2(50)    := NULL;
8188    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
8189    l_tot_rows_processed                 NUMBER          := 0;
8190    l_tot_rows_failed                    NUMBER          := 0;
8191    l_tot_rows_warned                    NUMBER          := 0;
8192    l_part_rows_processed                NUMBER          := 0;
8193    l_part_rows_failed                   NUMBER          := 0;
8194    l_part_rows_warned                   NUMBER          := 0;
8195    l_bulk_failed                        VARCHAR2(1)     := 'Y';
8196 
8197 -- Variables for flex values interface
8198    vinf_interface_id_tbl                 l_vinf_interface_id ;
8199    vinf_batch_number_tbl                 l_vinf_batch_number ;
8200    vinf_obj_ver_number_tbl               l_vinf_obj_ver_number ;
8201    vinf_flex_value_set_name_tbl          l_vinf_flex_value_set_name ;
8202    vinf_flex_value_tbl                   l_vinf_flex_value ;
8203    vinf_process_status_tbl               l_vinf_process_status ;
8204    vinf_action_tbl                       l_vinf_action ;
8205    vinf_enabled_flag_tbl                 l_vinf_enabled_flag ;
8206    vinf_start_date_active_tbl            l_vinf_start_date_active ;
8207    vinf_end_date_active_tbl              l_vinf_end_date_active ;
8208    vinf_language_tbl                     l_vinf_language ;
8209    vinf_description_tbl                  l_vinf_description ;
8210    vinf_flex_value_meaning_tbl           l_vinf_flex_value_meaning ;
8211 
8212    vinf_flex_value_id_tbl                l_vinf_flex_value_id ;
8213    vinf_value_set_id_tbl                 l_vinf_value_set_id ;
8214    vinf_validation_type_tbl              l_vinf_validation_type ;
8215    vinf_format_type_tbl                  l_vinf_format_type ;
8216    vinf_maximum_size_tbl                 l_vinf_maximum_size ;
8217    vinf_number_precision_tbl             l_vinf_number_precision ;
8218    vinf_alphanum_allowed_tbl             l_vinf_alphanum_allowed ;
8219    vinf_uppercase_only_tbl               l_vinf_uppercase_only ;
8220    vinf_num_mode_enabled_tbl             l_vinf_num_mode_enabled ;
8221    vinf_maximum_value_tbl                l_vinf_maximum_value ;
8222    vinf_minimum_value_tbl                l_vinf_minimum_value ;
8223 
8224    --vinf_flex_value_orig_tbl              l_vinf_flex_value_orig ;
8225 
8226    I NUMBER := 0;
8227    j NUMBER := 0;
8228    k NUMBER := 0;
8229    x NUMBER := 0;
8230    l_program_id                         OKC_VS_VALUES_INTERFACE.PROGRAM_ID%TYPE;
8231    l_program_login_id                   OKC_VS_VALUES_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
8232    l_program_appl_id                    OKC_VS_VALUES_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
8233    l_request_id                         OKC_VS_VALUES_INTERFACE.REQUEST_ID%TYPE;
8234    l_rowid                              ROWID;
8235    api_return_status                    VARCHAR2(1);
8236    l_tmp_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
8237    l_display_value    VARCHAR2(2000);
8238    l_storage_value    VARCHAR2(32000);
8239 
8240 
8241    l_flex_value_set_id NUMBER;
8242    l_flex_value_id     NUMBER;
8243    l_flex_value        VARCHAR2(150);
8244    l_start_date        DATE;
8245    l_end_date          DATE;
8246    l_vs_name           VARCHAR2(1) := NULL;
8247 
8248 
8249 BEGIN
8250 IF (l_debug = 'Y') THEN
8251   okc_debug.log('100: Entered values_import', 2);
8252 END IF;
8253 
8254 
8255 ------------------------------------------------------------------------
8256 --  Variable Initialization
8257 -------------------------------------------------------------------------
8258 
8259 -- Standard Start of API savepoint
8260 FND_MSG_PUB.initialize;
8261 --  Initialize API return status to success
8262 x_return_status := FND_API.G_RET_STS_SUCCESS;
8263 l_return_status := G_RET_STS_SUCCESS;
8264 --  Cache user_id, login_id and org_id
8265 l_user_id  := Fnd_Global.user_id;
8266 l_login_id := Fnd_Global.login_id;
8267 
8268 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
8269    l_program_id := NULL;
8270 ELSE
8271    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
8272 END IF;
8273 
8274 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
8275    l_program_login_id := NULL;
8276 ELSE
8277    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
8278 END IF;
8279 
8280 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
8281    l_program_appl_id := NULL;
8282 ELSE
8283    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
8284 END IF;
8285 
8286 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
8287    l_request_id := NULL;
8288 ELSE
8289    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
8290 END IF;
8291 
8292 
8293 l_batch_process_id := p_batch_procs_id;
8294 -------------------------------------------------------------------------
8295 --------------- the outermost loop of this procedure --------------------
8296 -- Bulk fetch all interface rows based on the fetchsize passedby the user
8297 -------------------------------------------------------------------------
8298 
8299 l_context :='BULK FETCH FLEX VALUES INTERFACE ROW';
8300 OPEN l_val_interface_csr ( p_batch_number );
8301 LOOP
8302 BEGIN
8303     FETCH l_val_interface_csr BULK COLLECT INTO
8304           vinf_interface_id_tbl                  ,
8305           vinf_batch_number_tbl                  ,
8306           vinf_obj_ver_number_tbl                ,
8307           vinf_flex_value_set_name_tbl           ,
8308           vinf_flex_value_tbl                    ,
8309           vinf_process_status_tbl                ,
8310           vinf_action_tbl                        ,
8311           vinf_enabled_flag_tbl                  ,
8312           vinf_start_date_active_tbl             ,
8313           vinf_end_date_active_tbl               ,
8314           vinf_language_tbl                      ,
8315           vinf_description_tbl                   ,
8316           vinf_flex_value_meaning_tbl            ,
8317           vinf_value_set_id_tbl                  ,
8318           vinf_validation_type_tbl               ,
8319           vinf_format_type_tbl                   ,
8320           vinf_maximum_size_tbl                  ,
8321           vinf_number_precision_tbl              ,
8322           vinf_alphanum_allowed_tbl              ,
8323           vinf_uppercase_only_tbl                ,
8324           vinf_num_mode_enabled_tbl              ,
8325           vinf_maximum_value_tbl                 ,
8326           vinf_minimum_value_tbl                 ,
8327           vinf_flex_value_id_tbl    LIMIT p_fetchsize;
8328     EXIT WHEN vinf_interface_id_tbl.COUNT = 0 ;
8329 
8330     ------------------------------------------------------------------------
8331     -- Variable initialization
8332     -------------------------------------------------------------------------
8333     --For each fetch, value variable table index should be initialized
8334     j := 1;
8335     --##count:initialization
8336     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
8337     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
8338     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
8339     l_part_rows_processed   := 0;
8340     l_part_rows_failed      := 0;
8341     l_part_rows_warned      := 0;
8342     l_bulk_failed           := 'N';
8343     ---------------------------------------------------------------------------
8344     --------------------- Inner Loop thru fetched rows for---------------------
8345     -- validation, parse and validate article text, create a variable list
8346     -- prepare rows for DML if validate_only is 'N'
8347     /***  Processing Rule to set process_status
8348     Because we want to collect as much info as possible, we need to
8349     maintain process status while keeping the process moving.
8350     So, we'll set l_return_status as validation goes on and
8351     at the end we will set inf_process_status_tbl(i) with l_return_status
8352     for final result.  However, we will get out of this process if there
8353     is a significant error such as 'U'.
8354     The return status examined
8355     -api_return_status : return status for api call
8356     -l_return_status : validation result of each row
8357     -x_return_status : final result status for concurrent program request
8358     Rule to set return status
8359     If api_return_status for api call is
8360     * 'S' then continue
8361     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
8362         and build_error_array then continue
8363     * 'E' and it is significant then set l_return_status = 'E' and raise
8364       Exception
8365     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
8366        'E' at the end of validation
8367     * 'U' then set l_return_status = 'U' and raise 'U' exception
8368     * At the end, if it goes thru with no Exception,
8369     Check if l_return_status is 'E' then raise Exception
8370        Otherwise (meaning l_return_status is 'S' or 'W'),
8371           vinf_process_status_tbl(i) = l_return_status
8372     * In the exception, we will set
8373           vinf_process_status_tbl(i) = l_return_status and build_error_array
8374     ***/
8375     -------------------------------------------------------------------------
8376 
8377     FOR i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
8378       BEGIN
8379       -- Increment total processed rows
8380       --##Count
8381       l_part_rows_processed := l_part_rows_processed+1;
8382       -- Initialization for each iteration
8383       l_row_notfound       := FALSE;
8384       l_return_status      := G_RET_STS_SUCCESS;
8385 
8386       l_context := 'VALUES VALIDATING';
8387 
8388       -- To find duplicate values in the same valueset in the batch
8389       IF i>1 THEN
8390          x := i-1;
8391          IF RTRIM(vinf_flex_value_set_name_tbl(i)) = RTRIM(vinf_flex_value_set_name_tbl(x)) AND
8392             RTRIM(vinf_flex_value_tbl(i)) = RTRIM(vinf_flex_value_tbl(x))
8393 	    THEN
8394             Okc_Api.Set_Message(G_APP_NAME,
8395 		                      'OKC_VALSET_VAL_DUP_TITLE',
8396 						  'VALUE',
8397 						  vinf_flex_value_tbl(i),
8398 						  'VALSET',
8399 						  vinf_flex_value_set_name_tbl(i)
8400 						  );
8401             l_return_status := G_RET_STS_ERROR;
8402             RAISE FND_API.G_EXC_ERROR;
8403          END IF;
8404       END IF;
8405       -- Logic to decide what to do in case of Action='S'
8406 
8407 	 IF vinf_action_tbl(i) = 'S' THEN
8408 	    vinf_action_tbl(i) := 'N';
8409 	 END IF;
8410 
8411 
8412 	 IF vinf_action_tbl(i) = 'N' THEN
8413 	 -- Check if value set already exists in the System
8414          IF NOT Fnd_Flex_Val_Api.Valueset_Exists(vinf_flex_value_set_name_tbl(i)) THEN
8415            IF p_validate_only = 'N' THEN
8416             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8417                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8418 						  p_token1   => 'VALUE',
8419 						  p_token1_value => vinf_flex_value_tbl(i),
8420 						  p_token2   => 'VALSET',
8421 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8422 						  );
8423             l_return_status := G_RET_STS_ERROR;
8424             RAISE FND_API.G_EXC_ERROR;
8425            ELSE
8426             IF vinf_validation_type_tbl(i) IS NULL AND vinf_format_type_tbl(i) IS NULL THEN
8427             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8428                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8429 						  p_token1   => 'VALUE',
8430 						  p_token1_value => vinf_flex_value_tbl(i),
8431 						  p_token2   => 'VALSET',
8432 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8433 						  );
8434             l_return_status := G_RET_STS_ERROR;
8435             RAISE FND_API.G_EXC_ERROR;
8436 		  END IF;
8437            END IF;
8438          END IF;
8439 	 END IF;
8440 
8441       IF vinf_action_tbl(i) = 'N' THEN
8442 
8443           --TRIM trailing space because
8444           vinf_flex_value_set_name_tbl(i) := RTRIM(vinf_flex_value_set_name_tbl(i));
8445           vinf_flex_value_tbl(i) := RTRIM(vinf_flex_value_tbl(i));
8446 	    -- Store original value before converting to display format
8447 	    --vinf_flex_value_orig_tbl(i) := vinf_flex_value_orig_tbl(i);
8448 
8449          -- Need to convert flex value to display format
8450 	    vinf_flex_value_tbl(i) := Fnd_Flex_Val_Util.to_display_value
8451 		          (p_value          => vinf_flex_value_tbl(i),
8452 			      p_vset_format    => vinf_format_type_tbl(i),
8453 			      p_vset_name      => vinf_flex_value_set_name_tbl(i),
8454 			      p_max_length     => vinf_maximum_size_tbl(i),
8455 			      p_precision      => vinf_number_precision_tbl(i),
8456 			      p_alpha_allowed  => vinf_alphanum_allowed_tbl(i),
8457 			      p_uppercase_only => vinf_uppercase_only_tbl(i),
8458 			      p_zero_fill      => vinf_num_mode_enabled_tbl(i),
8459 			      p_min_value      => vinf_minimum_value_tbl(i),
8460 			      p_max_value      => vinf_maximum_value_tbl(i));
8461 
8462       ELSIF vinf_action_tbl(i) = 'D' THEN
8463          IF vinf_end_date_active_tbl(i) IS NULL THEN
8464                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8465                                       p_msg_name => 'OKC_NULL_END_DATE');
8466                   l_return_status := G_RET_STS_ERROR;
8467                   RAISE FND_API.G_EXC_ERROR;
8468          END IF;
8469 
8470          -- Check if value exists in the system or not
8471          OPEN l_val_exist_csr(vinf_flex_value_tbl(i),vinf_value_set_id_tbl(i));
8472          FETCH l_val_exist_csr INTO l_flex_value_set_id,
8473                                     l_flex_value_id,
8474                                     l_flex_value,
8475                                     l_start_date,
8476                                     l_end_date;
8477          IF l_val_exist_csr%NOTFOUND THEN
8478                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8479                                       p_msg_name => 'OKC_INVALID_VS_VALUE',
8480 					                p_token1=> 'VALUE',
8481 					                p_token1_value => vinf_flex_value_tbl(i),
8482 					                p_token2=> 'VALSET',
8483 					                p_token2_value => vinf_flex_value_set_name_tbl(i));
8484                   l_return_status := G_RET_STS_ERROR;
8485                   RAISE FND_API.G_EXC_ERROR;
8486 
8487          ELSE
8488 
8489             IF l_start_date IS NOT NULL
8490             THEN
8491                IF l_start_date > vinf_end_date_active_tbl(i) THEN
8492                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8493                                       p_msg_name => 'OKC_INVALID_END_DATE');
8494                   l_return_status := G_RET_STS_ERROR;
8495                   RAISE FND_API.G_EXC_ERROR;
8496                END IF;
8497             END IF;
8498          END IF;
8499 
8500 	    CLOSE l_val_exist_csr;
8501       ELSE
8502 
8503           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8504                   p_msg_name     => 'OKC_VAL_INV_IMP_ACTION');
8505           l_return_status := G_RET_STS_ERROR;
8506           RAISE FND_API.G_EXC_ERROR ;
8507       END IF;
8508 
8509       -----------------------------------------------------------
8510       -- Common validation or attribute settting
8511       -- regardless of status and import action
8512       -- this validation is not included in validate api
8513       -----------------------------------------------------------
8514       IF vinf_action_tbl(i) = 'N' THEN
8515 	 /*
8516 	 -- Check if value set already exists in the System
8517          IF NOT Fnd_Flex_Val_Api.Valueset_Exists(vinf_flex_value_set_name_tbl(i)) THEN
8518            IF p_validate_only = 'N' THEN
8519             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8520                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8521 						  p_token1   => 'VALUE',
8522 						  p_token1_value => vinf_flex_value_tbl(i),
8523 						  p_token2   => 'VALSET',
8524 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8525 						  );
8526             l_return_status := G_RET_STS_ERROR;
8527            ELSE
8528             IF vinf_validation_type_tbl(i) IS NULL AND vinf_format_type_tbl(i) IS NULL THEN
8529             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8530                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8531 						  p_token1   => 'VALUE',
8532 						  p_token1_value => vinf_flex_value_tbl(i),
8533 						  p_token2   => 'VALSET',
8534 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8535 						  );
8536             l_return_status := G_RET_STS_ERROR;
8537 		  END IF;
8538            END IF;
8539          END IF;
8540 	    */
8541 
8542 
8543       -- Check if Validation Type for value set is 'I' otherwise values cannot be created
8544           IF (vinf_validation_type_tbl(i) <> 'I') THEN
8545             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8546                                 p_msg_name => 'OKC_VAL_VALSET_NOT_VALID',
8547 						  p_token1   => 'VALUE',
8548 						  p_token1_value => vinf_flex_value_tbl(i),
8549 						  p_token2   => 'VALSET',
8550 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8551 						  );
8552             l_return_status := G_RET_STS_ERROR;
8553          END IF;
8554 
8555 
8556 	 -- Check if value is valid for the value set
8557            l_display_value := fnd_flex_ext.get_message;
8558           IF (NOT Fnd_Flex_Val_Util.Is_Value_Valid
8559 		          (p_value          => vinf_flex_value_tbl(i),
8560 				 --p_is_displayed   => TRUE,
8561 			      p_vset_name      => vinf_flex_value_set_name_tbl(i),
8562 			      p_vset_format    => vinf_format_type_tbl(i),
8563 			      p_max_length     => vinf_maximum_size_tbl(i),
8564 			      p_precision      => vinf_number_precision_tbl(i),
8565 			      p_alpha_allowed  => vinf_alphanum_allowed_tbl(i),
8566 			      p_uppercase_only => vinf_uppercase_only_tbl(i),
8567 			      p_zero_fill      => vinf_num_mode_enabled_tbl(i),
8568 			      p_min_value      => vinf_minimum_value_tbl(i),
8569 			      p_max_value      => vinf_maximum_value_tbl(i),
8570 			      x_storage_value  => l_storage_value,
8571 			      x_display_value  => l_display_value)) THEN
8572             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8573                                 p_msg_name => 'OKC_VAL_NOT_VALID');
8574             l_return_status := G_RET_STS_ERROR;
8575          END IF;
8576 
8577       IF nvl(vinf_enabled_flag_tbl(i),'*') not in ('N','Y')  THEN
8578             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8579                                 p_msg_name => 'OKC_INVALID_ENABLED_FLAG');
8580             l_return_status := G_RET_STS_ERROR;
8581 
8582       END IF;
8583 
8584       IF vinf_start_date_active_tbl(i) IS NOT NULL
8585 	 AND vinf_end_date_active_tbl(i)  IS NOT NULL
8586 	 THEN
8587 	    IF vinf_start_date_active_tbl(i) > vinf_end_date_active_tbl(i) THEN
8588             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8589                                 p_msg_name => 'OKC_INVALID_END_DATE');
8590             l_return_status := G_RET_STS_ERROR;
8591          END IF;
8592       END IF;
8593 
8594     END IF;
8595       ------------------------------------------------------------------------
8596       -- Now that we have validated and data is clean,  we can
8597       -- get ready for DML and also set the process status to Success
8598       -------------------------------------------------------------------------
8599 
8600       -- Summarize report for this row
8601       -- Status 'F' is for internal use meaning parsing failure marked in
8602       -- java concurrent program
8603       IF (l_return_status = G_RET_STS_SUCCESS) THEN
8604          IF (nvl(vinf_process_status_tbl(i), 'E') = 'E') THEN
8605            vinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
8606          ELSIF ( vinf_process_status_tbl(i) = 'F') THEN
8607            -- ##count parser failure as error
8608            --l_tot_rows_failed := l_tot_rows_failed+1;
8609            l_part_rows_failed := l_part_rows_failed+1;
8610            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8611          END IF;
8612       ELSIF (l_return_status = l_sts_warning) THEN
8613          IF (nvl(vinf_process_status_tbl(i),'E') = 'E') THEN
8614            vinf_process_status_tbl(i) := l_sts_warning;
8615            --##count
8616            --l_tot_rows_warned := l_tot_rows_warned+1;
8617            l_part_rows_warned := l_part_rows_warned+1;
8618          ELSIF (vinf_process_status_tbl(i) = 'F') THEN
8619            -- ##count parser failure as error
8620            --l_tot_rows_failed := l_tot_rows_failed+1;
8621            l_part_rows_failed := l_part_rows_failed+1;
8622            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8623          END IF;
8624       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
8625            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8626       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
8627            RAISE FND_API.G_EXC_ERROR;
8628       END IF;
8629 
8630     -------------------------
8631     -------------------------
8632     -- Exception Block for each iteration in Loop
8633     -- validation and unexpected errors
8634     -- In case of unexpected error, escape the loop
8635     -------------------------
8636     -------------------------
8637 
8638 
8639       EXCEPTION
8640           WHEN FND_API.G_EXC_ERROR THEN
8641               IF (l_debug = 'Y') THEN
8642                  okc_debug.log('300: In Fnd_flex_values_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
8643               END IF;
8644               IF l_val_exist_csr%ISOPEN THEN
8645 	            CLOSE l_val_exist_csr;
8646               END IF;
8647               --l_return_status := G_RET_STS_ERROR ;
8648               build_error_array(
8649                  p_msg_data     => x_msg_data,
8650                  p_context      => l_context,
8651                  p_batch_process_id => l_batch_process_id,
8652                  p_interface_id  => vinf_interface_id_tbl(i),
8653                  p_article_title => vinf_flex_value_tbl(i),
8654                  p_error_type    => G_RET_STS_ERROR,
8655                  p_entity        => 'VALUE'
8656                 );
8657                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8658                --##count
8659                --l_tot_rows_failed := l_tot_rows_failed+1;
8660                l_part_rows_failed := l_part_rows_failed+1;
8661                -- Continue to next row
8662 
8663           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8664               IF (l_debug = 'Y') THEN
8665                  okc_debug.log('400: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
8666               END IF;
8667 
8668               IF l_val_exist_csr%ISOPEN THEN
8669 	            CLOSE l_val_exist_csr;
8670               END IF;
8671               IF l_val_interface_csr%ISOPEN THEN
8672                  CLOSE l_val_interface_csr;
8673               END IF;
8674 
8675               --Set_Message
8676               l_return_status := G_RET_STS_UNEXP_ERROR ;
8677               x_return_status := G_RET_STS_UNEXP_ERROR ;
8678 
8679               build_error_array(
8680                  p_msg_data     => x_msg_data,
8681                  p_context      => l_context,
8682                  p_batch_process_id => l_batch_process_id,
8683                  p_interface_id  => vinf_interface_id_tbl(i),
8684                  p_article_title => vinf_flex_value_tbl(i),
8685                  p_error_type    => G_RET_STS_UNEXP_ERROR,
8686 			  p_entity        => 'VALUE'
8687                  );
8688                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8689                --##count
8690                --l_tot_rows_failed := l_tot_rows_failed+1;
8691                l_part_rows_failed := l_part_rows_failed+1;
8692               exit; -- exit the current fetch
8693 
8694           WHEN OTHERS THEN
8695               IF (l_debug = 'Y') THEN
8696                 okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
8697               END IF;
8698               IF l_val_exist_csr%ISOPEN THEN
8699 	            CLOSE l_val_exist_csr;
8700               END IF;
8701 
8702               IF l_val_interface_csr%ISOPEN THEN
8703                  CLOSE l_val_interface_csr;
8704               END IF;
8705 
8706               l_return_status := G_RET_STS_UNEXP_ERROR ;
8707               x_return_status := G_RET_STS_UNEXP_ERROR ;
8708 
8709               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8710                                 p_msg_name     => G_UNEXPECTED_ERROR,
8711                                 p_token1       => G_SQLCODE_TOKEN,
8712                                 p_token1_value => sqlcode,
8713                                 p_token2       => G_SQLERRM_TOKEN,
8714                                 p_token2_value => sqlerrm);
8715 
8716               build_error_array(
8717                  p_msg_data     => G_UNEXPECTED_ERROR,
8718                  p_context      => l_context,
8719                  p_batch_process_id => l_batch_process_id,
8720                  p_interface_id  => vinf_interface_id_tbl(i),
8721                  p_article_title => vinf_flex_value_tbl(i),
8722                  p_error_type    => G_RET_STS_ERROR,
8723 			  p_entity        => 'VALUE'
8724                 );
8725                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8726                --##count
8727                --l_tot_rows_failed := l_tot_rows_failed+1;
8728                l_part_rows_failed := l_part_rows_failed+1;
8729               exit;  -- exit the current fetch
8730           END;
8731     -------------------------
8732     -------------------------
8733     -- Exception Block for each iteration in Loop ends
8734     -------------------------
8735     -------------------------
8736 
8737 
8738      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
8739     ------------------------------------------------------------------------
8740     -------------- End of Inner Loop thru fetched row for validation --------
8741     -------------------------------------------------------------------------
8742     -- In order to propagate Unexpected error raise it if it is 'U'
8743     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
8744          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
8745     END IF;
8746 
8747     -------------------------
8748     -------------------------
8749     -- Exception Block for Inner Loop starts
8750     -- Handles unexpected errors as last step
8751     -------------------------
8752     -------------------------
8753     EXCEPTION
8754          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8755              IF (l_debug = 'Y') THEN
8756                 okc_debug.log('400: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
8757              END IF;
8758               IF l_val_exist_csr%ISOPEN THEN
8759 	            CLOSE l_val_exist_csr;
8760               END IF;
8761 
8762              IF l_val_interface_csr%ISOPEN THEN
8763                 CLOSE l_val_interface_csr;
8764              END IF;
8765              l_return_status := G_RET_STS_UNEXP_ERROR ;
8766              x_return_status := G_RET_STS_UNEXP_ERROR ;
8767              exit; -- exit outermost loop
8768 
8769         WHEN OTHERS THEN
8770              IF (l_debug = 'Y') THEN
8771                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
8772              END IF;
8773               IF l_val_exist_csr%ISOPEN THEN
8774 	            CLOSE l_val_exist_csr;
8775               END IF;
8776 
8777              IF l_val_interface_csr%ISOPEN THEN
8778                 CLOSE l_val_interface_csr;
8779              END IF;
8780              l_return_status := G_RET_STS_UNEXP_ERROR ;
8781              x_return_status := G_RET_STS_UNEXP_ERROR ;
8782              exit; -- exit outermost loop
8783      END;
8784 
8785     -------------------------
8786     -------------------------
8787     -- Exception Block for Each Iteration of outermost Loop ends
8788     -------------------------
8789     -------------------------
8790 
8791     ------------------------------------------------------------------------
8792     --------------------- Start Do_DML for Fnd Flex Values   ---------------
8793     -- Insert Fnd Flex Values
8794     -------------------------------------------------------------------------
8795     -- initialize l_return_status to track status of DML execution
8796      l_return_status := G_RET_STS_SUCCESS;
8797 
8798 
8799     IF p_validate_only = 'N' THEN
8800          BEGIN
8801          SAVEPOINT bulkdml;
8802 
8803          i := 0;
8804         -- Bulk insert New Valid Records
8805          BEGIN
8806          l_context := 'INSERTING NEW VALUES INTO TABLE';
8807            FOR  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
8808 
8809 		  IF vinf_action_tbl(i) = 'N' AND vinf_process_status_tbl(i) in ('S','W') THEN
8810 
8811 
8812   FND_FLEX_VAL_API.CREATE_INDEPENDENT_VSET_VALUE(
8813          P_FLEX_VALUE_SET_NAME     => vinf_flex_value_set_name_tbl(i),
8814 	 P_FLEX_VALUE              => vinf_flex_value_tbl(i),
8815 	 P_DESCRIPTION             => vinf_description_tbl(i),
8816 	 P_ENABLED_FLAG            => vinf_enabled_flag_tbl(i),
8817 	 P_START_DATE_ACTIVE       => vinf_start_date_active_tbl(i),
8818 	 P_END_DATE_ACTIVE         => vinf_end_date_active_tbl(i),
8819 	 P_SUMMARY_FLAG            => 'N',
8820 	 P_STRUCTURED_HIERARCHY_LEVEL => NULL,
8821 	 P_HIERARCHY_LEVEL         => NULL,
8822 	 X_STORAGE_VALUE           => l_storage_value);
8823 
8824 		   END IF;
8825         END LOOP;
8826 
8827         EXCEPTION
8828            WHEN OTHERS THEN
8829              IF (l_debug = 'Y') THEN
8830                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
8831              END IF;
8832              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
8833           END;
8834 
8835          --
8836          --  End of Insert into FND FLEX VALUES
8837          --
8838          --
8839 
8840          i := 0;
8841         -- Bulk disable Valid Records
8842          BEGIN
8843          l_context := 'DISABLE VALUES BY UPDATING THE END DATE';
8844            FOR  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
8845 
8846 		  IF vinf_action_tbl(i) = 'D' AND vinf_process_status_tbl(i) in ('S','W') THEN
8847 
8848 
8849   FND_FLEX_VAL_API.UPDATE_INDEPENDENT_VSET_VALUE(
8850          P_FLEX_VALUE_SET_NAME     => vinf_flex_value_set_name_tbl(i),
8851 	 P_FLEX_VALUE              => vinf_flex_value_tbl(i),
8852 	 --P_DESCRIPTION             => vinf_description_tbl(i),
8853 	 --P_ENABLED_FLAG            => vinf_enabled_flag_tbl(i),
8854 	 --P_START_DATE_ACTIVE       => vinf_start_date_active_tbl(i),
8855 	 P_END_DATE_ACTIVE         => vinf_end_date_active_tbl(i),
8856 	 --P_SUMMARY_FLAG            => 'N',
8857 	 --P_STRUCTURED_HIERARCHY_LEVEL => NULL,
8858 	 --P_HIERARCHY_LEVEL         => NULL,
8859 	 X_STORAGE_VALUE           => l_storage_value);
8860 
8861 		   END IF;
8862         END LOOP;
8863 
8864         EXCEPTION
8865            WHEN OTHERS THEN
8866              IF (l_debug = 'Y') THEN
8867                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
8868              END IF;
8869              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
8870           END;
8871 
8872          --
8873          --  End of Disable FND FLEX VALUES
8874          --
8875          --
8876 
8877 
8878 
8879       -- Exception for bulk DML block
8880       EXCEPTION
8881         WHEN OTHERS THEN
8882              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
8883               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8884                                   p_msg_name     => G_UNEXPECTED_ERROR,
8885                                   p_token1       => G_SQLCODE_TOKEN,
8886                                   p_token1_value => sqlcode,
8887                                   p_token2       => G_SQLERRM_TOKEN,
8888                                   p_token2_value => sqlerrm);
8889               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
8890                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
8891                                   p_token1       => 'CONTEXT',
8892                                   p_token1_value => l_context);
8893 
8894               build_error_array(
8895                                  p_msg_data     => null,
8896                                  p_context      => l_context,
8897                                  p_batch_process_id => l_batch_process_id,
8898                                  p_interface_id  => -99,
8899                                  p_article_title => NULL,
8900                                  p_error_type    => G_RET_STS_ERROR,
8901 						   p_entity        => 'VALUE'
8902               );
8903               l_return_status := G_RET_STS_UNEXP_ERROR;
8904               x_return_status := G_RET_STS_UNEXP_ERROR;
8905 
8906               --##count:rollback the count
8907               l_part_rows_failed := l_part_rows_processed;
8908               l_part_rows_warned := 0;
8909 
8910               ROLLBACK TO SAVEPOINT bulkdml;
8911               exit; -- exit outermost loop
8912       END;
8913 
8914     END IF; --- validate_only = 'N'
8915 
8916     ------------------------------------------------------------------------
8917     --------------------- End of Do_DML for Values   ---------------
8918     -------------------------------------------------------------------------
8919 
8920     ------------------------------------------------------------------------
8921     --------------- Start of Do_DML for import related tables   ------------
8922     -- Update interface table
8923     -- Insert Errors into Error table
8924     -------------------------------------------------------------------------
8925     -- Update Interface Table
8926     i:=0;
8927     BEGIN
8928      l_context := 'UPDATING VALUES INTERFACE TABLE';
8929      FORALL i in vinf_interface_id_tbl.FIRST..vinf_interface_id_tbl.LAST
8930        UPDATE OKC_VS_VALUES_INTERFACE
8931        SET
8932            -- We don't want to update process_status to 'S' or 'W' in validation_mode
8933            -- because it is not going to be picked up in next run if we do so
8934            PROCESS_STATUS = decode(p_validate_only||vinf_process_status_tbl(i)||l_bulk_failed,
8935                                                'NEN','E',
8936                                                'NSN','S',
8937                                                'NWN','W',
8938                                                'NEY','E',
8939                                                'NSY',NULL,
8940                                                'NWY',NULL,
8941                                                'YEY','E',
8942                                                'YEN','E',
8943                                                'NFY','E',
8944                                                'YFY','E',
8945                                                'NFN','E',
8946                                                'YFN','E',NULL),
8947            PROGRAM_ID                 = l_program_id,
8948            REQUEST_ID                 = l_request_id,
8949            PROGRAM_LOGIN_ID           = l_program_login_id,
8950            PROGRAM_APPLICATION_ID     = l_program_appl_id,
8951            OBJECT_VERSION_NUMBER      = vinf_obj_ver_number_tbl(i) + 1,
8952            LAST_UPDATED_BY            = l_user_id,
8953            LAST_UPDATE_LOGIN          = l_login_id,
8954            LAST_UPDATE_DATE           = SYSDATE
8955          WHERE
8956            interface_id = vinf_interface_id_tbl(i);
8957     EXCEPTION
8958            WHEN OTHERS THEN
8959              IF (l_debug = 'Y') THEN
8960                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
8961              END IF;
8962 
8963              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8964                         p_msg_name     => G_UNEXPECTED_ERROR,
8965                         p_token1       => G_SQLCODE_TOKEN,
8966                         p_token1_value => sqlcode,
8967                         p_token2       => G_SQLERRM_TOKEN,
8968                         p_token2_value => sqlerrm);
8969              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
8970                         p_msg_name     => 'OKC_VAL_INT_UPDATE_FAILED');
8971              build_error_array(
8972                        p_msg_data     => null,
8973                        p_context      => l_context,
8974                        p_batch_process_id => l_batch_process_id,
8975                        p_interface_id  => -99,
8976                        p_article_title => NULL,
8977                        p_error_type    => G_RET_STS_ERROR,
8978 				   p_entity        => 'VALUE'
8979              );
8980 
8981 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
8982 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
8983 		       --##count:rollback the count
8984 		      l_part_rows_failed := l_part_rows_processed;
8985 		      l_part_rows_warned := 0;
8986 
8987              --RAISE FND_API.G_EXC_ERROR ;
8988   END;
8989    --
8990    -- End of Update OKC_VS_VALUES_INTERFACE
8991    --
8992    --
8993 
8994     --
8995     --Insert Errors into Error table for this fetch
8996     --
8997     insert_error_array(
8998      x_return_status => x_return_status,
8999      x_msg_count     => x_msg_count,
9000      x_msg_data      => x_msg_data
9001     );
9002 
9003 
9004     IF (x_return_status = l_insert_errors_error) THEN
9005       NULL;
9006      -- Ignore
9007      -- RAISE l_insert_errors_exception;
9008     END IF;
9009 
9010     ------------------------------------------------------------------------
9011     --------------- End of Do_DML for import related tables   ------------
9012     -------------------------------------------------------------------------
9013     commit;
9014 
9015     -- Now delete cache for next bulk fetch
9016 
9017     vinf_interface_id_tbl.DELETE;
9018     vinf_batch_number_tbl.DELETE;
9019     vinf_obj_ver_number_tbl.DELETE;
9020     vinf_flex_value_set_name_tbl.DELETE;
9021     vinf_flex_value_tbl.DELETE;
9022     vinf_process_status_tbl.DELETE;
9023     vinf_action_tbl.DELETE;
9024     vinf_enabled_flag_tbl.DELETE;
9025     vinf_start_date_active_tbl.DELETE;
9026     vinf_end_date_active_tbl.DELETE;
9027     vinf_language_tbl.DELETE;
9028     vinf_description_tbl.DELETE;
9029     vinf_flex_value_meaning_tbl.DELETE;
9030 
9031     vinf_flex_value_id_tbl.DELETE;
9032     vinf_value_set_id_tbl.DELETE;
9033     vinf_format_type_tbl.DELETE;
9034     vinf_maximum_size_tbl.DELETE;
9035     vinf_number_precision_tbl.DELETE;
9036     vinf_alphanum_allowed_tbl.DELETE;
9037     vinf_uppercase_only_tbl.DELETE;
9038     vinf_num_mode_enabled_tbl.DELETE;
9039     vinf_maximum_value_tbl.DELETE;
9040     vinf_minimum_value_tbl.DELETE;
9041 
9042     --vinf_flex_value_orig_tbl.DELETE;
9043 
9044     err_batch_process_id_tbl.DELETE;
9045     err_article_title_tbl.DELETE;
9046     err_interface_id_tbl.DELETE;
9047     err_error_number_tbl.DELETE;
9048     err_object_version_number_tbl.DELETE;
9049     err_error_type_tbl.DELETE;
9050     err_entity_tbl.DELETE;
9051     err_error_description_tbl.DELETE;
9052 
9053    EXIT WHEN l_val_interface_csr%NOTFOUND;
9054 END LOOP;
9055 
9056 
9057 -----------------------------------------------------------------------
9058 -- End of outermost loop for bulk fetch
9059 -----------------------------------------------------------------------
9060 
9061 IF l_val_interface_csr%ISOPEN THEN
9062 CLOSE l_val_interface_csr;
9063 END IF;
9064 
9065 
9066 --##count:add up last processed counts
9067 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
9068 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
9069 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
9070 
9071 --Update Batch Process Table as a last step
9072 UPDATE OKC_ART_INT_BATPROCS_ALL
9073 SET
9074   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
9075   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
9076   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
9077   END_DATE                   = SYSDATE,
9078   PROGRAM_ID                 = l_program_id,
9079   REQUEST_ID                 = l_request_id,
9080   PROGRAM_LOGIN_ID           = l_program_login_id,
9081   PROGRAM_APPLICATION_ID     = l_program_appl_id,
9082   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
9083   LAST_UPDATED_BY            = l_user_id,
9084   LAST_UPDATE_LOGIN          = l_login_id,
9085   LAST_UPDATE_DATE           = SYSDATE
9086 WHERE
9087   BATCH_PROCESS_ID  = l_batch_process_id
9088   AND ENTITY = 'Value';
9089 
9090 IF err_error_number_tbl.COUNT > 0 THEN
9091  insert_error_array(
9092    x_return_status => x_return_status,
9093    x_msg_count     => x_msg_count,
9094    x_msg_data      => x_msg_data
9095  );
9096 END IF;
9097 
9098 -- Print statistic of this run in the log
9099 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
9100 --wrap_up(p_validate_only,p_batch_number,l_tot_rows_processed,l_tot_rows_failed,l_tot_rows_warned,l_batch_process_id,'VALUE');
9101 commit; -- Final commit for status update
9102 
9103 IF (l_debug = 'Y') THEN
9104  okc_debug.log('2000: Leaving Fnd_flex_values import', 2);
9105 END IF;
9106 --x_return_status := l_return_status; this may cause to erase error x_return_status
9107 
9108 EXCEPTION
9109 
9110   WHEN FND_API.G_EXC_ERROR THEN
9111       IF (l_debug = 'Y') THEN
9112          okc_debug.log('3000: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
9113       END IF;
9114       --Insert Errors into Error table if there is any
9115       insert_error_array(
9116        x_return_status => x_return_status,
9117        x_msg_count     => x_msg_count,
9118        x_msg_data      => x_msg_data
9119       );
9120       x_return_status := G_RET_STS_ERROR ;
9121 
9122       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9123       IF (l_debug = 'Y') THEN
9124          okc_debug.log('4000: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
9125       END IF;
9126       --Insert Errors into Error table if there is any
9127 
9128       insert_error_array(
9129        x_return_status => x_return_status,
9130        x_msg_count     => x_msg_count,
9131        x_msg_data      => x_msg_data
9132       );
9133       commit;
9134 
9135       IF l_val_interface_csr%ISOPEN THEN
9136          CLOSE l_val_interface_csr;
9137       END IF;
9138 
9139       x_return_status := G_RET_STS_UNEXP_ERROR ;
9140       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
9141         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
9142       END IF;
9143       get_print_msgs_stack(p_msg_data => x_msg_data);
9144 
9145   WHEN l_insert_errors_exception THEN
9146       --
9147       -- In this exception handling, we don't insert error array again
9148       -- because error happend in the module
9149       --
9150       IF (l_debug = 'Y') THEN
9151         okc_debug.log('5000: Leaving Fnd_flex_values_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
9152       END IF;
9153 
9154       IF l_val_interface_csr%ISOPEN THEN
9155          CLOSE l_val_interface_csr;
9156       END IF;
9157 
9158 
9159       --x_return_status := G_RET_STS_UNEXP_ERROR ;
9160       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
9161         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
9162       END IF;
9163       get_print_msgs_stack(p_msg_data => x_msg_data);
9164       commit;
9165 
9166   WHEN OTHERS THEN
9167       IF (l_debug = 'Y') THEN
9168         okc_debug.log('5000: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
9169       END IF;
9170       --Insert Errors into Error table if there is any
9171       insert_error_array(
9172        x_return_status => x_return_status,
9173        x_msg_count     => x_msg_count,
9174        x_msg_data      => x_msg_data
9175       );
9176       commit;
9177       --
9178       IF l_val_interface_csr%ISOPEN THEN
9179          CLOSE l_val_interface_csr;
9180       END IF;
9181 
9182       x_return_status := G_RET_STS_UNEXP_ERROR ;
9183       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
9184         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
9185       END IF;
9186 	 get_print_msgs_stack(p_msg_data => x_msg_data);
9187 END import_fnd_flex_values;
9188 
9189 -- MOAC
9190 /*
9191   BEGIN
9192        OPEN cur_org_csr;
9193        FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
9194        CLOSE cur_org_csr;
9195 */
9196 --CLM impact on contracts changes
9197 
9198 PROCEDURE import_scn_map(
9199     x_return_status                OUT NOCOPY VARCHAR2,
9200     p_batch_number                 IN VARCHAR2,
9201     p_fetchsize                    IN NUMBER := 100
9202    )IS
9203     l_api_version                 CONSTANT NUMBER := 1;
9204     l_api_name                    CONSTANT VARCHAR2(30) := 'import_scn_map';
9205     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
9206  /* CURSOR l_scnmap_interface_csr ( cp_batch_number IN VARCHAR2) IS
9207       SELECT
9208            SMINT.ARTICLE_TITLE          ,
9209            SMINT.BATCH_NUMBER  ,
9210            SMINT.ORG_ID    ,
9211            SMINT.VARIABLE_VALUE        ,
9212            SMINT.SCN_CODE
9213       FROM OKC_SCN_MAP_INTERFACE SMINT
9214       WHERE BATCH_NUMBER = cp_batch_number;
9215 
9216     TYPE l_sminf_article_title             IS TABLE OF OKC_SCN_MAP_INTERFACE.ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
9217     TYPE l_sminf_batch_number             IS TABLE OF OKC_SCN_MAP_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
9218     TYPE l_sminf_org_id    IS TABLE OF OKC_SCN_MAP_INTERFACE.ORG_ID%TYPE INDEX BY BINARY_INTEGER ;
9219     TYPE l_sminf_variable_value      IS TABLE OF OKC_SCN_MAP_INTERFACE.VARIABLE_VALUE%TYPE INDEX BY BINARY_INTEGER ;
9220     TYPE l_sminf_scn_code          IS TABLE OF OKC_SCN_MAP_INTERFACE.SCN_CODE%TYPE INDEX BY BINARY_INTEGER ;
9221 v_sminf_article_title_tbl l_sminf_article_title;
9222 v_sminf_batch_number_tbl l_sminf_batch_number;
9223 v_sminf_org_id_tbl l_sminf_org_id;
9224 v_sminf_variable_value_tbl l_sminf_variable_value;
9225 v_sminf_scn_code_tbl l_sminf_scn_code;
9226 
9227 l_article_id OKC_ART_VAR_SECTIONS.ARTICLE_ID%TYPE;
9228 l_article_version_id OKC_ART_VAR_SECTIONS.ARTICLE_VERSION_ID%TYPE;
9229 l_variable_code OKC_ART_VAR_SECTIONS.VARIABLE_CODE%TYPE;
9230 l_variable_value OKC_ART_VAR_SECTIONS.VARIABLE_VALUE%TYPE;
9231 l_variable_value_id OKC_ART_VAR_SECTIONS.VARIABLE_VALUE_ID%TYPE;
9232 l_scn_code OKC_ART_VAR_SECTIONS.SCN_CODE%TYPE;
9233 
9234 CURSOR okc_art_var_ins_csr(p_article_title IN VARCHAR2,p_batch_number IN VARCHAR2,p_org_id IN NUMBER,p_variable_value IN VARCHAR2) IS
9235 SELECT art.article_id,av.article_version_id,art.variable_code,intf.variable_value,flx.flex_value_id,intf.scn_code
9236                  FROM okc_articles_all art,okc_scn_map_interface intf,fnd_flex_values flx,okc_bus_variables_b bus,okc_article_versions av
9237                  WHERE art.article_title = intf.article_title
9238                  AND art.org_id=intf.org_id
9239                  AND art.variable_code =  bus.variable_code
9240                  AND bus.value_set_id = flx.flex_value_set_id
9241                  AND flx.flex_value = intf.variable_value
9242                  AND av.article_id = art.article_id
9243                  AND intf.article_title = p_article_title
9244                  AND intf.batch_number = p_batch_number
9245                  AND intf.org_id = p_org_id
9246                  AND intf.variable_value = p_variable_value;
9247 */
9248 BEGIN
9249  IF (l_debug = 'Y') THEN
9250   okc_debug.log('1100: Entered scn_import', 2);
9251 END IF;
9252  x_return_status := G_RET_STS_SUCCESS ;
9253 
9254 /*OPEN l_scnmap_interface_csr ( p_batch_number );
9255 LOOP
9256 BEGIN
9257 FETCH l_scnmap_interface_csr BULK COLLECT INTO
9258 v_sminf_article_title_tbl,
9259 v_sminf_batch_number_tbl,
9260 v_sminf_org_id_tbl,
9261 v_sminf_variable_value_tbl,
9262 v_sminf_scn_code_tbl  LIMIT p_fetchsize;
9263     EXIT WHEN v_sminf_article_title_tbl.COUNT = 0 ;
9264 
9265       FOR i in v_sminf_article_title_tbl.FIRST ..v_sminf_article_title_tbl.LAST LOOP
9266       BEGIN
9267         OPEN okc_art_var_ins_csr(v_sminf_article_title_tbl(i),v_sminf_batch_number_tbl(i),v_sminf_org_id_tbl(i),v_sminf_variable_value_tbl(i));
9268         FETCH okc_art_var_ins_csr INTO l_article_id,l_article_version_id,l_variable_code,l_variable_value,l_variable_value_id,l_scn_code;
9269         CLOSE okc_art_var_ins_csr;
9270 
9271         INSERT INTO okc_art_var_sections(variable_code,variable_value_id,variable_value,article_id,article_version_id,scn_code)
9272          VALUES(
9273         l_variable_code ,
9274         l_variable_value_id ,
9275         l_variable_value ,
9276         l_article_id ,
9277         l_article_version_id ,
9278         l_scn_code );
9279          END;
9280         END LOOP;   --for loop ends
9281 
9282      END;
9283       CLOSE l_scnmap_interface_csr;
9284            END LOOP;
9285  EXCEPTION
9286   WHEN OTHERS THEN
9287       IF (l_debug = 'Y') THEN
9288         okc_debug.log('1200: Leaving scn_map_import because of EXCEPTION: '||sqlerrm, 2);
9289       END IF;
9290       x_return_status := G_RET_STS_UNEXP_ERROR ;
9291 */
9292 
9293    END import_scn_map;
9294 
9295 END OKC_ARTICLES_IMPORT_GRP;