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.16.12010000.2 2008/10/24 08:00:19 ssreekum 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) 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) 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            TO_NUMBER(NULL) ARTICLE_VERSION_ID
1832       FROM OKC_ART_INTERFACE_ALL INTRFC, OKC_ARTICLES_ALL ART
1833       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
1834          AND INTRFC.ORG_ID = cp_local_org_id
1835          AND BATCH_NUMBER = cp_batch_number
1836          AND RTRIM(INTRFC.ARTICLE_TITLE) = ART.ARTICLE_TITLE(+)
1837          AND INTRFC.ORG_ID = ART.ORG_ID(+)
1838          AND ART.STANDARD_YN(+) = 'Y'
1839       ORDER BY RTRIM(INTRFC.ARTICLE_TITLE) ASC;
1840 
1841 -- Cursor returns article status, version id and version number
1842 -- for the most recent version with article_id
1843 
1844     CURSOR get_max_article_version_csr    (cp_article_id IN NUMBER) IS
1845      SELECT
1846           ARTICLE_VERSION_ID,
1847           ARTICLE_VERSION_NUMBER,
1848           ARTICLE_STATUS,
1849 		START_DATE
1850      FROM OKC_ARTICLE_VERSIONS A
1851      WHERE article_id = cp_article_id
1852        and start_date = (SELECT max(start_date)
1853                          FROM   okc_article_versions
1854                          WHERE  article_id = a.article_id);
1855 
1856 -- Cursor to get article level information for V, U interface row
1857     CURSOR get_article_info_csr    (cp_article_id IN NUMBER) IS
1858      SELECT
1859           ARTICLE_INTENT,
1860           ARTICLE_LANGUAGE
1861      FROM OKC_ARTICLES_ALL
1862      WHERE  ARTICLE_ID = cp_article_id;
1863 
1864 -- Cursor to validate article type
1865 -- If article type is not active any more but it is not valid
1866     CURSOR validate_article_type_csr ( cp_article_type IN VARCHAR2,
1867                                        cp_article_id IN NUMBER,
1868                                        cp_action IN VARCHAR2) IS
1869      SELECT lookup_code
1870      FROM  fnd_lookups
1871      WHERE lookup_type = 'OKC_SUBJECT'
1872        AND lookup_code = cp_article_type
1873        AND start_date_active <= trunc(sysdate)
1874        AND nvl(end_date_active,sysdate+1) >= trunc(sysdate);
1875 
1876 -- Check validity of valueset
1877 --  Split into two cursor for performance as var_name may not be used frequently
1878     CURSOR l_check_valid_valueset_csr (cp_variable_code IN VARCHAR2) IS
1879       SELECT FLX.FLEX_VALUE_SET_ID,
1880              BVB.VARIABLE_TYPE
1881       FROM
1882          OKC_BUS_VARIABLES_B BVB,
1883          FND_FLEX_VALUE_SETS FLX
1884       WHERE BVB.VARIABLE_CODE = cp_variable_code
1885       --AND BVB.VARIABLE_TYPE = 'U'
1886       AND FLX.FLEX_VALUE_SET_ID(+) = BVB.VALUE_SET_ID;
1887 
1888     CURSOR l_var_name_csr (cp_variable_code IN VARCHAR2,
1889                            cp_lang IN VARCHAR2) IS
1890       SELECT BVT.VARIABLE_NAME
1891       FROM
1892          OKC_BUS_VARIABLES_TL BVT
1893       WHERE BVT.VARIABLE_CODE = cp_variable_code
1894       AND BVT.LANGUAGE = cp_lang;
1895 
1896 -- Interface Rows
1897 
1898     TYPE l_inf_interface_id             IS TABLE OF OKC_ART_INTERFACE_ALL.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
1899     TYPE l_inf_batch_number             IS TABLE OF OKC_ART_INTERFACE_ALL.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1900     TYPE l_inf_object_version_number    IS TABLE OF OKC_ART_INTERFACE_ALL.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1901     TYPE l_inf_article_title            IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
1902     TYPE l_inf_org_id                   IS TABLE OF OKC_ART_INTERFACE_ALL.ORG_ID%TYPE INDEX BY BINARY_INTEGER ;
1903     TYPE l_inf_process_status           IS TABLE OF OKC_ART_INTERFACE_ALL.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
1904     TYPE l_inf_action                   IS TABLE OF OKC_ART_INTERFACE_ALL.ACTION%TYPE INDEX BY BINARY_INTEGER ;
1905     TYPE l_inf_article_number           IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1906     TYPE l_inf_article_intent           IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
1907     TYPE l_inf_article_language         IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
1908     TYPE l_inf_article_type             IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TYPE%TYPE INDEX BY BINARY_INTEGER ;
1909     TYPE l_inf_article_id               IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_ID%TYPE INDEX BY BINARY_INTEGER ;
1910     TYPE l_inf_art_reference_code       IS TABLE OF OKC_ART_INTERFACE_ALL.ART_SYSTEM_REFERENCE_CODE%TYPE INDEX BY BINARY_INTEGER ;
1911     TYPE l_inf_art_reference_id1        IS TABLE OF OKC_ART_INTERFACE_ALL.ART_SYSTEM_REFERENCE_ID1%TYPE INDEX BY BINARY_INTEGER ;
1912     TYPE l_inf_art_reference_id2        IS TABLE OF OKC_ART_INTERFACE_ALL.ART_SYSTEM_REFERENCE_ID2%TYPE INDEX BY BINARY_INTEGER ;
1913     TYPE l_inf_article_text             IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_TEXT%TYPE INDEX BY BINARY_INTEGER ;
1914     TYPE l_inf_provision_yn             IS TABLE OF OKC_ART_INTERFACE_ALL.PROVISION_YN%TYPE INDEX BY BINARY_INTEGER ;
1915     TYPE l_inf_insert_by_reference      IS TABLE OF OKC_ART_INTERFACE_ALL.INSERT_BY_REFERENCE%TYPE INDEX BY BINARY_INTEGER ;
1916     TYPE l_inf_lock_text                IS TABLE OF OKC_ART_INTERFACE_ALL.LOCK_TEXT%TYPE INDEX BY BINARY_INTEGER ;
1917     TYPE l_inf_global_yn                IS TABLE OF OKC_ART_INTERFACE_ALL.GLOBAL_YN%TYPE INDEX BY BINARY_INTEGER ;
1918     TYPE l_inf_article_status           IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_STATUS%TYPE INDEX BY BINARY_INTEGER ;
1919     TYPE l_inf_start_date               IS TABLE OF OKC_ART_INTERFACE_ALL.START_DATE%TYPE INDEX BY BINARY_INTEGER ;
1920     TYPE l_inf_end_date                 IS TABLE OF OKC_ART_INTERFACE_ALL.END_DATE%TYPE INDEX BY BINARY_INTEGER ;
1921     TYPE l_inf_display_name             IS TABLE OF OKC_ART_INTERFACE_ALL.DISPLAY_NAME%TYPE INDEX BY BINARY_INTEGER ;
1922     TYPE l_inf_article_description      IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
1923     TYPE l_inf_date_approved            IS TABLE OF OKC_ART_INTERFACE_ALL.DATE_APPROVED%TYPE INDEX BY BINARY_INTEGER ;
1924     TYPE l_inf_default_section          IS TABLE OF OKC_ART_INTERFACE_ALL.DEFAULT_SECTION%TYPE INDEX BY BINARY_INTEGER ;
1925     TYPE l_inf_reference_source         IS TABLE OF OKC_ART_INTERFACE_ALL.REFERENCE_SOURCE%TYPE INDEX BY BINARY_INTEGER ;
1926     TYPE l_inf_reference_text           IS TABLE OF OKC_ART_INTERFACE_ALL.REFERENCE_TEXT%TYPE INDEX BY BINARY_INTEGER ;
1927     TYPE l_inf_ver_reference_code       IS TABLE OF OKC_ART_INTERFACE_ALL.VER_SYSTEM_REFERENCE_CODE%TYPE INDEX BY BINARY_INTEGER ;
1928     TYPE l_inf_ver_reference_id1        IS TABLE OF OKC_ART_INTERFACE_ALL.VER_SYSTEM_REFERENCE_ID1%TYPE INDEX BY BINARY_INTEGER ;
1929     TYPE l_inf_ver_reference_id2        IS TABLE OF OKC_ART_INTERFACE_ALL.VER_SYSTEM_REFERENCE_ID2%TYPE INDEX BY BINARY_INTEGER ;
1930     TYPE l_inf_instructions             IS TABLE OF OKC_ART_INTERFACE_ALL.ADDITIONAL_INSTRUCTIONS%TYPE INDEX BY BINARY_INTEGER ;
1931     TYPE l_inf_date_published           IS TABLE OF OKC_ART_INTERFACE_ALL.DATE_PUBLISHED%TYPE INDEX BY BINARY_INTEGER ;
1932     TYPE l_inf_attribute_category       IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE_CATEGORY%TYPE INDEX BY BINARY_INTEGER ;
1933     TYPE l_inf_attribute1               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE1%TYPE INDEX BY BINARY_INTEGER ;
1934     TYPE l_inf_attribute2               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE2%TYPE INDEX BY BINARY_INTEGER ;
1935     TYPE l_inf_attribute3               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE3%TYPE INDEX BY BINARY_INTEGER ;
1936     TYPE l_inf_attribute4               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE4%TYPE INDEX BY BINARY_INTEGER ;
1937     TYPE l_inf_attribute5               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE5%TYPE INDEX BY BINARY_INTEGER ;
1938     TYPE l_inf_attribute6               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE6%TYPE INDEX BY BINARY_INTEGER ;
1939     TYPE l_inf_attribute7               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE7%TYPE INDEX BY BINARY_INTEGER ;
1940     TYPE l_inf_attribute8               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE8%TYPE INDEX BY BINARY_INTEGER ;
1941     TYPE l_inf_attribute9               IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE9%TYPE INDEX BY BINARY_INTEGER ;
1942     TYPE l_inf_attribute10              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE10%TYPE INDEX BY BINARY_INTEGER ;
1943     TYPE l_inf_attribute11              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE11%TYPE INDEX BY BINARY_INTEGER ;
1944     TYPE l_inf_attribute12              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE12%TYPE INDEX BY BINARY_INTEGER ;
1945     TYPE l_inf_attribute13              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE13%TYPE INDEX BY BINARY_INTEGER ;
1946     TYPE l_inf_attribute14              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE14%TYPE INDEX BY BINARY_INTEGER ;
1947     TYPE l_inf_attribute15              IS TABLE OF OKC_ART_INTERFACE_ALL.ATTRIBUTE15%TYPE INDEX BY BINARY_INTEGER ;
1948     TYPE l_inf_article_version_id       IS TABLE OF OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE INDEX BY BINARY_INTEGER ;
1949     TYPE l_inf_article_version_number   IS TABLE OF OKC_ART_INTERFACE_ALL.ARTICLE_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
1950     TYPE l_inf_adoption_type            IS TABLE OF OKC_ARTICLE_VERSIONS.ADOPTION_TYPE%TYPE INDEX BY BINARY_INTEGER ;
1951 
1952 
1953 
1954 -- For Article Variables
1955     TYPE list_artv_article_version_id   IS TABLE OF OKC_ARTICLE_VARIABLES.ARTICLE_VERSION_ID%TYPE INDEX BY BINARY_INTEGER ;
1956     TYPE list_artv_variable_code        IS TABLE OF OKC_ARTICLE_VARIABLES.VARIABLE_CODE%TYPE INDEX BY BINARY_INTEGER ;
1957     TYPE list_artv_action               IS TABLE OF VARCHAR2(1) INDEX BY BINARY_INTEGER ;
1958 
1959     l_article_language                  VARCHAR2(3);
1960 
1961 -- Variables for interface
1962    inf_interface_id_tbl                 l_inf_interface_id ;
1963    inf_batch_number_tbl                 l_inf_batch_number ;
1964    inf_object_version_number_tbl        l_inf_object_version_number ;
1965    inf_article_title_tbl                l_inf_article_title ;
1966    inf_org_id_tbl                       l_inf_org_id ;
1967    inf_process_status_tbl               l_inf_process_status ;
1968    inf_action_tbl                       l_inf_action ;
1969    inf_article_number_tbl               l_inf_article_number ;
1970    inf_article_intent_tbl               l_inf_article_intent ;
1971    inf_x_article_intent_tbl             l_inf_article_intent ;
1972    inf_article_language_tbl             l_inf_article_language ;
1973    inf_x_article_language_tbl           l_inf_article_language ;
1974    inf_article_type_tbl                 l_inf_article_type ;
1975    inf_article_id_tbl                   l_inf_article_id ;
1976    inf_art_reference_code_tbl           l_inf_art_reference_code ;
1977    inf_art_reference_id1_tbl            l_inf_art_reference_id1 ;
1978    inf_art_reference_id2_tbl            l_inf_art_reference_id2 ;
1979    inf_article_text_tbl                 l_inf_article_text ;
1980    inf_provision_yn_tbl                 l_inf_provision_yn ;
1981    inf_insert_by_reference_tbl          l_inf_insert_by_reference ;
1982    inf_lock_text_tbl                    l_inf_lock_text ;
1983    inf_global_yn_tbl                    l_inf_global_yn ;
1984    inf_article_status_tbl               l_inf_article_status ;
1985    inf_start_date_tbl                   l_inf_start_date ;
1986    inf_end_date_tbl                     l_inf_end_date ;
1987    inf_display_name_tbl                 l_inf_display_name ;
1988    inf_article_description_tbl          l_inf_article_description ;
1989    inf_date_approved_tbl                l_inf_date_approved ;
1990    inf_default_section_tbl              l_inf_default_section ;
1991    inf_reference_source_tbl             l_inf_reference_source ;
1992    inf_reference_text_tbl               l_inf_reference_text ;
1993    inf_ver_reference_code_tbl           l_inf_ver_reference_code ;
1994    inf_ver_reference_id1_tbl            l_inf_ver_reference_id1 ;
1995    inf_ver_reference_id2_tbl            l_inf_ver_reference_id2 ;
1996    inf_instructions_tbl                 l_inf_instructions ;
1997    inf_date_published_tbl               l_inf_date_published ;
1998    inf_attribute_category_tbl           l_inf_attribute_category ;
1999    inf_attribute1_tbl                   l_inf_attribute1 ;
2000    inf_attribute2_tbl                   l_inf_attribute2 ;
2001    inf_attribute3_tbl                   l_inf_attribute3 ;
2002    inf_attribute4_tbl                   l_inf_attribute4 ;
2003    inf_attribute5_tbl                   l_inf_attribute5 ;
2004    inf_attribute6_tbl                   l_inf_attribute6 ;
2005    inf_attribute7_tbl                   l_inf_attribute7 ;
2006    inf_attribute8_tbl                   l_inf_attribute8 ;
2007    inf_attribute9_tbl                   l_inf_attribute9 ;
2008    inf_attribute10_tbl                  l_inf_attribute10 ;
2009    inf_attribute11_tbl                  l_inf_attribute11 ;
2010    inf_attribute12_tbl                  l_inf_attribute12 ;
2011    inf_attribute13_tbl                  l_inf_attribute13 ;
2012    inf_attribute14_tbl                  l_inf_attribute14 ;
2013    inf_attribute15_tbl                  l_inf_attribute15 ;
2014    inf_article_version_id_tbl           l_inf_article_version_id ;
2015    inf_earlier_version_id_tbl           l_inf_article_version_id ;
2016    inf_article_version_number_tbl       l_inf_article_version_number ;
2017    inf_adoption_type_tbl                l_inf_adoption_type;
2018 
2019    artv_article_version_id_tbl          list_artv_article_version_id ;
2020    artv_variable_code_tbl               OKC_ARTICLES_GRP.variable_code_tbl_type ;
2021    artv_action_tbl                      list_artv_action ;
2022    l_variable_code_tbl                  OKC_ARTICLES_GRP.variable_code_tbl_type ;
2023 
2024    I NUMBER := 0;
2025    j NUMBER := 0;
2026    k NUMBER := 0;
2027    x NUMBER := 0;
2028    l_earlier_version_id                 OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE;
2029    l_article_version_id                 OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_ID%TYPE;
2030    l_article_status                     OKC_ARTICLE_VERSIONS.ARTICLE_STATUS%TYPE;
2031    l_start_date                         OKC_ARTICLE_VERSIONS.START_DATE%TYPE;
2032    l_tmp_article_status                 OKC_ARTICLE_VERSIONS.ARTICLE_STATUS%TYPE;
2033    l_earlier_version_number             OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_NUMBER%TYPE;
2034    l_earlier_adoption_type              OKC_ARTICLE_VERSIONS.ADOPTION_TYPE%TYPE;
2035    l_article_number                     OKC_ARTICLES_ALL.ARTICLE_NUMBER%TYPE;
2036    l_article_version_number             OKC_ARTICLE_VERSIONS.ARTICLE_VERSION_NUMBER%TYPE;
2037    l_variables_to_insert_tbl            OKC_ARTICLES_GRP.variable_code_tbl_type;
2038    l_variables_to_delete_tbl            OKC_ARTICLES_GRP.variable_code_tbl_type;
2039    l_adoption_type                      OKC_ARTICLE_VERSIONS.ADOPTION_TYPE%TYPE;
2040    l_program_id                         OKC_ART_INTERFACE_ALL.PROGRAM_ID%TYPE;
2041    l_program_login_id                   OKC_ART_INTERFACE_ALL.PROGRAM_LOGIN_ID%TYPE;
2042    l_program_appl_id                    OKC_ART_INTERFACE_ALL.PROGRAM_APPLICATION_ID%TYPE;
2043    l_request_id                         OKC_ART_INTERFACE_ALL.REQUEST_ID%TYPE;
2044    l_variable_name                      OKC_BUS_VARIABLES_TL.VARIABLE_NAME%TYPE;
2045    l_variable_type                      OKC_BUS_VARIABLES_B.VARIABLE_TYPE%TYPE;
2046    l_value_set_id                       FND_FLEX_VALUE_SETS.FLEX_VALUE_SET_ID%TYPE;
2047    l_return_status                      VARCHAR2(1);
2048    api_return_status                    VARCHAR2(1);
2049    l_doc_sequence_type                  CHAR(1);
2050    l_error_index                        NUMBER          := 1;
2051    l_replace_text                       VARCHAR2(1)     := 'N';
2052    l_batch_process_id                   NUMBER          := 1;
2053    l_context                            VARCHAR2(50)    := NULL;
2054    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
2055    l_tot_rows_processed                 NUMBER          := 0;
2056    l_tot_rows_failed                    NUMBER          := 0;
2057    l_tot_rows_warned                    NUMBER          := 0;
2058    l_part_rows_processed                NUMBER          := 0;
2059    l_part_rows_failed                   NUMBER          := 0;
2060    l_part_rows_warned                   NUMBER          := 0;
2061    l_bulk_failed                        VARCHAR2(1)     := 'Y';
2062    l_exist_approver                     VARCHAR2(5)     := 'NOK';
2063    save_threshold                       WF_ENGINE.threshold%TYPE;
2064 
2065 ------------------------------------------------------------------------
2066 --  PROCEDURE import_articles body starts
2067 -------------------------------------------------------------------------
2068 
2069 BEGIN
2070 
2071 
2072 IF (l_debug = 'Y') THEN
2073   okc_debug.log('100: Entered article_import', 2);
2074 END IF;
2075 
2076 
2077 ------------------------------------------------------------------------
2078 --  Variable Initialization
2079 -------------------------------------------------------------------------
2080 
2081 -- Standard Start of API savepoint
2082 FND_MSG_PUB.initialize;
2083 --  Initialize API return status to success
2084 x_return_status := FND_API.G_RET_STS_SUCCESS;
2085 l_return_status := G_RET_STS_SUCCESS;
2086 --  Cache user_id, login_id and org_id
2087 l_user_id  := Fnd_Global.user_id;
2088 l_login_id := Fnd_Global.login_id;
2089 l_userenv_lang := USERENV('LANG');
2090 
2091 -- MOAC
2092 G_CURRENT_ORG_ID := mo_global.get_current_org_id();
2093 /*
2094 OPEN cur_org_csr;
2095 FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
2096 CLOSE cur_org_csr;
2097 */
2098 -- MOAC
2099 IF G_CURRENT_ORG_ID IS NULL THEN
2100    Okc_Api.Set_Message(G_APP_NAME,'OKC_ART_NULL_ORG_ID');
2101    RAISE FND_API.G_EXC_ERROR;
2102 END IF;
2103 
2104 
2105 IF G_CURRENT_ORG_ID = G_GLOBAL_ORG_ID THEN
2106    l_adoption_type := NULL;
2107 ELSE
2108    l_adoption_type := 'LOCAL';
2109 END IF;
2110 
2111 
2112 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
2113    l_program_id := NULL;
2114 ELSE
2115    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
2116 END IF;
2117 
2118 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
2119    l_program_login_id := NULL;
2120 ELSE
2121    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
2122 END IF;
2123 
2124 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
2125    l_program_appl_id := NULL;
2126 ELSE
2127    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
2128 END IF;
2129 
2130 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
2131    l_request_id := NULL;
2132 ELSE
2133    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
2134 END IF;
2135 
2136 l_batch_process_id := p_batch_procs_id;
2137 ------------------------------------------------------------------------
2138 --  Parameter Validation
2139 -------------------------------------------------------------------------
2140 
2141 IF (p_fetchsize > G_FETCHSIZE_LIMIT) THEN
2142    x_return_status := G_RET_STS_ERROR;
2143    l_return_status := G_RET_STS_ERROR;
2144 
2145    Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2146                        p_msg_name     => 'OKC_ART_IMP_LIM_FETCHSIZE');
2147 
2148    build_error_array(
2149        p_msg_data     => x_msg_data,
2150        p_context      => NULL,
2151        p_batch_process_id => l_batch_process_id,
2152        p_interface_id  => -99,
2153        p_article_title => NULL,
2154        p_error_type    => l_return_status,
2155 	  p_entity        => 'CLAUSE'
2156    );
2157 
2158    RAISE FND_API.G_EXC_ERROR ;
2159 END IF;
2160 
2161 ------------------------------------------------------------------------
2162 --  Global TempClob Array Initialization
2163 -------------------------------------------------------------------------
2164     g_temp_clob_tbl.extend(p_fetchsize);
2165     FOR i in 1..p_fetchsize LOOP
2166        -- Create Temporary Clob.  Clob is created not in session level to prevent
2167        -- from running ouf of session memory
2168        DBMS_LOB.CREATETEMPORARY(g_temp_clob_tbl(i), TRUE);
2169     END LOOP;
2170 
2171 -------------------------------------------------------------------------
2172 --------------- the outermost loop of this procedure --------------------
2173 -- Bulk fetch all interface rows based on the fetchsize passed by the user
2174 -------------------------------------------------------------------------
2175 
2176 l_context :='BULK FETCH CLAUSE INTERFACE ROW';
2177 OPEN l_interface_csr ( G_CURRENT_ORG_ID ,
2178                        p_batch_number );
2179 LOOP
2180 BEGIN
2181     FETCH l_interface_csr BULK COLLECT INTO
2182         inf_interface_id_tbl   ,
2183         inf_batch_number_tbl   ,
2184         inf_object_version_number_tbl  ,
2185         inf_article_title_tbl ,
2186         inf_org_id_tbl   ,
2187         inf_process_status_tbl   ,
2188         inf_action_tbl   ,
2189         inf_article_number_tbl   ,
2190         inf_article_intent_tbl   ,
2191         inf_x_article_intent_tbl ,
2192         inf_article_language_tbl   ,
2193         inf_x_article_language_tbl ,
2194         inf_article_type_tbl   ,
2195         inf_article_id_tbl   ,
2196         inf_art_reference_code_tbl   ,
2197         inf_art_reference_id1_tbl   ,
2198         inf_art_reference_id2_tbl   ,
2199         inf_article_version_number_tbl   ,
2200         inf_article_text_tbl   ,
2201         inf_provision_yn_tbl   ,
2202         inf_insert_by_reference_tbl   ,
2203         inf_lock_text_tbl   ,
2204         inf_global_yn_tbl   ,
2205         inf_article_status_tbl   ,
2206         inf_start_date_tbl   ,
2207         inf_end_date_tbl   ,
2208         inf_display_name_tbl   ,
2209         inf_article_description_tbl   ,
2210         inf_date_approved_tbl   ,
2211         inf_default_section_tbl   ,
2212         inf_reference_source_tbl   ,
2213         inf_reference_text_tbl   ,
2214         inf_ver_reference_code_tbl   ,
2215         inf_ver_reference_id1_tbl   ,
2216         inf_ver_reference_id2_tbl   ,
2217         inf_instructions_tbl   ,
2218         inf_date_published_tbl   ,
2219         inf_attribute_category_tbl   ,
2220         inf_attribute1_tbl   ,
2221         inf_attribute2_tbl   ,
2222         inf_attribute3_tbl   ,
2223         inf_attribute4_tbl   ,
2224         inf_attribute5_tbl   ,
2225         inf_attribute6_tbl   ,
2226         inf_attribute7_tbl   ,
2227         inf_attribute8_tbl   ,
2228         inf_attribute9_tbl   ,
2229         inf_attribute10_tbl   ,
2230         inf_attribute11_tbl   ,
2231         inf_attribute12_tbl   ,
2232         inf_attribute13_tbl   ,
2233         inf_attribute14_tbl   ,
2234         inf_attribute15_tbl   ,
2235         inf_article_version_id_tbl  LIMIT p_fetchsize;
2236     EXIT WHEN inf_interface_id_tbl.COUNT = 0 ;
2237 
2238     ------------------------------------------------------------------------
2239     -- Variable initialization
2240     -------------------------------------------------------------------------
2241     --For each fetch, article variable table index should be initialized
2242     j := 1;
2243     --##count:initialization
2244     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
2245     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
2246     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
2247     l_part_rows_processed   := 0;
2248     l_part_rows_failed      := 0;
2249     l_part_rows_warned      := 0;
2250     l_bulk_failed           := 'N';
2251     ---------------------------------------------------------------------------
2252     --------------------- Inner Loop thru fetched rows for---------------------
2253     -- validation, parse and validate article text, create a variable list
2254     -- prepare rows for DML if validate_only is 'N'
2255     /***  Processing Rule to set process_status
2256     Because we want to collect as much info as possible, we need to
2257     maintain process status while keeping the process moving.
2258     So, we'll set l_return_status as validation goes on and
2259     at the end we will set inf_process_status_tbl(i) with l_return_status
2260     for final result.  However, we will get out of this process if there
2261     is a significant error such as 'U'.
2262     The return status examined
2263     -api_return_status : return status for api call
2264     -l_return_status : validation result of each row
2265     -x_return_status : final result status for concurrent program request
2266     Rule to set return status
2267     If api_return_status for api call is
2268     * 'S' then continue
2269     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
2270         and build_error_array then continue
2271     * 'E' and it is significant then set l_return_status = 'E' and raise
2272       Exception
2273     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
2274        'E' at the end of validation
2275     * 'U' then set l_return_status = 'U' and raise 'U' exception
2276     * At the end, if it goes thru with no Exception,
2277     Check if l_return_status is 'E' then raise Exception
2278        Otherwise (meaning l_return_status is 'S' or 'W'),
2279           inf_process_status_tbl(i) = l_return_status
2280     * In the exception, we will set
2281           inf_process_status_tbl(i) = l_return_status and build_error_array
2282     ***/
2283     -------------------------------------------------------------------------
2284 
2285     FOR i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST LOOP
2286       BEGIN
2287       -- Increment total processed rows
2288       --##Count
2289       --l_tot_rows_processed := l_tot_rows_processed+1;
2290       l_part_rows_processed := l_part_rows_processed+1;
2291       -- Initialization for each iteration
2292       l_row_notfound       := FALSE;
2293       l_return_status      := G_RET_STS_SUCCESS;
2294       --for validate_row, we will pass 'DRAFT' status for 'APPROVED'
2295       --and 'PENDING_APPROVAL' status as it just means for submission for approval
2296       --or approved
2297       l_tmp_article_status := inf_article_status_tbl(i);
2298       -- following variables are not fetched from interface table
2299       -- thus initialize it here
2300       inf_earlier_version_id_tbl(i) := -99;
2301       inf_adoption_type_tbl(i) := l_adoption_type;
2302 
2303 
2304       l_context := 'CLAUSE VALIDATING';
2305 
2306       -- To find duplicate title in the batch after RTRIM is performed Bug 3487759
2307       IF i>1 THEN
2308          x := i-1;
2309          IF RTRIM(inf_article_title_tbl(i)) = RTRIM(inf_article_title_tbl(x)) THEN
2310             Okc_Api.Set_Message(G_APP_NAME, 'OKC_ART_DUP_TITLE_ORG');
2311             l_return_status := G_RET_STS_ERROR;
2312             RAISE FND_API.G_EXC_ERROR;
2313          END IF;
2314       END IF;
2315       -- Logic to decide what to do in case of Action='S'
2316 	 -- If there is no existing article in system then it is 'N' otherwise 'V'
2317 
2318 	 IF inf_action_tbl(i) = 'S' THEN
2319          IF inf_article_id_tbl(i) IS NULL THEN
2320 	       inf_action_tbl(i) := 'N';
2321 	    ELSE
2322 -- Changes for Bug# 6891498 Begins
2323  	            OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2324  	            FETCH get_max_article_version_csr INTO l_article_version_id,
2325  	                                                   l_article_version_number,
2326  	                                                   l_article_status,
2327  	                                                   l_start_date;
2328 --                                                   l_edited_in_word;
2329  	            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2330  	            CLOSE get_max_article_version_csr;
2331  	             IF nvl(l_article_status,'*') in ('DRAFT', 'REJECTED') THEN
2332  	               inf_action_tbl(i) := 'U';
2333  	             ELSE
2334 -- Changes for Bug# 6891498 Ends
2335 	       inf_action_tbl(i) := 'V';
2336            END IF; -- For Bug# 6891498
2337 	    END IF;
2338 	 END IF;
2339 
2340 	 IF inf_action_tbl(i) = 'N' THEN
2341 
2342           inf_article_id_tbl(i) := NULL;
2343           IF nvl(inf_article_status_tbl(i), '*') not in
2344                  ('DRAFT','APPROVED','PENDING_APPROVAL')  THEN
2345                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2346                       p_msg_name     => 'OKC_ART_IMP_INV_STS_NEWA',
2347                       p_token1       => 'STATUS1',
2348                       p_token1_value => 'DRAFT',
2349                       p_token2       => 'STATUS2',
2350                       p_token2_value => 'APPROVED',
2351                       p_token3       => 'STATUS3',
2352                       p_token3_value => 'PENDING_APPROVAL');
2353               l_return_status := G_RET_STS_ERROR;
2354              RAISE FND_API.G_EXC_ERROR ;
2355           END IF;
2356 
2357           --TRIM trailing space because article title in library table has been trimmed
2358           --for successful comparison, this should be trimmed
2359           inf_article_title_tbl(i) := RTRIM(inf_article_title_tbl(i));
2360 
2361           -- Set article version number as 1
2362           inf_article_version_number_tbl(i) := 1;
2363 
2364           --validate this article with 'DRAFT'
2365           l_tmp_article_status := 'DRAFT';
2366 
2367       ELSIF inf_action_tbl(i) = 'U' THEN
2368 
2369           IF inf_article_id_tbl(i) is NULL THEN
2370                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2371                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2372                       p_token1       => 'ARTICLE_TITLE',
2373                       p_token1_value => inf_article_title_tbl(i));
2374               l_return_status := G_RET_STS_ERROR;
2375              RAISE FND_API.G_EXC_ERROR ;
2376           END IF;
2377 
2378           OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2379            FETCH get_max_article_version_csr INTO l_article_version_id,
2380                                                   l_article_version_number,
2381                                                   l_article_status,
2382 										l_start_date;
2383            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2384           CLOSE get_max_article_version_csr;
2385 
2386           IF nvl(l_article_status,'*') not in ('DRAFT', 'REJECTED') THEN
2387                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2388                       p_msg_name     => 'OKC_ART_IMP_INV_CUR_STS_UPD');
2389               l_return_status := G_RET_STS_ERROR;
2390               RAISE FND_API.G_EXC_ERROR ;
2391           END IF;
2392           -- this status may be null for update row
2393           -- inf_article_status_tbl(i) := l_article_status;
2394           -- set the version number
2395           inf_article_version_number_tbl(i) := l_article_version_number;
2396           -- set article version id
2397           inf_article_version_id_tbl(i)  := l_article_version_id;
2398 
2399           IF nvl(inf_article_status_tbl(i), '*') not in
2400                  ('DRAFT','REJECTED','APPROVED','PENDING_APPROVAL')  THEN
2401                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2402                       p_msg_name     => 'OKC_ART_IMP_INV_STS_UPD',
2403                       p_token1       => 'STATUS1',
2404                       p_token1_value => 'DRAFT',
2405                       p_token2       => 'STATUS2',
2406                       p_token2_value => 'REJECTED',
2407                       p_token3       => 'STATUS3',
2408                       p_token3_value => 'APPROVED',
2409                       p_token4       => 'STATUS4',
2410                       p_token4_value => 'PENDING_APPROVAL');
2411                 l_return_status := G_RET_STS_ERROR;
2412              RAISE FND_API.G_EXC_ERROR ;
2413           END IF;
2414 
2415           --if interface article status is DRAFT and REJECTED then keep
2416           --the one in the library table.  We don't want user to be able to change them
2417           --validate this article with 'DRAFT' for 'DRAFT', 'APPROVED', 'PENDING_APPROVAL'
2418           --or 'REJECTED' for 'REJECTED'
2419           IF nvl(inf_article_status_tbl(i), '*') in ('DRAFT', 'REJECTED') THEN
2420               inf_article_status_tbl(i) := l_article_status;
2421               l_tmp_article_status := l_article_status;
2422           ELSE
2423               l_tmp_article_status := 'DRAFT';
2424           END IF;
2425 
2426 
2427           -- User entered attribute in article level (intent, language) may not be
2428           -- accurate because we do not validate them for Update
2429           -- so here we need to fill some important attribute
2430           -- in interface table from database
2431           inf_article_intent_tbl(i) := inf_x_article_intent_tbl(i);
2432           inf_article_language_tbl(i) := inf_x_article_language_tbl(i);
2433 
2434       ELSIF inf_action_tbl(i) = 'V' THEN
2435 
2436           inf_article_version_id_tbl(i) := NULL;
2437           IF inf_article_id_tbl(i) is NULL THEN
2438                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2439                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2440                       p_token1       => 'ARTICLE_TITLE',
2441                       p_token1_value => inf_article_title_tbl(i));
2442               l_return_status := G_RET_STS_ERROR;
2443              RAISE FND_API.G_EXC_ERROR ;
2444           END IF;
2445 
2446           IF nvl(inf_article_status_tbl(i), '*') not in
2447                  ('DRAFT','APPROVED','PENDING_APPROVAL')  THEN
2448                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2449                       p_msg_name     => 'OKC_ART_IMP_INV_STS_NEWA',
2450                       p_token1       => 'STATUS1',
2451                       p_token1_value => 'DRAFT',
2452                       p_token2       => 'STATUS2',
2453                       p_token2_value => 'APPROVED',
2454                       p_token3       => 'STATUS3',
2455                       p_token3_value => 'PENDING_APPROVAL');
2456                 l_return_status := G_RET_STS_ERROR;
2457                 RAISE FND_API.G_EXC_ERROR;
2458           END IF;
2459 
2460 
2461           -- User entered attribute in article level (intent, language)may not be
2462           -- accurate because we do not validate them for New Version
2463           -- so here we need to fill some important attribute
2464           -- in interface table from database
2465           inf_article_intent_tbl(i) := inf_x_article_intent_tbl(i);
2466           inf_article_language_tbl(i) := inf_x_article_language_tbl(i);
2467 
2468           OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2469            FETCH get_max_article_version_csr INTO l_article_version_id,
2470                                                   l_article_version_number,
2471                                                   l_article_status,
2472 										l_start_date;
2473            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2474           CLOSE get_max_article_version_csr;
2475 
2476           -- Set article version number
2477           inf_article_version_number_tbl(i) := l_article_version_number +1;
2478 
2479           --validate article with 'DRAFT' status
2480           --because validate_row api validation for 'Approved' article
2481           --is more suitable for article in 'Approved' status already
2482           --but in import, status 'Approved' means submission for approval
2483           l_tmp_article_status := 'DRAFT';
2484       ELSIF inf_action_tbl(i) = 'D' THEN
2485 
2486           IF inf_article_id_tbl(i) is NULL THEN
2487                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2488                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2489                       p_token1       => 'ARTICLE_TITLE',
2490                       p_token1_value => inf_article_title_tbl(i));
2491               l_return_status := G_RET_STS_ERROR;
2492               RAISE FND_API.G_EXC_ERROR ;
2493           END IF;
2494 
2495           IF inf_end_date_tbl(i) IS NULL THEN
2496                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2497                                       p_msg_name => 'OKC_ART_NULL_END_DATE');
2498                   l_return_status := G_RET_STS_ERROR;
2499                   RAISE FND_API.G_EXC_ERROR;
2500           END IF;
2501 
2502           OPEN get_max_article_version_csr (inf_article_id_tbl(i));
2503           FETCH get_max_article_version_csr INTO l_article_version_id,
2504                                                   l_article_version_number,
2505                                                   l_article_status,
2506 										l_start_date;
2507            l_row_notfound := get_max_article_version_csr%NOTFOUND;
2508            CLOSE get_max_article_version_csr;
2509 
2510            IF l_row_notfound THEN
2511                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2512                       p_msg_name     => 'OKC_ART_ARTICLE_NOT_FOUND',
2513                       p_token1       => 'ARTICLE_TITLE',
2514                       p_token1_value => inf_article_title_tbl(i));
2515 
2516                 l_return_status := G_RET_STS_ERROR;
2517                 RAISE FND_API.G_EXC_ERROR;
2518          ELSE
2519 
2520             IF l_start_date IS NOT NULL
2521             THEN
2522                IF l_start_date > inf_end_date_tbl(i) THEN
2523                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
2524                                       p_msg_name => 'OKC_INVALID_END_DATE');
2525                   l_return_status := G_RET_STS_ERROR;
2526                   RAISE FND_API.G_EXC_ERROR;
2527                END IF;
2528             END IF;
2529          END IF;
2530 
2531           -- set the version number
2532           inf_article_version_number_tbl(i) := l_article_version_number;
2533           -- set article version id
2534           inf_article_version_id_tbl(i)  := l_article_version_id;
2535 
2536       ELSE
2537 
2538           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2539                   p_msg_name     => 'OKC_ART_INV_IMP_ACTION');
2540           l_return_status := G_RET_STS_ERROR;
2541           RAISE FND_API.G_EXC_ERROR ;
2542       END IF;
2543 
2544       -----------------------------------------------------------
2545       -- Common validation or attribute settting
2546       -- regardless of status and import action
2547       -- this validation is not included in validate api
2548       -----------------------------------------------------------
2549 
2550       -- Do not import article if status or org_id or global_flag is not provided
2551 	 IF inf_article_status_tbl(i) IS NULL OR
2552 	    inf_org_id_tbl(i) IS NULL OR
2553 	    inf_global_yn_tbl(i) IS NULL THEN
2554 		    Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2555 		                        p_msg_name     => 'OKC_ART_ATTRS_NOT_PROVIDED');
2556 	         l_return_status := G_RET_STS_ERROR;
2557       END IF;
2558 
2559       -- Do not import 'PENDING_APPROVAL' article if approver is not set
2560       IF nvl(inf_article_status_tbl(i), '*') = 'PENDING_APPROVAL' THEN
2561          l_exist_approver := OKC_ARTWF_PVT.pre_submit_validation(G_CURRENT_ORG_ID);
2562          IF l_exist_approver = 'NOK' THEN
2563            l_return_status := G_RET_STS_ERROR;
2564          END IF;
2565       END IF;
2566 
2567       -- Do not import article if orig_system_reference_code begins with 'OKCMIG'
2568       IF instr(nvl(inf_art_reference_code_tbl(i), '*'), 'OKCMIG') = 1 THEN
2569             Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2570                   p_msg_name     => 'OKC_ART_IMP_RES_SYS_REF_CODE');
2571             l_return_status := G_RET_STS_ERROR;
2572       END IF;
2573 
2574       IF instr(nvl(inf_ver_reference_code_tbl(i), '*'), 'OKCMIG') = 1 THEN
2575             Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2576                   p_msg_name     => 'OKC_ART_IMP_RES_SYS_REF_CODE');
2577             l_return_status := G_RET_STS_ERROR;
2578       END IF;
2579 
2580 
2581       --for non 'APPROVED' article, make DATE_APPROVED null
2582       IF nvl(inf_article_status_tbl(i),'*') <> 'APPROVED' THEN
2583         inf_date_approved_tbl(i) := NULL;
2584       END IF;
2585 
2586       --if article status is in 'APPROVED' and date_approved is null
2587       --then set date approved as sysdate
2588       --otherwise, the validate api will complain
2589       IF nvl(inf_article_status_tbl(i), '*') in ('APPROVED') AND
2590          inf_date_approved_tbl(i) is NULL THEN
2591          inf_date_approved_tbl(i) := sysdate;
2592       END IF;
2593 
2594       --Bug 3680486: no provision for sell intent clause
2595       IF     nvl(inf_article_intent_tbl(i), '*') = 'S'
2596          AND nvl(inf_provision_yn_tbl(i), '*') = 'Y' THEN
2597             Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2598                   p_msg_name     => 'OKC_ART_INVALID_PROVISIONYN');
2599             l_return_status := G_RET_STS_ERROR;
2600       END IF;
2601 
2602       -- Validate attrs of the interface row
2603       IF inf_action_tbl(i) = 'N' THEN
2604           api_return_status :=
2605           OKC_ARTICLES_ALL_PVT.VALIDATE_RECORD(
2606                 p_validation_level           => FND_API.G_VALID_LEVEL_FULL,
2607                 p_import_action              => inf_action_tbl(i),
2608                 p_article_id                 => inf_article_id_tbl(i),
2609                 p_article_title              => inf_article_title_tbl(i),
2610                 p_org_id                     => G_CURRENT_ORG_ID,
2611                 p_article_number             => inf_article_number_tbl(i),
2612                 p_standard_yn                => 'Y',
2613                 p_article_intent             => inf_article_intent_tbl(i),
2614                 p_article_language           => inf_article_language_tbl(i),
2615                 p_article_type               => inf_article_type_tbl(i),
2616                 p_orig_system_reference_code => inf_art_reference_code_tbl(i),
2617                 p_orig_system_reference_id1  => inf_art_reference_id1_tbl(i),
2618                 p_orig_system_reference_id2  => inf_art_reference_id2_tbl(i),
2619                 p_attribute_category         => NULL ,
2620                 p_attribute1                 => NULL ,
2621                 p_attribute2                 => NULL ,
2622                 p_attribute3                 => NULL ,
2623                 p_attribute4                 => NULL ,
2624                 p_attribute5                 => NULL ,
2625                 p_attribute6                 => NULL ,
2626                 p_attribute7                 => NULL ,
2627                 p_attribute8                 => NULL ,
2628                 p_attribute9                 => NULL ,
2629                 p_attribute10                => NULL ,
2630                 p_attribute11                => NULL ,
2631                 p_attribute12                => NULL ,
2632                 p_attribute13                => NULL ,
2633                 p_attribute14                => NULL ,
2634                 p_attribute15                => NULL
2635           );
2636       --
2637       -- If error is Unexpected then raise exception
2638       -- Otherwise, keep going
2639       --
2640       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2641          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2642       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2643          l_return_status := G_RET_STS_ERROR;
2644       END IF;
2645           api_return_status :=
2646             OKC_ARTICLE_VERSIONS_PVT.validate_record(
2647                 p_validation_level           => FND_API.G_VALID_LEVEL_FULL,
2648                 p_import_action              => inf_action_tbl(i),
2649                 x_earlier_adoption_type      => l_earlier_adoption_type,
2650                 x_earlier_version_id         => l_earlier_version_id,
2651                 x_earlier_version_number     => l_earlier_version_number,
2652                 x_article_language           => l_article_language,
2653                 p_article_version_id         => inf_article_version_id_tbl(i),
2654                 p_article_id                 => inf_article_id_tbl(i),
2655                 p_article_version_number     => inf_article_version_number_tbl(i),
2656                 p_article_text               => inf_article_text_tbl(i),
2657                 p_provision_yn               => inf_provision_yn_tbl(i),
2658                 p_insert_by_reference        => inf_insert_by_reference_tbl(i),
2659                 p_lock_text                  => inf_lock_text_tbl(i),
2660                 p_global_yn                  => inf_global_yn_tbl(i),
2661                 p_article_language           => inf_article_language_tbl(i),
2662                 p_article_status             => l_tmp_article_status,
2663                 p_sav_release                => NULL,
2664                 p_start_date                 => inf_start_date_tbl(i),
2665                 p_end_date                   => inf_end_date_tbl(i),
2666                 p_std_article_version_id     => NULL,
2667                 p_display_name               => inf_display_name_tbl(i),
2668                 p_translated_yn              => NULL,
2669                 p_article_description        => inf_article_description_tbl(i),
2670                 p_date_approved              => inf_date_approved_tbl(i),
2671                 p_default_section            => inf_default_section_tbl(i),
2672                 p_reference_source           => inf_reference_source_tbl(i),
2673                 p_reference_text             => inf_reference_text_tbl(i),
2674                 p_orig_system_reference_code => inf_art_reference_code_tbl(i),
2675                 p_orig_system_reference_id1  => inf_art_reference_id1_tbl(i),
2676                 p_orig_system_reference_id2  => inf_art_reference_id2_tbl(i),
2677                 p_program_id                 => NULL,
2678                 p_program_application_id     => NULL,
2679                 p_request_id                 => NULL,
2680                 p_current_org_id             => G_CURRENT_ORG_ID,
2681                 p_additional_instructions    => inf_instructions_tbl(i),
2682                 p_variation_description      => NULL,
2683                 p_date_published             => inf_date_published_tbl(i) ,
2684                 p_attribute_category         => inf_attribute_category_tbl(i) ,
2685                 p_attribute1                 => inf_attribute1_tbl(i) ,
2686                 p_attribute2                 => inf_attribute2_tbl(i) ,
2687                 p_attribute3                 => inf_attribute3_tbl(i) ,
2688                 p_attribute4                 => inf_attribute4_tbl(i) ,
2689                 p_attribute5                 => inf_attribute5_tbl(i) ,
2690                 p_attribute6                 => inf_attribute6_tbl(i) ,
2691                 p_attribute7                 => inf_attribute7_tbl(i) ,
2692                 p_attribute8                 => inf_attribute8_tbl(i) ,
2693                 p_attribute9                 => inf_attribute9_tbl(i) ,
2694                 p_attribute10                => inf_attribute10_tbl(i) ,
2695                 p_attribute11                => inf_attribute11_tbl(i) ,
2696                 p_attribute12                => inf_attribute12_tbl(i) ,
2697                 p_attribute13                => inf_attribute13_tbl(i) ,
2698                 p_attribute14                => inf_attribute14_tbl(i) ,
2699                 p_attribute15                => inf_attribute15_tbl(i)
2700             );
2701 
2702       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2703          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2704       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2705          l_return_status := G_RET_STS_ERROR;
2706       END IF;
2707 
2708       ELSIF inf_action_tbl(i) in ('U','V') THEN
2709          --validating only article type because only article type is updated
2710          l_row_notfound := FALSE;
2711          OPEN validate_article_type_csr (inf_article_type_tbl(i),
2712                                          inf_article_id_tbl(i),
2713                                          inf_action_tbl(i));
2714            FETCH validate_article_type_csr INTO inf_article_type_tbl(i);
2715            l_row_notfound := validate_article_type_csr%NOTFOUND;
2716          CLOSE validate_article_type_csr;
2717 
2718          IF l_row_notfound THEN
2719                Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2720                       p_msg_name     => 'OKC_ART_INVALID_ARTICLE_TYPE',
2721                       p_token1       => 'ARTICLE_TITLE',
2722                       p_token1_value => inf_article_title_tbl(i));
2723               l_return_status := G_RET_STS_ERROR;
2724 
2725          END IF;
2726 
2727             -- nvl for nullable column to avoid getting database value
2728             -- in the validate API
2729           api_return_status :=
2730             OKC_ARTICLE_VERSIONS_PVT.validate_record(
2731                 p_validation_level           => FND_API.G_VALID_LEVEL_FULL,
2732                 p_import_action              => inf_action_tbl(i),
2733                 x_earlier_adoption_type      => l_earlier_adoption_type,
2734                 x_earlier_version_id         => l_earlier_version_id,
2735                 x_earlier_version_number     => l_earlier_version_number,
2736                 x_article_language           => l_article_language,
2737                 p_article_version_id         => inf_article_version_id_tbl(i),
2738                 p_article_id                 => inf_article_id_tbl(i),
2739                 p_article_version_number     => inf_article_version_number_tbl(i),
2740                 p_article_text               => inf_article_text_tbl(i),
2741                 p_provision_yn               => inf_provision_yn_tbl(i),
2742                 p_insert_by_reference        => inf_insert_by_reference_tbl(i),
2743                 p_lock_text                  => inf_lock_text_tbl(i),
2744                 p_global_yn                  => inf_global_yn_tbl(i),
2745                 p_article_language           => inf_article_language_tbl(i),
2746                 p_article_status             => l_tmp_article_status,
2747                 p_sav_release                => NULL,
2748                 p_start_date                 => inf_start_date_tbl(i),
2749                 p_end_date                   => inf_end_date_tbl(i),
2750                 p_std_article_version_id     => NULL,
2751                 p_display_name               => inf_display_name_tbl(i),
2752                 p_translated_yn              => NULL,
2753                 p_article_description        => inf_article_description_tbl(i),
2754                 p_date_approved              => inf_date_approved_tbl(i),
2755                 p_default_section            => inf_default_section_tbl(i),
2756                 p_reference_source           => inf_reference_source_tbl(i),
2757                 p_reference_text             => inf_reference_text_tbl(i),
2758                 p_orig_system_reference_code => inf_art_reference_code_tbl(i),
2759                 p_orig_system_reference_id1  => inf_art_reference_id1_tbl(i),
2760                 p_orig_system_reference_id2  => inf_art_reference_id2_tbl(i),
2761                 p_program_id                 => NULL,
2762                 p_program_application_id     => NULL,
2763                 p_request_id                 => NULL,
2764                 p_current_org_id             => G_CURRENT_ORG_ID,
2765                 p_additional_instructions    => inf_instructions_tbl(i),
2766                 p_variation_description      => NULL,
2767                 p_date_published             => inf_date_published_tbl(i) ,
2768                 p_attribute_category         => inf_attribute_category_tbl(i) ,
2769                 p_attribute1                 => inf_attribute1_tbl(i) ,
2770                 p_attribute2                 => inf_attribute2_tbl(i) ,
2771                 p_attribute3                 => inf_attribute3_tbl(i) ,
2772                 p_attribute4                 => inf_attribute4_tbl(i) ,
2773                 p_attribute5                 => inf_attribute5_tbl(i) ,
2774                 p_attribute6                 => inf_attribute6_tbl(i) ,
2775                 p_attribute7                 => inf_attribute7_tbl(i) ,
2776                 p_attribute8                 => inf_attribute8_tbl(i) ,
2777                 p_attribute9                 => inf_attribute9_tbl(i) ,
2778                 p_attribute10                => inf_attribute10_tbl(i) ,
2779                 p_attribute11                => inf_attribute11_tbl(i) ,
2780                 p_attribute12                => inf_attribute12_tbl(i) ,
2781                 p_attribute13                => inf_attribute13_tbl(i) ,
2782                 p_attribute14                => inf_attribute14_tbl(i) ,
2783                 p_attribute15                => inf_attribute15_tbl(i)
2784             );
2785       END IF;
2786 
2787 
2788       --
2789       --
2790       -- If error is Unexpected then raise exception
2791       -- Otherwise, keep going
2792       --
2793       --
2794       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2795          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2796       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2797          l_return_status := G_RET_STS_ERROR;
2798       END IF;
2799 
2800       -- Continue with the rest of validation unless some unexpected error is encountered.
2801       -- It is always a good idea to show all errors at one shot.
2802       -- Parse through the article text and build the list of variables to be used.
2803       -- For validate only mode = N change the user friendly variable tags with valid XML and variable codes.
2804 
2805       IF p_validate_only = 'N' THEN
2806          l_replace_text := 'Y';
2807       ELSE
2808          l_replace_text := 'N';
2809       END IF;
2810 
2811       --
2812       -- Copying the clob in interface into temporary clob
2813       --
2814       --
2815 
2816       DBMS_LOB.TRIM(g_temp_clob_tbl(i), 0);
2817 
2818       OKC_ARTICLES_GRP.parse_n_replace_text(
2819             p_api_version                  => l_api_version,
2820             p_init_msg_list                => l_init_msg_list,
2821             p_article_text                 => inf_article_text_tbl(i),
2822             p_dest_clob                    => g_temp_clob_tbl(i),
2823             p_calling_mode                 => 'IMPORT',
2824 		  p_batch_number                 => p_batch_number,  -- Bug 4659659
2825             p_replace_text                 => l_replace_text,
2826             p_article_intent               => inf_article_intent_tbl(i),
2827             p_language                     => inf_article_language_tbl(i),
2828             x_return_status                => api_return_status,
2829             x_msg_count                    => x_msg_count,
2830             x_msg_data                     => x_msg_data,
2831             x_variables_tbl                => l_variable_code_tbl
2832       ) ;
2833 
2834       -- Add value_set check for 'PENDING_APPROVAL' and 'APPROVED' clause
2835       IF (inf_article_status_tbl(i) in ('PENDING_APPROVAL','APPROVED')) THEN
2836         IF l_variable_code_tbl.COUNT > 0 THEN
2837            k:=0;
2838            FOR k in l_variable_code_tbl.FIRST ..l_variable_code_tbl.LAST LOOP
2839               OPEN  l_check_valid_valueset_csr (l_variable_code_tbl(k));
2840               FETCH l_check_valid_valueset_csr  INTO l_value_set_id,
2841                                                      l_variable_type;
2842               CLOSE l_check_valid_valueset_csr;
2843 
2844               IF l_value_set_id is NULL AND l_variable_type = 'U' THEN
2845                 OPEN  l_var_name_csr (l_variable_code_tbl(k),
2846                                       inf_article_language_tbl(i));
2847                 FETCH l_var_name_csr  INTO l_variable_name;
2848                 CLOSE l_var_name_csr;
2849                  Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
2850                           p_msg_name     => 'OKC_ART_INV_VALUESET',
2851                           p_token1       => 'VARIABLE_NAME',
2852                           p_token1_value => l_variable_name,
2853                           p_token2       => 'ARTICLE_TITLE',
2854                           p_token2_value => inf_article_title_tbl(i),
2855                           p_token3       => 'ARTICLE_VERSION',
2856                           p_token3_value => inf_article_version_number_tbl(i));
2857                   api_return_status := G_RET_STS_ERROR;
2858               END IF;
2859            END LOOP;
2860         END IF;
2861       END IF;
2862 
2863       IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2864             RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2865       ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2866             RAISE FND_API.G_EXC_ERROR ;
2867       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
2868             RAISE FND_API.G_EXC_ERROR ;
2869       END IF;
2870 
2871       ------------------------------------------------------------------------
2872       -- Now that we have validated and data is clean we can fetch sequences and ids
2873       -- for new articles for DML and also set the process status to Success
2874       -------------------------------------------------------------------------
2875       IF p_validate_only = 'N' THEN
2876           l_context:='PREPARING DML FOR CLAUSE';
2877 
2878           IF inf_action_tbl(i) = 'N' THEN
2879           -- Generate article number based on autonumbering
2880 
2881               -- When article number is not given, then we get number from autonumber API
2882               IF nvl(inf_article_number_tbl(i),'-99') = '-99' THEN
2883                 OKC_ARTICLES_GRP.GET_ARTICLE_SEQ_NUMBER
2884                     (p_article_number =>inf_article_number_tbl(i),
2885                      p_seq_type_info_only  => 'N',
2886                      p_org_id  => G_CURRENT_ORG_ID,
2887                      x_article_number => l_article_number,
2888                      x_doc_sequence_type => l_doc_sequence_type,
2889                      x_return_status   => api_return_status
2890                       ) ;
2891 
2892                IF api_return_status = G_RET_STS_SUCCESS Then
2893                  inf_article_number_tbl(i) := l_article_number;
2894                ELSIF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2895                  l_return_status := api_return_status;
2896                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2897                ELSE
2898                  l_return_status := api_return_status; -- whatever error, it will overwrite it
2899                END IF;
2900              END IF;
2901 
2902           -- Get article id.
2903               api_return_status := Get_Seq_Id (p_object_type => 'ART',
2904                                              x_object_id  =>  inf_article_id_tbl(i));
2905               IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2906                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2907               ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2908                 l_return_status := api_return_status;
2909                 RAISE FND_API.G_EXC_ERROR ;
2910               END IF;
2911 
2912               api_return_status := Get_Seq_Id (p_object_type => 'VER',
2913                                              x_object_id  =>  inf_article_version_id_tbl(i));
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                 l_return_status := api_return_status;
2918                 RAISE FND_API.G_EXC_ERROR ;
2919               END IF;
2920 
2921           -- Create variable association for the new article - 1st version.
2922             IF l_variable_code_tbl.COUNT > 0 THEN
2923                FOR k in l_variable_code_tbl.FIRST ..l_variable_code_tbl.LAST LOOP
2924                   artv_variable_code_tbl(j) := l_variable_code_tbl(k);
2925                   artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
2926                   artv_action_tbl(j) := 'N';
2927                   j := j+1;
2928                END LOOP;
2929 
2930             END IF;
2931 
2932 
2933             ELSIF inf_action_tbl(i) = 'V' THEN -- new version
2934 
2935               -- if status is APPROVED then save id of prev. version
2936               -- to set end date of previous version
2937               IF inf_article_status_tbl(i) = 'APPROVED' THEN
2938                   inf_earlier_version_id_tbl(i) := l_earlier_version_id;
2939               END IF;
2940 
2941             -- Get article version id.
2942 
2943             api_return_status := Get_Seq_Id (p_object_type => 'VER',
2944                                              x_object_id  =>  inf_article_version_id_tbl(i));
2945             IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2946                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2947             ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2948                 l_return_status := api_return_status;
2949                 RAISE FND_API.G_EXC_ERROR ;
2950             END IF;
2951 
2952           -- Create variable association for the new version.
2953             IF l_variable_code_tbl.COUNT > 0 THEN
2954 
2955                FOR k in l_variable_code_tbl.FIRST ..l_variable_code_tbl.LAST LOOP
2956                   artv_variable_code_tbl(j) := l_variable_code_tbl(k);
2957                   artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
2958                   artv_action_tbl(j) := 'N';
2959                   j := j+1;
2960                END LOOP;
2961             END IF;
2962 
2963           -- Set adoption type with earlier adoption type
2964             inf_adoption_type_tbl(i) := l_earlier_adoption_type;
2965 
2966 
2967           ELSIF inf_action_tbl(i) = 'U' THEN
2968 
2969           -- Find out the variables that need to be added as these are new
2970           -- or those that need to be deleted as they are no longer used.
2971 
2972               OKC_ARTICLES_GRP.UPDATE_ARTICLE_VARIABLES (
2973                             p_article_version_id => inf_article_version_id_tbl(i),
2974                             p_variable_code_tbl => l_variable_code_tbl,
2975                             p_do_dml => 'N', -- indicates not to do dml in the API
2976                             x_variables_to_insert_tbl => l_variables_to_insert_tbl,
2977                             x_variables_to_delete_tbl => l_variables_to_delete_tbl,
2978                             x_return_status => api_return_status);
2979               IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
2980                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
2981               ELSIF (api_return_status = G_RET_STS_ERROR) THEN
2982                 RAISE FND_API.G_EXC_ERROR ;
2983               END IF;
2984 
2985           -- New Variables
2986               IF l_variables_to_insert_tbl.COUNT > 0 THEN
2987 
2988                 FOR k in l_variables_to_insert_tbl.FIRST ..l_variables_to_insert_tbl.LAST LOOP
2989                   artv_variable_code_tbl(j) := l_variables_to_insert_tbl(k);
2990                   artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
2991                   artv_action_tbl(j) := 'N';
2992                   j := j+1;
2993                 END LOOP;
2994               END IF;
2995           -- Variables no longer used.
2996               IF l_variables_to_delete_tbl.COUNT > 0 THEN
2997                  FOR k in l_variables_to_delete_tbl.FIRST ..l_variables_to_delete_tbl.LAST LOOP
2998                    artv_variable_code_tbl(j) := l_variables_to_delete_tbl(k);
2999                    artv_article_version_id_tbl(j) := inf_article_version_id_tbl(i);
3000                    artv_action_tbl(j) := 'D';
3001                    j := j+1;
3002                  END LOOP;
3003                END IF;
3004 
3005           END IF; -- end of IF inf_action_tbl(i) = 'N'
3006 
3007           --Delete variables cache tables for next interface row
3008           l_variables_to_insert_tbl.DELETE;
3009           l_variables_to_delete_tbl.DELETE;
3010           l_variable_code_tbl.DELETE;
3011 
3012       END IF; -- validate_only = 'N'
3013 
3014       -- Summarize report for this row
3015       -- Status 'F' is for internal use meaning parsing failure marked in
3016       -- java concurrent program
3017       IF (l_return_status = G_RET_STS_SUCCESS) THEN
3018          IF (nvl(inf_process_status_tbl(i), 'E') = 'E') THEN
3019            inf_process_status_tbl(i) := G_RET_STS_SUCCESS;
3020          ELSIF ( inf_process_status_tbl(i) = 'F') THEN
3021            -- ##count parser failure as error
3022            --l_tot_rows_failed := l_tot_rows_failed+1;
3023            l_part_rows_failed := l_part_rows_failed+1;
3024            inf_process_status_tbl(i) := G_RET_STS_ERROR;
3025          END IF;
3026       ELSIF (l_return_status = l_sts_warning) THEN
3027          IF (nvl(inf_process_status_tbl(i),'E') = 'E') THEN
3028            inf_process_status_tbl(i) := l_sts_warning;
3029            --##count
3030            --l_tot_rows_warned := l_tot_rows_warned+1;
3031            l_part_rows_warned := l_part_rows_warned+1;
3032          ELSIF (inf_process_status_tbl(i) = 'F') THEN
3033            -- ##count parser failure as error
3034            --l_tot_rows_failed := l_tot_rows_failed+1;
3035            l_part_rows_failed := l_part_rows_failed+1;
3036            inf_process_status_tbl(i) := G_RET_STS_ERROR;
3037          END IF;
3038       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
3039            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3040       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
3041            RAISE FND_API.G_EXC_ERROR;
3042       END IF;
3043 
3044     -------------------------
3045     -------------------------
3046     -- Exception Block for each iteration in Loop
3047     -- validation and unexpected errors
3048     -- In case of unexpected error, escape the loop
3049     -------------------------
3050     -------------------------
3051 
3052       EXCEPTION
3053           WHEN FND_API.G_EXC_ERROR THEN
3054               IF (l_debug = 'Y') THEN
3055                  okc_debug.log('300: In Articles_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
3056               END IF;
3057               --l_return_status := G_RET_STS_ERROR ;
3058               build_error_array(
3059                  p_msg_data     => x_msg_data,
3060                  p_context      => l_context,
3061                  p_batch_process_id => l_batch_process_id,
3062                  p_interface_id  => inf_interface_id_tbl(i),
3063                  p_article_title => inf_article_title_tbl(i),
3064                  p_error_type    => G_RET_STS_ERROR,
3065 			  p_entity        => 'CLAUSE'
3066                 );
3067                inf_process_status_tbl(i) := G_RET_STS_ERROR;
3068                --##count
3069                --l_tot_rows_failed := l_tot_rows_failed+1;
3070                l_part_rows_failed := l_part_rows_failed+1;
3071                -- Continue to next row
3072 
3073           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3074               IF (l_debug = 'Y') THEN
3075                  okc_debug.log('400: Leaving Articles_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
3076               END IF;
3077 
3078               --
3079               -- Freeing temporary clobs
3080               --
3081               j := g_temp_clob_tbl.FIRST;
3082               LOOP
3083                DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3084                EXIT WHEN (j = g_temp_clob_tbl.LAST);
3085                j := g_temp_clob_tbl.NEXT(j);
3086               END LOOP;
3087               g_temp_clob_tbl.DELETE;
3088               --
3089               -- Freeing temporary clobs
3090               --
3091 
3092               IF l_interface_csr%ISOPEN THEN
3093                  CLOSE l_interface_csr;
3094               END IF;
3095 
3096               IF get_max_article_version_csr%ISOPEN THEN
3097                  CLOSE get_max_article_version_csr;
3098               END IF;
3099 
3100               IF get_article_info_csr%ISOPEN THEN
3101                  CLOSE get_article_info_csr;
3102               END IF;
3103 
3104               IF validate_article_type_csr%ISOPEN THEN
3105                  CLOSE validate_article_type_csr;
3106               END IF;
3107               --Set_Message
3108               l_return_status := G_RET_STS_UNEXP_ERROR ;
3109               x_return_status := G_RET_STS_UNEXP_ERROR ;
3110 
3111               build_error_array(
3112                  p_msg_data     => x_msg_data,
3113                  p_context      => l_context,
3114                  p_batch_process_id => l_batch_process_id,
3115                  p_interface_id  => inf_interface_id_tbl(i),
3116                  p_article_title => inf_article_title_tbl(i),
3117                  p_error_type    => G_RET_STS_UNEXP_ERROR,
3118 			  p_entity        => 'CLAUSE'
3119                  );
3120                inf_process_status_tbl(i) := G_RET_STS_ERROR;
3121                --##count
3122                --l_tot_rows_failed := l_tot_rows_failed+1;
3123                l_part_rows_failed := l_part_rows_failed+1;
3124               exit; -- exit the current fetch
3125 
3126           WHEN OTHERS THEN
3127               IF (l_debug = 'Y') THEN
3128                 okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||sqlerrm, 2);
3129               END IF;
3130 
3131 
3132               --
3133               -- Freeing temporary clobs
3134               --
3135               j := g_temp_clob_tbl.FIRST;
3136               LOOP
3137                DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3138                EXIT WHEN (j = g_temp_clob_tbl.LAST);
3139                j := g_temp_clob_tbl.NEXT(j);
3140               END LOOP;
3141               g_temp_clob_tbl.DELETE;
3142               --
3143               -- Freeing temporary clobs
3144               --
3145 
3146               IF l_interface_csr%ISOPEN THEN
3147                  CLOSE l_interface_csr;
3148               END IF;
3149 
3150               IF get_max_article_version_csr%ISOPEN THEN
3151                  CLOSE get_max_article_version_csr;
3152               END IF;
3153 
3154               IF get_article_info_csr%ISOPEN THEN
3155                 CLOSE get_article_info_csr;
3156               END IF;
3157 
3158               IF validate_article_type_csr%ISOPEN THEN
3159                  CLOSE validate_article_type_csr;
3160               END IF;
3161               l_return_status := G_RET_STS_UNEXP_ERROR ;
3162               x_return_status := G_RET_STS_UNEXP_ERROR ;
3163 
3164               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3165                                 p_msg_name     => G_UNEXPECTED_ERROR,
3166                                 p_token1       => G_SQLCODE_TOKEN,
3167                                 p_token1_value => sqlcode,
3168                                 p_token2       => G_SQLERRM_TOKEN,
3169                                 p_token2_value => sqlerrm);
3170 
3171               build_error_array(
3172                  p_msg_data     => G_UNEXPECTED_ERROR,
3173                  p_context      => l_context,
3174                  p_batch_process_id => l_batch_process_id,
3175                  p_interface_id  => inf_interface_id_tbl(i),
3176                  p_article_title => inf_article_title_tbl(i),
3177                  p_error_type    => G_RET_STS_ERROR,
3178 			  p_entity        => 'CLAUSE'
3179                 );
3180                inf_process_status_tbl(i) := G_RET_STS_ERROR;
3181                --##count
3182                --l_tot_rows_failed := l_tot_rows_failed+1;
3183                l_part_rows_failed := l_part_rows_failed+1;
3184               exit;  -- exit the current fetch
3185           END;
3186     -------------------------
3187     -------------------------
3188     -- Exception Block for each iteration in Loop ends
3189     -------------------------
3190     -------------------------
3191 
3192 
3193      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
3194     ------------------------------------------------------------------------
3195     -------------- End of Inner Loop thru fetched row for---------------------
3196     -- validation, parse and validate article text, create a variable list
3197     -- prepare rows for DML if validate_only is 'N'
3198     -------------------------------------------------------------------------
3199     -- In order to propagate Unexpected error raise it if it is 'U'
3200     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
3201          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3202     END IF;
3203 
3204     -------------------------
3205     -------------------------
3206     -- Exception Block for Inner Loop starts
3207     -- Handles unexpected errors as last step
3208     -------------------------
3209     -------------------------
3210     EXCEPTION
3211          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3212              IF (l_debug = 'Y') THEN
3213                 okc_debug.log('400: Leaving Articles_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
3214              END IF;
3215              --
3216              -- Freeing temporary clobs
3217              --
3218              j := g_temp_clob_tbl.FIRST;
3219              LOOP
3220                DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3221                 EXIT WHEN (j = g_temp_clob_tbl.LAST);
3222                 j := g_temp_clob_tbl.NEXT(j);
3223              END LOOP;
3224              g_temp_clob_tbl.DELETE;
3225              --
3226              -- Freeing temporary clobs
3227              --
3228 
3229              IF l_interface_csr%ISOPEN THEN
3230                 CLOSE l_interface_csr;
3231              END IF;
3232              IF get_max_article_version_csr%ISOPEN THEN
3233                 CLOSE get_max_article_version_csr;
3234              END IF;
3235              IF get_article_info_csr%ISOPEN THEN
3236                CLOSE get_article_info_csr;
3237              END IF;
3238              IF validate_article_type_csr%ISOPEN THEN
3239                 CLOSE validate_article_type_csr;
3240              END IF;
3241              l_return_status := G_RET_STS_UNEXP_ERROR ;
3242              x_return_status := G_RET_STS_UNEXP_ERROR ;
3243              exit; -- exit outermost loop
3244 
3245         WHEN OTHERS THEN
3246              IF (l_debug = 'Y') THEN
3247                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||sqlerrm, 2);
3248              END IF;
3249 
3250              --
3251              -- Freeing temporary clobs
3252              --
3253              j := g_temp_clob_tbl.FIRST;
3254              LOOP
3255               DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
3256               EXIT WHEN (j = g_temp_clob_tbl.LAST);
3257               j := g_temp_clob_tbl.NEXT(j);
3258              END LOOP;
3259              g_temp_clob_tbl.DELETE;
3260              --
3261              -- Freeing temporary clobs
3262              --
3263 
3264              IF l_interface_csr%ISOPEN THEN
3265                 CLOSE l_interface_csr;
3266              END IF;
3267              IF get_max_article_version_csr%ISOPEN THEN
3268                 CLOSE get_max_article_version_csr;
3269              END IF;
3270              IF get_article_info_csr%ISOPEN THEN
3271                CLOSE get_article_info_csr;
3272              END IF;
3273              IF validate_article_type_csr%ISOPEN THEN
3274                 CLOSE validate_article_type_csr;
3275              END IF;
3276              l_return_status := G_RET_STS_UNEXP_ERROR ;
3277              x_return_status := G_RET_STS_UNEXP_ERROR ;
3278              exit; -- exit outermost loop
3279      END;
3280 
3281     -------------------------
3282     -------------------------
3283     -- Exception Block for Each Iteration of outermost Loop ends
3284     -------------------------
3285     -------------------------
3286 
3287     ------------------------------------------------------------------------
3288     --------------------- Start Do_DML for Article Library   ---------------
3289     -- Insert or Update Article, Article Version
3290     -- Insert variable association
3291     -------------------------------------------------------------------------
3292     -- initialize l_return_status to track status of DML execution
3293      l_return_status := G_RET_STS_SUCCESS;
3294 
3295 
3296     IF p_validate_only = 'N' THEN
3297          BEGIN
3298          SAVEPOINT bulkdml;
3299 
3300          i := 0;
3301         -- Bulk insert New Valid Records
3302          BEGIN
3303          l_context := 'INSERTING NEW CLAUSE';
3304 
3305            FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3306             INSERT INTO OKC_ARTICLES_ALL(
3307              ARTICLE_ID,
3308              ARTICLE_TITLE,
3309              ORG_ID,
3310              ARTICLE_NUMBER,
3311              STANDARD_YN,
3312              ARTICLE_INTENT,
3313              ARTICLE_LANGUAGE,
3314              ARTICLE_TYPE,
3315              ORIG_SYSTEM_REFERENCE_CODE,
3316              ORIG_SYSTEM_REFERENCE_ID1,
3317              ORIG_SYSTEM_REFERENCE_ID2,
3318              CZ_TRANSFER_STATUS_FLAG,
3319              PROGRAM_ID,
3320              PROGRAM_LOGIN_ID,
3321              PROGRAM_APPLICATION_ID,
3322              REQUEST_ID,
3323              OBJECT_VERSION_NUMBER,
3324              CREATED_BY,
3325              CREATION_DATE,
3326              LAST_UPDATED_BY,
3327              LAST_UPDATE_LOGIN,
3328              LAST_UPDATE_DATE)
3329            SELECT
3330              inf_article_id_tbl(i),
3331              inf_article_title_tbl(i),
3332              G_CURRENT_ORG_ID,
3333              inf_article_number_tbl(i),
3334              'Y',
3335              inf_article_intent_tbl(i),
3336              nvl(inf_article_language_tbl(i),l_userenv_lang),
3337              inf_article_type_tbl(i),
3338              inf_art_reference_code_tbl(i),
3339              inf_art_reference_id1_tbl(i),
3340              inf_art_reference_id2_tbl(i),
3341              'N',
3342              l_program_id,
3343              l_program_login_id,
3344              l_program_appl_id,
3345              l_request_id,
3346              1.0,
3347              l_user_id,
3348              sysdate,
3349              l_user_id,
3350              l_login_id,
3351              sysdate
3352            FROM DUAL
3353            WHERE inf_action_tbl(i)  = 'N' and
3354                  inf_process_status_tbl(i)  in ('S', 'W')  ;
3355 
3356         -- Using a " select from dual" aproach as above prevents creation of
3357         -- additional PL/SQL tables for bulk insert of
3358         -- articles if we were to use a FORALL INSERT INTO .... VALUES .... approach.
3359         -- We cannot use FORALL INSERT INTO .... VALUES ....using
3360         -- the existing inf*tbl since the error rows need to be
3361         -- filtered out.
3362 
3363         EXCEPTION
3364            WHEN OTHERS THEN
3365              IF (l_debug = 'Y') THEN
3366                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3367              END IF;
3368              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3369           END;
3370 
3371          --
3372          --  End of Insert into OKC_ARTICLES_ALL
3373          --
3374          --
3375 
3376          i := 0;
3377          BEGIN
3378          l_context := 'INSERTING NEW VERSION OF CLAUSE';
3379 
3380          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3381            INSERT INTO OKC_ARTICLE_VERSIONS(
3382              ARTICLE_VERSION_ID,
3383               ARTICLE_ID,
3384               ARTICLE_VERSION_NUMBER,
3385               ARTICLE_TEXT,
3386               PROVISION_YN,
3387               INSERT_BY_REFERENCE,
3388               LOCK_TEXT,
3389               GLOBAL_YN,
3390               ARTICLE_LANGUAGE,
3391               ARTICLE_STATUS,
3392               SAV_RELEASE,
3393               START_DATE,
3394               END_DATE,
3395               STD_ARTICLE_VERSION_ID,
3396               DISPLAY_NAME,
3397               TRANSLATED_YN,
3398               ARTICLE_DESCRIPTION,
3399               DATE_APPROVED,
3400               DEFAULT_SECTION,
3401               REFERENCE_SOURCE,
3402               REFERENCE_TEXT,
3403               ORIG_SYSTEM_REFERENCE_CODE,
3404               ORIG_SYSTEM_REFERENCE_ID1,
3405               ORIG_SYSTEM_REFERENCE_ID2,
3406               ADDITIONAL_INSTRUCTIONS,
3407               VARIATION_DESCRIPTION,
3408 		    DATE_PUBLISHED,
3409               ADOPTION_TYPE,
3410               PROGRAM_ID,
3411               PROGRAM_LOGIN_ID,
3412               PROGRAM_APPLICATION_ID,
3413               REQUEST_ID,
3414               ATTRIBUTE_CATEGORY,
3415               ATTRIBUTE1,
3416               ATTRIBUTE2,
3417               ATTRIBUTE3,
3418               ATTRIBUTE4,
3419               ATTRIBUTE5,
3420               ATTRIBUTE6,
3421               ATTRIBUTE7,
3422               ATTRIBUTE8,
3423               ATTRIBUTE9,
3424               ATTRIBUTE10,
3425               ATTRIBUTE11,
3426               ATTRIBUTE12,
3427               ATTRIBUTE13,
3428               ATTRIBUTE14,
3429               ATTRIBUTE15,
3430               OBJECT_VERSION_NUMBER,
3431               CREATED_BY,
3432               CREATION_DATE,
3433               LAST_UPDATED_BY,
3434               LAST_UPDATE_LOGIN,
3435               LAST_UPDATE_DATE)
3436            SELECT
3437               inf_article_version_id_tbl(i),
3438               inf_article_id_tbl(i),
3439               inf_article_version_number_tbl(i),
3440               g_temp_clob_tbl(i),
3441               inf_provision_yn_tbl(i),
3442               inf_insert_by_reference_tbl(i),
3443               inf_lock_text_tbl(i),
3444               inf_global_yn_tbl(i),
3445               nvl(inf_article_language_tbl(i),l_userenv_lang),
3446               inf_article_status_tbl(i),
3447               NULL,
3448               trunc(inf_start_date_tbl(i)),
3449               trunc(inf_end_date_tbl(i)),
3450               NULL,
3451               inf_display_name_tbl(i),
3452               NULL,
3453               inf_article_description_tbl(i),
3454               inf_date_approved_tbl(i),
3455               inf_default_section_tbl(i),
3456               inf_reference_source_tbl(i),
3457               inf_reference_text_tbl(i),
3458               inf_ver_reference_code_tbl(i),
3459               inf_ver_reference_id1_tbl(i),
3460               inf_ver_reference_id2_tbl(i),
3461               inf_instructions_tbl(i),
3462               NULL,
3463               inf_date_published_tbl(i),
3464               inf_adoption_type_tbl(i),
3465               l_program_id,
3466               l_program_login_id,
3467               l_program_appl_id,
3468               l_request_id,
3469               inf_attribute_category_tbl(i),
3470               inf_attribute1_tbl(i),
3471               inf_attribute2_tbl(i),
3472               inf_attribute3_tbl(i),
3473               inf_attribute4_tbl(i),
3474               inf_attribute5_tbl(i),
3475               inf_attribute6_tbl(i),
3476               inf_attribute7_tbl(i),
3477               inf_attribute8_tbl(i),
3478               inf_attribute9_tbl(i),
3479               inf_attribute10_tbl(i),
3480               inf_attribute11_tbl(i),
3481               inf_attribute12_tbl(i),
3482               inf_attribute13_tbl(i),
3483               inf_attribute14_tbl(i),
3484               inf_attribute15_tbl(i),
3485               1.0,
3486               l_user_id,
3487               sysdate,
3488               l_user_id,
3489               l_login_id,
3490               sysdate
3491            FROM OKC_ARTICLES_ALL
3492            WHERE inf_action_tbl(i)  IN ( 'N', 'V')
3493              AND inf_process_status_tbl(i) in ('S', 'W')
3494              AND article_id = inf_article_id_tbl(i);
3495 
3496         EXCEPTION
3497            WHEN OTHERS THEN
3498              IF (l_debug = 'Y') THEN
3499                okc_debug.log('500: Leaving Article Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3500              END IF;
3501              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3502           END;
3503 
3504           --
3505           -- End of Insert into OKC_ARTICLE_VERSIONS
3506           --
3507           --
3508 
3509           i := 0;
3510           BEGIN
3511              IF artv_variable_code_tbl.COUNT > 0 Then
3512                 l_context := 'INSERT ASSOCIATION FOR VARIABLES';
3513 
3514                 i := 0;
3515 
3516                 FORALL i in artv_variable_code_tbl.FIRST .. artv_variable_code_tbl.LAST
3517                  INSERT INTO OKC_ARTICLE_VARIABLES
3518                    (
3519                    ARTICLE_VERSION_ID    ,
3520                    VARIABLE_CODE         ,
3521                    OBJECT_VERSION_NUMBER ,
3522                    CREATED_BY            ,
3523                    CREATION_DATE         ,
3524                    LAST_UPDATE_DATE      ,
3525                    LAST_UPDATED_BY       ,
3526                    LAST_UPDATE_LOGIN
3527                    )
3528                  SELECT
3529                    artv_article_version_id_tbl(i),
3530                    artv_variable_code_tbl(i),
3531                    1.0,
3532                    l_user_id,
3533                    sysdate,
3534                    sysdate,
3535                    l_user_id,
3536                    l_login_id
3537                  FROM OKC_ARTICLE_VERSIONS
3538                  WHERE artv_action_tbl(i) = 'N'
3539                    AND article_version_id = artv_article_version_id_tbl(i);
3540 
3541               END IF;
3542 
3543               IF artv_variable_code_tbl.COUNT > 0 Then
3544                 l_context := 'DELETE ASSOCIATION FOR VARIABLES';
3545                 FORALL i in artv_variable_code_tbl.FIRST .. artv_variable_code_tbl.LAST
3546                   DELETE FROM OKC_ARTICLE_VARIABLES
3547                    WHERE VARIABLE_CODE = artv_variable_code_tbl(i)
3548                    AND ARTICLE_VERSION_ID = artv_article_version_id_tbl(i)
3549                    AND artv_action_tbl(i) = 'D';
3550               END IF;
3551         EXCEPTION
3552            WHEN OTHERS THEN
3553              IF (l_debug = 'Y') THEN
3554                okc_debug.log('500: Leaving Article Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3555              END IF;
3556              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3557           END;
3558 
3559          artv_article_version_id_tbl.DELETE;
3560          artv_variable_code_tbl.DELETE;
3561          artv_action_tbl.DELETE;
3562 
3563          --
3564          -- End of OKC_ARTICLES_VARIABLES
3565          --
3566          --
3567 
3568          i := 0;
3569          BEGIN
3570            l_context := 'SET END DATE IN PREV. VER';
3571 
3572          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3573            UPDATE OKC_ARTICLE_VERSIONS
3574             SET END_DATE              = trunc(inf_start_date_tbl(i)-1),
3575               PROGRAM_ID                 = l_program_id,
3576               REQUEST_ID                 = l_request_id,
3577               PROGRAM_LOGIN_ID           = l_program_login_id,
3578               PROGRAM_APPLICATION_ID     = l_program_appl_id,
3579               OBJECT_VERSION_NUMBER      = object_version_number + 1,
3580               LAST_UPDATED_BY            = l_user_id,
3581               LAST_UPDATE_LOGIN          = l_login_id,
3582               LAST_UPDATE_DATE           = SYSDATE
3583            WHERE inf_action_tbl(i)  = 'V'
3584              AND inf_process_status_tbl(i) in ('S','W')
3585              AND inf_earlier_version_id_tbl(i) <> -99
3586              AND article_version_id = inf_earlier_version_id_tbl(i);
3587         EXCEPTION
3588            WHEN OTHERS THEN
3589              IF (l_debug = 'Y') THEN
3590                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3591              END IF;
3592              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3593           END;
3594           --
3595           -- End of Insert into OKC_ARTICLE_VERSIONS
3596           --
3597           --
3598 
3599          i := 0;
3600          BEGIN
3601            l_context := 'UPDATING CLAUSE TYPE FOR ACTION V AND U';
3602 
3603          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3604            UPDATE OKC_ARTICLES_ALL
3605            SET ARTICLE_TYPE               = inf_article_type_tbl(i),
3606                PROGRAM_ID                 = l_program_id,
3607                REQUEST_ID                 = l_request_id,
3608                PROGRAM_LOGIN_ID           = l_program_login_id,
3609                PROGRAM_APPLICATION_ID     = l_program_appl_id,
3610                OBJECT_VERSION_NUMBER      = object_version_number + 1,
3611                LAST_UPDATED_BY            = l_user_id,
3612                LAST_UPDATE_LOGIN          = l_login_id,
3613                LAST_UPDATE_DATE           = SYSDATE
3614            WHERE inf_action_tbl(i)  in ('U', 'V')
3615              AND inf_process_status_tbl(i) in ('S','W')
3616              AND article_id = inf_article_id_tbl(i);
3617         EXCEPTION
3618            WHEN OTHERS THEN
3619              IF (l_debug = 'Y') THEN
3620                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3621              END IF;
3622              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3623           END;
3624          ---
3625 	    ---
3626 	    ---
3627          i := 0;
3628          BEGIN
3629            l_context := 'UPDATING CLAUSE END DATE FOR ACTION D ';
3630 
3631          FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3632            UPDATE OKC_ARTICLE_VERSIONS
3633            SET END_DATE                   = trunc(inf_end_date_tbl(i)),
3634                PROGRAM_ID                 = l_program_id,
3635                REQUEST_ID                 = l_request_id,
3636                PROGRAM_LOGIN_ID           = l_program_login_id,
3637                PROGRAM_APPLICATION_ID     = l_program_appl_id,
3638                OBJECT_VERSION_NUMBER      = object_version_number + 1,
3639                LAST_UPDATED_BY            = l_user_id,
3640                LAST_UPDATE_LOGIN          = l_login_id,
3641                LAST_UPDATE_DATE           = SYSDATE
3642            WHERE inf_action_tbl(i)  in ('D')
3643              AND inf_process_status_tbl(i) in ('S','W')
3644              AND article_version_id = inf_article_version_id_tbl(i);
3645         EXCEPTION
3646            WHEN OTHERS THEN
3647              IF (l_debug = 'Y') THEN
3648                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3649              END IF;
3650              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3651           END;
3652 
3653          ---
3654 	    ---
3655 	    ---
3656           i := 0;
3657           BEGIN
3658            l_context := 'UPDATING CLAUSE VERSION';
3659 
3660            FORALL  i in inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST
3661              UPDATE OKC_ARTICLE_VERSIONS VO SET (
3662                 ARTICLE_TEXT,
3663                 PROVISION_YN,
3664                 INSERT_BY_REFERENCE,
3665                 LOCK_TEXT,
3666                 GLOBAL_YN,
3667                 ARTICLE_STATUS,
3668                 START_DATE,
3669                 END_DATE,
3670                 DISPLAY_NAME,
3671                 ARTICLE_DESCRIPTION,
3672                 DEFAULT_SECTION,
3673                 REFERENCE_SOURCE,
3674                 REFERENCE_TEXT,
3675                 ORIG_SYSTEM_REFERENCE_CODE,
3676                 ORIG_SYSTEM_REFERENCE_ID1,
3677                 ORIG_SYSTEM_REFERENCE_ID2,
3678                 ADDITIONAL_INSTRUCTIONS,
3679 			 DATE_PUBLISHED,
3680                 PROGRAM_ID,
3681                 PROGRAM_LOGIN_ID,
3682                 PROGRAM_APPLICATION_ID,
3683                 REQUEST_ID,
3684                 ATTRIBUTE_CATEGORY,
3685                 ATTRIBUTE1,
3686                 ATTRIBUTE2,
3687                 ATTRIBUTE3,
3688                 ATTRIBUTE4,
3689                 ATTRIBUTE5,
3690                 ATTRIBUTE6,
3691                 ATTRIBUTE7,
3692                 ATTRIBUTE8,
3693                 ATTRIBUTE9,
3694                 ATTRIBUTE10,
3695                 ATTRIBUTE11,
3696                 ATTRIBUTE12,
3697                 ATTRIBUTE13,
3698                 ATTRIBUTE14,
3699                 ATTRIBUTE15,
3700                 OBJECT_VERSION_NUMBER,
3701                 LAST_UPDATED_BY,
3702                 LAST_UPDATE_LOGIN,
3703                 LAST_UPDATE_DATE) = (
3704              SELECT
3705                 g_temp_clob_tbl(i),
3706                 inf_provision_yn_tbl(i),
3707                 inf_insert_by_reference_tbl(i),
3708                 inf_lock_text_tbl(i),
3709                 inf_global_yn_tbl(i),
3710                 inf_article_status_tbl(i),
3711                 trunc(inf_start_date_tbl(i)),
3712                 trunc(inf_end_date_tbl(i)),
3713                 inf_display_name_tbl(i),
3714                 inf_article_description_tbl(i),
3715                 inf_default_section_tbl(i),
3716                 inf_reference_source_tbl(i),
3717                 inf_reference_text_tbl(i),
3718                 inf_ver_reference_code_tbl(i),
3719                 inf_ver_reference_id1_tbl(i),
3720                 inf_ver_reference_id2_tbl(i),
3721                 inf_instructions_tbl(i),
3722                 inf_date_published_tbl(i),
3723                 l_program_id,
3724                 l_program_login_id,
3725                 l_program_appl_id,
3726                 l_request_id,
3727                 inf_attribute_category_tbl(i),
3728                 inf_attribute1_tbl(i),
3729                 inf_attribute2_tbl(i),
3730                 inf_attribute3_tbl(i),
3731                 inf_attribute4_tbl(i),
3732                 inf_attribute5_tbl(i),
3733                 inf_attribute6_tbl(i),
3734                 inf_attribute7_tbl(i),
3735                 inf_attribute8_tbl(i),
3736                 inf_attribute9_tbl(i),
3737                 inf_attribute10_tbl(i),
3738                 inf_attribute11_tbl(i),
3739                 inf_attribute12_tbl(i),
3740                 inf_attribute13_tbl(i),
3741                 inf_attribute14_tbl(i),
3742                 inf_attribute15_tbl(i),
3743                 vi.object_version_number+1,
3744                 l_user_id,
3745                 l_login_id,
3746                 sysdate
3747              FROM OKC_ART_INTERFACE_ALL VI
3748              WHERE inf_action_tbl(i)  = 'U'
3749              AND nvl(process_status, 'E') in ('E')
3750              AND inf_process_status_tbl(i) in ('S', 'W')
3751              AND VI.interface_id = inf_interface_id_tbl(i))
3752           WHERE  vo.article_version_id = inf_article_version_id_tbl(i)
3753             AND  inf_process_status_tbl(i) in ('S','W')
3754             AND  inf_action_tbl(i) = 'U';
3755 
3756         EXCEPTION
3757            WHEN OTHERS THEN
3758              IF (l_debug = 'Y') THEN
3759                okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3760              END IF;
3761              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3762         END;
3763           --
3764           -- End of Update OKC_ARTICLE_VERSIONS
3765           --
3766           --
3767 
3768 
3769 
3770           --
3771           -- Start Auto Adoption
3772           --
3773           --
3774           -- Auto adopt all approved global articles in New/New Version case.
3775 
3776           IF G_CURRENT_ORG_ID = G_GLOBAL_ORG_ID THEN
3777             BEGIN
3778               i := 0;
3779               l_context := 'AUTO ADOPTION';
3780               For i IN inf_interface_id_tbl.FIRST ..inf_interface_id_tbl.LAST LOOP
3781                 IF   nvl(inf_process_status_tbl(i),'E') <> 'E'
3782                  and nvl(inf_article_status_tbl(i), '*') = 'APPROVED'
3783                  and inf_global_yn_tbl(i) = 'Y' THEN
3784                      OKC_ADOPTIONS_GRP.AUTO_ADOPT_ARTICLES
3785                      (
3786                         p_api_version                  => l_api_version ,
3787                         p_init_msg_list                => l_init_msg_list ,
3788                         x_return_status                => api_return_status ,
3789                         x_msg_count                    => x_msg_count,
3790                         x_msg_data                     => x_msg_data,
3791                         p_relationship_yn              => 'N',
3792                         p_adoption_yn                  => 'Y',
3793                         p_fetchsize                    => 100,
3794                         p_global_article_id            => inf_article_id_tbl(i),
3795                         p_global_article_version_id    => inf_article_version_id_tbl(i)
3796                      );
3797 
3798                     IF (api_return_status = G_RET_STS_UNEXP_ERROR) THEN
3799                       -- in order to mark interface_id, we build error_array in the loop
3800                       build_error_array(
3801                         p_msg_data     => x_msg_data,
3802                         p_context      => l_context,
3803                         p_batch_process_id => l_batch_process_id,
3804                         p_interface_id  => inf_interface_id_tbl(i),
3805                         p_article_title => inf_article_title_tbl(i),
3806                         p_error_type    => G_RET_STS_ERROR,
3807 				    p_entity        => 'CLAUSE'
3808                       );
3809                       inf_process_status_tbl(i):= G_RET_STS_ERROR;
3810                       -- Unexpected Error occurred rollback
3811                       RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3812                     ELSIF (api_return_status = G_RET_STS_ERROR) THEN
3813                       -- Set return status as 'E' and move on to next record
3814                       -- l_return_status := G_RET_STS_ERROR;
3815                       build_error_array(
3816                         p_msg_data     => x_msg_data,
3817                         p_context      => l_context,
3818                         p_batch_process_id => l_batch_process_id,
3819                         p_interface_id  => inf_interface_id_tbl(i),
3820                         p_article_title => inf_article_title_tbl(i),
3821                         p_error_type    => G_RET_STS_ERROR,
3822 				    p_entity        => 'CLAUSE'
3823                       );
3824                       inf_process_status_tbl(i):= G_RET_STS_ERROR;
3825                       RAISE FND_API.G_EXC_ERROR;
3826                     END IF;
3827                 END IF;
3828               END LOOP;
3829 
3830 
3831           EXCEPTION
3832              WHEN OTHERS THEN
3833                IF (l_debug = 'Y') THEN
3834                  okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
3835                END IF;
3836                RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
3837             END;
3838        END IF;  ---- If CURRENT_ORG_ID = GLOBAL_ORG_ID
3839 
3840       --
3841       -- End of Auto Adoption
3842       --
3843       --
3844 
3845       -- Exception for bulk DML block
3846       EXCEPTION
3847         WHEN OTHERS THEN
3848              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
3849               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3850                                   p_msg_name     => G_UNEXPECTED_ERROR,
3851                                   p_token1       => G_SQLCODE_TOKEN,
3852                                   p_token1_value => sqlcode,
3853                                   p_token2       => G_SQLERRM_TOKEN,
3854                                   p_token2_value => sqlerrm);
3855               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
3856                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
3857                                   p_token1       => 'CONTEXT',
3858                                   p_token1_value => l_context);
3859 
3860               build_error_array(
3861                                  p_msg_data     => null,
3862                                  p_context      => l_context,
3863                                  p_batch_process_id => l_batch_process_id,
3864                                  p_interface_id  => -99,
3865                                  p_article_title => NULL,
3866                                  p_error_type    => G_RET_STS_ERROR,
3867 						   p_entity        => 'CLAUSE'
3868               );
3869               l_return_status := G_RET_STS_UNEXP_ERROR;
3870               x_return_status := G_RET_STS_UNEXP_ERROR;
3871 
3872               --##count:rollback the count
3873               l_part_rows_failed := l_part_rows_processed;
3874               l_part_rows_warned := 0;
3875 
3876               ROLLBACK TO SAVEPOINT bulkdml;
3877               exit; -- exit outermost loop
3878       END;
3879 
3880     END IF; --- validate_only = 'N'
3881 
3882     ------------------------------------------------------------------------
3883     --------------------- End of Do_DML for Article Library   ---------------
3884     -------------------------------------------------------------------------
3885 
3886     ------------------------------------------------------------------------
3887     --------------- Start of Do_DML for import related tables   ------------
3888     -- Update interface table
3889     -- Insert Errors into Error table
3890     -------------------------------------------------------------------------
3891     -- Update Interface Table
3892     i:=0;
3893     BEGIN
3894      l_context := 'UPDATING CLAUSE INTERFACE TABLE';
3895      FORALL i in inf_interface_id_tbl.FIRST..inf_interface_id_tbl.LAST
3896        UPDATE OKC_ART_INTERFACE_ALL
3897        SET
3898            -- We don't want to update process_status to 'S' or 'W' in validation_mode
3899            -- because it is not going to be picked up in next run if we do so
3900            PROCESS_STATUS = decode(p_validate_only||inf_process_status_tbl(i)||l_bulk_failed,
3901                                                'NEN','E',
3902                                                'NSN','S',
3903                                                'NWN','W',
3904                                                'NEY','E',
3905                                                'NSY',NULL,
3906                                                'NWY',NULL,
3907                                                'YEY','E',
3908                                                'YEN','E',
3909                                                'NFY','E',
3910                                                'YFY','E',
3911                                                'NFN','E',
3912                                                'YFN','E',NULL),
3913            ARTICLE_VERSION_NUMBER     = inf_article_version_number_tbl(i),
3914            PROGRAM_ID                 = l_program_id,
3915            REQUEST_ID                 = l_request_id,
3916            PROGRAM_LOGIN_ID           = l_program_login_id,
3917            PROGRAM_APPLICATION_ID     = l_program_appl_id,
3918            OBJECT_VERSION_NUMBER      = inf_object_version_number_tbl(i) + 1,
3919            LAST_UPDATED_BY            = l_user_id,
3920            LAST_UPDATE_LOGIN          = l_login_id,
3921            LAST_UPDATE_DATE           = SYSDATE
3922          WHERE
3923            interface_id = inf_interface_id_tbl(i);
3924     EXCEPTION
3925            WHEN OTHERS THEN
3926              IF (l_debug = 'Y') THEN
3927                okc_debug.log('500: Leaving Article_Import because of EXCEPTION: '||sqlerrm, 2);
3928              END IF;
3929              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
3930                         p_msg_name     => G_UNEXPECTED_ERROR,
3931                         p_token1       => G_SQLCODE_TOKEN,
3932                         p_token1_value => sqlcode,
3933                         p_token2       => G_SQLERRM_TOKEN,
3934                         p_token2_value => sqlerrm);
3935              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
3936                         p_msg_name     => 'OKC_ART_INT_UPDATE_FAILED');
3937              build_error_array(
3938                        p_msg_data     => null,
3939                        p_context      => l_context,
3940                        p_batch_process_id => l_batch_process_id,
3941                        p_interface_id  => -99,
3942                        p_article_title => NULL,
3943                        p_error_type    => G_RET_STS_ERROR,
3944 				   p_entity        => 'CLAUSE'
3945              );
3946              l_return_status := G_RET_STS_UNEXP_ERROR ;
3947              x_return_status := G_RET_STS_UNEXP_ERROR ;
3948              --##count:rollback the count
3949              l_part_rows_failed := l_part_rows_processed;
3950              l_part_rows_warned := 0;
3951 
3952              --RAISE FND_API.G_EXC_ERROR ;
3953     END;
3954     --
3955     -- End of Update OKC_ART_INTERFACE_ALL
3956     --
3957     --
3958     --Insert Errors into Error table for this fetch
3959     insert_error_array(
3960      x_return_status => api_return_status,
3961      x_msg_count     => x_msg_count,
3962      x_msg_data      => x_msg_data
3963     );
3964 
3965 
3966     IF (api_return_status = l_insert_errors_error) THEN
3967       NULL;
3968      -- Ignore
3969      -- RAISE l_insert_errors_exception;
3970     END IF;
3971     ------------------------------------------------------------------------
3972     --------------- End of Do_DML for import related tables   ------------
3973     -------------------------------------------------------------------------
3974     commit;
3975     -- Now delete cache for next bulk fetch
3976 
3977 
3978     inf_interface_id_tbl.DELETE;
3979     inf_batch_number_tbl.DELETE;
3980     inf_object_version_number_tbl.DELETE;
3981     inf_article_title_tbl.DELETE;
3982     inf_org_id_tbl.DELETE;
3983     inf_process_status_tbl.DELETE;
3984     inf_action_tbl.DELETE;
3985     inf_article_number_tbl.DELETE;
3986     inf_article_intent_tbl.DELETE;
3987     inf_article_language_tbl.DELETE;
3988     inf_article_type_tbl.DELETE;
3989     inf_article_id_tbl.DELETE;
3990     inf_art_reference_code_tbl.DELETE;
3991     inf_art_reference_id1_tbl.DELETE;
3992     inf_art_reference_id2_tbl.DELETE;
3993     inf_article_version_number_tbl.DELETE;
3994     inf_article_text_tbl.DELETE;
3995     inf_provision_yn_tbl.DELETE;
3996     inf_insert_by_reference_tbl.DELETE;
3997     inf_lock_text_tbl.DELETE;
3998     inf_global_yn_tbl.DELETE;
3999     inf_article_status_tbl.DELETE;
4000     inf_start_date_tbl.DELETE;
4001     inf_end_date_tbl.DELETE;
4002     inf_display_name_tbl.DELETE;
4003     --inf_translated_yn_tbl.DELETE;
4004     inf_article_description_tbl.DELETE;
4005     inf_date_approved_tbl.DELETE;
4006     inf_default_section_tbl.DELETE;
4007     inf_reference_source_tbl.DELETE;
4008     inf_reference_text_tbl.DELETE;
4009     inf_ver_reference_code_tbl.DELETE;
4010     inf_ver_reference_id1_tbl.DELETE;
4011     inf_ver_reference_id2_tbl.DELETE;
4012     inf_instructions_tbl.DELETE;
4013     inf_date_published_tbl.DELETE;
4014     inf_attribute_category_tbl.DELETE;
4015     inf_attribute1_tbl.DELETE;
4016     inf_attribute2_tbl.DELETE;
4017     inf_attribute3_tbl.DELETE;
4018     inf_attribute4_tbl.DELETE;
4019     inf_attribute5_tbl.DELETE;
4020     inf_attribute6_tbl.DELETE;
4021     inf_attribute7_tbl.DELETE;
4022     inf_attribute8_tbl.DELETE;
4023     inf_attribute9_tbl.DELETE;
4024     inf_attribute10_tbl.DELETE;
4025     inf_attribute11_tbl.DELETE;
4026     inf_attribute12_tbl.DELETE;
4027     inf_attribute13_tbl.DELETE;
4028     inf_attribute14_tbl.DELETE;
4029     inf_attribute15_tbl.DELETE;
4030     inf_article_version_id_tbl.DELETE;
4031     inf_earlier_version_id_tbl.DELETE;
4032     inf_adoption_type_tbl.DELETE;
4033     err_batch_process_id_tbl.DELETE;
4034     err_article_title_tbl.DELETE;
4035     err_interface_id_tbl.DELETE;
4036     err_error_number_tbl.DELETE;
4037     err_object_version_number_tbl.DELETE;
4038     err_error_type_tbl.DELETE;
4039     err_entity_tbl.DELETE;
4040     err_error_description_tbl.DELETE;
4041 
4042    EXIT WHEN l_interface_csr%NOTFOUND;
4043 END LOOP;
4044 
4045 
4046 -----------------------------------------------------------------------
4047 -- End of outermost loop for bulk fetch
4048 -----------------------------------------------------------------------
4049 
4050 IF l_interface_csr%ISOPEN THEN
4051 CLOSE l_interface_csr;
4052 END IF;
4053 
4054 --
4055 -- Freeing temporary clobs
4056 --
4057 --
4058 
4059 j := g_temp_clob_tbl.FIRST;
4060 LOOP
4061  DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4062 EXIT WHEN (j = g_temp_clob_tbl.LAST);
4063 j := g_temp_clob_tbl.NEXT(j);
4064 END LOOP;
4065 g_temp_clob_tbl.DELETE;
4066 
4067 --
4068 -- Freeing temporary clobs
4069 --
4070 --
4071 
4072 --##count:add up last processed counts
4073 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
4074 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
4075 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
4076 
4077 BEGIN
4078 --If there are successful records and validate mode is off
4079 
4080 IF     p_validate_only = 'N'
4081    AND (l_tot_rows_processed - l_tot_rows_failed) > 0 THEN
4082    okc_artwf_pvt.start_wf_after_import( p_req_id => l_request_id,
4083                                         p_batch_number => p_batch_number,
4084                                         p_org_id => G_CURRENT_ORG_ID);
4085 END IF;
4086 
4087 EXCEPTION
4088 
4089 WHEN OTHERS THEN
4090       IF (l_debug = 'Y') THEN
4091         okc_debug.log('500: Leaving Articles_Import because of EXCEPTION in workflow: '||sqlerrm, 2);
4092       END IF;
4093       Okc_API.Set_Message(p_app_name     => G_APP_NAME,
4094                           p_msg_name     => 'OKC_ART_IMP_WF_FAILED');
4095 
4096       build_error_array(
4097                        p_msg_data     => null,
4098                        p_context      => l_context,
4099                        p_batch_process_id => l_batch_process_id,
4100                        p_interface_id  => -99,
4101                        p_article_title => NULL,
4102                        p_error_type    => G_RET_STS_ERROR,
4103 				   p_entity        => 'CLAUSE'
4104       );
4105 
4106       l_return_status := G_RET_STS_UNEXP_ERROR ;
4107       x_return_status := G_RET_STS_UNEXP_ERROR ;
4108       --RAISE FND_API.G_EXC_ERROR ;
4109 END;
4110 /*********
4111 --Update Batch Process Table as a last step
4112 UPDATE OKC_ART_INT_BATPROCS_ALL
4113 SET
4114   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
4115   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
4116   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
4117   END_DATE                   = SYSDATE,
4118   PROGRAM_ID                 = l_program_id,
4119   REQUEST_ID                 = l_request_id,
4120   PROGRAM_LOGIN_ID           = l_program_login_id,
4121   PROGRAM_APPLICATION_ID     = l_program_appl_id,
4122   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
4123   LAST_UPDATED_BY            = l_user_id,
4124   LAST_UPDATE_LOGIN          = l_login_id,
4125   LAST_UPDATE_DATE           = SYSDATE
4126 WHERE
4127   BATCH_PROCESS_ID  = l_batch_process_id
4128   AND ENTITY = 'Clause';
4129 *****************/
4130 p_rows_processed := l_tot_rows_processed;
4131 p_rows_failed := l_tot_rows_failed;
4132 p_rows_warned := l_tot_rows_warned;
4133 IF err_error_number_tbl.COUNT > 0 THEN
4134  insert_error_array(
4135    x_return_status => api_return_status,
4136    x_msg_count     => x_msg_count,
4137    x_msg_data      => x_msg_data
4138  );
4139 END IF;
4140 
4141 -- Print statistic of this run in the log
4142 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
4143 --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');
4144 commit; -- Final commit for status update
4145 
4146 IF (l_debug = 'Y') THEN
4147  okc_debug.log('200: Leaving articles import', 2);
4148 END IF;
4149 --x_return_status := l_return_status; this may cause to erase error x_return_status
4150 
4151 EXCEPTION
4152 
4153   WHEN FND_API.G_EXC_ERROR THEN
4154       IF (l_debug = 'Y') THEN
4155          okc_debug.log('300: Leaving Articles_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
4156       END IF;
4157       --Insert Errors into Error table if there is any
4158       insert_error_array(
4159        x_return_status => x_return_status,
4160        x_msg_count     => x_msg_count,
4161        x_msg_data      => x_msg_data
4162       );
4163       commit;
4164       x_return_status := G_RET_STS_ERROR ;
4165 
4166       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4167       IF (l_debug = 'Y') THEN
4168          okc_debug.log('400: Leaving Articles_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
4169       END IF;
4170 
4171       --Insert Errors into Error table if there is any
4172 
4173       insert_error_array(
4174        x_return_status => x_return_status,
4175        x_msg_count     => x_msg_count,
4176        x_msg_data      => x_msg_data
4177       );
4178       commit;
4179       --
4180       -- Freeing temporary clobs
4181       --
4182       --
4183 
4184       IF g_temp_clob_tbl.COUNT > 0 THEN
4185         j := g_temp_clob_tbl.FIRST;
4186         LOOP
4187          DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4188         EXIT WHEN (j = g_temp_clob_tbl.LAST);
4189         j := g_temp_clob_tbl.NEXT(j);
4190         END LOOP;
4191         g_temp_clob_tbl.DELETE;
4192       END IF;
4193       --
4194       -- Freeing temporary clobs
4195       --
4196       --
4197 
4198       IF l_interface_csr%ISOPEN THEN
4199          CLOSE l_interface_csr;
4200       END IF;
4201       IF get_max_article_version_csr%ISOPEN THEN
4202          CLOSE get_max_article_version_csr;
4203       END IF;
4204       IF get_article_info_csr%ISOPEN THEN
4205          CLOSE get_article_info_csr;
4206       END IF;
4207       IF validate_article_type_csr%ISOPEN THEN
4208          CLOSE validate_article_type_csr;
4209       END IF;
4210 
4211       x_return_status := G_RET_STS_UNEXP_ERROR ;
4212       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
4213         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
4214       END IF;
4215       get_print_msgs_stack(p_msg_data => x_msg_data);
4216 
4217   WHEN l_insert_errors_exception THEN
4218       --
4219       -- In this exception handling, we don't insert error array again
4220       -- because error happend in the module
4221       --
4222       IF (l_debug = 'Y') THEN
4223         okc_debug.log('500: Leaving Articles_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
4224       END IF;
4225       --
4226       -- Freeing temporary clobs
4227       --
4228       --
4229 
4230       IF g_temp_clob_tbl.COUNT > 0 THEN
4231         j := g_temp_clob_tbl.FIRST;
4232         LOOP
4233          DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4234         EXIT WHEN (j = g_temp_clob_tbl.LAST);
4235         j := g_temp_clob_tbl.NEXT(j);
4236         END LOOP;
4237         g_temp_clob_tbl.DELETE;
4238       END IF;
4239 
4240       --
4241       -- Freeing temporary clobs
4242       --
4243       --
4244 
4245       IF l_interface_csr%ISOPEN THEN
4246          CLOSE l_interface_csr;
4247       END IF;
4248 
4249       IF get_max_article_version_csr%ISOPEN THEN
4250          CLOSE get_max_article_version_csr;
4251       END IF;
4252 
4253       IF get_article_info_csr%ISOPEN THEN
4254          CLOSE get_article_info_csr;
4255       END IF;
4256 
4257       IF validate_article_type_csr%ISOPEN THEN
4258          CLOSE validate_article_type_csr;
4259       END IF;
4260 
4261 
4262       --x_return_status := G_RET_STS_UNEXP_ERROR ;
4263       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
4264         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
4265       END IF;
4266 
4267       get_print_msgs_stack(p_msg_data => x_msg_data);
4268       commit;
4269 
4270   WHEN OTHERS THEN
4271       IF (l_debug = 'Y') THEN
4272         okc_debug.log('500: Leaving Articles_Import because of EXCEPTION: '||sqlerrm, 2);
4273       END IF;
4274       --Insert Errors into Error table if there is any
4275       insert_error_array(
4276        x_return_status => x_return_status,
4277        x_msg_count     => x_msg_count,
4278        x_msg_data      => x_msg_data
4279       );
4280       commit;
4281       --
4282       -- Freeing temporary clobs
4283       --
4284       --
4285       IF g_temp_clob_tbl.COUNT > 0 THEN
4286         j := g_temp_clob_tbl.FIRST;
4287         LOOP
4288          DBMS_LOB.FREETEMPORARY(g_temp_clob_tbl(j));
4289         EXIT WHEN (j = g_temp_clob_tbl.LAST);
4290         j := g_temp_clob_tbl.NEXT(j);
4291         END LOOP;
4292         g_temp_clob_tbl.DELETE;
4293       END IF;
4294       --
4295       -- Freeing temporary clobs
4296       --
4297       --
4298 
4299       IF l_interface_csr%ISOPEN THEN
4300          CLOSE l_interface_csr;
4301       END IF;
4302       IF get_max_article_version_csr%ISOPEN THEN
4303          CLOSE get_max_article_version_csr;
4304       END IF;
4305       IF get_article_info_csr%ISOPEN THEN
4306          CLOSE get_article_info_csr;
4307       END IF;
4308       IF validate_article_type_csr%ISOPEN THEN
4309          CLOSE validate_article_type_csr;
4310       END IF;
4311 
4312       x_return_status := G_RET_STS_UNEXP_ERROR ;
4313       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
4314         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
4315       END IF;
4316       get_print_msgs_stack(p_msg_data => x_msg_data);
4317 
4318 END import_articles;
4319 
4320 PROCEDURE import_variables(
4321     x_return_status                OUT NOCOPY VARCHAR2,
4322     x_msg_count                    OUT NOCOPY NUMBER,
4323     x_msg_data                     OUT NOCOPY VARCHAR2,
4324 
4325     p_batch_procs_id               IN NUMBER,
4326     p_batch_number                 IN VARCHAR2,
4327     p_validate_only                IN VARCHAR2 := 'Y',
4328     p_fetchsize                    IN NUMBER := 100
4329    ) IS
4330     l_api_version                 CONSTANT NUMBER := 1;
4331     l_api_name                    CONSTANT VARCHAR2(30) := 'import_variables';
4332     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
4333     l_row_notfound                BOOLEAN := FALSE;
4334     l_user_id                     NUMBER;
4335     l_login_id                    NUMBER;
4336     l_insert_errors_exception     EXCEPTION;
4337     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
4338 
4339     CURSOR l_var_interface_csr ( cp_batch_number IN VARCHAR2) IS
4340       SELECT
4341            VARINT.INTERFACE_ID     ,
4342            VARINT.BATCH_NUMBER             ,
4343            VARINT.OBJECT_VERSION_NUMBER  ,
4344            RTRIM(VARINT.VARIABLE_CODE) VARIABLE_CODE    ,
4345            VARINT.VARIABLE_NAME    ,
4346            VARINT.PROCESS_STATUS           ,
4347            VARINT.ACTION                  ,
4348            VARINT.LANGUAGE  ,
4349 		 VARINT.DESCRIPTION,
4350 		 VARINT.VARIABLE_TYPE,
4351 		 VARINT.VARIABLE_INTENT,
4352 		 VARINT.CONTRACT_EXPERT_YN,
4353 		 VARINT.XPRT_VALUE_SET_NAME,
4354 		 VARINT.DISABLED_YN,
4355 		 VARINT.EXTERNAL_YN,
4356 		 VARINT.VARIABLE_DATATYPE,
4357 		 VARINT.APPLICATION_ID,
4358 		 VARINT.VALUE_SET_NAME,
4359 		 VARINT.VARIABLE_DEFAULT_VALUE,
4360 		 VARINT.ORIG_SYSTEM_REFERENCE_CODE,
4361 		 VARINT.ORIG_SYSTEM_REFERENCE_ID1,
4362 		 VARINT.ORIG_SYSTEM_REFERENCE_ID2,
4363 		 VARINT.DATE_PUBLISHED,
4364            VARINT.ATTRIBUTE_CATEGORY,
4365            VARINT.ATTRIBUTE1  ,
4366            VARINT.ATTRIBUTE2  ,
4367            VARINT.ATTRIBUTE3  ,
4368            VARINT.ATTRIBUTE4  ,
4369            VARINT.ATTRIBUTE5  ,
4370            VARINT.ATTRIBUTE6  ,
4371            VARINT.ATTRIBUTE7  ,
4372            VARINT.ATTRIBUTE8  ,
4373            VARINT.ATTRIBUTE9  ,
4374            VARINT.ATTRIBUTE10 ,
4375            VARINT.ATTRIBUTE11 ,
4376            VARINT.ATTRIBUTE12 ,
4377            VARINT.ATTRIBUTE13 ,
4378            VARINT.ATTRIBUTE14 ,
4379            VARINT.ATTRIBUTE15 ,
4380 		 VAR.VARIABLE_CODE EXISTING_CODE,
4381 		 VAR.DATE_PUBLISHED EXISTING_DPUBLISHED,
4382 		 VARTL.LANGUAGE EXISTING_LANGUAGE
4383       FROM OKC_VARIABLES_INTERFACE VARINT, OKC_BUS_VARIABLES_B VAR,
4384 	      OKC_BUS_VARIABLES_TL VARTL
4385       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
4386          AND BATCH_NUMBER = cp_batch_number
4387          AND RTRIM(VARINT.VARIABLE_CODE) = VAR.VARIABLE_CODE(+)
4388          AND RTRIM(VARINT.VARIABLE_CODE) = VARTL.VARIABLE_CODE(+)
4389          AND VARINT.LANGUAGE = VARTL.LANGUAGE(+)
4390       ORDER BY RTRIM(VARINT.VARIABLE_CODE) ASC;
4391 
4392 -- Cursor to check that variable code is unique in the system
4393 
4394       CURSOR l_code_exist_csr (cp_var_code IN VARCHAR2) IS
4395 	 SELECT '1' FROM OKC_BUS_VARIABLES_B
4396 	 WHERE variable_code = cp_var_code;
4397 
4398 -- Cursor to check that variable name and intent is unique in the system
4399 
4400     CURSOR get_var_unq_csr    (cp_var_name IN VARCHAR2,
4401                                 cp_var_intent IN VARCHAR2) IS
4402      SELECT
4403            '1'
4404      FROM OKC_BUS_VARIABLES_B B,OKC_BUS_VARIABLES_TL TL
4405      WHERE B.VARIABLE_CODE = TL.VARIABLE_CODE AND
4406 	      B.VARIABLE_INTENT = cp_var_intent AND
4407 		 TL.VARIABLE_NAME = cp_var_name;
4408 
4409 -- Cursor to check that variable code is not duplicate in the system
4410 
4411     CURSOR get_var_info_csr    (cp_var_code IN VARCHAR2 ) IS
4412     SELECT
4413            '1'
4414      FROM OKC_BUS_VARIABLES_B B,OKC_BUS_VARIABLES_TL TL
4415      WHERE B.VARIABLE_CODE = TL.VARIABLE_CODE AND
4416 	      B.VARIABLE_CODE = cp_var_code;
4417 
4418 -- Cursor to derive value set id from value set name
4419 
4420     CURSOR get_valset_id_csr    (cp_valset_name IN VARCHAR2 ) IS
4421     SELECT
4422            FLX.FLEX_VALUE_SET_ID ,
4423 		 DECODE(FORMAT_TYPE,'C','V','X','D',FORMAT_TYPE) FORMAT_TYPE
4424      FROM  FND_FLEX_VALUE_SETS FLX
4425      WHERE FLX.FLEX_VALUE_SET_NAME = cp_valset_name;
4426 
4427 
4428 -- Cursor to check valueset exists in the valueset interface Table
4429     CURSOR valset_exists_csr (cp_valset_name IN VARCHAR2,
4430                               cp_batch_number IN VARCHAR2) IS
4431     SELECT '1'
4432     FROM OKC_VALUESETS_INTERFACE
4433     WHERE flex_value_set_name = cp_valset_name
4434     AND   batch_number = cp_batch_number
4435     AND   nvl(process_status,'X') not in ('E');
4436 
4437 -- Cursor to verify language is installed
4438     CURSOR check_lang_csr(lang_code IN VARCHAR2) IS
4439     SELECT '1'
4440     FROM FND_LANGUAGES
4441     WHERE INSTALLED_FLAG IN ('I','B')
4442     AND   language_code = lang_code;
4443 
4444 -- Variable Interface Rows
4445 
4446     TYPE l_vinf_interface_id             IS TABLE OF OKC_VARIABLES_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
4447     TYPE l_vinf_batch_number             IS TABLE OF OKC_VARIABLES_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
4448     TYPE l_vinf_object_version_number    IS TABLE OF OKC_VARIABLES_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
4449     TYPE l_vinf_variable_code            IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_CODE%TYPE INDEX BY BINARY_INTEGER ;
4450     TYPE l_vinf_variable_name            IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_NAME%TYPE INDEX BY BINARY_INTEGER ;
4451     TYPE l_vinf_process_status           IS TABLE OF OKC_VARIABLES_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
4452     TYPE l_vinf_action                   IS TABLE OF OKC_VARIABLES_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
4453     TYPE l_vinf_language                 IS TABLE OF OKC_VARIABLES_INTERFACE.LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
4454     TYPE l_vinf_description              IS TABLE OF OKC_VARIABLES_INTERFACE.DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
4455     TYPE l_vinf_variable_type            IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_TYPE%TYPE INDEX BY BINARY_INTEGER ;
4456     TYPE l_vinf_variable_intent          IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
4457     TYPE l_vinf_contract_expert_yn       IS TABLE OF OKC_VARIABLES_INTERFACE.CONTRACT_EXPERT_YN%TYPE INDEX BY BINARY_INTEGER ;
4458     TYPE l_vinf_xprt_value_set_name      IS TABLE OF OKC_VARIABLES_INTERFACE.XPRT_VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
4459     TYPE l_vinf_disabled_yn              IS TABLE OF OKC_VARIABLES_INTERFACE.DISABLED_YN%TYPE INDEX BY BINARY_INTEGER ;
4460     TYPE l_vinf_external_yn              IS TABLE OF OKC_VARIABLES_INTERFACE.EXTERNAL_YN%TYPE INDEX BY BINARY_INTEGER ;
4461     TYPE l_vinf_variable_datatype        IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_DATATYPE%TYPE INDEX BY BINARY_INTEGER ;
4462     TYPE l_vinf_application_id           IS TABLE OF OKC_VARIABLES_INTERFACE.APPLICATION_ID%TYPE INDEX BY BINARY_INTEGER ;
4463     TYPE l_vinf_value_set_name           IS TABLE OF OKC_VARIABLES_INTERFACE.VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
4464     TYPE l_vinf_var_default_value        IS TABLE OF OKC_VARIABLES_INTERFACE.VARIABLE_DEFAULT_VALUE%TYPE INDEX BY BINARY_INTEGER ;
4465     TYPE l_vinf_system_reference_code    IS TABLE OF OKC_VARIABLES_INTERFACE.ORIG_SYSTEM_REFERENCE_CODE%TYPE INDEX BY BINARY_INTEGER ;
4466     TYPE l_vinf_system_reference_id1     IS TABLE OF OKC_VARIABLES_INTERFACE.ORIG_SYSTEM_REFERENCE_ID1%TYPE INDEX BY BINARY_INTEGER ;
4467     TYPE l_vinf_system_reference_id2     IS TABLE OF OKC_VARIABLES_INTERFACE.ORIG_SYSTEM_REFERENCE_ID2%TYPE INDEX BY BINARY_INTEGER ;
4468     TYPE l_vinf_date_published           IS TABLE OF OKC_VARIABLES_INTERFACE.DATE_PUBLISHED%TYPE INDEX BY BINARY_INTEGER ;
4469     TYPE l_vinf_attribute_category       IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE_CATEGORY%TYPE INDEX BY BINARY_INTEGER ;
4470     TYPE l_vinf_attribute1               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE1%TYPE INDEX BY BINARY_INTEGER ;
4471     TYPE l_vinf_attribute2               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE2%TYPE INDEX BY BINARY_INTEGER ;
4472     TYPE l_vinf_attribute3               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE3%TYPE INDEX BY BINARY_INTEGER ;
4473     TYPE l_vinf_attribute4               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE4%TYPE INDEX BY BINARY_INTEGER ;
4474     TYPE l_vinf_attribute5               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE5%TYPE INDEX BY BINARY_INTEGER ;
4475     TYPE l_vinf_attribute6               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE6%TYPE INDEX BY BINARY_INTEGER ;
4476     TYPE l_vinf_attribute7               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE7%TYPE INDEX BY BINARY_INTEGER ;
4477     TYPE l_vinf_attribute8               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE8%TYPE INDEX BY BINARY_INTEGER ;
4478     TYPE l_vinf_attribute9               IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE9%TYPE INDEX BY BINARY_INTEGER ;
4479     TYPE l_vinf_attribute10              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE10%TYPE INDEX BY BINARY_INTEGER ;
4480     TYPE l_vinf_attribute11              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE11%TYPE INDEX BY BINARY_INTEGER ;
4481     TYPE l_vinf_attribute12              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE12%TYPE INDEX BY BINARY_INTEGER ;
4482     TYPE l_vinf_attribute13              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE13%TYPE INDEX BY BINARY_INTEGER ;
4483     TYPE l_vinf_attribute14              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE14%TYPE INDEX BY BINARY_INTEGER ;
4484     TYPE l_vinf_attribute15              IS TABLE OF OKC_VARIABLES_INTERFACE.ATTRIBUTE15%TYPE INDEX BY BINARY_INTEGER ;
4485 
4486 
4487     TYPE l_vinf_existing_code            IS TABLE OF OKC_BUS_VARIABLES_B.VARIABLE_CODE%TYPE INDEX BY BINARY_INTEGER ;
4488     TYPE l_vinf_existing_dpublished      IS TABLE OF OKC_BUS_VARIABLES_B.DATE_PUBLISHED%TYPE INDEX BY BINARY_INTEGER ;
4489     TYPE l_vinf_value_set_id             IS TABLE OF OKC_BUS_VARIABLES_B.VALUE_SET_ID%TYPE INDEX BY BINARY_INTEGER ;
4490     TYPE l_vinf_existing_language        IS TABLE OF OKC_BUS_VARIABLES_TL.LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
4491 
4492 
4493    l_return_status                      VARCHAR2(1);
4494    l_error_index                        NUMBER          := 1;
4495    l_batch_process_id                   NUMBER          := 1;
4496    l_context                            VARCHAR2(50)    := NULL;
4497    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
4498    l_tot_rows_processed                 NUMBER          := 0;
4499    l_tot_rows_failed                    NUMBER          := 0;
4500    l_tot_rows_warned                    NUMBER          := 0;
4501    l_part_rows_processed                NUMBER          := 0;
4502    l_part_rows_failed                   NUMBER          := 0;
4503    l_part_rows_warned                   NUMBER          := 0;
4504    l_bulk_failed                        VARCHAR2(1)     := 'Y';
4505 
4506 -- Variables for variables interface
4507    vinf_interface_id_tbl                 l_vinf_interface_id ;
4508    vinf_batch_number_tbl                 l_vinf_batch_number ;
4509    vinf_object_version_number_tbl        l_vinf_object_version_number ;
4510    vinf_variable_code_tbl                l_vinf_variable_code ;
4511    vinf_variable_name_tbl                l_vinf_variable_name ;
4512    vinf_process_status_tbl               l_vinf_process_status ;
4513    vinf_action_tbl                       l_vinf_action ;
4514    vinf_language_tbl                     l_vinf_language ;
4515    vinf_description_tbl                  l_vinf_description ;
4516    vinf_variable_type_tbl                l_vinf_variable_type ;
4517    vinf_variable_intent_tbl              l_vinf_variable_intent ;
4518    vinf_contract_expert_yn_tbl           l_vinf_contract_expert_yn ;
4519    vinf_xprt_value_set_name_tbl          l_vinf_xprt_value_set_name ;
4520    vinf_disabled_yn_tbl                  l_vinf_disabled_yn ;
4521    vinf_external_yn_tbl                  l_vinf_external_yn ;
4522    vinf_variable_datatype_tbl            l_vinf_variable_datatype ;
4523    vinf_application_id_tbl               l_vinf_application_id ;
4524    vinf_value_set_name_tbl               l_vinf_value_set_name ;
4525    vinf_var_default_value_tbl            l_vinf_var_default_value ;
4526    vinf_system_reference_code_tbl        l_vinf_system_reference_code ;
4527    vinf_system_reference_id1_tbl         l_vinf_system_reference_id1 ;
4528    vinf_system_reference_id2_tbl         l_vinf_system_reference_id2 ;
4529    vinf_date_published_tbl               l_vinf_date_published ;
4530    vinf_attribute_category_tbl           l_vinf_attribute_category ;
4531    vinf_attribute1_tbl                   l_vinf_attribute1 ;
4532    vinf_attribute2_tbl                   l_vinf_attribute2 ;
4533    vinf_attribute3_tbl                   l_vinf_attribute3 ;
4534    vinf_attribute4_tbl                   l_vinf_attribute4 ;
4535    vinf_attribute5_tbl                   l_vinf_attribute5 ;
4536    vinf_attribute6_tbl                   l_vinf_attribute6 ;
4537    vinf_attribute7_tbl                   l_vinf_attribute7 ;
4538    vinf_attribute8_tbl                   l_vinf_attribute8 ;
4539    vinf_attribute9_tbl                   l_vinf_attribute9 ;
4540    vinf_attribute10_tbl                  l_vinf_attribute10 ;
4541    vinf_attribute11_tbl                  l_vinf_attribute11 ;
4542    vinf_attribute12_tbl                  l_vinf_attribute12 ;
4543    vinf_attribute13_tbl                  l_vinf_attribute13 ;
4544    vinf_attribute14_tbl                  l_vinf_attribute14 ;
4545    vinf_attribute15_tbl                  l_vinf_attribute15 ;
4546 
4547 
4548    vinf_existing_code_tbl                l_vinf_existing_code ;
4549    vinf_existing_dpublished_tbl          l_vinf_existing_dpublished ;
4550    vinf_value_set_id_tbl                 l_vinf_value_set_id ;
4551    vinf_existing_language_tbl            l_vinf_existing_language ;
4552 
4553    I NUMBER := 0;
4554    j NUMBER := 0;
4555    k NUMBER := 0;
4556    x NUMBER := 0;
4557    l_program_id                         OKC_VARIABLES_INTERFACE.PROGRAM_ID%TYPE;
4558    l_program_login_id                   OKC_VARIABLES_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
4559    l_program_appl_id                    OKC_VARIABLES_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
4560    l_request_id                         OKC_VARIABLES_INTERFACE.REQUEST_ID%TYPE;
4561    l_dummy_unq VARCHAR2(1) := '?';
4562    l_dummy     VARCHAR2(1) := '?';
4563    l_vs_id     VARCHAR2(1) := NULL;
4564    l_language  varchar2(1) := '?';
4565    l_value_set_id                       FND_FLEX_VALUE_SETS.FLEX_VALUE_SET_ID%TYPE;
4566    l_variable_datatype                 OKC_BUS_VARIABLES_B.VARIABLE_DATATYPE%TYPE;
4567 
4568 BEGIN
4569 IF (l_debug = 'Y') THEN
4570   okc_debug.log('100: Entered variables_import', 2);
4571 END IF;
4572 
4573 ------------------------------------------------------------------------
4574 --  Variable Initialization
4575 -------------------------------------------------------------------------
4576 
4577 -- Standard Start of API savepoint
4578 FND_MSG_PUB.initialize;
4579 --  Initialize API return status to success
4580 x_return_status := FND_API.G_RET_STS_SUCCESS;
4581 l_return_status := G_RET_STS_SUCCESS;
4582 --  Cache user_id, login_id and org_id
4583 l_user_id  := Fnd_Global.user_id;
4584 l_login_id := Fnd_Global.login_id;
4585 
4586 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
4587    l_program_id := NULL;
4588 ELSE
4589    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
4590 END IF;
4591 
4592 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
4593    l_program_login_id := NULL;
4594 ELSE
4595    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
4596 END IF;
4597 
4598 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
4599    l_program_appl_id := NULL;
4600 ELSE
4601    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
4602 END IF;
4603 
4604 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
4605    l_request_id := NULL;
4606 ELSE
4607    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
4608 END IF;
4609 
4610 l_batch_process_id := p_batch_procs_id;
4611 -------------------------------------------------------------------------
4612 --------------- the outermost loop of this procedure --------------------
4613 -- Bulk fetch all interface rows based on the fetchsize passedby the user
4614 -------------------------------------------------------------------------
4615 
4616 l_context :='BULK FETCH VARIABLE INTERFACE ROW';
4617 OPEN l_var_interface_csr ( p_batch_number );
4618 LOOP
4619 BEGIN
4620     FETCH l_var_interface_csr BULK COLLECT INTO
4621           vinf_interface_id_tbl                  ,
4622           vinf_batch_number_tbl                  ,
4623           vinf_object_version_number_tbl         ,
4624           vinf_variable_code_tbl                 ,
4625           vinf_variable_name_tbl                 ,
4626           vinf_process_status_tbl                ,
4627           vinf_action_tbl                        ,
4628           vinf_language_tbl                      ,
4629           vinf_description_tbl                   ,
4630           vinf_variable_type_tbl                 ,
4631           vinf_variable_intent_tbl               ,
4632           vinf_contract_expert_yn_tbl            ,
4633           vinf_xprt_value_set_name_tbl           ,
4634           vinf_disabled_yn_tbl                   ,
4635           vinf_external_yn_tbl                   ,
4636           vinf_variable_datatype_tbl             ,
4637           vinf_application_id_tbl                ,
4638           vinf_value_set_name_tbl                ,
4639           vinf_var_default_value_tbl        ,
4640           vinf_system_reference_code_tbl    ,
4641           vinf_system_reference_id1_tbl     ,
4642           vinf_system_reference_id2_tbl     ,
4643           vinf_date_published_tbl                ,
4644           vinf_attribute_category_tbl            ,
4645           vinf_attribute1_tbl                    ,
4646           vinf_attribute2_tbl                    ,
4647           vinf_attribute3_tbl                    ,
4648           vinf_attribute4_tbl                    ,
4649           vinf_attribute5_tbl                    ,
4650           vinf_attribute6_tbl                    ,
4651           vinf_attribute7_tbl                    ,
4652           vinf_attribute8_tbl                    ,
4653           vinf_attribute9_tbl                    ,
4654           vinf_attribute10_tbl                   ,
4655           vinf_attribute11_tbl                   ,
4656           vinf_attribute12_tbl                   ,
4657           vinf_attribute13_tbl                   ,
4658           vinf_attribute14_tbl                   ,
4659           vinf_attribute15_tbl                   ,
4660           vinf_existing_code_tbl                 ,
4661           vinf_existing_dpublished_tbl           ,
4662           vinf_existing_language_tbl  LIMIT p_fetchsize;
4663     EXIT WHEN vinf_interface_id_tbl.COUNT = 0 ;
4664 
4665     ------------------------------------------------------------------------
4666     -- Variable initialization
4667     -------------------------------------------------------------------------
4668     --For each fetch, variable variable table index should be initialized
4669     j := 1;
4670     --##count:initialization
4671     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
4672     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
4673     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
4674     l_part_rows_processed   := 0;
4675     l_part_rows_failed      := 0;
4676     l_part_rows_warned      := 0;
4677     l_bulk_failed           := 'N';
4678     ---------------------------------------------------------------------------
4679     --------------------- Inner Loop thru fetched rows for---------------------
4680     -- validation, parse and validate article text, create a variable list
4681     -- prepare rows for DML if validate_only is 'N'
4682     /***  Processing Rule to set process_status
4683     Because we want to collect as much info as possible, we need to
4684     maintain process status while keeping the process moving.
4685     So, we'll set l_return_status as validation goes on and
4686     at the end we will set inf_process_status_tbl(i) with l_return_status
4687     for final result.  However, we will get out of this process if there
4688     is a significant error such as 'U'.
4689     The return status examined
4690     -api_return_status : return status for api call
4691     -l_return_status : validation result of each row
4692     -x_return_status : final result status for concurrent program request
4693     Rule to set return status
4694     If api_return_status for api call is
4695     * 'S' then continue
4696     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
4697         and build_error_array then continue
4698     * 'E' and it is significant then set l_return_status = 'E' and raise
4699       Exception
4700     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
4701        'E' at the end of validation
4702     * 'U' then set l_return_status = 'U' and raise 'U' exception
4703     * At the end, if it goes thru with no Exception,
4704     Check if l_return_status is 'E' then raise Exception
4705        Otherwise (meaning l_return_status is 'S' or 'W'),
4706           vinf_process_status_tbl(i) = l_return_status
4707     * In the exception, we will set
4708           vinf_process_status_tbl(i) = l_return_status and build_error_array
4709     ***/
4710     -------------------------------------------------------------------------
4711 
4712     FOR i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
4713       BEGIN
4714       -- Increment total processed rows
4715       --##Count
4716       l_part_rows_processed := l_part_rows_processed+1;
4717       -- Initialization for each iteration
4718       l_row_notfound       := FALSE;
4719       l_return_status      := G_RET_STS_SUCCESS;
4720 
4721       -- following variables are not fetched from interface table
4722       -- thus initialize it here
4723       vinf_value_set_id_tbl(i) := NULL;
4724       vinf_variable_datatype_tbl(i) := NULL;
4725 
4726       l_context := 'VARIABLE VALIDATING';
4727 
4728       -- To find duplicate variable code in the batch
4729       IF i>1 THEN
4730          x := i-1;
4731          IF ((RTRIM(vinf_variable_code_tbl(i)) = RTRIM(vinf_variable_code_tbl(x)))
4732 	    --THEN
4733 	   AND (vinf_language_tbl(i)) = (vinf_language_tbl(x))) THEN
4734             Okc_Api.Set_Message(G_APP_NAME,
4735 		                      'OKC_VAR_DUP_TITLE_ORG',
4736 						  'VAR_CODE',
4737 						  vinf_variable_code_tbl(i),
4738 						  'LANG',
4739 						  vinf_language_tbl(i));
4740             l_return_status := G_RET_STS_ERROR;
4741             RAISE FND_API.G_EXC_ERROR;
4742          END IF;
4743       END IF;
4744       -- Logic to decide what to do in case of Action='S'
4745 	 -- If there is no existing variable in system then it is 'N' otherwise 'U'
4746 
4747 	 IF vinf_action_tbl(i) = 'S' THEN
4748          IF vinf_existing_code_tbl(i) IS NULL THEN
4749 	       vinf_action_tbl(i) := 'N';
4750 	    ELSE
4751 	       vinf_action_tbl(i) := 'U';
4752 	    END IF;
4753 	 END IF;
4754 
4755 
4756       IF vinf_action_tbl(i) = 'N' THEN
4757 
4758           --TRIM trailing space because
4759           vinf_variable_code_tbl(i) := RTRIM(vinf_variable_code_tbl(i));
4760 
4761       ELSIF vinf_action_tbl(i) in ('U','D') THEN
4762 
4763           IF vinf_existing_code_tbl(i) is NULL THEN
4764                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
4765                       p_msg_name     => 'OKC_VAR_CODE_NOT_FOUND',
4766                       p_token1       => 'VARIABLE_CODE',
4767                       p_token1_value => vinf_variable_code_tbl(i));
4768               l_return_status := G_RET_STS_ERROR;
4769              RAISE FND_API.G_EXC_ERROR ;
4770           END IF;
4771 
4772       ELSE
4773 
4774           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
4775                   p_msg_name     => 'OKC_VAR_INV_IMP_ACTION');
4776           l_return_status := G_RET_STS_ERROR;
4777           RAISE FND_API.G_EXC_ERROR ;
4778       END IF;
4779 
4780       -----------------------------------------------------------
4781       -- Common validation or attribute settting
4782       -- regardless of status and import action
4783       -- this validation is not included in validate api
4784       -----------------------------------------------------------
4785       -- Get Value set id and Datatype from Value set name provided by the user
4786          OPEN  get_valset_id_csr(vinf_value_set_name_tbl(i));
4787 	    FETCH get_valset_id_csr into l_value_set_id,l_variable_datatype;
4788 	    CLOSE get_valset_id_csr;
4789 	    IF l_value_set_id is null THEN
4790 	        IF p_validate_only = 'Y' THEN
4791                 OPEN valset_exists_csr (vinf_value_set_name_tbl(i),
4792 		                              vinf_batch_number_tbl(i));
4793 	           FETCH valset_exists_csr into l_vs_id;
4794 	           CLOSE valset_exists_csr;
4795 		      IF l_vs_id is null THEN
4796                 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4797                                     p_msg_name => 'OKC_ART_VAL_SET_NOT_FOUND');
4798                 l_return_status := G_RET_STS_ERROR;
4799 			 ELSE
4800 		      -- Reset Local Variables
4801 			 l_vs_id := NULL;
4802 
4803 		      END IF;
4804              ELSE
4805                 Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4806                                    p_msg_name => 'OKC_ART_VAL_SET_NOT_FOUND');
4807                 l_return_status := G_RET_STS_ERROR;
4808 		   END IF;
4809 
4810          ELSE
4811 	       vinf_value_set_id_tbl(i) := l_value_set_id;
4812 		  vinf_variable_datatype_tbl(i)    := l_variable_datatype;
4813 		  -- Reset Local Variables
4814 		  l_value_set_id := NULL;
4815 		  l_variable_datatype := NULL;
4816          END IF;
4817 
4818 
4819       -- Checking Date Published Validation
4820       IF vinf_existing_dpublished_tbl(i) >= vinf_date_published_tbl(i) THEN
4821             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4822                                 p_msg_name => 'OKC_INVALID_DATE_PUBLISHED');
4823             l_return_status := G_RET_STS_ERROR;
4824       END IF;
4825 
4826       -- Checking Variable Flags
4827       IF nvl(vinf_disabled_yn_tbl(i), '*') not in ('Y','N') THEN
4828             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4829                                 p_msg_name => 'OKC_INVALID_DISABLED_FLAG');
4830             l_return_status := G_RET_STS_ERROR;
4831       END IF;
4832 
4833       IF nvl(vinf_external_yn_tbl(i), '*') not in ('Y','N') THEN
4834             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4835                                 p_msg_name => 'OKC_INVALID_EXTERNAL_FLAG');
4836             l_return_status := G_RET_STS_ERROR;
4837       END IF;
4838 
4839       IF nvl(vinf_contract_expert_yn_tbl(i), '*') not in ('Y','N') THEN
4840             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4841                                 p_msg_name => 'OKC_INVALID_CONTRACT_EXPERT_FLAG');
4842             l_return_status := G_RET_STS_ERROR;
4843       END IF;
4844 
4845       IF nvl(vinf_variable_intent_tbl(i), '*') not in ('B','S') THEN
4846             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4847                                 p_msg_name => 'OKC_INVALID_INTENT_FLAG');
4848             l_return_status := G_RET_STS_ERROR;
4849       END IF;
4850 
4851       IF nvl(vinf_variable_type_tbl(i), '*') <> 'U' THEN
4852             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4853                                 p_msg_name => 'OKC_INVALID_VARIABLE_TYPE');
4854             l_return_status := G_RET_STS_ERROR;
4855       END IF;
4856 
4857       -- Checking Variable Type and Value set id
4858       IF nvl(vinf_variable_type_tbl(i), '*')  = 'U' THEN
4859 	    IF vinf_value_set_name_tbl(i) is null THEN
4860             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4861                                 p_msg_name => 'OKC_VS_NOT_DEFINED');
4862             l_return_status := G_RET_STS_ERROR;
4863          END IF;
4864       END IF;
4865 
4866 
4867       IF nvl(vinf_contract_expert_yn_tbl(i), '*') not in ('Y','N') THEN
4868             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4869                                 p_msg_name => 'OKC_INVALID_CONTRACT_EXPERT_FLAG');
4870             l_return_status := G_RET_STS_ERROR;
4871       END IF;
4872 
4873      -- Validate Contract Expert related data
4874 
4875       IF ((vinf_xprt_value_set_name_tbl(i) is not null OR
4876 	    vinf_contract_expert_yn_tbl(i) = 'Y' ) AND
4877 	    vinf_variable_type_tbl(i) <> 'S')
4878 	    THEN
4879             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4880                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4881             l_return_status := G_RET_STS_ERROR;
4882       END IF;
4883 
4884       IF ((vinf_xprt_value_set_name_tbl(i) is not null OR
4885 	    vinf_contract_expert_yn_tbl(i) = 'Y' ) AND
4886 	    vinf_variable_type_tbl(i) <> 'S')
4887 	    THEN
4888             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4889                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4890             l_return_status := G_RET_STS_ERROR;
4891       END IF;
4892 
4893       IF ((vinf_variable_datatype_tbl(i)  = 'D') AND
4894 	    ((vinf_contract_expert_yn_tbl(i) = 'Y' ) OR
4895 	    (vinf_xprt_value_set_name_tbl(i) <> 'S')))
4896 	    THEN
4897             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4898                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4899             l_return_status := G_RET_STS_ERROR;
4900       END IF;
4901 
4902       IF ((vinf_variable_datatype_tbl(i)  = 'V') AND
4903 	    (vinf_contract_expert_yn_tbl(i) = 'Y' ) AND
4904 	    (vinf_xprt_value_set_name_tbl(i) is null) )
4905 	    THEN
4906             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4907                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4908             l_return_status := G_RET_STS_ERROR;
4909       END IF;
4910 
4911       IF ((vinf_contract_expert_yn_tbl(i) = 'N') AND
4912 	    (vinf_xprt_value_set_name_tbl(i) is not null) )
4913 	    THEN
4914             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4915                                 p_msg_name => 'OKC_ART_VAR_INV_XPRT_DATA');
4916             l_return_status := G_RET_STS_ERROR;
4917       END IF;
4918       -- Check for Valid External Flag
4919       IF ((vinf_variable_intent_tbl(i)  = 'S') AND
4920 	    (vinf_external_yn_tbl(i)  = 'Y') )
4921 	    THEN
4922             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4923                                 p_msg_name => 'OKC_ART_VAR_INVALID_EXTERNALYN',
4924 						  p_token1   => 'VAR_NAME',
4925 						  p_token1_value => vinf_variable_name_tbl(i));
4926             l_return_status := G_RET_STS_ERROR;
4927       END IF;
4928 
4929       -- Validate "Language" is installed or not
4930          OPEN  check_lang_csr(vinf_language_tbl(i));
4931 	    FETCH check_lang_csr into l_language;
4932 	    CLOSE check_lang_csr;
4933 	    --IF check_lang_csr%NOTFOUND  THEN
4934 	    IF l_language <> '1'  THEN
4935             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4936                                 p_msg_name => 'OKC_LANG_NOT_INSTALLED',
4937                                 p_token1       => 'LANGUAGE',
4938                                 p_token1_value => vinf_language_tbl(i));
4939             l_return_status := G_RET_STS_ERROR;
4940 		  ELSE
4941             l_language := '?';
4942          END IF;
4943 
4944 
4945       -- Validate attrs of the interface row
4946       IF vinf_action_tbl(i) = 'N' THEN
4947       -- Checking uniqueness of variable name and intent
4948          OPEN  get_var_unq_csr(vinf_variable_name_tbl(i),
4949 	                           vinf_variable_intent_tbl(i));
4950 	    FETCH get_var_unq_csr into l_dummy_unq;
4951 	    CLOSE get_var_unq_csr;
4952 	    IF l_dummy_unq = '1' THEN
4953             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4954                                 p_msg_name => 'OKC_ART_VAR_NAME_NOT_UNIQUE');
4955             l_return_status := G_RET_STS_ERROR;
4956          END IF;
4957 
4958       -- Checking variable code is unique in the system
4959          OPEN  get_var_info_csr(vinf_variable_code_tbl(i));
4960 	    FETCH get_var_info_csr into l_dummy;
4961 	    CLOSE get_var_info_csr;
4962 	    IF l_dummy = '1' THEN
4963             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
4964                                 p_msg_name => 'OKC_ART_VAR_CODE_NOT_UNIQUE');
4965             l_return_status := G_RET_STS_ERROR;
4966          END IF;
4967 
4968       ELSIF vinf_action_tbl(i) = 'U' THEN
4969 	     NULL;
4970       END IF;
4971 
4972       ------------------------------------------------------------------------
4973       -- Now that we have validated and data is clean we can fetch sequences and ids
4974       -- for new variables for DML and also set the process status to Success
4975       -------------------------------------------------------------------------
4976 
4977       -- Summarize report for this row
4978       -- Status 'F' is for internal use meaning parsing failure marked in
4979       -- java concurrent program
4980       IF (l_return_status = G_RET_STS_SUCCESS) THEN
4981          IF (nvl(vinf_process_status_tbl(i), 'E') = 'E') THEN
4982            vinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
4983          ELSIF ( vinf_process_status_tbl(i) = 'F') THEN
4984            -- ##count parser failure as error
4985            --l_tot_rows_failed := l_tot_rows_failed+1;
4986            l_part_rows_failed := l_part_rows_failed+1;
4987            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
4988          END IF;
4989       ELSIF (l_return_status = l_sts_warning) THEN
4990          IF (nvl(vinf_process_status_tbl(i),'E') = 'E') THEN
4991            vinf_process_status_tbl(i) := l_sts_warning;
4992            --##count
4993            --l_tot_rows_warned := l_tot_rows_warned+1;
4994            l_part_rows_warned := l_part_rows_warned+1;
4995          ELSIF (vinf_process_status_tbl(i) = 'F') THEN
4996            -- ##count parser failure as error
4997            --l_tot_rows_failed := l_tot_rows_failed+1;
4998            l_part_rows_failed := l_part_rows_failed+1;
4999            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5000          END IF;
5001       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
5002            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5003       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
5004            RAISE FND_API.G_EXC_ERROR;
5005       END IF;
5006 
5007     -------------------------
5008     -------------------------
5009     -- Exception Block for each iteration in Loop
5010     -- validation and unexpected errors
5011     -- In case of unexpected error, escape the loop
5012     -------------------------
5013     -------------------------
5014 
5015 
5016       EXCEPTION
5017           WHEN FND_API.G_EXC_ERROR THEN
5018               IF (l_debug = 'Y') THEN
5019                  okc_debug.log('300: In Variables_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
5020               END IF;
5021               --l_return_status := G_RET_STS_ERROR ;
5022               build_error_array(
5023                  p_msg_data     => x_msg_data,
5024                  p_context      => l_context,
5025                  p_batch_process_id => l_batch_process_id,
5026                  p_interface_id  => vinf_interface_id_tbl(i),
5027                  p_article_title => vinf_variable_code_tbl(i),
5028                  p_error_type    => G_RET_STS_ERROR,
5029 			  p_entity        => 'VARIABLE'
5030                 );
5031                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5032                --##count
5033                --l_tot_rows_failed := l_tot_rows_failed+1;
5034                l_part_rows_failed := l_part_rows_failed+1;
5035                -- Continue to next row
5036 
5037           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5038               IF (l_debug = 'Y') THEN
5039                  okc_debug.log('400: Leaving Variables_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
5040               END IF;
5041 
5042               IF l_var_interface_csr%ISOPEN THEN
5043                  CLOSE l_var_interface_csr;
5044               END IF;
5045 
5046               --Set_Message
5047               l_return_status := G_RET_STS_UNEXP_ERROR ;
5048               x_return_status := G_RET_STS_UNEXP_ERROR ;
5049 
5050               build_error_array(
5051                  p_msg_data     => x_msg_data,
5052                  p_context      => l_context,
5053                  p_batch_process_id => l_batch_process_id,
5054                  p_interface_id  => vinf_interface_id_tbl(i),
5055                  p_article_title => vinf_variable_code_tbl(i),
5056                  p_error_type    => G_RET_STS_UNEXP_ERROR,
5057 			  p_entity        => 'VARIABLE'
5058                  );
5059                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5060                --##count
5061                --l_tot_rows_failed := l_tot_rows_failed+1;
5062                l_part_rows_failed := l_part_rows_failed+1;
5063               exit; -- exit the current fetch
5064 
5065           WHEN OTHERS THEN
5066               IF (l_debug = 'Y') THEN
5067                 okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5068               END IF;
5069 
5070               IF l_var_interface_csr%ISOPEN THEN
5071                  CLOSE l_var_interface_csr;
5072               END IF;
5073 
5074               l_return_status := G_RET_STS_UNEXP_ERROR ;
5075               x_return_status := G_RET_STS_UNEXP_ERROR ;
5076 
5077               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
5078                                 p_msg_name     => G_UNEXPECTED_ERROR,
5079                                 p_token1       => G_SQLCODE_TOKEN,
5080                                 p_token1_value => sqlcode,
5081                                 p_token2       => G_SQLERRM_TOKEN,
5082                                 p_token2_value => sqlerrm);
5083 
5084               build_error_array(
5085                  p_msg_data     => G_UNEXPECTED_ERROR,
5086                  p_context      => l_context,
5087                  p_batch_process_id => l_batch_process_id,
5088                  p_interface_id  => vinf_interface_id_tbl(i),
5089                  p_article_title => vinf_variable_code_tbl(i),
5090                  p_error_type    => G_RET_STS_ERROR,
5091 			  p_entity        => 'VARIABLE'
5092                 );
5093                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
5094                --##count
5095                --l_tot_rows_failed := l_tot_rows_failed+1;
5096                l_part_rows_failed := l_part_rows_failed+1;
5097               exit;  -- exit the current fetch
5098           END;
5099     -------------------------
5100     -------------------------
5101     -- Exception Block for each iteration in Loop ends
5102     -------------------------
5103     -------------------------
5104 
5105 
5106      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
5107     ------------------------------------------------------------------------
5108     -------------- End of Inner Loop thru fetched row for---------------------
5109     -- validation,
5110     -------------------------------------------------------------------------
5111     -- In order to propagate Unexpected error raise it if it is 'U'
5112     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
5113          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5114     END IF;
5115 
5116     -------------------------
5117     -------------------------
5118     -- Exception Block for Inner Loop starts
5119     -- Handles unexpected errors as last step
5120     -------------------------
5121     -------------------------
5122     EXCEPTION
5123          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5124              IF (l_debug = 'Y') THEN
5125                 okc_debug.log('400: Leaving Variables_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
5126              END IF;
5127 
5128              IF l_var_interface_csr%ISOPEN THEN
5129                 CLOSE l_var_interface_csr;
5130              END IF;
5131              l_return_status := G_RET_STS_UNEXP_ERROR ;
5132              x_return_status := G_RET_STS_UNEXP_ERROR ;
5133              exit; -- exit outermost loop
5134 
5135         WHEN OTHERS THEN
5136              IF (l_debug = 'Y') THEN
5137                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5138              END IF;
5139 
5140              IF l_var_interface_csr%ISOPEN THEN
5141                 CLOSE l_var_interface_csr;
5142              END IF;
5143              l_return_status := G_RET_STS_UNEXP_ERROR ;
5144              x_return_status := G_RET_STS_UNEXP_ERROR ;
5145              exit; -- exit outermost loop
5146      END;
5147 
5148     -------------------------
5149     -------------------------
5150     -- Exception Block for Each Iteration of outermost Loop ends
5151     -------------------------
5152     -------------------------
5153 
5154     ------------------------------------------------------------------------
5155     --------------------- Start Do_DML for Variables   ---------------
5156     -- Insert or Update Variable
5157     -------------------------------------------------------------------------
5158     -- initialize l_return_status to track status of DML execution
5159      l_return_status := G_RET_STS_SUCCESS;
5160 
5161 
5162     IF p_validate_only = 'N' THEN
5163          BEGIN
5164          SAVEPOINT bulkdml;
5165 
5166          i := 0;
5167         -- Bulk insert New Valid Records
5168          BEGIN
5169          l_context := 'INSERTING NEW VARIABLE INTO B TABLE';
5170 
5171            FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5172             INSERT INTO OKC_BUS_VARIABLES_B(
5173              VARIABLE_CODE,
5174              OBJECT_VERSION_NUMBER,
5175              VARIABLE_TYPE,
5176              EXTERNAL_YN,
5177              VARIABLE_INTENT,
5178              CONTRACT_EXPERT_YN,
5179 	        DISABLED_YN,
5180 	        VARIABLE_DATATYPE,
5181 	        APPLICATION_ID,
5182 	        VALUE_SET_ID,
5183 	        VARIABLE_DEFAULT_VALUE,
5184 	    	   XPRT_VALUE_SET_NAME,
5185 	        DATE_PUBLISHED,
5186              ORIG_SYSTEM_REFERENCE_CODE,
5187              ORIG_SYSTEM_REFERENCE_ID1,
5188              ORIG_SYSTEM_REFERENCE_ID2,
5189     --         PROGRAM_ID,
5190     --         PROGRAM_LOGIN_ID,
5191     --         PROGRAM_APPLICATION_ID,
5192     --         REQUEST_ID,
5193              ATTRIBUTE_CATEGORY,
5194              ATTRIBUTE1,
5195              ATTRIBUTE2,
5196              ATTRIBUTE3,
5197              ATTRIBUTE4,
5198              ATTRIBUTE5,
5199              ATTRIBUTE6,
5200              ATTRIBUTE7,
5201              ATTRIBUTE8,
5202              ATTRIBUTE9,
5203              ATTRIBUTE10,
5204              ATTRIBUTE11,
5205              ATTRIBUTE12,
5206              ATTRIBUTE13,
5207              ATTRIBUTE14,
5208              ATTRIBUTE15,
5209              CREATED_BY,
5210              CREATION_DATE,
5211              LAST_UPDATED_BY,
5212              LAST_UPDATE_LOGIN,
5213              LAST_UPDATE_DATE)
5214            SELECT
5215              vinf_variable_code_tbl(i),
5216 		   1.0,
5217              vinf_variable_type_tbl(i),
5218              vinf_external_yn_tbl(i),
5219              vinf_variable_intent_tbl(i),
5220              vinf_contract_expert_yn_tbl(i),
5221              vinf_disabled_yn_tbl(i),
5222              vinf_variable_datatype_tbl(i),
5223              vinf_application_id_tbl(i),
5224              vinf_value_set_id_tbl(i),
5225              vinf_var_default_value_tbl(i),
5226              vinf_xprt_value_set_name_tbl(i),
5227              vinf_date_published_tbl(i),
5228              vinf_system_reference_code_tbl(i),
5229              vinf_system_reference_id1_tbl(i),
5230              vinf_system_reference_id2_tbl(i),
5231      --        l_program_id,
5232      --        l_program_login_id,
5233      --        l_program_appl_id,
5234      --        l_request_id,
5235              vinf_attribute_category_tbl(i),
5236              vinf_attribute1_tbl(i),
5237              vinf_attribute2_tbl(i),
5238              vinf_attribute3_tbl(i),
5239              vinf_attribute4_tbl(i),
5240              vinf_attribute5_tbl(i),
5241              vinf_attribute6_tbl(i),
5242              vinf_attribute7_tbl(i),
5243              vinf_attribute8_tbl(i),
5244              vinf_attribute9_tbl(i),
5245              vinf_attribute10_tbl(i),
5246              vinf_attribute11_tbl(i),
5247              vinf_attribute12_tbl(i),
5248              vinf_attribute13_tbl(i),
5249              vinf_attribute14_tbl(i),
5250              vinf_attribute15_tbl(i),
5251              l_user_id,
5252              sysdate,
5253              l_user_id,
5254              l_login_id,
5255              sysdate
5256            FROM DUAL
5257            WHERE vinf_action_tbl(i)  = 'N' and
5258                  vinf_process_status_tbl(i)  in ('S', 'W') and
5259 			  vinf_language_tbl(i) = USERENV('LANG');
5260 
5261         -- Using a " select from dual" aproach as above prevents creation of
5262         -- additional PL/SQL tables for bulk insert of
5263         -- variables if we were to use a FORALL INSERT INTO .... VALUES .... approach.
5264         -- We cannot use FORALL INSERT INTO .... VALUES ....using
5265         -- the existing inf*tbl since the error rows need to be
5266         -- filtered out.
5267 
5268         EXCEPTION
5269            WHEN OTHERS THEN
5270              IF (l_debug = 'Y') THEN
5271                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5272              END IF;
5273              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5274           END;
5275 
5276          --
5277          --  End of Insert into OKC_BUS_VARIABLES_B
5278          --
5279          --
5280 
5281          i := 0;
5282          BEGIN
5283          l_context := 'INSERTING VARIABLE INTO TL TABLE';
5284 
5285          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5286            INSERT INTO OKC_BUS_VARIABLES_TL(
5287               VARIABLE_CODE,
5288               VARIABLE_NAME,
5289               LANGUAGE,
5290               SOURCE_LANG,
5291               DESCRIPTION,
5292               CREATED_BY,
5293               CREATION_DATE,
5294               LAST_UPDATED_BY,
5295               LAST_UPDATE_LOGIN,
5296               LAST_UPDATE_DATE)
5297            SELECT
5298               vinf_variable_code_tbl(i),
5299               vinf_variable_name_tbl(i),
5300               vinf_language_tbl(i),
5301               userenv('LANG'),
5302               vinf_description_tbl(i),
5303               l_user_id,
5304               sysdate,
5305               l_user_id,
5306               l_login_id,
5307               sysdate
5308            FROM OKC_BUS_VARIABLES_B
5309            WHERE vinf_action_tbl(i)  IN ('N')
5310              AND vinf_process_status_tbl(i) in ('S', 'W')
5311              AND variable_code  = vinf_variable_code_tbl(i);
5312 
5313         EXCEPTION
5314            WHEN OTHERS THEN
5315              IF (l_debug = 'Y') THEN
5316                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5317              END IF;
5318              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5319           END;
5320 
5321           --
5322           -- End of Insert into OKC_BUS_VARIABLES_TL
5323           --
5324           --
5325 
5326          i := 0;
5327          BEGIN
5328            l_context := 'UPDATING DATE_PUBLISHED FOR ACTION U';
5329 
5330          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5331            UPDATE OKC_BUS_VARIABLES_B
5332            SET DATE_PUBLISHED             = vinf_date_published_tbl(i),
5333                LAST_UPDATED_BY            = l_user_id,
5334                LAST_UPDATE_LOGIN          = l_login_id,
5335                LAST_UPDATE_DATE           = SYSDATE
5336            WHERE vinf_action_tbl(i)  =  ('U')
5337              AND vinf_process_status_tbl(i) in ('S','W')
5338              AND variable_code = vinf_variable_code_tbl(i)
5339 		   AND vinf_existing_language_tbl(i) IS NOT NULL;
5340         EXCEPTION
5341            WHEN OTHERS THEN
5342              IF (l_debug = 'Y') THEN
5343                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5344              END IF;
5345              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5346           END;
5347 
5348           --
5349           -- End of Update OKC_BUS_VARIABLES_B
5350           --
5351           --
5352          i := 0;
5353          BEGIN
5354            l_context := 'UPDATING DESCRIPTION FOR ACTION U';
5355 
5356          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5357            UPDATE OKC_BUS_VARIABLES_TL
5358            SET DESCRIPTION                = vinf_description_tbl(i),
5359                --PROGRAM_ID                 = l_program_id,
5360                --REQUEST_ID                 = l_request_id,
5361                --PROGRAM_LOGIN_ID           = l_program_login_id,
5362                --PROGRAM_APPLICATION_ID     = l_program_appl_id,
5363                LAST_UPDATED_BY            = l_user_id,
5364                LAST_UPDATE_LOGIN          = l_login_id,
5365                LAST_UPDATE_DATE           = SYSDATE
5366            WHERE vinf_action_tbl(i)  =  ('U')
5367              AND vinf_process_status_tbl(i) in ('S','W')
5368              AND variable_code = vinf_variable_code_tbl(i)
5369 		   AND vinf_existing_language_tbl(i) IS NOT NULL;
5370         EXCEPTION
5371            WHEN OTHERS THEN
5372              IF (l_debug = 'Y') THEN
5373                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5374              END IF;
5375              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5376           END;
5377 
5378           --
5379           -- End of Update OKC_BUS_VARIABLES_TL
5380           --
5381           --
5382 
5383          i := 0;
5384          BEGIN
5385          l_context := 'INSERTING VARIABLE INTO TL TABLE FOR ACTION U';
5386 
5387          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5388            INSERT INTO OKC_BUS_VARIABLES_TL(
5389               VARIABLE_CODE,
5390               VARIABLE_NAME,
5391               LANGUAGE,
5392               SOURCE_LANG,
5393               DESCRIPTION,
5394               CREATED_BY,
5395               CREATION_DATE,
5396               LAST_UPDATED_BY,
5397               LAST_UPDATE_LOGIN,
5398               LAST_UPDATE_DATE)
5399            SELECT
5400               vinf_variable_code_tbl(i),
5401               vinf_variable_name_tbl(i),
5402               vinf_language_tbl(i),
5403               userenv('LANG'),
5404               vinf_description_tbl(i),
5405               l_user_id,
5406               sysdate,
5407               l_user_id,
5408               l_login_id,
5409               sysdate
5410            FROM OKC_BUS_VARIABLES_B
5411            WHERE vinf_action_tbl(i) = ('U')
5412              AND vinf_process_status_tbl(i) in ('S', 'W')
5413              AND variable_code  = vinf_variable_code_tbl(i)
5414 		   AND vinf_existing_language_tbl(i) IS NULL;
5415 
5416         EXCEPTION
5417            WHEN OTHERS THEN
5418              IF (l_debug = 'Y') THEN
5419                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5420              END IF;
5421              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5422           END;
5423 
5424           --
5425           -- End of Insert into OKC_BUS_VARIABLES_TL for Action U
5426           --
5427           --
5428 
5429          i := 0;
5430          BEGIN
5431            l_context := 'DISABLING VARIABLE FOR ACTION D';
5432 
5433          FORALL  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST
5434            UPDATE OKC_BUS_VARIABLES_B
5435            SET DISABLED_YN                  = vinf_disabled_yn_tbl(i),
5436                --PROGRAM_ID                 = l_program_id,
5437                --REQUEST_ID                 = l_request_id,
5438                --PROGRAM_LOGIN_ID           = l_program_login_id,
5439                --PROGRAM_APPLICATION_ID     = l_program_appl_id,
5440                LAST_UPDATED_BY            = l_user_id,
5441                LAST_UPDATE_LOGIN          = l_login_id,
5442                LAST_UPDATE_DATE           = SYSDATE
5443            WHERE vinf_action_tbl(i)  =  ('D')
5444              AND vinf_process_status_tbl(i) in ('S','W')
5445              AND variable_code = vinf_variable_code_tbl(i);
5446         EXCEPTION
5447            WHEN OTHERS THEN
5448              IF (l_debug = 'Y') THEN
5449                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
5450              END IF;
5451              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
5452           END;
5453 
5454           --
5455           -- End of Update OKC_BUS_VARIABLES_TL for Disable
5456           --
5457           --
5458 
5459 
5460       -- Exception for bulk DML block
5461       EXCEPTION
5462         WHEN OTHERS THEN
5463              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
5464               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
5465                                   p_msg_name     => G_UNEXPECTED_ERROR,
5466                                   p_token1       => G_SQLCODE_TOKEN,
5467                                   p_token1_value => sqlcode,
5468                                   p_token2       => G_SQLERRM_TOKEN,
5469                                   p_token2_value => sqlerrm);
5470               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
5471                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
5472                                   p_token1       => 'CONTEXT',
5473                                   p_token1_value => l_context);
5474 
5475               build_error_array(
5476                                  p_msg_data     => null,
5477                                  p_context      => l_context,
5478                                  p_batch_process_id => l_batch_process_id,
5479                                  p_interface_id  => -99,
5480                                  p_article_title => NULL,
5481                                  p_error_type    => G_RET_STS_ERROR,
5482 						   p_entity        => 'VARIABLE'
5483               );
5484               l_return_status := G_RET_STS_UNEXP_ERROR;
5485               x_return_status := G_RET_STS_UNEXP_ERROR;
5486 
5487               --##count:rollback the count
5488               l_part_rows_failed := l_part_rows_processed;
5489               l_part_rows_warned := 0;
5490 
5491               ROLLBACK TO SAVEPOINT bulkdml;
5492               exit; -- exit outermost loop
5493       END;
5494 
5495     END IF; --- validate_only = 'N'
5496 
5497     ------------------------------------------------------------------------
5498     --------------------- End of Do_DML for Variables   ---------------
5499     -------------------------------------------------------------------------
5500 
5501     ------------------------------------------------------------------------
5502     --------------- Start of Do_DML for import related tables   ------------
5503     -- Update interface table
5504     -- Insert Errors into Error table
5505     -------------------------------------------------------------------------
5506     -- Update Interface Table
5507     i:=0;
5508     BEGIN
5509      l_context := 'UPDATING VARIABLES INTERFACE TABLE';
5510      FORALL i in vinf_interface_id_tbl.FIRST..vinf_interface_id_tbl.LAST
5511        UPDATE OKC_VARIABLES_INTERFACE
5512        SET
5513            -- We don't want to update process_status to 'S' or 'W' in validation_mode
5514            -- because it is not going to be picked up in next run if we do so
5515            PROCESS_STATUS = decode(p_validate_only||vinf_process_status_tbl(i)||l_bulk_failed,
5516                                                'NEN','E',
5517                                                'NSN','S',
5518                                                'NWN','W',
5519                                                'NEY','E',
5520                                                'NSY',NULL,
5521                                                'NWY',NULL,
5522                                                'YEY','E',
5523                                                'YEN','E',
5524                                                'NFY','E',
5525                                                'YFY','E',
5526                                                'NFN','E',
5527                                                'YFN','E',NULL),
5528            PROGRAM_ID                 = l_program_id,
5529            REQUEST_ID                 = l_request_id,
5530            PROGRAM_LOGIN_ID           = l_program_login_id,
5531            PROGRAM_APPLICATION_ID     = l_program_appl_id,
5532            OBJECT_VERSION_NUMBER      = vinf_object_version_number_tbl(i) + 1,
5533            LAST_UPDATED_BY            = l_user_id,
5534            LAST_UPDATE_LOGIN          = l_login_id,
5535            LAST_UPDATE_DATE           = SYSDATE
5536          WHERE
5537            interface_id = vinf_interface_id_tbl(i);
5538     EXCEPTION
5539            WHEN OTHERS THEN
5540              IF (l_debug = 'Y') THEN
5541                okc_debug.log('500: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5542              END IF;
5543              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
5544                         p_msg_name     => G_UNEXPECTED_ERROR,
5545                         p_token1       => G_SQLCODE_TOKEN,
5546                         p_token1_value => sqlcode,
5547                         p_token2       => G_SQLERRM_TOKEN,
5548                         p_token2_value => sqlerrm);
5549              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
5550                         p_msg_name     => 'OKC_VAR_INT_UPDATE_FAILED');
5551              build_error_array(
5552                        p_msg_data     => null,
5553                        p_context      => l_context,
5554                        p_batch_process_id => l_batch_process_id,
5555                        p_interface_id  => -99,
5556                        p_article_title => NULL,
5557                        p_error_type    => G_RET_STS_ERROR,
5558 				   p_entity        => 'VARIABLE'
5559              );
5560 
5561 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
5562 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
5563 		       --##count:rollback the count
5564 		      l_part_rows_failed := l_part_rows_processed;
5565 		      l_part_rows_warned := 0;
5566 
5567              --RAISE FND_API.G_EXC_ERROR ;
5568   END;
5569    --
5570    -- End of Update OKC_VARIABLES_INTERFACE
5571    --
5572    --
5573 
5574     --
5575     --Insert Errors into Error table for this fetch
5576     --
5577 
5578     insert_error_array(
5579      x_return_status => x_return_status,
5580      x_msg_count     => x_msg_count,
5581      x_msg_data      => x_msg_data
5582     );
5583 
5584 
5585     IF (x_return_status = l_insert_errors_error) THEN
5586       NULL;
5587      -- Ignore
5588      -- RAISE l_insert_errors_exception;
5589     END IF;
5590 
5591     ------------------------------------------------------------------------
5592     --------------- End of Do_DML for import related tables   ------------
5593     -------------------------------------------------------------------------
5594     commit;
5595 
5596     -- Now delete cache for next bulk fetch
5597 
5598     vinf_interface_id_tbl.DELETE;
5599     vinf_batch_number_tbl.DELETE;
5600     vinf_object_version_number_tbl.DELETE;
5601     vinf_variable_code_tbl.DELETE;
5602     vinf_variable_name_tbl.DELETE;
5603     vinf_process_status_tbl.DELETE;
5604     vinf_action_tbl.DELETE;
5605     vinf_language_tbl.DELETE;
5606     vinf_description_tbl.DELETE;
5607     vinf_variable_type_tbl.DELETE;
5608     vinf_variable_intent_tbl.DELETE;
5609     vinf_contract_expert_yn_tbl.DELETE;
5610     vinf_xprt_value_set_name_tbl.DELETE;
5611     vinf_disabled_yn_tbl.DELETE;
5612     vinf_external_yn_tbl.DELETE;
5613     vinf_variable_datatype_tbl.DELETE;
5614     vinf_application_id_tbl.DELETE;
5615     vinf_value_set_name_tbl.DELETE;
5616     vinf_var_default_value_tbl.DELETE;
5617     vinf_system_reference_code_tbl.DELETE;
5618     vinf_system_reference_id1_tbl.DELETE;
5619     vinf_system_reference_id2_tbl.DELETE;
5620     vinf_date_published_tbl.DELETE;
5621     vinf_attribute_category_tbl.DELETE;
5622     vinf_attribute1_tbl.DELETE;
5623     vinf_attribute2_tbl.DELETE;
5624     vinf_attribute3_tbl.DELETE;
5625     vinf_attribute4_tbl.DELETE;
5626     vinf_attribute5_tbl.DELETE;
5627     vinf_attribute6_tbl.DELETE;
5628     vinf_attribute7_tbl.DELETE;
5629     vinf_attribute8_tbl.DELETE;
5630     vinf_attribute9_tbl.DELETE;
5631     vinf_attribute10_tbl.DELETE;
5632     vinf_attribute11_tbl.DELETE;
5633     vinf_attribute12_tbl.DELETE;
5634     vinf_attribute13_tbl.DELETE;
5635     vinf_attribute14_tbl.DELETE;
5636     vinf_attribute15_tbl.DELETE;
5637 
5638     vinf_value_set_id_tbl.DELETE;
5639     vinf_existing_code_tbl.DELETE;
5640     vinf_existing_dpublished_tbl.DELETE;
5641     vinf_existing_language_tbl.DELETE;
5642 
5643     err_batch_process_id_tbl.DELETE;
5644     err_article_title_tbl.DELETE;
5645     err_interface_id_tbl.DELETE;
5646     err_error_number_tbl.DELETE;
5647     err_object_version_number_tbl.DELETE;
5648     err_error_type_tbl.DELETE;
5649     err_entity_tbl.DELETE;
5650     err_error_description_tbl.DELETE;
5651 
5652    EXIT WHEN l_var_interface_csr%NOTFOUND;
5653 END LOOP;
5654 
5655 
5656 -----------------------------------------------------------------------
5657 -- End of outermost loop for bulk fetch
5658 -----------------------------------------------------------------------
5659 
5660 IF l_var_interface_csr%ISOPEN THEN
5661 CLOSE l_var_interface_csr;
5662 END IF;
5663 
5664  -- Insert records into OKC_BUS_VARIABLES_TL for missing languages
5665    IF p_validate_only = 'N' THEN
5666      BEGIN
5667      SAVEPOINT bulklanginsert;
5668      IF (l_debug = 'Y') THEN
5669        okc_debug.log('1000: Entering Insert Missing Lang Records', 2);
5670      END IF;
5671 
5672       INSERT INTO OKC_BUS_VARIABLES_TL (
5673         VARIABLE_CODE,
5674         VARIABLE_NAME,
5675         DESCRIPTION,
5676         CREATED_BY,
5677         CREATION_DATE,
5678         LAST_UPDATE_DATE,
5679         LAST_UPDATED_BY,
5680         LAST_UPDATE_LOGIN,
5681         LANGUAGE,
5682         SOURCE_LANG
5683       )
5684  	SELECT
5685         VART.VARIABLE_CODE,
5686         VART.VARIABLE_NAME,
5687         VART.DESCRIPTION,
5688         l_user_id,
5689         sysdate,
5690         sysdate,
5691         l_user_id,
5692         l_login_id,
5693         LANG.LANGUAGE_CODE,
5694         VART.SOURCE_LANG
5695       FROM OKC_BUS_VARIABLES_TL VART,
5696  		 FND_LANGUAGES LANG,
5697  		 OKC_VARIABLES_INTERFACE VARI
5698       WHERE LANG.INSTALLED_FLAG IN ('I', 'B')
5699       AND VART.VARIABLE_CODE = RTRIM(VARI.VARIABLE_CODE)
5700       AND NVL(VARI.PROCESS_STATUS,'*') = 'S'
5701       AND VARI.BATCH_NUMBER = p_batch_number
5702       AND VARI.ACTION  <> 'D'
5703       AND NOT EXISTS
5704        (SELECT NULL
5705         FROM OKC_BUS_VARIABLES_TL VART1
5706         WHERE VART1.VARIABLE_CODE = VART.VARIABLE_CODE
5707         AND VART1.LANGUAGE = LANG.LANGUAGE_CODE)
5708         AND VART.ROWID = (SELECT MIN(VART2.ROWID)
5709     	                 FROM OKC_BUS_VARIABLES_TL VART2
5710                         WHERE VART2.VARIABLE_CODE = VART.VARIABLE_CODE)
5711       AND VARI.ROWID = (SELECT MIN(VARI1.ROWID)
5712                   FROM OKC_VARIABLES_INTERFACE VARI1
5713                   WHERE RTRIM(VARI1.VARIABLE_CODE) = RTRIM(VARI.VARIABLE_CODE)
5714  				   AND VARI1.ACTION <> 'D'
5715  				   AND VARI1.BATCH_NUMBER = VARI.BATCH_NUMBER
5716  				   AND NVL(VARI1.PROCESS_STATUS,'*') = 'S');
5717       COMMIT;
5718 
5719      IF (l_debug = 'Y') THEN
5720        okc_debug.log('1100: Leaving Insert Missing Lang Records', 2);
5721      END IF;
5722 
5723      EXCEPTION
5724        WHEN OTHERS THEN
5725          IF (l_debug = 'Y') THEN
5726            okc_debug.log('1200: Leaving Missing langauge Insert because of EXCEPTION: '||l_context||sqlerrm, 2);
5727          END IF;
5728          ROLLBACK TO SAVEPOINT bulklanginsert;
5729      END;
5730 
5731    END IF;  --p_validate_only = 'N' THEN
5732 
5733 --##count:add up last processed counts
5734 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
5735 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
5736 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
5737 
5738 --Update Batch Process Table as a last step
5739 UPDATE OKC_ART_INT_BATPROCS_ALL
5740 SET
5741   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
5742   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
5743   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
5744   END_DATE                   = SYSDATE,
5745   PROGRAM_ID                 = l_program_id,
5746   REQUEST_ID                 = l_request_id,
5747   PROGRAM_LOGIN_ID           = l_program_login_id,
5748   PROGRAM_APPLICATION_ID     = l_program_appl_id,
5749   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
5750   LAST_UPDATED_BY            = l_user_id,
5751   LAST_UPDATE_LOGIN          = l_login_id,
5752   LAST_UPDATE_DATE           = SYSDATE
5753 WHERE
5754   BATCH_PROCESS_ID  = l_batch_process_id
5755   AND ENTITY = 'Variable';
5756 
5757 IF err_error_number_tbl.COUNT > 0 THEN
5758  insert_error_array(
5759    x_return_status => x_return_status,
5760    x_msg_count     => x_msg_count,
5761    x_msg_data      => x_msg_data
5762  );
5763 END IF;
5764 
5765 -- Print statistic of this run in the log
5766 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
5767 --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');
5768 commit; -- Final commit for status update
5769 
5770 IF (l_debug = 'Y') THEN
5771  okc_debug.log('2000: Leaving variables import', 2);
5772 END IF;
5773 --x_return_status := l_return_status; this may cause to erase error x_return_status
5774 
5775 EXCEPTION
5776 
5777   WHEN FND_API.G_EXC_ERROR THEN
5778       IF (l_debug = 'Y') THEN
5779          okc_debug.log('3000: Leaving Variables_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
5780       END IF;
5781       --Insert Errors into Error table if there is any
5782       insert_error_array(
5783        x_return_status => x_return_status,
5784        x_msg_count     => x_msg_count,
5785        x_msg_data      => x_msg_data
5786       );
5787       x_return_status := G_RET_STS_ERROR ;
5788 
5789       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5790       IF (l_debug = 'Y') THEN
5791          okc_debug.log('4000: Leaving Variables_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
5792       END IF;
5793       --Insert Errors into Error table if there is any
5794 
5795       insert_error_array(
5796        x_return_status => x_return_status,
5797        x_msg_count     => x_msg_count,
5798        x_msg_data      => x_msg_data
5799       );
5800       commit;
5801 
5802       IF l_var_interface_csr%ISOPEN THEN
5803          CLOSE l_var_interface_csr;
5804       END IF;
5805 
5806       x_return_status := G_RET_STS_UNEXP_ERROR ;
5807       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
5808         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
5809       END IF;
5810       get_print_msgs_stack(p_msg_data => x_msg_data);
5811 
5812   WHEN l_insert_errors_exception THEN
5813       --
5814       -- In this exception handling, we don't insert error array again
5815       -- because error happend in the module
5816       --
5817       IF (l_debug = 'Y') THEN
5818         okc_debug.log('5000: Leaving Variables_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
5819       END IF;
5820 
5821       IF l_var_interface_csr%ISOPEN THEN
5822          CLOSE l_var_interface_csr;
5823       END IF;
5824 
5825 
5826       --x_return_status := G_RET_STS_UNEXP_ERROR ;
5827       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
5828         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
5829       END IF;
5830       get_print_msgs_stack(p_msg_data => x_msg_data);
5831       commit;
5832 
5833   WHEN OTHERS THEN
5834       IF (l_debug = 'Y') THEN
5835         okc_debug.log('5000: Leaving Variables_Import because of EXCEPTION: '||sqlerrm, 2);
5836       END IF;
5837       --Insert Errors into Error table if there is any
5838       insert_error_array(
5839        x_return_status => x_return_status,
5840        x_msg_count     => x_msg_count,
5841        x_msg_data      => x_msg_data
5842       );
5843       commit;
5844       --
5845       IF l_var_interface_csr%ISOPEN THEN
5846          CLOSE l_var_interface_csr;
5847       END IF;
5848 
5849       x_return_status := G_RET_STS_UNEXP_ERROR ;
5850       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
5851         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
5852       END IF;
5853 	 get_print_msgs_stack(p_msg_data => x_msg_data);
5854 END import_variables;
5855 
5856 PROCEDURE import_relationships(
5857     x_return_status                OUT NOCOPY VARCHAR2,
5858     x_msg_count                    OUT NOCOPY NUMBER,
5859     x_msg_data                     OUT NOCOPY VARCHAR2,
5860 
5861     p_batch_procs_id               IN NUMBER,
5862     p_batch_number                 IN VARCHAR2,
5863     p_validate_only                IN VARCHAR2 := 'Y',
5864     p_fetchsize                    IN NUMBER := 100,
5865     p_rows_processed               OUT NOCOPY NUMBER,
5866     p_rows_failed                  OUT NOCOPY NUMBER,
5867     p_rows_warned                  OUT NOCOPY NUMBER
5868    ) IS
5869     l_api_version                 CONSTANT NUMBER := 1;
5870     l_api_name                    CONSTANT VARCHAR2(30) := 'import_relationships';
5871     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
5872     l_row_notfound                BOOLEAN := FALSE;
5873     l_user_id                     NUMBER;
5874     l_login_id                    NUMBER;
5875     l_insert_errors_exception     EXCEPTION;
5876     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
5877 
5878     CURSOR l_rel_interface_csr ( cp_local_org_id IN NUMBER,
5879                                  cp_batch_number IN VARCHAR2) IS
5880       SELECT
5881            RELINT.INTERFACE_ID     ,
5882            RELINT.BATCH_NUMBER             ,
5883            RELINT.OBJECT_VERSION_NUMBER  ,
5884            RELINT.SOURCE_ARTICLE_TITLE    ,
5885            RELINT.TARGET_ARTICLE_TITLE    ,
5886            RELINT.ORG_ID,
5887            RELINT.RELATIONSHIP_TYPE       ,
5888            RELINT.PROCESS_STATUS           ,
5889            RELINT.ACTION                  ,
5890            RELS.ARTICLE_INTENT SOURCE_INTENT,
5891            RELS.ARTICLE_ID SOURCE_ARTICLE_ID    ,
5892            RELT.ARTICLE_INTENT TARGET_INTENT,
5893            RELT.ARTICLE_ID TARGET_ARTICLE_ID
5894       FROM OKC_ART_RELS_INTERFACE RELINT,
5895 	      OKC_ARTICLES_ALL RELS, OKC_ARTICLES_ALL RELT
5896       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
5897          AND BATCH_NUMBER = cp_batch_number
5898          AND RELINT.ORG_ID = cp_local_org_id
5899          AND RELINT.SOURCE_ARTICLE_TITLE = RELS.ARTICLE_TITLE(+)
5900 	    AND RELINT.ORG_ID = RELS.ORG_ID(+)
5901          AND RELINT.TARGET_ARTICLE_TITLE = RELT.ARTICLE_TITLE(+)
5902 	    AND RELINT.ORG_ID = RELT.ORG_ID(+)
5903       ORDER BY RELINT.SOURCE_ARTICLE_TITLE,RELINT.TARGET_ARTICLE_TITLE ASC;
5904 
5905       CURSOR l_rel_exist_csr (cp_src_article_id IN NUMBER,
5906 	                         cp_tar_article_id IN NUMBER,
5907 		                    cp_org_id IN NUMBER,
5908 						cp_rel_type IN VARCHAR2) IS
5909 	 SELECT '1' FROM OKC_ARTICLE_RELATNS_ALL
5910 	 WHERE source_article_id = cp_src_article_id
5911 	 AND  target_article_id = cp_tar_article_id
5912 	 AND  org_id = cp_org_id
5913 	 AND  relationship_type = cp_rel_type;
5914 
5915       CURSOR l_org_valid_csr (cp_org_id IN NUMBER) IS
5916 	 SELECT '1'
5917 	 FROM HR_ORGANIZATION_INFORMATION_V orgi, HR_ORGANIZATION_UNITS_V orgu
5918       WHERE orgi.org_information_context = 'OKC_TERMS_LIBRARY_DETAILS'
5919       AND   orgi.organization_id = orgu.organization_id
5920 	 AND   orgi.organization_id = cp_org_id;
5921 
5922       CURSOR l_provision_csr (cp_article_id IN NUMBER) IS
5923 	 SELECT provision_yn FROM OKC_ARTICLE_VERSIONS
5924 	 WHERE article_id = cp_article_id
5925 	 AND   article_version_number = 1;
5926 
5927    -- Cursor to check clause in the clause interface Table
5928        CURSOR clause_exists_csr (cp_article_title IN VARCHAR2,
5929 	                            cp_org_id IN NUMBER,
5930                                  cp_batch_number IN VARCHAR2) IS
5931        SELECT '1'
5932        FROM OKC_ART_INTERFACE_ALL
5933        WHERE article_title = cp_article_title
5934 	  AND   org_id = cp_org_id
5935        AND   batch_number = cp_batch_number
5936        AND   nvl(process_status,'X') not in ('E');
5937 
5938 
5939 -- Relationships Interface Rows
5940 
5941     TYPE l_rinf_interface_id             IS TABLE OF OKC_ART_RELS_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
5942     TYPE l_rinf_batch_number             IS TABLE OF OKC_ART_RELS_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
5943     TYPE l_rinf_object_version_number    IS TABLE OF OKC_ART_RELS_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
5944     TYPE l_rinf_source_article_title     IS TABLE OF OKC_ART_RELS_INTERFACE.SOURCE_ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
5945     TYPE l_rinf_target_article_title     IS TABLE OF OKC_ART_RELS_INTERFACE.TARGET_ARTICLE_TITLE%TYPE INDEX BY BINARY_INTEGER ;
5946     TYPE l_rinf_org_id                   IS TABLE OF OKC_ART_RELS_INTERFACE.ORG_ID%TYPE INDEX BY BINARY_INTEGER ;
5947     TYPE l_rinf_relationship_type        IS TABLE OF OKC_ART_RELS_INTERFACE.RELATIONSHIP_TYPE%TYPE INDEX BY BINARY_INTEGER ;
5948     TYPE l_rinf_process_status           IS TABLE OF OKC_ART_RELS_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
5949     TYPE l_rinf_action                   IS TABLE OF OKC_ART_RELS_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
5950 
5951     TYPE l_rinf_source_article_id        IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_ID%TYPE INDEX BY BINARY_INTEGER ;
5952     TYPE l_rinf_source_intent            IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
5953     TYPE l_rinf_target_article_id        IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_ID%TYPE INDEX BY BINARY_INTEGER ;
5954     TYPE l_rinf_target_intent            IS TABLE OF OKC_ARTICLES_ALL.ARTICLE_INTENT%TYPE INDEX BY BINARY_INTEGER ;
5955 
5956 
5957    l_return_status                      VARCHAR2(1);
5958    l_error_index                        NUMBER          := 1;
5959    l_batch_process_id                   NUMBER          := 1;
5960    l_context                            VARCHAR2(50)    := NULL;
5961    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
5962    l_tot_rows_processed                 NUMBER          := 0;
5963    l_tot_rows_failed                    NUMBER          := 0;
5964    l_tot_rows_warned                    NUMBER          := 0;
5965    l_part_rows_processed                NUMBER          := 0;
5966    l_part_rows_failed                   NUMBER          := 0;
5967    l_part_rows_warned                   NUMBER          := 0;
5968    l_bulk_failed                        VARCHAR2(1)     := 'Y';
5969 
5970 -- Variables for relationships interface
5971    rinf_interface_id_tbl                 l_rinf_interface_id ;
5972    rinf_batch_number_tbl                 l_rinf_batch_number ;
5973    rinf_object_version_number_tbl        l_rinf_object_version_number ;
5974    rinf_source_article_title_tbl         l_rinf_source_article_title ;
5975    rinf_target_article_title_tbl         l_rinf_target_article_title ;
5976    rinf_org_id_tbl                       l_rinf_org_id ;
5977    rinf_relationship_type_tbl            l_rinf_relationship_type ;
5978    rinf_process_status_tbl               l_rinf_process_status ;
5979    rinf_action_tbl                       l_rinf_action ;
5980 
5981    rinf_source_article_id_tbl            l_rinf_source_article_id ;
5982    rinf_source_intent_tbl                l_rinf_source_intent ;
5983    rinf_target_article_id_tbl            l_rinf_target_article_id ;
5984    rinf_target_intent_tbl                l_rinf_target_intent ;
5985 
5986    I NUMBER := 0;
5987    j NUMBER := 0;
5988    k NUMBER := 0;
5989    x NUMBER := 0;
5990    l_program_id                         OKC_ART_RELS_INTERFACE.PROGRAM_ID%TYPE;
5991    l_program_login_id                   OKC_ART_RELS_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
5992    l_program_appl_id                    OKC_ART_RELS_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
5993    l_request_id                         OKC_ART_RELS_INTERFACE.REQUEST_ID%TYPE;
5994    l_dummy     VARCHAR2(1) := '2';
5995    l_dummy1    VARCHAR2(1) := '3';
5996    l_clause    VARCHAR2(1) := NULL;
5997    l_tmp_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
5998 
5999    l_source_provision VARCHAR2(1);
6000    l_target_provision VARCHAR2(1);
6001 
6002 BEGIN
6003 IF (l_debug = 'Y') THEN
6004   okc_debug.log('100: Entered relationships_import', 2);
6005 END IF;
6006 
6007 ------------------------------------------------------------------------
6008 --  Variable Initialization
6009 -------------------------------------------------------------------------
6010 
6011 
6012 -- Standard Start of API savepoint
6013 FND_MSG_PUB.initialize;
6014 --  Initialize API return status to success
6015 x_return_status := FND_API.G_RET_STS_SUCCESS;
6016 l_return_status := G_RET_STS_SUCCESS;
6017 --  Cache user_id, login_id and org_id
6018 l_user_id  := Fnd_Global.user_id;
6019 l_login_id := Fnd_Global.login_id;
6020 -- MOAC
6021 G_CURRENT_ORG_ID := mo_global.get_current_org_id();
6022 /*
6023   OPEN cur_org_csr;
6024   FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
6025   CLOSE cur_org_csr;
6026 */
6027 
6028 -- MOAC
6029 IF G_CURRENT_ORG_ID IS NULL THEN
6030    OKC_API.SET_MESSAGE(G_APP_NAME,'OKC_ART_NULL_ORG_ID');
6031    RAISE FND_API.G_EXC_ERROR ;
6032 END IF;
6033 
6034 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
6035    l_program_id := NULL;
6036 ELSE
6037    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
6038 END IF;
6039 
6040 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
6041    l_program_login_id := NULL;
6042 ELSE
6043    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
6044 END IF;
6045 
6046 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
6047    l_program_appl_id := NULL;
6048 ELSE
6049    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
6050 END IF;
6051 
6052 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
6053    l_request_id := NULL;
6054 ELSE
6055    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
6056 END IF;
6057 
6058 l_batch_process_id := p_batch_procs_id;
6059 -------------------------------------------------------------------------
6060 --------------- the outermost loop of this procedure --------------------
6061 -- Bulk fetch all interface rows based on the fetchsize passedby the user
6062 -------------------------------------------------------------------------
6063 l_context :='BULK FETCH RELATIONSHIP INTERFACE ROW';
6064 OPEN l_rel_interface_csr ( G_CURRENT_ORG_ID,p_batch_number );
6065 LOOP
6066 BEGIN
6067     FETCH l_rel_interface_csr BULK COLLECT INTO
6068           rinf_interface_id_tbl                  ,
6069           rinf_batch_number_tbl                  ,
6070           rinf_object_version_number_tbl         ,
6071           rinf_source_article_title_tbl         ,
6072           rinf_target_article_title_tbl         ,
6073           rinf_org_id_tbl         ,
6074           rinf_relationship_type_tbl         ,
6075           rinf_process_status_tbl                ,
6076           rinf_action_tbl                        ,
6077           rinf_source_intent_tbl                 ,
6078           rinf_source_article_id_tbl             ,
6079           rinf_target_intent_tbl                 ,
6080           rinf_target_article_id_tbl    LIMIT p_fetchsize;
6081     EXIT WHEN rinf_interface_id_tbl.COUNT = 0 ;
6082 
6083     ------------------------------------------------------------------------
6084     -- Variable initialization
6085     -------------------------------------------------------------------------
6086     --For each fetch, relationship variable table index should be initialized
6087     j := 1;
6088     --##count:initialization
6089     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
6090     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
6091     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
6092     l_part_rows_processed   := 0;
6093     l_part_rows_failed      := 0;
6094     l_part_rows_warned      := 0;
6095     l_bulk_failed           := 'N';
6096     ---------------------------------------------------------------------------
6097     --------------------- Inner Loop thru fetched rows for---------------------
6098     -- validation, parse and validate article text, create a variable list
6099     -- prepare rows for DML if validate_only is 'N'
6100     /***  Processing Rule to set process_status
6101     Because we want to collect as much info as possible, we need to
6102     maintain process status while keeping the process moving.
6103     So, we'll set l_return_status as validation goes on and
6104     at the end we will set inf_process_status_tbl(i) with l_return_status
6105     for final result.  However, we will get out of this process if there
6106     is a significant error such as 'U'.
6107     The return status examined
6108     -api_return_status : return status for api call
6109     -l_return_status : validation result of each row
6110     -x_return_status : final result status for concurrent program request
6111     Rule to set return status
6112     If api_return_status for api call is
6113     * 'S' then continue
6114     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
6115         and build_error_array then continue
6116     * 'E' and it is significant then set l_return_status = 'E' and raise
6117       Exception
6118     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
6119        'E' at the end of validation
6120     * 'U' then set l_return_status = 'U' and raise 'U' exception
6121     * At the end, if it goes thru with no Exception,
6122     Check if l_return_status is 'E' then raise Exception
6123        Otherwise (meaning l_return_status is 'S' or 'W'),
6124          rinf_process_status_tbl(i) = l_return_status
6125     * In the exception, we will set
6126          rinf_process_status_tbl(i) = l_return_status and build_error_array
6127     ***/
6128     -------------------------------------------------------------------------
6129 
6130     FOR i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST LOOP
6131       BEGIN
6132       -- Increment total processed rows
6133       --##Count
6134       l_part_rows_processed := l_part_rows_processed+1;
6135       -- Initialization for each iteration
6136       l_row_notfound       := FALSE;
6137       l_return_status      := G_RET_STS_SUCCESS;
6138 
6139       l_context := 'RELATIONSHIP VALIDATING';
6140 
6141       -- To find duplicate relationship in the batch
6142       IF i>1 THEN
6143          x := i-1;
6144          IF (RTRIM(rinf_source_article_title_tbl(i)) = RTRIM(rinf_source_article_title_tbl(x))) AND
6145             (RTRIM(rinf_target_article_title_tbl(i)) = RTRIM(rinf_target_article_title_tbl(x)))
6146 	    THEN
6147             Okc_Api.Set_Message(G_APP_NAME,
6148 		                      'OKC_REL_DUP_TITLE_ORG',
6149 						  'CLAUSE1',
6150 						  rinf_source_article_title_tbl(i),
6151 						  'CLAUSE2',
6152 						  rinf_target_article_title_tbl(i));
6153             l_return_status := G_RET_STS_ERROR;
6154             RAISE FND_API.G_EXC_ERROR;
6155          END IF;
6156       END IF;
6157       -- Logic to decide what to do in case of Action='S'
6158 
6159 	 IF rinf_action_tbl(i) = 'S' THEN
6160 	    rinf_action_tbl(i) := 'N';
6161 	 END IF;
6162 
6163 
6164       IF rinf_action_tbl(i) = 'N' THEN
6165 
6166           --TRIM trailing space because
6167           rinf_source_article_title_tbl(i) := RTRIM(rinf_source_article_title_tbl(i));
6168           rinf_target_article_title_tbl(i) := RTRIM(rinf_target_article_title_tbl(i));
6169 
6170 
6171         IF rinf_source_article_id_tbl(i) is NULL THEN
6172 	        IF p_validate_only = 'Y' THEN
6173                 OPEN clause_exists_csr (rinf_source_article_title_tbl(i),
6174 			                         rinf_org_id_tbl(i),
6175 		                              rinf_batch_number_tbl(i));
6176 	           FETCH clause_exists_csr into l_clause;
6177 	           CLOSE clause_exists_csr;
6178 		      IF l_clause is null THEN
6179                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6180                       p_msg_name     => 'OKC_SOURCE_ART_NOT_FOUND',
6181                       p_token1       => 'ARTICLE_TITLE',
6182                       p_token1_value => rinf_source_article_title_tbl(i));
6183                 l_return_status := G_RET_STS_ERROR;
6184                 RAISE FND_API.G_EXC_ERROR ;
6185 			 ELSE
6186 		      -- Reset Local Variables
6187 			 l_clause := NULL;
6188 		      END IF;
6189 	        ELSE
6190                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6191                       p_msg_name     => 'OKC_SOURCE_ART_NOT_FOUND',
6192                       p_token1       => 'ARTICLE_TITLE',
6193                       p_token1_value => rinf_source_article_title_tbl(i));
6194               l_return_status := G_RET_STS_ERROR;
6195              RAISE FND_API.G_EXC_ERROR ;
6196           END IF;
6197         END IF;
6198 
6199         IF rinf_target_article_id_tbl(i) is NULL THEN
6200 	        IF p_validate_only = 'Y' THEN
6201                 OPEN clause_exists_csr (rinf_target_article_title_tbl(i),
6202 			                         rinf_org_id_tbl(i),
6203 		                              rinf_batch_number_tbl(i));
6204 	           FETCH clause_exists_csr into l_clause;
6205 	           CLOSE clause_exists_csr;
6206 		      IF l_clause is null THEN
6207                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6208                       p_msg_name     => 'OKC_TARGET_ART_NOT_FOUND',
6209                       p_token1       => 'ARTICLE_TITLE',
6210                       p_token1_value => rinf_target_article_title_tbl(i));
6211                 l_return_status := G_RET_STS_ERROR;
6212                 RAISE FND_API.G_EXC_ERROR ;
6213 			 ELSE
6214 		      -- Reset Local Variables
6215 			 l_clause := NULL;
6216 		      END IF;
6217 	        ELSE
6218                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6219                       p_msg_name     => 'OKC_TARGET_ART_NOT_FOUND',
6220                       p_token1       => 'ARTICLE_TITLE',
6221                       p_token1_value => rinf_target_article_title_tbl(i));
6222               l_return_status := G_RET_STS_ERROR;
6223              RAISE FND_API.G_EXC_ERROR ;
6224           END IF;
6225        END IF;
6226 
6227 
6228 
6229 /*        IF rinf_source_article_id_tbl(i) is NULL THEN
6230                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6231                       p_msg_name     => 'OKC_SOURCE_ART_NOT_FOUND',
6232                       p_token1       => 'ARTICLE_TITLE',
6233                       p_token1_value => rinf_source_article_title_tbl(i));
6234               l_return_status := G_RET_STS_ERROR;
6235              RAISE FND_API.G_EXC_ERROR ;
6236           END IF;
6237 
6238           IF rinf_target_article_id_tbl(i) is NULL THEN
6239                 Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6240                       p_msg_name     => 'OKC_TARGET_ART_NOT_FOUND',
6241                       p_token1       => 'ARTICLE_TITLE',
6242                       p_token1_value => rinf_target_article_title_tbl(i));
6243               l_return_status := G_RET_STS_ERROR;
6244              RAISE FND_API.G_EXC_ERROR ;
6245           END IF;
6246 */
6247       ELSIF rinf_action_tbl(i) = 'D' THEN
6248 
6249       -- Check Relationship already exists or not
6250          OPEN  l_rel_exist_csr(rinf_source_article_id_tbl(i),
6251                                rinf_target_article_id_tbl(i),
6252                                rinf_org_id_tbl(i),
6253 						 rinf_relationship_type_tbl(i));
6254 	    FETCH l_rel_exist_csr into l_dummy;
6255 	    CLOSE l_rel_exist_csr;
6256 	    IF l_dummy <> '1' THEN
6257             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6258                                 p_msg_name => 'OKC_ART_REL_NOT_EXIST',
6259 						  p_token1   => 'ARTICLE1',
6260 						  p_token1_value => rinf_source_article_title_tbl(i),
6261 						  p_token2   => 'ARTICLE2',
6262 						  p_token2_value => rinf_target_article_title_tbl(i)
6263 						  );
6264 		  -- Reset local variable
6265 	       l_dummy := NULL;
6266             l_return_status := G_RET_STS_ERROR;
6267             RAISE FND_API.G_EXC_ERROR ;
6268 
6269          END IF;
6270       ELSE
6271 
6272           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6273                   p_msg_name     => 'OKC_REL_INV_IMP_ACTION');
6274           l_return_status := G_RET_STS_ERROR;
6275           RAISE FND_API.G_EXC_ERROR ;
6276       END IF;
6277 
6278       -----------------------------------------------------------
6279       -- Common validation or attribute settting
6280       -- regardless of status and import action
6281       -- this validation is not included in validate api
6282       -----------------------------------------------------------
6283       IF rinf_action_tbl(i) = 'N' THEN
6284 
6285 	 -- Check Source Article and Target Article should not be same
6286 
6287           IF rinf_target_article_id_tbl(i)  = rinf_source_article_id_tbl(i) THEN
6288             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6289                                 p_msg_name => 'OKC_IMP_SAME_ART_RELTNSHP',
6290 						  p_token1   => 'ARTICLE1',
6291 						  p_token1_value => rinf_source_article_title_tbl(i));
6292             l_return_status := G_RET_STS_ERROR;
6293          END IF;
6294 
6295       -- Check Org id is valid org and EIT is defined for this org
6296          OPEN  l_org_valid_csr(rinf_org_id_tbl(i));
6297 	    FETCH l_org_valid_csr into l_dummy1;
6298 	    CLOSE l_org_valid_csr;
6299 	    IF l_dummy1 <> '1' THEN
6300             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6301                                 p_msg_name => 'OKC_ART_ORG_INVALID');
6302             l_return_status := G_RET_STS_ERROR;
6303          END IF;
6304 
6305 
6306       -- Check Relationship already exists or not
6307          OPEN  l_rel_exist_csr(rinf_source_article_id_tbl(i),
6308 	                          rinf_target_article_id_tbl(i),
6309 						 rinf_org_id_tbl(i),
6310 						 rinf_relationship_type_tbl(i));
6311 	    FETCH l_rel_exist_csr into l_dummy;
6312 	    CLOSE l_rel_exist_csr;
6313 	    IF l_dummy = '1' THEN
6314             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6315                                 p_msg_name => 'OKC_ART_REL_EXIST',
6316 						  p_token1   => 'ARTICLE1',
6317 						  p_token1_value => rinf_source_article_title_tbl(i),
6318 						  p_token2   => 'ARTICLE2',
6319 						  p_token2_value => rinf_target_article_title_tbl(i));
6320             l_return_status := G_RET_STS_ERROR;
6321 		  -- Reset local variable
6322 	       l_dummy := NULL;
6323          END IF;
6324 
6325       -- Checking Relationship types
6326 /*
6327         IF nvl(rinf_relationship_type_tbl(i), '*') not in ('ALTERNATE','INCOMPATIBLE') THEN
6328             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6329                                 p_msg_name => 'OKC_INVALID_RELTYPE');
6330             l_return_status := G_RET_STS_ERROR;
6331       END IF;
6332 */
6333         IF rinf_relationship_type_tbl(i) IS NOT NULL THEN
6334 	      l_tmp_return_status := okc_util.check_lookup_code('OKC_ARTICLE_RELATIONSHIP_TYPE',rinf_relationship_type_tbl(i));
6335            IF (l_tmp_return_status <> G_RET_STS_SUCCESS) THEN
6336 		    Okc_Api.Set_Message(G_APP_NAME, G_INVALID_VALUE, G_COL_NAME_TOKEN, 'RELATIONSHIP_TYPE');
6337 		    l_return_status := G_RET_STS_ERROR;
6338 	      END IF;
6339 	   END IF;
6340 
6341        -- Soruce Article and Target Article should have same intent
6342           IF rinf_target_intent_tbl(i)  <> rinf_source_intent_tbl(i) THEN
6343             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
6344                                 p_msg_name => 'OKC_ART_NOT_SAME_INTENT',
6345 						  p_token1   => 'ARTICLE1',
6346 						  p_token1_value => rinf_source_article_title_tbl(i),
6347 						  p_token2   => 'ARTICLE2',
6348 						  p_token2_value => rinf_target_article_title_tbl(i));
6349             l_return_status := G_RET_STS_ERROR;
6350          END IF;
6351        -- Soruce Article and Target Article should have same provision flag
6352 	   FOR source in l_provision_csr(rinf_source_article_id_tbl(i))
6353 	   LOOP
6354 	      l_source_provision := source.provision_yn;
6355            END LOOP;
6356 	   FOR target in l_provision_csr(rinf_target_article_id_tbl(i))
6357 	   LOOP
6358 	      l_target_provision := target.provision_yn;
6359            END LOOP;
6360 	   IF l_source_provision <> l_target_provision THEN
6361 		   okc_Api.Set_Message(p_app_name => G_APP_NAME,
6362 		                       p_msg_name => 'OKC_ART_IMP_PROVISION_RELATION',
6363 						   p_token1   => 'ARTICLE1',
6364 						   p_token1_value => rinf_source_article_title_tbl(i),
6365 						   p_token2   => 'ARTICLE2',
6366 						   p_token2_value => rinf_target_article_title_tbl(i));
6367 		    l_return_status := G_RET_STS_ERROR;
6368 	   END IF;
6369 
6370        END IF;
6371       ------------------------------------------------------------------------
6372       -- Now that we have validated and data is clean we can fetch sequences and ids
6373       -- for new relationships for DML and also set the process status to Success
6374       -------------------------------------------------------------------------
6375 
6376       -- Summarize report for this row
6377       -- Status 'F' is for internal use meaning parsing failure marked in
6378       -- java concurrent program
6379       IF (l_return_status = G_RET_STS_SUCCESS) THEN
6380          IF (nvl(rinf_process_status_tbl(i), 'E') = 'E') THEN
6381            rinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
6382          ELSIF ( rinf_process_status_tbl(i) = 'F') THEN
6383            -- ##count parser failure as error
6384            --l_tot_rows_failed := l_tot_rows_failed+1;
6385            l_part_rows_failed := l_part_rows_failed+1;
6386            rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6387          END IF;
6388       ELSIF (l_return_status = l_sts_warning) THEN
6389          IF (nvl(rinf_process_status_tbl(i),'E') = 'E') THEN
6390            rinf_process_status_tbl(i) := l_sts_warning;
6391            --##count
6392            --l_tot_rows_warned := l_tot_rows_warned+1;
6393            l_part_rows_warned := l_part_rows_warned+1;
6394          ELSIF (rinf_process_status_tbl(i) = 'F') THEN
6395            -- ##count parser failure as error
6396            --l_tot_rows_failed := l_tot_rows_failed+1;
6397            l_part_rows_failed := l_part_rows_failed+1;
6398            rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6399          END IF;
6400       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
6401            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6402       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
6403            RAISE FND_API.G_EXC_ERROR;
6404       END IF;
6405 
6406     -------------------------
6407     -------------------------
6408     -- Exception Block for each iteration in Loop
6409     -- validation and unexpected errors
6410     -- In case of unexpected error, escape the loop
6411     -------------------------
6412     -------------------------
6413 
6414 
6415       EXCEPTION
6416           WHEN FND_API.G_EXC_ERROR THEN
6417               IF (l_debug = 'Y') THEN
6418                  okc_debug.log('300: In Relationships_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
6419               END IF;
6420               --l_return_status := G_RET_STS_ERROR ;
6421               build_error_array(
6422                  p_msg_data     => x_msg_data,
6423                  p_context      => l_context,
6424                  p_batch_process_id => l_batch_process_id,
6425                  p_interface_id  => rinf_interface_id_tbl(i),
6426                  p_article_title => rinf_source_article_title_tbl(i),
6427                  p_error_type    => G_RET_STS_ERROR,
6428 			  p_entity        => 'RELATIONSHIP'
6429                 );
6430                rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6431                --##count
6432                --l_tot_rows_failed := l_tot_rows_failed+1;
6433                l_part_rows_failed := l_part_rows_failed+1;
6434                -- Continue to next row
6435 
6436           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6437               IF (l_debug = 'Y') THEN
6438                  okc_debug.log('400: Leaving Relationships_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
6439               END IF;
6440 
6441               IF l_rel_interface_csr%ISOPEN THEN
6442                  CLOSE l_rel_interface_csr;
6443               END IF;
6444 
6445               --Set_Message
6446               l_return_status := G_RET_STS_UNEXP_ERROR ;
6447               x_return_status := G_RET_STS_UNEXP_ERROR ;
6448 
6449               build_error_array(
6450                  p_msg_data     => x_msg_data,
6451                  p_context      => l_context,
6452                  p_batch_process_id => l_batch_process_id,
6453                  p_interface_id  => rinf_interface_id_tbl(i),
6454                  p_article_title => rinf_source_article_title_tbl(i),
6455                  p_error_type    => G_RET_STS_UNEXP_ERROR,
6456 			  p_entity        => 'RELATIONSHIP'
6457                  );
6458                rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6459                --##count
6460                --l_tot_rows_failed := l_tot_rows_failed+1;
6461                l_part_rows_failed := l_part_rows_failed+1;
6462               exit; -- exit the current fetch
6463 
6464           WHEN OTHERS THEN
6465               IF (l_debug = 'Y') THEN
6466                 okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
6467               END IF;
6468 
6469               IF l_rel_interface_csr%ISOPEN THEN
6470                  CLOSE l_rel_interface_csr;
6471               END IF;
6472 
6473               l_return_status := G_RET_STS_UNEXP_ERROR ;
6474               x_return_status := G_RET_STS_UNEXP_ERROR ;
6475 
6476               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6477                                 p_msg_name     => G_UNEXPECTED_ERROR,
6478                                 p_token1       => G_SQLCODE_TOKEN,
6479                                 p_token1_value => sqlcode,
6480                                 p_token2       => G_SQLERRM_TOKEN,
6481                                 p_token2_value => sqlerrm);
6482 
6483               build_error_array(
6484                  p_msg_data     => G_UNEXPECTED_ERROR,
6485                  p_context      => l_context,
6486                  p_batch_process_id => l_batch_process_id,
6487                  p_interface_id  => rinf_interface_id_tbl(i),
6488                  p_article_title => rinf_source_article_title_tbl(i),
6489                  p_error_type    => G_RET_STS_ERROR,
6490 			  p_entity        => 'RELATIONSHIP'
6491                 );
6492                rinf_process_status_tbl(i) := G_RET_STS_ERROR;
6493                --##count
6494                --l_tot_rows_failed := l_tot_rows_failed+1;
6495                l_part_rows_failed := l_part_rows_failed+1;
6496               exit;  -- exit the current fetch
6497           END;
6498     -------------------------
6499     -------------------------
6500     -- Exception Block for each iteration in Loop ends
6501     -------------------------
6502     -------------------------
6503 
6504 
6505      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
6506     ------------------------------------------------------------------------
6507     -------------- End of Inner Loop thru fetched row for---------------------
6508     -- validation
6509     -------------------------------------------------------------------------
6510     -- In order to propagate Unexpected error raise it if it is 'U'
6511     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
6512          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
6513     END IF;
6514 
6515     -------------------------
6516     -------------------------
6517     -- Exception Block for Inner Loop starts
6518     -- Handles unexpected errors as last step
6519     -------------------------
6520     -------------------------
6521     EXCEPTION
6522          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6523              IF (l_debug = 'Y') THEN
6524                 okc_debug.log('400: Leaving Relationships_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
6525              END IF;
6526 
6527              IF l_rel_interface_csr%ISOPEN THEN
6528                 CLOSE l_rel_interface_csr;
6529              END IF;
6530              l_return_status := G_RET_STS_UNEXP_ERROR ;
6531              x_return_status := G_RET_STS_UNEXP_ERROR ;
6532              exit; -- exit outermost loop
6533 
6534         WHEN OTHERS THEN
6535              IF (l_debug = 'Y') THEN
6536                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
6537              END IF;
6538 
6539              IF l_rel_interface_csr%ISOPEN THEN
6540                 CLOSE l_rel_interface_csr;
6541              END IF;
6542              l_return_status := G_RET_STS_UNEXP_ERROR ;
6543              x_return_status := G_RET_STS_UNEXP_ERROR ;
6544              exit; -- exit outermost loop
6545      END;
6546 
6547     -------------------------
6548     -------------------------
6549     -- Exception Block for Each Iteration of outermost Loop ends
6550     -------------------------
6551     -------------------------
6552 
6553     ------------------------------------------------------------------------
6554     --------------------- Start Do_DML for Relationships   ---------------
6555     -- Insert or Update Relationships
6556     -------------------------------------------------------------------------
6557     -- initialize l_return_status to track status of DML execution
6558      l_return_status := G_RET_STS_SUCCESS;
6559 
6560 
6561     IF p_validate_only = 'N' THEN
6562          BEGIN
6563          SAVEPOINT bulkdml;
6564 
6565          i := 0;
6566         -- Bulk insert New Valid Records
6567          BEGIN
6568          l_context := 'INSERTING FIRST NEW RELATIONSHIP INTO TABLE';
6569 
6570            FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6571             INSERT INTO OKC_ARTICLE_RELATNS_ALL(
6572              SOURCE_ARTICLE_ID,
6573              TARGET_ARTICLE_ID,
6574              ORG_ID,
6575              RELATIONSHIP_TYPE,
6576              OBJECT_VERSION_NUMBER,
6577              CREATED_BY,
6578              CREATION_DATE,
6579              LAST_UPDATED_BY,
6580              LAST_UPDATE_LOGIN,
6581              LAST_UPDATE_DATE)
6582            SELECT
6583              rinf_source_article_id_tbl(i),
6584              rinf_target_article_id_tbl(i),
6585              rinf_org_id_tbl(i),
6586              rinf_relationship_type_tbl(i),
6587 	     1.0,
6588              l_user_id,
6589              sysdate,
6590              l_user_id,
6591              l_login_id,
6592              sysdate
6593            FROM DUAL
6594            WHERE rinf_action_tbl(i)  = 'N' and
6595                  rinf_process_status_tbl(i)  in ('S', 'W')  ;
6596 
6597 
6598    FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6599             INSERT INTO OKC_ARTICLE_RELATNS_ALL(
6600              TARGET_ARTICLE_ID,
6601              SOURCE_ARTICLE_ID,
6602 	     ORG_ID,
6603 	     RELATIONSHIP_TYPE,
6604              OBJECT_VERSION_NUMBER,
6605              CREATED_BY,
6606              CREATION_DATE,
6607              LAST_UPDATED_BY,
6608              LAST_UPDATE_LOGIN,
6609              LAST_UPDATE_DATE)
6610            SELECT
6611              rinf_source_article_id_tbl(i),
6612              rinf_target_article_id_tbl(i),
6613              rinf_org_id_tbl(i),
6614              rinf_relationship_type_tbl(i),
6615 		   1.0,
6616              l_user_id,
6617              sysdate,
6618              l_user_id,
6619              l_login_id,
6620              sysdate
6621            FROM DUAL
6622            WHERE rinf_action_tbl(i)  = 'N' and
6623                  rinf_process_status_tbl(i)  in ('S', 'W')  ;
6624         EXCEPTION
6625            WHEN OTHERS THEN
6626              IF (l_debug = 'Y') THEN
6627                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
6628              END IF;
6629           END;
6630 
6631          --
6632          --  End of Insert into OKC_ARTICLE_RELATNS_ALL
6633          --
6634          --
6635 
6636 
6637          i := 0;
6638         -- Bulk delete Valid Records
6639          BEGIN
6640          l_context := 'DELETE RELATIONSHIP FROM TABLE';
6641 
6642            FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6643             DELETE FROM OKC_ARTICLE_RELATNS_ALL
6644             WHERE
6645              SOURCE_ARTICLE_ID = rinf_source_article_id_tbl(i) AND
6646              TARGET_ARTICLE_ID = rinf_target_article_id_tbl(i) AND
6647              ORG_ID = rinf_org_id_tbl(i) AND
6648              RELATIONSHIP_TYPE = rinf_relationship_type_tbl(i) AND
6649              rinf_action_tbl(i)  = 'D' AND
6650              rinf_process_status_tbl(i)  in ('S', 'W')  ;
6651 
6652 
6653            FORALL  i in rinf_interface_id_tbl.FIRST ..rinf_interface_id_tbl.LAST
6654              DELETE FROM OKC_ARTICLE_RELATNS_ALL
6655 	     WHERE
6656 	     TARGET_ARTICLE_ID = rinf_source_article_id_tbl(i) AND
6657 	     SOURCE_ARTICLE_ID = rinf_target_article_id_tbl(i) AND
6658 	     ORG_ID = rinf_org_id_tbl(i) AND
6659 	     RELATIONSHIP_TYPE = rinf_relationship_type_tbl(i) AND
6660 	     rinf_action_tbl(i)  = 'D' AND
6661 	     rinf_process_status_tbl(i)  in ('S', 'W')  ;
6662 
6663         EXCEPTION
6664            WHEN OTHERS THEN
6665              IF (l_debug = 'Y') THEN
6666                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
6667              END IF;
6668           END;
6669 
6670          --
6671          --  End of Delete from OKC_ARTICLE_RELATNS_ALL
6672          --
6673          --
6674 
6675 
6676 
6677       -- Exception for bulk DML block
6678       EXCEPTION
6679         WHEN OTHERS THEN
6680              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
6681               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6682                                   p_msg_name     => G_UNEXPECTED_ERROR,
6683                                   p_token1       => G_SQLCODE_TOKEN,
6684                                   p_token1_value => sqlcode,
6685                                   p_token2       => G_SQLERRM_TOKEN,
6686                                   p_token2_value => sqlerrm);
6687               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
6688                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
6689                                   p_token1       => 'CONTEXT',
6690                                   p_token1_value => l_context);
6691 
6692               build_error_array(
6693                                  p_msg_data     => null,
6694                                  p_context      => l_context,
6695                                  p_batch_process_id => l_batch_process_id,
6696                                  p_interface_id  => -99,
6697                                  p_article_title => NULL,
6698                                  p_error_type    => G_RET_STS_ERROR,
6699 						   p_entity        => 'RELATIONSHIP'
6700               );
6701               l_return_status := G_RET_STS_UNEXP_ERROR;
6702               x_return_status := G_RET_STS_UNEXP_ERROR;
6703 
6704               --##count:rollback the count
6705               l_part_rows_failed := l_part_rows_processed;
6706               l_part_rows_warned := 0;
6707 
6708               ROLLBACK TO SAVEPOINT bulkdml;
6709               exit; -- exit outermost loop
6710       END;
6711 
6712     END IF; --- validate_only = 'N'
6713 
6714     ------------------------------------------------------------------------
6715     --------------------- End of Do_DML for Relationships   ---------------
6716     -------------------------------------------------------------------------
6717 
6718     ------------------------------------------------------------------------
6719     --------------- Start of Do_DML for import related tables   ------------
6720     -- Update interface table
6721     -- Insert Errors into Error table
6722     -------------------------------------------------------------------------
6723     -- Update Interface Table
6724     i:=0;
6725     BEGIN
6726      l_context := 'UPDATING RELATIONSHIPS INTERFACE TABLE';
6727      FORALL i in rinf_interface_id_tbl.FIRST..rinf_interface_id_tbl.LAST
6728        UPDATE OKC_ART_RELS_INTERFACE
6729        SET
6730            -- We don't want to update process_status to 'S' or 'W' in validation_mode
6731            -- because it is not going to be picked up in next run if we do so
6732            PROCESS_STATUS = decode(p_validate_only||rinf_process_status_tbl(i)||l_bulk_failed,
6733                                                'NEN','E',
6734                                                'NSN','S',
6735                                                'NWN','W',
6736                                                'NEY','E',
6737                                                'NSY',NULL,
6738                                                'NWY',NULL,
6739                                                'YEY','E',
6740                                                'YEN','E',
6741                                                'NFY','E',
6742                                                'YFY','E',
6743                                                'NFN','E',
6744                                                'YFN','E',NULL),
6745            PROGRAM_ID                 = l_program_id,
6746            REQUEST_ID                 = l_request_id,
6747            PROGRAM_LOGIN_ID           = l_program_login_id,
6748            PROGRAM_APPLICATION_ID     = l_program_appl_id,
6749            OBJECT_VERSION_NUMBER      = rinf_object_version_number_tbl(i) + 1,
6750            LAST_UPDATED_BY            = l_user_id,
6751            LAST_UPDATE_LOGIN          = l_login_id,
6752            LAST_UPDATE_DATE           = SYSDATE
6753          WHERE
6754            interface_id = rinf_interface_id_tbl(i);
6755     EXCEPTION
6756            WHEN OTHERS THEN
6757              IF (l_debug = 'Y') THEN
6758                okc_debug.log('500: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
6759              END IF;
6760              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6761                         p_msg_name     => G_UNEXPECTED_ERROR,
6762                         p_token1       => G_SQLCODE_TOKEN,
6763                         p_token1_value => sqlcode,
6764                         p_token2       => G_SQLERRM_TOKEN,
6765                         p_token2_value => sqlerrm);
6766              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
6767                         p_msg_name     => 'OKC_REL_INT_UPDATE_FAILED');
6768              build_error_array(
6769                        p_msg_data     => null,
6770                        p_context      => l_context,
6771                        p_batch_process_id => l_batch_process_id,
6772                        p_interface_id  => -99,
6773                        p_article_title => NULL,
6774                        p_error_type    => G_RET_STS_ERROR,
6775 				   p_entity        => 'RELATIONSHIP'
6776              );
6777 
6778 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
6779 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
6780 		       --##count:rollback the count
6781 		      l_part_rows_failed := l_part_rows_processed;
6782 		      l_part_rows_warned := 0;
6783 
6784              --RAISE FND_API.G_EXC_ERROR ;
6785   END;
6786    --
6787    -- End of Update OKC_RELATIONSHIPS_INTERFACE
6788    --
6789    --
6790 
6791     --
6792     --Insert Errors into Error table for this fetch
6793     --
6794     insert_error_array(
6795      x_return_status => x_return_status,
6796      x_msg_count     => x_msg_count,
6797      x_msg_data      => x_msg_data
6798     );
6799 
6800 
6801     IF (x_return_status = l_insert_errors_error) THEN
6802       NULL;
6803      -- Ignore
6804      -- RAISE l_insert_errors_exception;
6805     END IF;
6806 
6807     ------------------------------------------------------------------------
6808     --------------- End of Do_DML for import related tables   ------------
6809     -------------------------------------------------------------------------
6810     commit;
6811 
6812     -- Now delete cache for next bulk fetch
6813 
6814     rinf_interface_id_tbl.DELETE;
6815     rinf_batch_number_tbl.DELETE;
6816     rinf_object_version_number_tbl.DELETE;
6817     rinf_source_article_title_tbl.DELETE;
6818     rinf_target_article_title_tbl.DELETE;
6819     rinf_org_id_tbl.DELETE;
6820     rinf_relationship_type_tbl.DELETE;
6821     rinf_process_status_tbl.DELETE;
6822     rinf_action_tbl.DELETE;
6823     rinf_source_intent_tbl.DELETE;
6824     rinf_source_article_id_tbl.DELETE;
6825     rinf_target_intent_tbl.DELETE;
6826     rinf_target_article_id_tbl.DELETE;
6827 
6828     err_batch_process_id_tbl.DELETE;
6829     err_article_title_tbl.DELETE;
6830     err_interface_id_tbl.DELETE;
6831     err_error_number_tbl.DELETE;
6832     err_object_version_number_tbl.DELETE;
6833     err_error_type_tbl.DELETE;
6834     err_entity_tbl.DELETE;
6835     err_error_description_tbl.DELETE;
6836 
6837    EXIT WHEN l_rel_interface_csr%NOTFOUND;
6838 END LOOP;
6839 
6840 
6841 -----------------------------------------------------------------------
6842 -- End of outermost loop for bulk fetch
6843 -----------------------------------------------------------------------
6844 
6845 IF l_rel_interface_csr%ISOPEN THEN
6846 CLOSE l_rel_interface_csr;
6847 END IF;
6848 
6849 
6850 --##count:add up last processed counts
6851 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
6852 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
6853 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
6854 /*****************
6855 --Update Batch Process Table as a last step
6856 UPDATE OKC_ART_INT_BATPROCS_ALL
6857 SET
6858   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
6859   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
6860   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
6861   END_DATE                   = SYSDATE,
6862   PROGRAM_ID                 = l_program_id,
6863   REQUEST_ID                 = l_request_id,
6864   PROGRAM_LOGIN_ID           = l_program_login_id,
6865   PROGRAM_APPLICATION_ID     = l_program_appl_id,
6866   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
6867   LAST_UPDATED_BY            = l_user_id,
6868   LAST_UPDATE_LOGIN          = l_login_id,
6869   LAST_UPDATE_DATE           = SYSDATE
6870 WHERE
6871   BATCH_PROCESS_ID  = l_batch_process_id
6872   AND ENTITY = 'Relationship' ;
6873 *********************/
6874 
6875   p_rows_processed := l_tot_rows_processed;
6876   p_rows_failed := l_tot_rows_failed;
6877   p_rows_warned := l_tot_rows_warned;
6878 
6879 IF err_error_number_tbl.COUNT > 0 THEN
6880  insert_error_array(
6881    x_return_status => x_return_status,
6882    x_msg_count     => x_msg_count,
6883    x_msg_data      => x_msg_data
6884  );
6885 END IF;
6886 
6887 -- Print statistic of this run in the log
6888 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
6889 --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');
6890 /*
6891       FND_MSG_PUB.initialize;
6892      Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
6893                         p_msg_name     => 'OKC_ART_IMP_ERR');
6894 
6895       FND_FILE.PUT_LINE(FND_FILE.OUTPUT, FND_MSG_PUB.Get(1,p_encoded=>FND_API.G_FALSE));
6896 
6897       FND_MSG_PUB.initialize;
6898 */
6899 commit; -- Final commit for status update
6900 
6901 IF (l_debug = 'Y') THEN
6902  okc_debug.log('2000: Leaving relationships import', 2);
6903 END IF;
6904 --x_return_status := l_return_status; this may cause to erase error x_return_status
6905 
6906 EXCEPTION
6907 
6908   WHEN FND_API.G_EXC_ERROR THEN
6909       IF (l_debug = 'Y') THEN
6910          okc_debug.log('3000: Leaving Relationships_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
6911       END IF;
6912       --Insert Errors into Error table if there is any
6913       insert_error_array(
6914        x_return_status => x_return_status,
6915        x_msg_count     => x_msg_count,
6916        x_msg_data      => x_msg_data
6917       );
6918       x_return_status := G_RET_STS_ERROR ;
6919 
6920       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6921       IF (l_debug = 'Y') THEN
6922          okc_debug.log('4000: Leaving Relationships_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
6923       END IF;
6924       --Insert Errors into Error table if there is any
6925 
6926       insert_error_array(
6927        x_return_status => x_return_status,
6928        x_msg_count     => x_msg_count,
6929        x_msg_data      => x_msg_data
6930       );
6931       commit;
6932 
6933       IF l_rel_interface_csr%ISOPEN THEN
6934          CLOSE l_rel_interface_csr;
6935       END IF;
6936 
6937       x_return_status := G_RET_STS_UNEXP_ERROR ;
6938       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6939         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
6940       END IF;
6941       get_print_msgs_stack(p_msg_data => x_msg_data);
6942 
6943   WHEN l_insert_errors_exception THEN
6944       --
6945       -- In this exception handling, we don't insert error array again
6946       -- because error happend in the module
6947       --
6948       IF (l_debug = 'Y') THEN
6949         okc_debug.log('5000: Leaving Relationships_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
6950       END IF;
6951 
6952       IF l_rel_interface_csr%ISOPEN THEN
6953          CLOSE l_rel_interface_csr;
6954       END IF;
6955 
6956 
6957       --x_return_status := G_RET_STS_UNEXP_ERROR ;
6958       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6959         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
6960       END IF;
6961       get_print_msgs_stack(p_msg_data => x_msg_data);
6962       commit;
6963 
6964   WHEN OTHERS THEN
6965       IF (l_debug = 'Y') THEN
6966         okc_debug.log('5000: Leaving Relationships_Import because of EXCEPTION: '||sqlerrm, 2);
6967       END IF;
6968       --Insert Errors into Error table if there is any
6969       insert_error_array(
6970        x_return_status => x_return_status,
6971        x_msg_count     => x_msg_count,
6972        x_msg_data      => x_msg_data
6973       );
6974       commit;
6975       --
6976       IF l_rel_interface_csr%ISOPEN THEN
6977          CLOSE l_rel_interface_csr;
6978       END IF;
6979 
6980       x_return_status := G_RET_STS_UNEXP_ERROR ;
6981       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
6982         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
6983       END IF;
6984  get_print_msgs_stack(p_msg_data => x_msg_data);
6985 END import_relationships;
6986 
6987 PROCEDURE import_fnd_flex_value_sets(
6988     x_return_status                OUT NOCOPY VARCHAR2,
6989     x_msg_count                    OUT NOCOPY NUMBER,
6990     x_msg_data                     OUT NOCOPY VARCHAR2,
6991 
6992     p_batch_procs_id               IN NUMBER,
6993     p_batch_number                 IN VARCHAR2,
6994     p_validate_only                IN VARCHAR2 := 'Y',
6995     p_fetchsize                    IN NUMBER := 100
6996    ) IS
6997     l_api_version                 CONSTANT NUMBER := 1;
6998     l_api_name                    CONSTANT VARCHAR2(30) := 'import_fnd_flex_value_sets';
6999     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
7000     l_row_notfound                BOOLEAN := FALSE;
7001     l_user_id                     NUMBER;
7002     l_login_id                    NUMBER;
7003     l_insert_errors_exception     EXCEPTION;
7004     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
7005 
7006     CURSOR l_valset_interface_csr ( cp_batch_number IN VARCHAR2) IS
7007       SELECT
7008            VSINT.INTERFACE_ID           ,
7009            VSINT.BATCH_NUMBER           ,
7010            VSINT.OBJECT_VERSION_NUMBER  ,
7011            VSINT.FLEX_VALUE_SET_NAME    ,
7012            VSINT.VALIDATION_TYPE        ,
7013            VSINT.PROCESS_STATUS         ,
7014            VSINT.ACTION                 ,
7015            VSINT.FORMAT_TYPE            ,
7016            VSINT.MAXIMUM_SIZE           ,
7017            VSINT.DESCRIPTION            ,
7018            VSINT.MINIMUM_VALUE          ,
7019            VSINT.MAXIMUM_VALUE          ,
7020            VSINT.NUMBER_PRECISION       ,
7021            VSINT.UPPERCASE_ONLY_FLAG    ,
7022            VSINT.NUMBER_ONLY_FLAG
7023       FROM OKC_VALUESETS_INTERFACE VSINT
7024       WHERE nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
7025          AND BATCH_NUMBER = cp_batch_number
7026       ORDER BY VSINT.FLEX_VALUE_SET_NAME ASC;
7027 
7028 -- Flex Valuesets Interface Rows
7029 
7030     TYPE l_vsinf_interface_id             IS TABLE OF OKC_VALUESETS_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
7031     TYPE l_vsinf_batch_number             IS TABLE OF OKC_VALUESETS_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
7032     TYPE l_vsinf_obj_ver_number    IS TABLE OF OKC_VALUESETS_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
7033     TYPE l_vsinf_flex_value_set_name      IS TABLE OF OKC_VALUESETS_INTERFACE.FLEX_VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
7034     TYPE l_vsinf_validation_type          IS TABLE OF OKC_VALUESETS_INTERFACE.VALIDATION_TYPE%TYPE INDEX BY BINARY_INTEGER ;
7035     TYPE l_vsinf_process_status           IS TABLE OF OKC_VALUESETS_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
7036     TYPE l_vsinf_action                   IS TABLE OF OKC_VALUESETS_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
7037     TYPE l_vsinf_format_type              IS TABLE OF OKC_VALUESETS_INTERFACE.FORMAT_TYPE%TYPE INDEX BY BINARY_INTEGER ;
7038     TYPE l_vsinf_maximum_size             IS TABLE OF OKC_VALUESETS_INTERFACE.MAXIMUM_SIZE%TYPE INDEX BY BINARY_INTEGER ;
7039     TYPE l_vsinf_description              IS TABLE OF OKC_VALUESETS_INTERFACE.DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
7040     TYPE l_vsinf_minimum_value            IS TABLE OF OKC_VALUESETS_INTERFACE.MINIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
7041     TYPE l_vsinf_maximum_value            IS TABLE OF OKC_VALUESETS_INTERFACE.MAXIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
7042     TYPE l_vsinf_number_precision         IS TABLE OF OKC_VALUESETS_INTERFACE.NUMBER_PRECISION%TYPE INDEX BY BINARY_INTEGER ;
7043     TYPE l_vsinf_uppercase_only_flag      IS TABLE OF OKC_VALUESETS_INTERFACE.UPPERCASE_ONLY_FLAG%TYPE INDEX BY BINARY_INTEGER ;
7044     TYPE l_vsinf_number_only_flag         IS TABLE OF OKC_VALUESETS_INTERFACE.NUMBER_ONLY_FLAG%TYPE INDEX BY BINARY_INTEGER ;
7045 
7046 
7047 
7048    l_return_status                      VARCHAR2(1);
7049    l_error_index                        NUMBER          := 1;
7050    l_batch_process_id                   NUMBER          := 1;
7051    l_context                            VARCHAR2(50)    := NULL;
7052    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
7053    l_tot_rows_processed                 NUMBER          := 0;
7054    l_tot_rows_failed                    NUMBER          := 0;
7055    l_tot_rows_warned                    NUMBER          := 0;
7056    l_part_rows_processed                NUMBER          := 0;
7057    l_part_rows_failed                   NUMBER          := 0;
7058    l_part_rows_warned                   NUMBER          := 0;
7059    l_bulk_failed                        VARCHAR2(1)     := 'Y';
7060 
7061 -- Variables for flex value sets interface
7062    vsinf_interface_id_tbl                 l_vsinf_interface_id ;
7063    vsinf_batch_number_tbl                 l_vsinf_batch_number ;
7064    vsinf_obj_ver_number_tbl               l_vsinf_obj_ver_number ;
7065    vsinf_flex_value_set_name_tbl          l_vsinf_flex_value_set_name ;
7066    vsinf_validation_type_tbl              l_vsinf_validation_type ;
7067    vsinf_process_status_tbl               l_vsinf_process_status ;
7068    vsinf_action_tbl                       l_vsinf_action ;
7069    vsinf_format_type_tbl                  l_vsinf_format_type ;
7070    vsinf_maximum_size_tbl                 l_vsinf_maximum_size ;
7071    vsinf_description_tbl                  l_vsinf_description ;
7072    vsinf_minimum_value_tbl                l_vsinf_minimum_value ;
7073    vsinf_maximum_value_tbl                l_vsinf_maximum_value ;
7074    vsinf_number_precision_tbl             l_vsinf_number_precision ;
7075    vsinf_uppercase_only_flag_tbl          l_vsinf_uppercase_only_flag ;
7076    vsinf_number_only_flag_tbl             l_vsinf_number_only_flag ;
7077 
7078 
7079    I NUMBER := 0;
7080    j NUMBER := 0;
7081    k NUMBER := 0;
7082    x NUMBER := 0;
7083    l_program_id                         OKC_VALUESETS_INTERFACE.PROGRAM_ID%TYPE;
7084    l_program_login_id                   OKC_VALUESETS_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
7085    l_program_appl_id                    OKC_VALUESETS_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
7086    l_request_id                         OKC_VALUESETS_INTERFACE.REQUEST_ID%TYPE;
7087    l_tmp_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
7088 
7089 
7090 BEGIN
7091 IF (l_debug = 'Y') THEN
7092   okc_debug.log('100: Entered valueset_import', 2);
7093 END IF;
7094 
7095 
7096 ------------------------------------------------------------------------
7097 --  Variable Initialization
7098 -------------------------------------------------------------------------
7099 
7100 -- Standard Start of API savepoint
7101 FND_MSG_PUB.initialize;
7102 --  Initialize API return status to success
7103 x_return_status := FND_API.G_RET_STS_SUCCESS;
7104 l_return_status := G_RET_STS_SUCCESS;
7105 --  Cache user_id, login_id and org_id
7106 l_user_id  := Fnd_Global.user_id;
7107 l_login_id := Fnd_Global.login_id;
7108 
7109 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
7110    l_program_id := NULL;
7111 ELSE
7112    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
7113 END IF;
7114 
7115 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
7116    l_program_login_id := NULL;
7117 ELSE
7118    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
7119 END IF;
7120 
7121 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
7122    l_program_appl_id := NULL;
7123 ELSE
7124    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
7125 END IF;
7126 
7127 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
7128    l_request_id := NULL;
7129 ELSE
7130    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
7131 END IF;
7132 
7133 
7134 l_batch_process_id := p_batch_procs_id;
7135 -------------------------------------------------------------------------
7136 --------------- the outermost loop of this procedure --------------------
7137 -- Bulk fetch all interface rows based on the fetchsize passedby the user
7138 -------------------------------------------------------------------------
7139 
7140 l_context :='BULK FETCH FLEX VALUE SETS INTERFACE ROW';
7141 OPEN l_valset_interface_csr ( p_batch_number );
7142 LOOP
7143 BEGIN
7144     FETCH l_valset_interface_csr BULK COLLECT INTO
7145           vsinf_interface_id_tbl                  ,
7146           vsinf_batch_number_tbl                  ,
7147           vsinf_obj_ver_number_tbl         ,
7148           vsinf_flex_value_set_name_tbl           ,
7149           vsinf_validation_type_tbl               ,
7150           vsinf_process_status_tbl                ,
7151           vsinf_action_tbl                        ,
7152           vsinf_format_type_tbl                   ,
7153           vsinf_maximum_size_tbl                  ,
7154           vsinf_description_tbl                   ,
7155           vsinf_minimum_value_tbl                 ,
7156           vsinf_maximum_value_tbl                 ,
7157           vsinf_number_precision_tbl              ,
7158           vsinf_uppercase_only_flag_tbl           ,
7159           vsinf_number_only_flag_tbl              LIMIT p_fetchsize;
7160     EXIT WHEN vsinf_interface_id_tbl.COUNT = 0 ;
7161 
7162     ------------------------------------------------------------------------
7163     -- Variable initialization
7164     -------------------------------------------------------------------------
7165     --For each fetch, valueset variable table index should be initialized
7166     j := 1;
7167     --##count:initialization
7168     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
7169     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
7170     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
7171     l_part_rows_processed   := 0;
7172     l_part_rows_failed      := 0;
7173     l_part_rows_warned      := 0;
7174     l_bulk_failed           := 'N';
7175     ---------------------------------------------------------------------------
7176     --------------------- Inner Loop thru fetched rows for---------------------
7177     -- validation, parse and validate article text, create a variable list
7178     -- prepare rows for DML if validate_only is 'N'
7179     /***  Processing Rule to set process_status
7180     Because we want to collect as much info as possible, we need to
7181     maintain process status while keeping the process moving.
7182     So, we'll set l_return_status as validation goes on and
7183     at the end we will set inf_process_status_tbl(i) with l_return_status
7184     for final result.  However, we will get out of this process if there
7185     is a significant error such as 'U'.
7186     The return status examined
7187     -api_return_status : return status for api call
7188     -l_return_status : validation result of each row
7189     -x_return_status : final result status for concurrent program request
7190     Rule to set return status
7191     If api_return_status for api call is
7192     * 'S' then continue
7193     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
7194         and build_error_array then continue
7195     * 'E' and it is significant then set l_return_status = 'E' and raise
7196       Exception
7197     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
7198        'E' at the end of validation
7199     * 'U' then set l_return_status = 'U' and raise 'U' exception
7200     * At the end, if it goes thru with no Exception,
7201     Check if l_return_status is 'E' then raise Exception
7202        Otherwise (meaning l_return_status is 'S' or 'W'),
7203           vsinf_process_status_tbl(i) = l_return_status
7204     * In the exception, we will set
7205           vsinf_process_status_tbl(i) = l_return_status and build_error_array
7206     ***/
7207     -------------------------------------------------------------------------
7208 
7209     FOR i in vsinf_interface_id_tbl.FIRST ..vsinf_interface_id_tbl.LAST LOOP
7210       BEGIN
7211       -- Increment total processed rows
7212       --##Count
7213       l_part_rows_processed := l_part_rows_processed+1;
7214       -- Initialization for each iteration
7215       l_row_notfound       := FALSE;
7216       l_return_status      := G_RET_STS_SUCCESS;
7217 
7218       l_context := 'VALUE SETS VALIDATING';
7219 
7220       -- To find duplicate value set in the batch
7221       IF i>1 THEN
7222          x := i-1;
7223          IF RTRIM(vsinf_flex_value_set_name_tbl(i)) = RTRIM(vsinf_flex_value_set_name_tbl(x))
7224 	    THEN
7225             Okc_Api.Set_Message(G_APP_NAME, 'OKC_VALSET_DUP_TITLE','VALUESET',vsinf_flex_value_set_name_tbl(i));
7226             l_return_status := G_RET_STS_ERROR;
7227             RAISE FND_API.G_EXC_ERROR;
7228          END IF;
7229       END IF;
7230       -- Logic to decide what to do in case of Action='S'
7231 
7232 	 IF vsinf_action_tbl(i) = 'S' THEN
7233 	    vsinf_action_tbl(i) := 'N';
7234 	 END IF;
7235 
7236 
7237       IF vsinf_action_tbl(i) = 'N' THEN
7238 
7239           --TRIM trailing space because
7240           vsinf_flex_value_set_name_tbl(i) := RTRIM(vsinf_flex_value_set_name_tbl(i));
7241          -- Need to do some  defaulting logic
7242 	       IF vsinf_format_type_tbl(i) = 'N' THEN
7243 		     vsinf_number_only_flag_tbl(i) := 'Y';
7244 		     vsinf_uppercase_only_flag_tbl(i) := 'N';
7245             END IF;
7246 	       IF vsinf_format_type_tbl(i) = 'C' THEN
7247 		     vsinf_number_only_flag_tbl(i) := 'N';
7248             END IF;
7249 	       IF vsinf_format_type_tbl(i) in ('X','Y') THEN
7250 		     vsinf_uppercase_only_flag_tbl(i) := 'Y';
7251             END IF;
7252 	       IF vsinf_format_type_tbl(i) = 'X' THEN
7253 		     vsinf_maximum_size_tbl(i) := 11;
7254             END IF;
7255 	       IF vsinf_format_type_tbl(i) = 'Y' THEN
7256 		     vsinf_maximum_size_tbl(i) := 20;
7257             END IF;
7258 
7259       ELSE
7260 
7261           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7262                   p_msg_name     => 'OKC_VALSET_INV_IMP_ACTION');
7263           l_return_status := G_RET_STS_ERROR;
7264           RAISE FND_API.G_EXC_ERROR ;
7265       END IF;
7266 
7267       -----------------------------------------------------------
7268       -- Common validation or attribute settting
7269       -- regardless of status and import action
7270       -- this validation is not included in validate api
7271       -----------------------------------------------------------
7272 	 -- Check if value set already exists in the System
7273 
7274           IF Fnd_Flex_Val_Api.Valueset_Exists(vsinf_flex_value_set_name_tbl(i)) THEN
7275             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7276                                 p_msg_name => 'OKC_IMP_VALSET_EXIST',
7277 						  p_token1   => 'VALUESET',
7278 						  p_token1_value => vsinf_flex_value_set_name_tbl(i)
7279 						  );
7280             l_return_status := G_RET_STS_ERROR;
7281             --RAISE FND_API.G_EXC_ERROR ;
7282          END IF;
7283 
7284       -- Check if format_type is set properly
7285 	 -- 'N' for Numeric
7286 	 -- 'C' for Character
7287 	 -- 'X' for Standard Date in Canonical Format YYYY/MM/DD
7288 	 -- 'Y' for Standard DateTime in Canonical Format YYYY/MM/DD HH24:MI:SS
7289 	 -- For Standard Date , Default Max size is 11
7290 	 -- For Standard DateTime , Default Max size is 12
7291 
7292       IF nvl(vsinf_format_type_tbl(i),'*') not in ('N','C','X','Y')  THEN
7293             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7294                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7295             l_return_status := G_RET_STS_ERROR;
7296       END IF;
7297 
7298       -- Check if Max Value and Min Value is passed then it is as per Format Type
7299       IF vsinf_minimum_value_tbl(i) IS NOT NULL THEN
7300 	    IF NOT is_value_valid(vsinf_format_type_tbl(i),vsinf_minimum_value_tbl(i)) THEN
7301             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7302                                 p_msg_name => 'OKC_INVALID_MINIMUM_VALUE');
7303             l_return_status := G_RET_STS_ERROR;
7304 
7305          END IF;
7306       END IF;
7307 
7308       IF vsinf_maximum_value_tbl(i) IS NOT NULL THEN
7309 	    IF NOT is_value_valid(vsinf_format_type_tbl(i),vsinf_maximum_value_tbl(i)) THEN
7310             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7311                                 p_msg_name => 'OKC_INVALID_MAXIMUM_VALUE');
7312             l_return_status := G_RET_STS_ERROR;
7313          END IF;
7314       END IF;
7315       -- Check Maximum Value is always greater than Mimium Value
7316       IF vsinf_minimum_value_tbl(i) IS NOT NULL AND
7317          vsinf_maximum_value_tbl(i) IS NOT NULL
7318 	 THEN
7319          IF vsinf_format_type_tbl(i) = 'N' THEN
7320 	      IF to_number(vsinf_minimum_value_tbl(i)) >=
7321 		      to_number(vsinf_maximum_value_tbl(i)) THEN
7322             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7323                                 p_msg_name => 'OKC_INVALID_RANGE');
7324             l_return_status := G_RET_STS_ERROR;
7325 		 END IF;
7326          ELSIF vsinf_format_type_tbl(i) = 'C' THEN
7327 	      IF vsinf_minimum_value_tbl(i) >= vsinf_maximum_value_tbl(i) THEN
7328             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7329                                 p_msg_name => 'OKC_INVALID_RANGE');
7330             l_return_status := G_RET_STS_ERROR;
7331 		 END IF;
7332          ELSIF vsinf_format_type_tbl(i) in ('X','Y') THEN
7333 	      IF to_date(vsinf_minimum_value_tbl(i),'YYYY/MM/DD HH24:MI:SS') >=
7334 		      to_date(vsinf_maximum_value_tbl(i),'YYYY/MM/DD HH24:MI:SS') THEN
7335             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7336                                 p_msg_name => 'OKC_INVALID_RANGE');
7337             l_return_status := G_RET_STS_ERROR;
7338 		 END IF;
7339 
7340 	    END IF;
7341       END IF;
7342 
7343       -- Check if uppercase_only_flag is set properly
7344       IF vsinf_uppercase_only_flag_tbl(i) not in ('Y','N') THEN
7345             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7346                                 p_msg_name => 'OKC_INVALID_UPPERCASE_FLAG');
7347             l_return_status := G_RET_STS_ERROR;
7348       END IF;
7349 
7350       -- Check if number_only_flag is set properly
7351       IF vsinf_number_only_flag_tbl(i) not in ('Y','N') THEN
7352             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7353                                 p_msg_name => 'OKC_INVALID_NUMBERONLY_FLAG');
7354             l_return_status := G_RET_STS_ERROR;
7355       END IF;
7356 
7357       -- Check if format_type and number_only_flag is set properly
7358       IF vsinf_format_type_tbl(i) = 'N' AND
7359 	    vsinf_number_only_flag_tbl(i)  = 'N' THEN
7360             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7361                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7362             l_return_status := G_RET_STS_ERROR;
7363       END IF;
7364 
7365       -- Check if format_type and uppercase_only_flag is set properly
7366       IF vsinf_format_type_tbl(i) = 'N' AND
7367 	    vsinf_uppercase_only_flag_tbl(i)  = 'Y' THEN
7368             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7369                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7370             l_return_status := G_RET_STS_ERROR;
7371       END IF;
7372 
7373       -- Check if format_type and number_only_flag is set properly
7374       IF vsinf_format_type_tbl(i) = 'C' AND
7375 	    (vsinf_uppercase_only_flag_tbl(i)  = 'Y' AND
7376 	     vsinf_number_only_flag_tbl(i) = 'Y') THEN
7377             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7378                                 p_msg_name => 'OKC_INVALID_FORMATTYPE');
7379             l_return_status := G_RET_STS_ERROR;
7380       END IF;
7381 
7382       -- Check if format_type and maximum_size is set properly
7383       IF vsinf_format_type_tbl(i) = 'C' AND
7384 	    vsinf_maximum_size_tbl(i)  > 999  THEN
7385             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7386                                 p_msg_name => 'OKC_INVALID_MAXIMUMSIZE');
7387             l_return_status := G_RET_STS_ERROR;
7388       END IF;
7389 
7390       -- Check if format_type and maximum_size is set properly
7391       IF vsinf_format_type_tbl(i) = 'N' AND
7392 	        vsinf_maximum_size_tbl(i)  > 38  THEN
7393             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7394                                 p_msg_name => 'OKC_INVALID_MAXIMUMSIZE');
7395             l_return_status := G_RET_STS_ERROR;
7396       END IF;
7397 
7398 	 IF ( vsinf_number_precision_tbl(i) IS NOT NULL AND
7399 	      vsinf_format_type_tbl(i) <> 'N') THEN
7400 		 vsinf_number_precision_tbl(i) := NULL;
7401       END IF;
7402 /*
7403       -- Check if alphanumeric_allowed_flag is set properly
7404       IF nvl(vsinf_alphanumeric_allowed_flag_tbl(i), '*') not in ('Y','N') THEN
7405             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7406                                 p_msg_name => 'OKC_INVALID_ALPHANUMERIC_FLAG');
7407             l_return_status := G_RET_STS_ERROR;
7408       END IF;
7409 */
7410       -- Check if Validation Type is 'Independent' or 'None'
7411       IF nvl(vsinf_validation_type_tbl(i), '*') not in ('I','N') THEN
7412             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
7413                                 p_msg_name => 'OKC_INVALID_VALIDATION_TYPE');
7414             l_return_status := G_RET_STS_ERROR;
7415       END IF;
7416 
7417       ------------------------------------------------------------------------
7418       -- Now that we have validated and data is clean we can fetch sequences and ids
7419       -- for new relationships for DML and also set the process status to Success
7420       -------------------------------------------------------------------------
7421 
7422       -- Summarize report for this row
7423       -- Status 'F' is for internal use meaning parsing failure marked in
7424       -- java concurrent program
7425       IF (l_return_status = G_RET_STS_SUCCESS) THEN
7426          IF (nvl(vsinf_process_status_tbl(i), 'E') = 'E') THEN
7427            vsinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
7428          ELSIF ( vsinf_process_status_tbl(i) = 'F') THEN
7429            -- ##count parser failure as error
7430            --l_tot_rows_failed := l_tot_rows_failed+1;
7431            l_part_rows_failed := l_part_rows_failed+1;
7432            vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7433          END IF;
7434       ELSIF (l_return_status = l_sts_warning) THEN
7435          IF (nvl(vsinf_process_status_tbl(i),'E') = 'E') THEN
7436            vsinf_process_status_tbl(i) := l_sts_warning;
7437            --##count
7438            --l_tot_rows_warned := l_tot_rows_warned+1;
7439            l_part_rows_warned := l_part_rows_warned+1;
7440          ELSIF (vsinf_process_status_tbl(i) = 'F') THEN
7441            -- ##count parser failure as error
7442            --l_tot_rows_failed := l_tot_rows_failed+1;
7443            l_part_rows_failed := l_part_rows_failed+1;
7444            vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7445          END IF;
7446       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
7447            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7448       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
7449            RAISE FND_API.G_EXC_ERROR;
7450       END IF;
7451 
7452     -------------------------
7453     -------------------------
7454     -- Exception Block for each iteration in Loop
7455     -- validation and unexpected errors
7456     -- In case of unexpected error, escape the loop
7457     -------------------------
7458     -------------------------
7459 
7460 
7461       EXCEPTION
7462           WHEN FND_API.G_EXC_ERROR THEN
7463               IF (l_debug = 'Y') THEN
7464                  okc_debug.log('300: In Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
7465               END IF;
7466               --l_return_status := G_RET_STS_ERROR ;
7467               build_error_array(
7468                  p_msg_data     => x_msg_data,
7469                  p_context      => l_context,
7470                  p_batch_process_id => l_batch_process_id,
7471                  p_interface_id  => vsinf_interface_id_tbl(i),
7472                  p_article_title => vsinf_flex_value_set_name_tbl(i),
7473                  p_error_type    => G_RET_STS_ERROR,
7474 			  p_entity        => 'VALUESET'
7475                 );
7476                vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7477                --##count
7478                --l_tot_rows_failed := l_tot_rows_failed+1;
7479                l_part_rows_failed := l_part_rows_failed+1;
7480                -- Continue to next row
7481 
7482           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7483               IF (l_debug = 'Y') THEN
7484                  okc_debug.log('400: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
7485               END IF;
7486 
7487               IF l_valset_interface_csr%ISOPEN THEN
7488                  CLOSE l_valset_interface_csr;
7489               END IF;
7490 
7491               --Set_Message
7492               l_return_status := G_RET_STS_UNEXP_ERROR ;
7493               x_return_status := G_RET_STS_UNEXP_ERROR ;
7494 
7495               build_error_array(
7496                  p_msg_data     => x_msg_data,
7497                  p_context      => l_context,
7498                  p_batch_process_id => l_batch_process_id,
7499                  p_interface_id  => vsinf_interface_id_tbl(i),
7500                  p_article_title => vsinf_flex_value_set_name_tbl(i),
7501                  p_error_type    => G_RET_STS_UNEXP_ERROR,
7502 			  p_entity        => 'VALUESET'
7503                  );
7504                vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7505                --##count
7506                --l_tot_rows_failed := l_tot_rows_failed+1;
7507                l_part_rows_failed := l_part_rows_failed+1;
7508               exit; -- exit the current fetch
7509 
7510           WHEN OTHERS THEN
7511               IF (l_debug = 'Y') THEN
7512                 okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
7513               END IF;
7514 
7515               IF l_valset_interface_csr%ISOPEN THEN
7516                  CLOSE l_valset_interface_csr;
7517               END IF;
7518 
7519               l_return_status := G_RET_STS_UNEXP_ERROR ;
7520               x_return_status := G_RET_STS_UNEXP_ERROR ;
7521 
7522               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7523                                 p_msg_name     => G_UNEXPECTED_ERROR,
7524                                 p_token1       => G_SQLCODE_TOKEN,
7525                                 p_token1_value => sqlcode,
7526                                 p_token2       => G_SQLERRM_TOKEN,
7527                                 p_token2_value => sqlerrm);
7528 
7529               build_error_array(
7530                  p_msg_data     => G_UNEXPECTED_ERROR,
7531                  p_context      => l_context,
7532                  p_batch_process_id => l_batch_process_id,
7533                  p_interface_id  => vsinf_interface_id_tbl(i),
7534                  p_article_title => vsinf_flex_value_set_name_tbl(i),
7535                  p_error_type    => G_RET_STS_ERROR,
7536 			  p_entity        => 'VALUESET'
7537                 );
7538                vsinf_process_status_tbl(i) := G_RET_STS_ERROR;
7539                --##count
7540                --l_tot_rows_failed := l_tot_rows_failed+1;
7541                l_part_rows_failed := l_part_rows_failed+1;
7542               exit;  -- exit the current fetch
7543           END;
7544     -------------------------
7545     -------------------------
7546     -- Exception Block for each iteration in Loop ends
7547     -------------------------
7548     -------------------------
7549 
7550 
7551      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
7552     ------------------------------------------------------------------------
7553     -------------- End of Inner Loop thru fetched row for---------------------
7554     -- validation
7555     -------------------------------------------------------------------------
7556     -- In order to propagate Unexpected error raise it if it is 'U'
7557     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
7558          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
7559     END IF;
7560 
7561     -------------------------
7562     -------------------------
7563     -- Exception Block for Inner Loop starts
7564     -- Handles unexpected errors as last step
7565     -------------------------
7566     -------------------------
7567     EXCEPTION
7568          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7569              IF (l_debug = 'Y') THEN
7570                 okc_debug.log('400: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
7571              END IF;
7572 
7573              IF l_valset_interface_csr%ISOPEN THEN
7574                 CLOSE l_valset_interface_csr;
7575              END IF;
7576              l_return_status := G_RET_STS_UNEXP_ERROR ;
7577              x_return_status := G_RET_STS_UNEXP_ERROR ;
7578              exit; -- exit outermost loop
7579 
7580         WHEN OTHERS THEN
7581              IF (l_debug = 'Y') THEN
7582                okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
7583              END IF;
7584 
7585              IF l_valset_interface_csr%ISOPEN THEN
7586                 CLOSE l_valset_interface_csr;
7587              END IF;
7588              l_return_status := G_RET_STS_UNEXP_ERROR ;
7589              x_return_status := G_RET_STS_UNEXP_ERROR ;
7590              exit; -- exit outermost loop
7591      END;
7592 
7593     -------------------------
7594     -------------------------
7595     -- Exception Block for Each Iteration of outermost Loop ends
7596     -------------------------
7597     -------------------------
7598 
7599     ------------------------------------------------------------------------
7600     --------------------- Start Do_DML for Fnd Flex Value Sets   ---------------
7601     -- Insert Fnd Flex Value Sets
7602     -------------------------------------------------------------------------
7603     -- initialize l_return_status to track status of DML execution
7604      l_return_status := G_RET_STS_SUCCESS;
7605 
7606 
7607     IF p_validate_only = 'N' THEN
7608          BEGIN
7609          SAVEPOINT bulkdml;
7610 
7611          i := 0;
7612         -- Bulk insert New Valid Records
7613          BEGIN
7614          l_context := 'INSERTING NEW VALUESETS INTO TABLE';
7615            FOR  i in vsinf_interface_id_tbl.FIRST ..vsinf_interface_id_tbl.LAST LOOP
7616 
7617 		  IF vsinf_action_tbl(i) = 'N' AND vsinf_process_status_tbl(i) in ('S','W') THEN
7618 	     	   IF vsinf_validation_type_tbl(i) = 'N' THEN
7619 
7620                       -- Set the Session Mode
7621 				  FND_FLEX_VAL_API.SET_SESSION_MODE('customer_data');
7622 
7623 				  -- Call the API to create value set
7624                       FND_FLEX_VAL_API.CREATE_VALUESET_NONE(
7625 		             VALUE_SET_NAME     => vsinf_flex_value_set_name_tbl(i),
7626 		             DESCRIPTION        => vsinf_description_tbl(i),
7627 	                  SECURITY_AVAILABLE => 'N',
7628 		             ENABLE_LONGLIST    => 'N',
7629 		             FORMAT_TYPE        => vsinf_format_type_tbl(i),
7630 		             MAXIMUM_SIZE       => vsinf_maximum_size_tbl(i),
7631 		             NUMBERS_ONLY       => vsinf_number_only_flag_tbl(i),
7632 		             UPPERCASE_ONLY     => vsinf_uppercase_only_flag_tbl(i),
7633 		             RIGHT_JUSTIFY_ZERO_FILL => 'N',
7634 		             MIN_VALUE          => vsinf_minimum_value_tbl(i),
7635 		             MAX_VALUE          => vsinf_maximum_value_tbl(i),
7636 				   PRECISION          => vsinf_number_precision_tbl(i));
7637 
7638 		        ELSIF vsinf_validation_type_tbl(i) = 'I' THEN
7639 
7640                       -- Set the Session Mode
7641 				  FND_FLEX_VAL_API.SET_SESSION_MODE('customer_data');
7642 
7643 				  -- Call the API to create value set
7644                       FND_FLEX_VAL_API.CREATE_VALUESET_INDEPENDENT(
7645 		             VALUE_SET_NAME     => vsinf_flex_value_set_name_tbl(i),
7646 		             DESCRIPTION        => vsinf_description_tbl(i),
7647 	                  SECURITY_AVAILABLE => 'N',
7648 		             ENABLE_LONGLIST    => 'N',
7649 		             FORMAT_TYPE        => vsinf_format_type_tbl(i),
7650 		             MAXIMUM_SIZE       => vsinf_maximum_size_tbl(i),
7651 		             NUMBERS_ONLY       => vsinf_number_only_flag_tbl(i),
7652 		             UPPERCASE_ONLY     => vsinf_uppercase_only_flag_tbl(i),
7653 		             RIGHT_JUSTIFY_ZERO_FILL => 'N',
7654 		             MIN_VALUE          => vsinf_minimum_value_tbl(i),
7655 		             MAX_VALUE          => vsinf_maximum_value_tbl(i),
7656 				   PRECISION          => vsinf_number_precision_tbl(i));
7657 
7658 		        END IF;
7659 		   END IF;
7660         END LOOP;
7661 
7662         EXCEPTION
7663            WHEN OTHERS THEN
7664              IF (l_debug = 'Y') THEN
7665                okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
7666              END IF;
7667              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
7668           END;
7669 
7670          --
7671          --  End of Insert into FND FLEX VALUE SETS
7672          --
7673          --
7674 
7675 
7676       -- Exception for bulk DML block
7677       EXCEPTION
7678         WHEN OTHERS THEN
7679              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
7680               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7681                                   p_msg_name     => G_UNEXPECTED_ERROR,
7682                                   p_token1       => G_SQLCODE_TOKEN,
7683                                   p_token1_value => sqlcode,
7684                                   p_token2       => G_SQLERRM_TOKEN,
7685                                   p_token2_value => sqlerrm);
7686               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
7687                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
7688                                   p_token1       => 'CONTEXT',
7689                                   p_token1_value => l_context);
7690 
7691               build_error_array(
7692                                  p_msg_data     => null,
7693                                  p_context      => l_context,
7694                                  p_batch_process_id => l_batch_process_id,
7695                                  p_interface_id  => -99,
7696                                  p_article_title => NULL,
7697                                  p_error_type    => G_RET_STS_ERROR,
7698 						   p_entity        => 'VALUESET'
7699               );
7700               l_return_status := G_RET_STS_UNEXP_ERROR;
7701               x_return_status := G_RET_STS_UNEXP_ERROR;
7702 
7703               --##count:rollback the count
7704               l_part_rows_failed := l_part_rows_processed;
7705               l_part_rows_warned := 0;
7706 
7707               ROLLBACK TO SAVEPOINT bulkdml;
7708               exit; -- exit outermost loop
7709       END;
7710 
7711     END IF; --- validate_only = 'N'
7712 
7713     ------------------------------------------------------------------------
7714     --------------------- End of Do_DML for Value sets   ---------------
7715     -------------------------------------------------------------------------
7716 
7717     ------------------------------------------------------------------------
7718     --------------- Start of Do_DML for import related tables   ------------
7719     -- Update interface table
7720     -- Insert Errors into Error table
7721     -------------------------------------------------------------------------
7722     -- Update Interface Table
7723     i:=0;
7724     BEGIN
7725      l_context := 'UPDATING VALUE SETS INTERFACE TABLE';
7726      FORALL i in vsinf_interface_id_tbl.FIRST..vsinf_interface_id_tbl.LAST
7727        UPDATE OKC_VALUESETS_INTERFACE
7728        SET
7729            -- We don't want to update process_status to 'S' or 'W' in validation_mode
7730            -- because it is not going to be picked up in next run if we do so
7731            PROCESS_STATUS = decode(p_validate_only||vsinf_process_status_tbl(i)||l_bulk_failed,
7732                                                'NEN','E',
7733                                                'NSN','S',
7734                                                'NWN','W',
7735                                                'NEY','E',
7736                                                'NSY',NULL,
7737                                                'NWY',NULL,
7738                                                'YEY','E',
7739                                                'YEN','E',
7740                                                'NFY','E',
7741                                                'YFY','E',
7742                                                'NFN','E',
7743                                                'YFN','E',NULL),
7744            PROGRAM_ID                 = l_program_id,
7745            REQUEST_ID                 = l_request_id,
7746            PROGRAM_LOGIN_ID           = l_program_login_id,
7747            PROGRAM_APPLICATION_ID     = l_program_appl_id,
7748            OBJECT_VERSION_NUMBER      = vsinf_obj_ver_number_tbl(i) + 1,
7749            LAST_UPDATED_BY            = l_user_id,
7750            LAST_UPDATE_LOGIN          = l_login_id,
7751            LAST_UPDATE_DATE           = SYSDATE
7752          WHERE
7753            interface_id = vsinf_interface_id_tbl(i);
7754     EXCEPTION
7755            WHEN OTHERS THEN
7756              IF (l_debug = 'Y') THEN
7757                okc_debug.log('500: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
7758              END IF;
7759 
7760              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
7761                         p_msg_name     => G_UNEXPECTED_ERROR,
7762                         p_token1       => G_SQLCODE_TOKEN,
7763                         p_token1_value => sqlcode,
7764                         p_token2       => G_SQLERRM_TOKEN,
7765                         p_token2_value => sqlerrm);
7766              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
7767                         p_msg_name     => 'OKC_VALSET_INT_UPDATE_FAILED');
7768 
7769              build_error_array(
7770                        p_msg_data     => null,
7771                        p_context      => l_context,
7772                        p_batch_process_id => l_batch_process_id,
7773                        p_interface_id  => -99,
7774                        p_article_title => NULL,
7775                        p_error_type    => G_RET_STS_ERROR,
7776 				   p_entity        => 'VALUESET'
7777              );
7778 
7779 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
7780 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
7781 		       --##count:rollback the count
7782 		      l_part_rows_failed := l_part_rows_processed;
7783 		      l_part_rows_warned := 0;
7784 
7785              --RAISE FND_API.G_EXC_ERROR ;
7786   END;
7787    --
7788    -- End of Update OKC_VALUESETS_INTERFACE
7789    --
7790    --
7791 
7792     --
7793     --Insert Errors into Error table for this fetch
7794     --
7795     insert_error_array(
7796      x_return_status => x_return_status,
7797      x_msg_count     => x_msg_count,
7798      x_msg_data      => x_msg_data
7799     );
7800 
7801 
7802     IF (x_return_status = l_insert_errors_error) THEN
7803       NULL;
7804      -- Ignore
7805      -- RAISE l_insert_errors_exception;
7806     END IF;
7807 
7808     ------------------------------------------------------------------------
7809     --------------- End of Do_DML for import related tables   ------------
7810     -------------------------------------------------------------------------
7811     commit;
7812 
7813     -- Now delete cache for next bulk fetch
7814 
7815     vsinf_interface_id_tbl.DELETE;
7816     vsinf_batch_number_tbl.DELETE;
7817     vsinf_obj_ver_number_tbl.DELETE;
7818     vsinf_flex_value_set_name_tbl.DELETE;
7819     vsinf_validation_type_tbl.DELETE;
7820     vsinf_process_status_tbl.DELETE;
7821     vsinf_action_tbl.DELETE;
7822     vsinf_format_type_tbl.DELETE;
7823     vsinf_maximum_size_tbl.DELETE;
7824     vsinf_description_tbl.DELETE;
7825     vsinf_minimum_value_tbl.DELETE;
7826     vsinf_maximum_value_tbl.DELETE;
7827     vsinf_number_precision_tbl.DELETE;
7828     vsinf_uppercase_only_flag_tbl.DELETE;
7829     vsinf_number_only_flag_tbl.DELETE;
7830 
7831     err_batch_process_id_tbl.DELETE;
7832     err_article_title_tbl.DELETE;
7833     err_interface_id_tbl.DELETE;
7834     err_error_number_tbl.DELETE;
7835     err_object_version_number_tbl.DELETE;
7836     err_error_type_tbl.DELETE;
7837     err_entity_tbl.DELETE;
7838     err_error_description_tbl.DELETE;
7839 
7840    EXIT WHEN l_valset_interface_csr%NOTFOUND;
7841 END LOOP;
7842 
7843 
7844 -----------------------------------------------------------------------
7845 -- End of outermost loop for bulk fetch
7846 -----------------------------------------------------------------------
7847 
7848 IF l_valset_interface_csr%ISOPEN THEN
7849 CLOSE l_valset_interface_csr;
7850 END IF;
7851 
7852 
7853 --##count:add up last processed counts
7854 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
7855 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
7856 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
7857 
7858 --Update Batch Process Table as a last step
7859 UPDATE OKC_ART_INT_BATPROCS_ALL
7860 SET
7861   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
7862   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
7863   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
7864   END_DATE                   = SYSDATE,
7865   PROGRAM_ID                 = l_program_id,
7866   REQUEST_ID                 = l_request_id,
7867   PROGRAM_LOGIN_ID           = l_program_login_id,
7868   PROGRAM_APPLICATION_ID     = l_program_appl_id,
7869   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
7870   LAST_UPDATED_BY            = l_user_id,
7871   LAST_UPDATE_LOGIN          = l_login_id,
7872   LAST_UPDATE_DATE           = SYSDATE
7873 WHERE
7874   BATCH_PROCESS_ID  = l_batch_process_id
7875   AND ENTITY = 'Valueset';
7876 IF err_error_number_tbl.COUNT > 0 THEN
7877  insert_error_array(
7878    x_return_status => x_return_status,
7879    x_msg_count     => x_msg_count,
7880    x_msg_data      => x_msg_data
7881  );
7882 END IF;
7883 
7884 -- Print statistic of this run in the log
7885 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
7886 --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');
7887 commit; -- Final commit for status update
7888 
7889 IF (l_debug = 'Y') THEN
7890  okc_debug.log('2000: Leaving Fnd_flex_value_sets import', 2);
7891 END IF;
7892 --x_return_status := l_return_status; this may cause to erase error x_return_status
7893 
7894 EXCEPTION
7895 
7896   WHEN FND_API.G_EXC_ERROR THEN
7897       IF (l_debug = 'Y') THEN
7898          okc_debug.log('3000: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
7899       END IF;
7900       --Insert Errors into Error table if there is any
7901       insert_error_array(
7902        x_return_status => x_return_status,
7903        x_msg_count     => x_msg_count,
7904        x_msg_data      => x_msg_data
7905       );
7906       x_return_status := G_RET_STS_ERROR ;
7907 
7908       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7909       IF (l_debug = 'Y') THEN
7910          okc_debug.log('4000: Leaving Fnd_flex_value_sets_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
7911       END IF;
7912       --Insert Errors into Error table if there is any
7913 
7914       insert_error_array(
7915        x_return_status => x_return_status,
7916        x_msg_count     => x_msg_count,
7917        x_msg_data      => x_msg_data
7918       );
7919       commit;
7920 
7921       IF l_valset_interface_csr%ISOPEN THEN
7922          CLOSE l_valset_interface_csr;
7923       END IF;
7924 
7925       x_return_status := G_RET_STS_UNEXP_ERROR ;
7926       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7927         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7928       END IF;
7929       get_print_msgs_stack(p_msg_data => x_msg_data);
7930 
7931   WHEN l_insert_errors_exception THEN
7932       --
7933       -- In this exception handling, we don't insert error array again
7934       -- because error happend in the module
7935       --
7936       IF (l_debug = 'Y') THEN
7937         okc_debug.log('5000: Leaving Fnd_flex_value_sets_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
7938       END IF;
7939 
7940       IF l_valset_interface_csr%ISOPEN THEN
7941          CLOSE l_valset_interface_csr;
7942       END IF;
7943 
7944 
7945       --x_return_status := G_RET_STS_UNEXP_ERROR ;
7946       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7947         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7948       END IF;
7949       get_print_msgs_stack(p_msg_data => x_msg_data);
7950       commit;
7951 
7952   WHEN OTHERS THEN
7953       IF (l_debug = 'Y') THEN
7954         okc_debug.log('5000: Leaving Fnd_flex_value_sets_Import because of EXCEPTION: '||sqlerrm, 2);
7955       END IF;
7956       --Insert Errors into Error table if there is any
7957       insert_error_array(
7958        x_return_status => x_return_status,
7959        x_msg_count     => x_msg_count,
7960        x_msg_data      => x_msg_data
7961       );
7962       commit;
7963       --
7964       IF l_valset_interface_csr%ISOPEN THEN
7965          CLOSE l_valset_interface_csr;
7966       END IF;
7967 
7968       x_return_status := G_RET_STS_UNEXP_ERROR ;
7969       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
7970         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
7971       END IF;
7972 	 get_print_msgs_stack(p_msg_data => x_msg_data);
7973 END import_fnd_flex_value_sets;
7974 
7975 PROCEDURE import_fnd_flex_values(
7976     x_return_status                OUT NOCOPY VARCHAR2,
7977     x_msg_count                    OUT NOCOPY NUMBER,
7978     x_msg_data                     OUT NOCOPY VARCHAR2,
7979 
7980     p_batch_procs_id               IN NUMBER,
7981     p_batch_number                 IN VARCHAR2,
7982     p_validate_only                IN VARCHAR2 := 'Y',
7983     p_fetchsize                    IN NUMBER := 100
7984    ) IS
7985     l_api_version                 CONSTANT NUMBER := 1;
7986     l_api_name                    CONSTANT VARCHAR2(30) := 'import_fnd_flex_values';
7987     l_sts_warning                 CONSTANT VARCHAR2(1) := 'W';
7988     l_row_notfound                BOOLEAN := FALSE;
7989     l_user_id                     NUMBER;
7990     l_login_id                    NUMBER;
7991     l_insert_errors_exception     EXCEPTION;
7992     l_insert_errors_error         CONSTANT VARCHAR2(1) := 'X';
7993 
7994    CURSOR l_val_interface_csr ( cp_batch_number IN VARCHAR2) IS
7995       SELECT
7996            VINT.INTERFACE_ID           ,
7997            VINT.BATCH_NUMBER           ,
7998            VINT.OBJECT_VERSION_NUMBER  ,
7999            VINT.FLEX_VALUE_SET_NAME    ,
8000            VINT.FLEX_VALUE             ,
8001            VINT.PROCESS_STATUS         ,
8002            VINT.ACTION                 ,
8003            VINT.ENABLED_FLAG           ,
8004            VINT.START_DATE_ACTIVE      ,
8005            VINT.END_DATE_ACTIVE        ,
8006            VINT.LANGUAGE               ,
8007            VINT.DESCRIPTION            ,
8008            VINT.FLEX_VALUE_MEANING     ,
8009 	   VS.FLEX_VALUE_SET_ID        ,
8010 	   VS.VALIDATION_TYPE          ,
8011 	   VS.FORMAT_TYPE              ,
8012 	   VS.MAXIMUM_SIZE             ,
8013 	   VS.NUMBER_PRECISION         ,
8014 	   VS.ALPHANUMERIC_ALLOWED_FLAG,
8015 	   VS.UPPERCASE_ONLY_FLAG      ,
8016 	   VS.NUMERIC_MODE_ENABLED_FLAG,
8017 	   VS.MINIMUM_VALUE            ,
8018 	   VS.MAXIMUM_VALUE            ,
8019            TO_NUMBER(NULL) FLEX_VALUE_ID
8020       FROM OKC_VS_VALUES_INTERFACE VINT,FND_FLEX_VALUE_SETS VS
8021       WHERE VINT.FLEX_VALUE_SET_NAME = VS.FLEX_VALUE_SET_NAME
8022 	    AND nvl(PROCESS_STATUS,'*') NOT IN ('W', 'S')
8023          AND BATCH_NUMBER = cp_batch_number
8024 	 UNION ALL
8025       SELECT
8026            VINT.INTERFACE_ID           ,
8027            VINT.BATCH_NUMBER           ,
8028            VINT.OBJECT_VERSION_NUMBER  ,
8029            VINT.FLEX_VALUE_SET_NAME    ,
8030            VINT.FLEX_VALUE             ,
8031            VINT.PROCESS_STATUS         ,
8032            VINT.ACTION                 ,
8033            VINT.ENABLED_FLAG           ,
8034            VINT.START_DATE_ACTIVE      ,
8035            VINT.END_DATE_ACTIVE        ,
8036            VINT.LANGUAGE               ,
8037            VINT.DESCRIPTION            ,
8038            VINT.FLEX_VALUE_MEANING     ,
8039 	      TO_NUMBER(NULL)  FLEX_VALUE_SET_ID        ,
8040 	      VS.VALIDATION_TYPE          ,
8041 	      VS.FORMAT_TYPE              ,
8042 	      VS.MAXIMUM_SIZE             ,
8043 	      VS.NUMBER_PRECISION         ,
8044 	      TO_CHAR(NULL) ALPHANUMERIC_ALLOWED_FLAG,
8045 	      VS.UPPERCASE_ONLY_FLAG      ,
8046 	      VS.NUMBER_ONLY_FLAG NUMERIC_MODE_ENABLED_FLAG,
8047 	      VS.MINIMUM_VALUE            ,
8048 	      VS.MAXIMUM_VALUE            ,
8049            TO_NUMBER(NULL) FLEX_VALUE_ID
8050       FROM OKC_VS_VALUES_INTERFACE VINT,OKC_VALUESETS_INTERFACE VS
8051       WHERE VINT.FLEX_VALUE_SET_NAME = VS.FLEX_VALUE_SET_NAME (+)
8052          AND VINT.BATCH_NUMBER = VS.BATCH_NUMBER (+)
8053 	    AND nvl(VS.PROCESS_STATUS,'*') NOT IN ('E')
8054          AND VINT.BATCH_NUMBER = cp_batch_number
8055 	    AND NOT EXISTS
8056 	    ( SELECT 1 FROM FND_FLEX_VALUE_SETS FVS
8057 	      WHERE FVS.FLEX_VALUE_SET_NAME = VINT.FLEX_VALUE_SET_NAME)
8058       ORDER BY FLEX_VALUE_SET_NAME,FLEX_VALUE ASC;
8059 
8060 
8061     CURSOR l_val_exist_csr ( l_flex_value IN VARCHAR2, l_flex_value_set_id IN NUMBER ) IS
8062       SELECT
8063            B.FLEX_VALUE_SET_ID         ,
8064            B.FLEX_VALUE_ID             ,
8065            B.FLEX_VALUE                ,
8066            B.START_DATE_ACTIVE         ,
8067            B.END_DATE_ACTIVE
8068       FROM FND_FLEX_VALUES B,FND_FLEX_VALUES_TL T
8069       WHERE B.FLEX_VALUE_ID = T.FLEX_VALUE_ID
8070       AND   T.LANGUAGE = userenv('LANG')
8071       AND   B.FLEX_VALUE = l_flex_value
8072       AND   B.FLEX_VALUE_SET_ID = l_flex_value_set_id;
8073 
8074    -- Cursor to check valueset in the valueset interface Table
8075        CURSOR valset_exists_csr (cp_vs_name IN VARCHAR2,
8076                                  cp_batch_number IN VARCHAR2) IS
8077        SELECT '1'
8078        FROM OKC_VALUESETS_INTERFACE
8079        WHERE flex_value_set_name = cp_vs_name
8080        AND   batch_number = cp_batch_number
8081        AND   nvl(process_status,'X') not in ('E');
8082 
8083 
8084 -- Flex Values Interface Rows
8085 
8086     TYPE l_vinf_interface_id             IS TABLE OF OKC_VS_VALUES_INTERFACE.INTERFACE_ID%TYPE INDEX BY BINARY_INTEGER ;
8087     TYPE l_vinf_batch_number             IS TABLE OF OKC_VS_VALUES_INTERFACE.BATCH_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
8088     TYPE l_vinf_obj_ver_number           IS TABLE OF OKC_VS_VALUES_INTERFACE.OBJECT_VERSION_NUMBER%TYPE INDEX BY BINARY_INTEGER ;
8089     TYPE l_vinf_flex_value_set_name      IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE_SET_NAME%TYPE INDEX BY BINARY_INTEGER ;
8090     TYPE l_vinf_flex_value               IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8091     TYPE l_vinf_process_status           IS TABLE OF OKC_VS_VALUES_INTERFACE.PROCESS_STATUS%TYPE INDEX BY BINARY_INTEGER ;
8092     TYPE l_vinf_action                   IS TABLE OF OKC_VS_VALUES_INTERFACE.ACTION%TYPE INDEX BY BINARY_INTEGER ;
8093     TYPE l_vinf_enabled_flag             IS TABLE OF OKC_VS_VALUES_INTERFACE.ENABLED_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8094     TYPE l_vinf_start_date_active        IS TABLE OF OKC_VS_VALUES_INTERFACE.START_DATE_ACTIVE%TYPE INDEX BY BINARY_INTEGER ;
8095     TYPE l_vinf_end_date_active          IS TABLE OF OKC_VS_VALUES_INTERFACE.END_DATE_ACTIVE%TYPE INDEX BY BINARY_INTEGER ;
8096     TYPE l_vinf_language                 IS TABLE OF OKC_VS_VALUES_INTERFACE.LANGUAGE%TYPE INDEX BY BINARY_INTEGER ;
8097     TYPE l_vinf_description              IS TABLE OF OKC_VS_VALUES_INTERFACE.DESCRIPTION%TYPE INDEX BY BINARY_INTEGER ;
8098     TYPE l_vinf_flex_value_meaning       IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE_MEANING%TYPE INDEX BY BINARY_INTEGER ;
8099 
8100 
8101     TYPE l_vinf_flex_value_id            IS TABLE OF FND_FLEX_VALUES.flex_value_id%TYPE INDEX BY BINARY_INTEGER ;
8102     TYPE l_vinf_value_set_id             IS TABLE OF FND_FLEX_VALUE_SETS.flex_value_set_id%TYPE INDEX BY BINARY_INTEGER ;
8103     TYPE l_vinf_validation_type          IS TABLE OF FND_FLEX_VALUE_SETS.VALIDATION_TYPE%TYPE INDEX BY BINARY_INTEGER ;
8104     TYPE l_vinf_format_type              IS TABLE OF FND_FLEX_VALUE_SETS.FORMAT_TYPE%TYPE INDEX BY BINARY_INTEGER ;
8105     TYPE l_vinf_maximum_size             IS TABLE OF FND_FLEX_VALUE_SETS.MAXIMUM_SIZE%TYPE INDEX BY BINARY_INTEGER ;
8106     TYPE l_vinf_number_precision         IS TABLE OF FND_FLEX_VALUE_SETS.NUMBER_PRECISION%TYPE INDEX BY BINARY_INTEGER ;
8107     TYPE l_vinf_alphanum_allowed IS TABLE OF FND_FLEX_VALUE_SETS.ALPHANUMERIC_ALLOWED_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8108     TYPE l_vinf_uppercase_only       IS TABLE OF FND_FLEX_VALUE_SETS.UPPERCASE_ONLY_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8109     TYPE l_vinf_num_mode_enabled IS TABLE OF FND_FLEX_VALUE_SETS.NUMERIC_MODE_ENABLED_FLAG%TYPE INDEX BY BINARY_INTEGER ;
8110     TYPE l_vinf_maximum_value             IS TABLE OF FND_FLEX_VALUE_SETS.MAXIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8111     TYPE l_vinf_minimum_value             IS TABLE OF FND_FLEX_VALUE_SETS.MINIMUM_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8112 
8113 
8114     TYPE l_vinf_flex_value_orig           IS TABLE OF OKC_VS_VALUES_INTERFACE.FLEX_VALUE%TYPE INDEX BY BINARY_INTEGER ;
8115 
8116    l_return_status                      VARCHAR2(1);
8117    l_error_index                        NUMBER          := 1;
8118    l_batch_process_id                   NUMBER          := 1;
8119    l_context                            VARCHAR2(50)    := NULL;
8120    l_init_msg_list                      VARCHAR2(200)   := okc_api.g_true;
8121    l_tot_rows_processed                 NUMBER          := 0;
8122    l_tot_rows_failed                    NUMBER          := 0;
8123    l_tot_rows_warned                    NUMBER          := 0;
8124    l_part_rows_processed                NUMBER          := 0;
8125    l_part_rows_failed                   NUMBER          := 0;
8126    l_part_rows_warned                   NUMBER          := 0;
8127    l_bulk_failed                        VARCHAR2(1)     := 'Y';
8128 
8129 -- Variables for flex values interface
8130    vinf_interface_id_tbl                 l_vinf_interface_id ;
8131    vinf_batch_number_tbl                 l_vinf_batch_number ;
8132    vinf_obj_ver_number_tbl               l_vinf_obj_ver_number ;
8133    vinf_flex_value_set_name_tbl          l_vinf_flex_value_set_name ;
8134    vinf_flex_value_tbl                   l_vinf_flex_value ;
8135    vinf_process_status_tbl               l_vinf_process_status ;
8136    vinf_action_tbl                       l_vinf_action ;
8137    vinf_enabled_flag_tbl                 l_vinf_enabled_flag ;
8138    vinf_start_date_active_tbl            l_vinf_start_date_active ;
8139    vinf_end_date_active_tbl              l_vinf_end_date_active ;
8140    vinf_language_tbl                     l_vinf_language ;
8141    vinf_description_tbl                  l_vinf_description ;
8142    vinf_flex_value_meaning_tbl           l_vinf_flex_value_meaning ;
8143 
8144    vinf_flex_value_id_tbl                l_vinf_flex_value_id ;
8145    vinf_value_set_id_tbl                 l_vinf_value_set_id ;
8146    vinf_validation_type_tbl              l_vinf_validation_type ;
8147    vinf_format_type_tbl                  l_vinf_format_type ;
8148    vinf_maximum_size_tbl                 l_vinf_maximum_size ;
8149    vinf_number_precision_tbl             l_vinf_number_precision ;
8150    vinf_alphanum_allowed_tbl             l_vinf_alphanum_allowed ;
8151    vinf_uppercase_only_tbl               l_vinf_uppercase_only ;
8152    vinf_num_mode_enabled_tbl             l_vinf_num_mode_enabled ;
8153    vinf_maximum_value_tbl                l_vinf_maximum_value ;
8154    vinf_minimum_value_tbl                l_vinf_minimum_value ;
8155 
8156    --vinf_flex_value_orig_tbl              l_vinf_flex_value_orig ;
8157 
8158    I NUMBER := 0;
8159    j NUMBER := 0;
8160    k NUMBER := 0;
8161    x NUMBER := 0;
8162    l_program_id                         OKC_VS_VALUES_INTERFACE.PROGRAM_ID%TYPE;
8163    l_program_login_id                   OKC_VS_VALUES_INTERFACE.PROGRAM_LOGIN_ID%TYPE;
8164    l_program_appl_id                    OKC_VS_VALUES_INTERFACE.PROGRAM_APPLICATION_ID%TYPE;
8165    l_request_id                         OKC_VS_VALUES_INTERFACE.REQUEST_ID%TYPE;
8166    l_rowid                              ROWID;
8167    api_return_status                    VARCHAR2(1);
8168    l_tmp_return_status VARCHAR2(1) := G_RET_STS_SUCCESS;
8169    l_display_value    VARCHAR2(2000);
8170    l_storage_value    VARCHAR2(32000);
8171 
8172 
8173    l_flex_value_set_id NUMBER;
8174    l_flex_value_id     NUMBER;
8175    l_flex_value        VARCHAR2(150);
8176    l_start_date        DATE;
8177    l_end_date          DATE;
8178    l_vs_name           VARCHAR2(1) := NULL;
8179 
8180 
8181 BEGIN
8182 IF (l_debug = 'Y') THEN
8183   okc_debug.log('100: Entered values_import', 2);
8184 END IF;
8185 
8186 
8187 ------------------------------------------------------------------------
8188 --  Variable Initialization
8189 -------------------------------------------------------------------------
8190 
8191 -- Standard Start of API savepoint
8192 FND_MSG_PUB.initialize;
8193 --  Initialize API return status to success
8194 x_return_status := FND_API.G_RET_STS_SUCCESS;
8195 l_return_status := G_RET_STS_SUCCESS;
8196 --  Cache user_id, login_id and org_id
8197 l_user_id  := Fnd_Global.user_id;
8198 l_login_id := Fnd_Global.login_id;
8199 
8200 IF FND_GLOBAL.CONC_PROGRAM_ID = -1 THEN
8201    l_program_id := NULL;
8202 ELSE
8203    l_program_id := FND_GLOBAL.CONC_PROGRAM_ID;
8204 END IF;
8205 
8206 IF FND_GLOBAL.CONC_LOGIN_ID = -1 THEN
8207    l_program_login_id := NULL;
8208 ELSE
8209    l_program_login_id := FND_GLOBAL.CONC_LOGIN_ID;
8210 END IF;
8211 
8212 IF FND_GLOBAL.PROG_APPL_ID = -1 THEN
8213    l_program_appl_id := NULL;
8214 ELSE
8215    l_program_appl_id := FND_GLOBAL.PROG_APPL_ID;
8216 END IF;
8217 
8218 IF FND_GLOBAL.CONC_REQUEST_ID = -1 THEN
8219    l_request_id := NULL;
8220 ELSE
8221    l_request_id := FND_GLOBAL.CONC_REQUEST_ID;
8222 END IF;
8223 
8224 
8225 l_batch_process_id := p_batch_procs_id;
8226 -------------------------------------------------------------------------
8227 --------------- the outermost loop of this procedure --------------------
8228 -- Bulk fetch all interface rows based on the fetchsize passedby the user
8229 -------------------------------------------------------------------------
8230 
8231 l_context :='BULK FETCH FLEX VALUES INTERFACE ROW';
8232 OPEN l_val_interface_csr ( p_batch_number );
8233 LOOP
8234 BEGIN
8235     FETCH l_val_interface_csr BULK COLLECT INTO
8236           vinf_interface_id_tbl                  ,
8237           vinf_batch_number_tbl                  ,
8238           vinf_obj_ver_number_tbl                ,
8239           vinf_flex_value_set_name_tbl           ,
8240           vinf_flex_value_tbl                    ,
8241           vinf_process_status_tbl                ,
8242           vinf_action_tbl                        ,
8243           vinf_enabled_flag_tbl                  ,
8244           vinf_start_date_active_tbl             ,
8245           vinf_end_date_active_tbl               ,
8246           vinf_language_tbl                      ,
8247           vinf_description_tbl                   ,
8248           vinf_flex_value_meaning_tbl            ,
8249           vinf_value_set_id_tbl                  ,
8250           vinf_validation_type_tbl               ,
8251           vinf_format_type_tbl                   ,
8252           vinf_maximum_size_tbl                  ,
8253           vinf_number_precision_tbl              ,
8254           vinf_alphanum_allowed_tbl              ,
8255           vinf_uppercase_only_tbl                ,
8256           vinf_num_mode_enabled_tbl              ,
8257           vinf_maximum_value_tbl                 ,
8258           vinf_minimum_value_tbl                 ,
8259           vinf_flex_value_id_tbl    LIMIT p_fetchsize;
8260     EXIT WHEN vinf_interface_id_tbl.COUNT = 0 ;
8261 
8262     ------------------------------------------------------------------------
8263     -- Variable initialization
8264     -------------------------------------------------------------------------
8265     --For each fetch, value variable table index should be initialized
8266     j := 1;
8267     --##count:initialization
8268     l_tot_rows_processed    := l_tot_rows_processed+l_part_rows_processed;
8269     l_tot_rows_failed       := l_tot_rows_failed+l_part_rows_failed;
8270     l_tot_rows_warned       := l_tot_rows_warned+l_part_rows_warned;
8271     l_part_rows_processed   := 0;
8272     l_part_rows_failed      := 0;
8273     l_part_rows_warned      := 0;
8274     l_bulk_failed           := 'N';
8275     ---------------------------------------------------------------------------
8276     --------------------- Inner Loop thru fetched rows for---------------------
8277     -- validation, parse and validate article text, create a variable list
8278     -- prepare rows for DML if validate_only is 'N'
8279     /***  Processing Rule to set process_status
8280     Because we want to collect as much info as possible, we need to
8281     maintain process status while keeping the process moving.
8282     So, we'll set l_return_status as validation goes on and
8283     at the end we will set inf_process_status_tbl(i) with l_return_status
8284     for final result.  However, we will get out of this process if there
8285     is a significant error such as 'U'.
8286     The return status examined
8287     -api_return_status : return status for api call
8288     -l_return_status : validation result of each row
8289     -x_return_status : final result status for concurrent program request
8290     Rule to set return status
8291     If api_return_status for api call is
8292     * 'S' then continue
8293     * 'W' and l_return_status not 'E' or 'U' then set l_return_status = 'W'
8294         and build_error_array then continue
8295     * 'E' and it is significant then set l_return_status = 'E' and raise
8296       Exception
8297     * 'E' and it is minor then set l_return_status = 'E' and continue. Raise
8298        'E' at the end of validation
8299     * 'U' then set l_return_status = 'U' and raise 'U' exception
8300     * At the end, if it goes thru with no Exception,
8301     Check if l_return_status is 'E' then raise Exception
8302        Otherwise (meaning l_return_status is 'S' or 'W'),
8303           vinf_process_status_tbl(i) = l_return_status
8304     * In the exception, we will set
8305           vinf_process_status_tbl(i) = l_return_status and build_error_array
8306     ***/
8307     -------------------------------------------------------------------------
8308 
8309     FOR i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
8310       BEGIN
8311       -- Increment total processed rows
8312       --##Count
8313       l_part_rows_processed := l_part_rows_processed+1;
8314       -- Initialization for each iteration
8315       l_row_notfound       := FALSE;
8316       l_return_status      := G_RET_STS_SUCCESS;
8317 
8318       l_context := 'VALUES VALIDATING';
8319 
8320       -- To find duplicate values in the same valueset in the batch
8321       IF i>1 THEN
8322          x := i-1;
8323          IF RTRIM(vinf_flex_value_set_name_tbl(i)) = RTRIM(vinf_flex_value_set_name_tbl(x)) AND
8324             RTRIM(vinf_flex_value_tbl(i)) = RTRIM(vinf_flex_value_tbl(x))
8325 	    THEN
8326             Okc_Api.Set_Message(G_APP_NAME,
8327 		                      'OKC_VALSET_VAL_DUP_TITLE',
8328 						  'VALUE',
8329 						  vinf_flex_value_tbl(i),
8330 						  'VALSET',
8331 						  vinf_flex_value_set_name_tbl(i)
8332 						  );
8333             l_return_status := G_RET_STS_ERROR;
8334             RAISE FND_API.G_EXC_ERROR;
8335          END IF;
8336       END IF;
8337       -- Logic to decide what to do in case of Action='S'
8338 
8339 	 IF vinf_action_tbl(i) = 'S' THEN
8340 	    vinf_action_tbl(i) := 'N';
8341 	 END IF;
8342 
8343 
8344 	 IF vinf_action_tbl(i) = 'N' THEN
8345 	 -- Check if value set already exists in the System
8346          IF NOT Fnd_Flex_Val_Api.Valueset_Exists(vinf_flex_value_set_name_tbl(i)) THEN
8347            IF p_validate_only = 'N' THEN
8348             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8349                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8350 						  p_token1   => 'VALUE',
8351 						  p_token1_value => vinf_flex_value_tbl(i),
8352 						  p_token2   => 'VALSET',
8353 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8354 						  );
8355             l_return_status := G_RET_STS_ERROR;
8356             RAISE FND_API.G_EXC_ERROR;
8357            ELSE
8358             IF vinf_validation_type_tbl(i) IS NULL AND vinf_format_type_tbl(i) IS NULL THEN
8359             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8360                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8361 						  p_token1   => 'VALUE',
8362 						  p_token1_value => vinf_flex_value_tbl(i),
8363 						  p_token2   => 'VALSET',
8364 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8365 						  );
8366             l_return_status := G_RET_STS_ERROR;
8367             RAISE FND_API.G_EXC_ERROR;
8368 		  END IF;
8369            END IF;
8370          END IF;
8371 	 END IF;
8372 
8373       IF vinf_action_tbl(i) = 'N' THEN
8374 
8375           --TRIM trailing space because
8376           vinf_flex_value_set_name_tbl(i) := RTRIM(vinf_flex_value_set_name_tbl(i));
8377           vinf_flex_value_tbl(i) := RTRIM(vinf_flex_value_tbl(i));
8378 	    -- Store original value before converting to display format
8379 	    --vinf_flex_value_orig_tbl(i) := vinf_flex_value_orig_tbl(i);
8380 
8381          -- Need to convert flex value to display format
8382 	    vinf_flex_value_tbl(i) := Fnd_Flex_Val_Util.to_display_value
8383 		          (p_value          => vinf_flex_value_tbl(i),
8384 			      p_vset_format    => vinf_format_type_tbl(i),
8385 			      p_vset_name      => vinf_flex_value_set_name_tbl(i),
8386 			      p_max_length     => vinf_maximum_size_tbl(i),
8387 			      p_precision      => vinf_number_precision_tbl(i),
8388 			      p_alpha_allowed  => vinf_alphanum_allowed_tbl(i),
8389 			      p_uppercase_only => vinf_uppercase_only_tbl(i),
8390 			      p_zero_fill      => vinf_num_mode_enabled_tbl(i),
8391 			      p_min_value      => vinf_minimum_value_tbl(i),
8392 			      p_max_value      => vinf_maximum_value_tbl(i));
8393 
8394       ELSIF vinf_action_tbl(i) = 'D' THEN
8395          IF vinf_end_date_active_tbl(i) IS NULL THEN
8396                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8397                                       p_msg_name => 'OKC_NULL_END_DATE');
8398                   l_return_status := G_RET_STS_ERROR;
8399                   RAISE FND_API.G_EXC_ERROR;
8400          END IF;
8401 
8402          -- Check if value exists in the system or not
8403          OPEN l_val_exist_csr(vinf_flex_value_tbl(i),vinf_value_set_id_tbl(i));
8404          FETCH l_val_exist_csr INTO l_flex_value_set_id,
8405                                     l_flex_value_id,
8406                                     l_flex_value,
8407                                     l_start_date,
8408                                     l_end_date;
8409          IF l_val_exist_csr%NOTFOUND THEN
8410                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8411                                       p_msg_name => 'OKC_INVALID_VS_VALUE',
8412 					                p_token1=> 'VALUE',
8413 					                p_token1_value => vinf_flex_value_tbl(i),
8414 					                p_token2=> 'VALSET',
8415 					                p_token2_value => vinf_flex_value_set_name_tbl(i));
8416                   l_return_status := G_RET_STS_ERROR;
8417                   RAISE FND_API.G_EXC_ERROR;
8418 
8419          ELSE
8420 
8421             IF l_start_date IS NOT NULL
8422             THEN
8423                IF l_start_date > vinf_end_date_active_tbl(i) THEN
8424                   Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8425                                       p_msg_name => 'OKC_INVALID_END_DATE');
8426                   l_return_status := G_RET_STS_ERROR;
8427                   RAISE FND_API.G_EXC_ERROR;
8428                END IF;
8429             END IF;
8430          END IF;
8431 
8432 	    CLOSE l_val_exist_csr;
8433       ELSE
8434 
8435           Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8436                   p_msg_name     => 'OKC_VAL_INV_IMP_ACTION');
8437           l_return_status := G_RET_STS_ERROR;
8438           RAISE FND_API.G_EXC_ERROR ;
8439       END IF;
8440 
8441       -----------------------------------------------------------
8442       -- Common validation or attribute settting
8443       -- regardless of status and import action
8444       -- this validation is not included in validate api
8445       -----------------------------------------------------------
8446       IF vinf_action_tbl(i) = 'N' THEN
8447 	 /*
8448 	 -- Check if value set already exists in the System
8449          IF NOT Fnd_Flex_Val_Api.Valueset_Exists(vinf_flex_value_set_name_tbl(i)) THEN
8450            IF p_validate_only = 'N' THEN
8451             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8452                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8453 						  p_token1   => 'VALUE',
8454 						  p_token1_value => vinf_flex_value_tbl(i),
8455 						  p_token2   => 'VALSET',
8456 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8457 						  );
8458             l_return_status := G_RET_STS_ERROR;
8459            ELSE
8460             IF vinf_validation_type_tbl(i) IS NULL AND vinf_format_type_tbl(i) IS NULL THEN
8461             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8462                                 p_msg_name => 'OKC_VALSET_NOT_EXISTS',
8463 						  p_token1   => 'VALUE',
8464 						  p_token1_value => vinf_flex_value_tbl(i),
8465 						  p_token2   => 'VALSET',
8466 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8467 						  );
8468             l_return_status := G_RET_STS_ERROR;
8469 		  END IF;
8470            END IF;
8471          END IF;
8472 	    */
8473 
8474 
8475       -- Check if Validation Type for value set is 'I' otherwise values cannot be created
8476           IF (vinf_validation_type_tbl(i) <> 'I') THEN
8477             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8478                                 p_msg_name => 'OKC_VAL_VALSET_NOT_VALID',
8479 						  p_token1   => 'VALUE',
8480 						  p_token1_value => vinf_flex_value_tbl(i),
8481 						  p_token2   => 'VALSET',
8482 						  p_token2_value => vinf_flex_value_set_name_tbl(i)
8483 						  );
8484             l_return_status := G_RET_STS_ERROR;
8485          END IF;
8486 
8487 
8488 	 -- Check if value is valid for the value set
8489            l_display_value := fnd_flex_ext.get_message;
8490           IF (NOT Fnd_Flex_Val_Util.Is_Value_Valid
8491 		          (p_value          => vinf_flex_value_tbl(i),
8492 				 --p_is_displayed   => TRUE,
8493 			      p_vset_name      => vinf_flex_value_set_name_tbl(i),
8494 			      p_vset_format    => vinf_format_type_tbl(i),
8495 			      p_max_length     => vinf_maximum_size_tbl(i),
8496 			      p_precision      => vinf_number_precision_tbl(i),
8497 			      p_alpha_allowed  => vinf_alphanum_allowed_tbl(i),
8498 			      p_uppercase_only => vinf_uppercase_only_tbl(i),
8499 			      p_zero_fill      => vinf_num_mode_enabled_tbl(i),
8500 			      p_min_value      => vinf_minimum_value_tbl(i),
8501 			      p_max_value      => vinf_maximum_value_tbl(i),
8502 			      x_storage_value  => l_storage_value,
8503 			      x_display_value  => l_display_value)) THEN
8504             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8505                                 p_msg_name => 'OKC_VAL_NOT_VALID');
8506             l_return_status := G_RET_STS_ERROR;
8507          END IF;
8508 
8509       IF nvl(vinf_enabled_flag_tbl(i),'*') not in ('N','Y')  THEN
8510             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8511                                 p_msg_name => 'OKC_INVALID_ENABLED_FLAG');
8512             l_return_status := G_RET_STS_ERROR;
8513 
8514       END IF;
8515 
8516       IF vinf_start_date_active_tbl(i) IS NOT NULL
8517 	 AND vinf_end_date_active_tbl(i)  IS NOT NULL
8518 	 THEN
8519 	    IF vinf_start_date_active_tbl(i) > vinf_end_date_active_tbl(i) THEN
8520             Okc_Api.Set_Message(p_app_name => G_APP_NAME,
8521                                 p_msg_name => 'OKC_INVALID_END_DATE');
8522             l_return_status := G_RET_STS_ERROR;
8523          END IF;
8524       END IF;
8525 
8526     END IF;
8527       ------------------------------------------------------------------------
8528       -- Now that we have validated and data is clean,  we can
8529       -- get ready for DML and also set the process status to Success
8530       -------------------------------------------------------------------------
8531 
8532       -- Summarize report for this row
8533       -- Status 'F' is for internal use meaning parsing failure marked in
8534       -- java concurrent program
8535       IF (l_return_status = G_RET_STS_SUCCESS) THEN
8536          IF (nvl(vinf_process_status_tbl(i), 'E') = 'E') THEN
8537            vinf_process_status_tbl(i) := G_RET_STS_SUCCESS;
8538          ELSIF ( vinf_process_status_tbl(i) = 'F') THEN
8539            -- ##count parser failure as error
8540            --l_tot_rows_failed := l_tot_rows_failed+1;
8541            l_part_rows_failed := l_part_rows_failed+1;
8542            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8543          END IF;
8544       ELSIF (l_return_status = l_sts_warning) THEN
8545          IF (nvl(vinf_process_status_tbl(i),'E') = 'E') THEN
8546            vinf_process_status_tbl(i) := l_sts_warning;
8547            --##count
8548            --l_tot_rows_warned := l_tot_rows_warned+1;
8549            l_part_rows_warned := l_part_rows_warned+1;
8550          ELSIF (vinf_process_status_tbl(i) = 'F') THEN
8551            -- ##count parser failure as error
8552            --l_tot_rows_failed := l_tot_rows_failed+1;
8553            l_part_rows_failed := l_part_rows_failed+1;
8554            vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8555          END IF;
8556       ELSIF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
8557            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8558       ELSIF (l_return_status = G_RET_STS_ERROR) THEN
8559            RAISE FND_API.G_EXC_ERROR;
8560       END IF;
8561 
8562     -------------------------
8563     -------------------------
8564     -- Exception Block for each iteration in Loop
8565     -- validation and unexpected errors
8566     -- In case of unexpected error, escape the loop
8567     -------------------------
8568     -------------------------
8569 
8570 
8571       EXCEPTION
8572           WHEN FND_API.G_EXC_ERROR THEN
8573               IF (l_debug = 'Y') THEN
8574                  okc_debug.log('300: In Fnd_flex_values_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
8575               END IF;
8576               IF l_val_exist_csr%ISOPEN THEN
8577 	            CLOSE l_val_exist_csr;
8578               END IF;
8579               --l_return_status := G_RET_STS_ERROR ;
8580               build_error_array(
8581                  p_msg_data     => x_msg_data,
8582                  p_context      => l_context,
8583                  p_batch_process_id => l_batch_process_id,
8584                  p_interface_id  => vinf_interface_id_tbl(i),
8585                  p_article_title => vinf_flex_value_tbl(i),
8586                  p_error_type    => G_RET_STS_ERROR,
8587                  p_entity        => 'VALUE'
8588                 );
8589                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8590                --##count
8591                --l_tot_rows_failed := l_tot_rows_failed+1;
8592                l_part_rows_failed := l_part_rows_failed+1;
8593                -- Continue to next row
8594 
8595           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8596               IF (l_debug = 'Y') THEN
8597                  okc_debug.log('400: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
8598               END IF;
8599 
8600               IF l_val_exist_csr%ISOPEN THEN
8601 	            CLOSE l_val_exist_csr;
8602               END IF;
8603               IF l_val_interface_csr%ISOPEN THEN
8604                  CLOSE l_val_interface_csr;
8605               END IF;
8606 
8607               --Set_Message
8608               l_return_status := G_RET_STS_UNEXP_ERROR ;
8609               x_return_status := G_RET_STS_UNEXP_ERROR ;
8610 
8611               build_error_array(
8612                  p_msg_data     => x_msg_data,
8613                  p_context      => l_context,
8614                  p_batch_process_id => l_batch_process_id,
8615                  p_interface_id  => vinf_interface_id_tbl(i),
8616                  p_article_title => vinf_flex_value_tbl(i),
8617                  p_error_type    => G_RET_STS_UNEXP_ERROR,
8618 			  p_entity        => 'VALUE'
8619                  );
8620                vinf_process_status_tbl(i) := G_RET_STS_ERROR;
8621                --##count
8622                --l_tot_rows_failed := l_tot_rows_failed+1;
8623                l_part_rows_failed := l_part_rows_failed+1;
8624               exit; -- exit the current fetch
8625 
8626           WHEN OTHERS THEN
8627               IF (l_debug = 'Y') THEN
8628                 okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
8629               END IF;
8630               IF l_val_exist_csr%ISOPEN THEN
8631 	            CLOSE l_val_exist_csr;
8632               END IF;
8633 
8634               IF l_val_interface_csr%ISOPEN THEN
8635                  CLOSE l_val_interface_csr;
8636               END IF;
8637 
8638               l_return_status := G_RET_STS_UNEXP_ERROR ;
8639               x_return_status := G_RET_STS_UNEXP_ERROR ;
8640 
8641               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8642                                 p_msg_name     => G_UNEXPECTED_ERROR,
8643                                 p_token1       => G_SQLCODE_TOKEN,
8644                                 p_token1_value => sqlcode,
8645                                 p_token2       => G_SQLERRM_TOKEN,
8646                                 p_token2_value => sqlerrm);
8647 
8648               build_error_array(
8649                  p_msg_data     => G_UNEXPECTED_ERROR,
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               exit;  -- exit the current fetch
8662           END;
8663     -------------------------
8664     -------------------------
8665     -- Exception Block for each iteration in Loop ends
8666     -------------------------
8667     -------------------------
8668 
8669 
8670      END LOOP; -- end of FOR i in inf_interface_id_tbl.FIRST ..
8671     ------------------------------------------------------------------------
8672     -------------- End of Inner Loop thru fetched row for validation --------
8673     -------------------------------------------------------------------------
8674     -- In order to propagate Unexpected error raise it if it is 'U'
8675     IF (l_return_status = G_RET_STS_UNEXP_ERROR) THEN
8676          RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
8677     END IF;
8678 
8679     -------------------------
8680     -------------------------
8681     -- Exception Block for Inner Loop starts
8682     -- Handles unexpected errors as last step
8683     -------------------------
8684     -------------------------
8685     EXCEPTION
8686          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8687              IF (l_debug = 'Y') THEN
8688                 okc_debug.log('400: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
8689              END IF;
8690               IF l_val_exist_csr%ISOPEN THEN
8691 	            CLOSE l_val_exist_csr;
8692               END IF;
8693 
8694              IF l_val_interface_csr%ISOPEN THEN
8695                 CLOSE l_val_interface_csr;
8696              END IF;
8697              l_return_status := G_RET_STS_UNEXP_ERROR ;
8698              x_return_status := G_RET_STS_UNEXP_ERROR ;
8699              exit; -- exit outermost loop
8700 
8701         WHEN OTHERS THEN
8702              IF (l_debug = 'Y') THEN
8703                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
8704              END IF;
8705               IF l_val_exist_csr%ISOPEN THEN
8706 	            CLOSE l_val_exist_csr;
8707               END IF;
8708 
8709              IF l_val_interface_csr%ISOPEN THEN
8710                 CLOSE l_val_interface_csr;
8711              END IF;
8712              l_return_status := G_RET_STS_UNEXP_ERROR ;
8713              x_return_status := G_RET_STS_UNEXP_ERROR ;
8714              exit; -- exit outermost loop
8715      END;
8716 
8717     -------------------------
8718     -------------------------
8719     -- Exception Block for Each Iteration of outermost Loop ends
8720     -------------------------
8721     -------------------------
8722 
8723     ------------------------------------------------------------------------
8724     --------------------- Start Do_DML for Fnd Flex Values   ---------------
8725     -- Insert Fnd Flex Values
8726     -------------------------------------------------------------------------
8727     -- initialize l_return_status to track status of DML execution
8728      l_return_status := G_RET_STS_SUCCESS;
8729 
8730 
8731     IF p_validate_only = 'N' THEN
8732          BEGIN
8733          SAVEPOINT bulkdml;
8734 
8735          i := 0;
8736         -- Bulk insert New Valid Records
8737          BEGIN
8738          l_context := 'INSERTING NEW VALUES INTO TABLE';
8739            FOR  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
8740 
8741 		  IF vinf_action_tbl(i) = 'N' AND vinf_process_status_tbl(i) in ('S','W') THEN
8742 
8743 
8744   FND_FLEX_VAL_API.CREATE_INDEPENDENT_VSET_VALUE(
8745          P_FLEX_VALUE_SET_NAME     => vinf_flex_value_set_name_tbl(i),
8746 	 P_FLEX_VALUE              => vinf_flex_value_tbl(i),
8747 	 P_DESCRIPTION             => vinf_description_tbl(i),
8748 	 P_ENABLED_FLAG            => vinf_enabled_flag_tbl(i),
8749 	 P_START_DATE_ACTIVE       => vinf_start_date_active_tbl(i),
8750 	 P_END_DATE_ACTIVE         => vinf_end_date_active_tbl(i),
8751 	 P_SUMMARY_FLAG            => 'N',
8752 	 P_STRUCTURED_HIERARCHY_LEVEL => NULL,
8753 	 P_HIERARCHY_LEVEL         => NULL,
8754 	 X_STORAGE_VALUE           => l_storage_value);
8755 
8756 		   END IF;
8757         END LOOP;
8758 
8759         EXCEPTION
8760            WHEN OTHERS THEN
8761              IF (l_debug = 'Y') THEN
8762                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
8763              END IF;
8764              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
8765           END;
8766 
8767          --
8768          --  End of Insert into FND FLEX VALUES
8769          --
8770          --
8771 
8772          i := 0;
8773         -- Bulk disable Valid Records
8774          BEGIN
8775          l_context := 'DISABLE VALUES BY UPDATING THE END DATE';
8776            FOR  i in vinf_interface_id_tbl.FIRST ..vinf_interface_id_tbl.LAST LOOP
8777 
8778 		  IF vinf_action_tbl(i) = 'D' AND vinf_process_status_tbl(i) in ('S','W') THEN
8779 
8780 
8781   FND_FLEX_VAL_API.UPDATE_INDEPENDENT_VSET_VALUE(
8782          P_FLEX_VALUE_SET_NAME     => vinf_flex_value_set_name_tbl(i),
8783 	 P_FLEX_VALUE              => vinf_flex_value_tbl(i),
8784 	 --P_DESCRIPTION             => vinf_description_tbl(i),
8785 	 --P_ENABLED_FLAG            => vinf_enabled_flag_tbl(i),
8786 	 --P_START_DATE_ACTIVE       => vinf_start_date_active_tbl(i),
8787 	 P_END_DATE_ACTIVE         => vinf_end_date_active_tbl(i),
8788 	 --P_SUMMARY_FLAG            => 'N',
8789 	 --P_STRUCTURED_HIERARCHY_LEVEL => NULL,
8790 	 --P_HIERARCHY_LEVEL         => NULL,
8791 	 X_STORAGE_VALUE           => l_storage_value);
8792 
8793 		   END IF;
8794         END LOOP;
8795 
8796         EXCEPTION
8797            WHEN OTHERS THEN
8798              IF (l_debug = 'Y') THEN
8799                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||l_context||sqlerrm, 2);
8800              END IF;
8801              RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
8802           END;
8803 
8804          --
8805          --  End of Disable FND FLEX VALUES
8806          --
8807          --
8808 
8809 
8810 
8811       -- Exception for bulk DML block
8812       EXCEPTION
8813         WHEN OTHERS THEN
8814              l_bulk_failed := 'Y'; -- indicating that bulk operation has failed
8815               Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8816                                   p_msg_name     => G_UNEXPECTED_ERROR,
8817                                   p_token1       => G_SQLCODE_TOKEN,
8818                                   p_token1_value => sqlcode,
8819                                   p_token2       => G_SQLERRM_TOKEN,
8820                                   p_token2_value => sqlerrm);
8821               Okc_API.Set_Message(p_app_name     => G_APP_NAME,
8822                                   p_msg_name     => 'OKC_ART_FETCH_FAILED',
8823                                   p_token1       => 'CONTEXT',
8824                                   p_token1_value => l_context);
8825 
8826               build_error_array(
8827                                  p_msg_data     => null,
8828                                  p_context      => l_context,
8829                                  p_batch_process_id => l_batch_process_id,
8830                                  p_interface_id  => -99,
8831                                  p_article_title => NULL,
8832                                  p_error_type    => G_RET_STS_ERROR,
8833 						   p_entity        => 'VALUE'
8834               );
8835               l_return_status := G_RET_STS_UNEXP_ERROR;
8836               x_return_status := G_RET_STS_UNEXP_ERROR;
8837 
8838               --##count:rollback the count
8839               l_part_rows_failed := l_part_rows_processed;
8840               l_part_rows_warned := 0;
8841 
8842               ROLLBACK TO SAVEPOINT bulkdml;
8843               exit; -- exit outermost loop
8844       END;
8845 
8846     END IF; --- validate_only = 'N'
8847 
8848     ------------------------------------------------------------------------
8849     --------------------- End of Do_DML for Values   ---------------
8850     -------------------------------------------------------------------------
8851 
8852     ------------------------------------------------------------------------
8853     --------------- Start of Do_DML for import related tables   ------------
8854     -- Update interface table
8855     -- Insert Errors into Error table
8856     -------------------------------------------------------------------------
8857     -- Update Interface Table
8858     i:=0;
8859     BEGIN
8860      l_context := 'UPDATING VALUES INTERFACE TABLE';
8861      FORALL i in vinf_interface_id_tbl.FIRST..vinf_interface_id_tbl.LAST
8862        UPDATE OKC_VS_VALUES_INTERFACE
8863        SET
8864            -- We don't want to update process_status to 'S' or 'W' in validation_mode
8865            -- because it is not going to be picked up in next run if we do so
8866            PROCESS_STATUS = decode(p_validate_only||vinf_process_status_tbl(i)||l_bulk_failed,
8867                                                'NEN','E',
8868                                                'NSN','S',
8869                                                'NWN','W',
8870                                                'NEY','E',
8871                                                'NSY',NULL,
8872                                                'NWY',NULL,
8873                                                'YEY','E',
8874                                                'YEN','E',
8875                                                'NFY','E',
8876                                                'YFY','E',
8877                                                'NFN','E',
8878                                                'YFN','E',NULL),
8879            PROGRAM_ID                 = l_program_id,
8880            REQUEST_ID                 = l_request_id,
8881            PROGRAM_LOGIN_ID           = l_program_login_id,
8882            PROGRAM_APPLICATION_ID     = l_program_appl_id,
8883            OBJECT_VERSION_NUMBER      = vinf_obj_ver_number_tbl(i) + 1,
8884            LAST_UPDATED_BY            = l_user_id,
8885            LAST_UPDATE_LOGIN          = l_login_id,
8886            LAST_UPDATE_DATE           = SYSDATE
8887          WHERE
8888            interface_id = vinf_interface_id_tbl(i);
8889     EXCEPTION
8890            WHEN OTHERS THEN
8891              IF (l_debug = 'Y') THEN
8892                okc_debug.log('500: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
8893              END IF;
8894 
8895              Okc_Api.Set_Message(p_app_name     => G_APP_NAME,
8896                         p_msg_name     => G_UNEXPECTED_ERROR,
8897                         p_token1       => G_SQLCODE_TOKEN,
8898                         p_token1_value => sqlcode,
8899                         p_token2       => G_SQLERRM_TOKEN,
8900                         p_token2_value => sqlerrm);
8901              Okc_API.Set_Message(p_app_name     => G_APP_NAME,
8902                         p_msg_name     => 'OKC_VAL_INT_UPDATE_FAILED');
8903              build_error_array(
8904                        p_msg_data     => null,
8905                        p_context      => l_context,
8906                        p_batch_process_id => l_batch_process_id,
8907                        p_interface_id  => -99,
8908                        p_article_title => NULL,
8909                        p_error_type    => G_RET_STS_ERROR,
8910 				   p_entity        => 'VALUE'
8911              );
8912 
8913 		      l_return_status := G_RET_STS_UNEXP_ERROR ;
8914 		      x_return_status := G_RET_STS_UNEXP_ERROR ;
8915 		       --##count:rollback the count
8916 		      l_part_rows_failed := l_part_rows_processed;
8917 		      l_part_rows_warned := 0;
8918 
8919              --RAISE FND_API.G_EXC_ERROR ;
8920   END;
8921    --
8922    -- End of Update OKC_VS_VALUES_INTERFACE
8923    --
8924    --
8925 
8926     --
8927     --Insert Errors into Error table for this fetch
8928     --
8929     insert_error_array(
8930      x_return_status => x_return_status,
8931      x_msg_count     => x_msg_count,
8932      x_msg_data      => x_msg_data
8933     );
8934 
8935 
8936     IF (x_return_status = l_insert_errors_error) THEN
8937       NULL;
8938      -- Ignore
8939      -- RAISE l_insert_errors_exception;
8940     END IF;
8941 
8942     ------------------------------------------------------------------------
8943     --------------- End of Do_DML for import related tables   ------------
8944     -------------------------------------------------------------------------
8945     commit;
8946 
8947     -- Now delete cache for next bulk fetch
8948 
8949     vinf_interface_id_tbl.DELETE;
8950     vinf_batch_number_tbl.DELETE;
8951     vinf_obj_ver_number_tbl.DELETE;
8952     vinf_flex_value_set_name_tbl.DELETE;
8953     vinf_flex_value_tbl.DELETE;
8954     vinf_process_status_tbl.DELETE;
8955     vinf_action_tbl.DELETE;
8956     vinf_enabled_flag_tbl.DELETE;
8957     vinf_start_date_active_tbl.DELETE;
8958     vinf_end_date_active_tbl.DELETE;
8959     vinf_language_tbl.DELETE;
8960     vinf_description_tbl.DELETE;
8961     vinf_flex_value_meaning_tbl.DELETE;
8962 
8963     vinf_flex_value_id_tbl.DELETE;
8964     vinf_value_set_id_tbl.DELETE;
8965     vinf_format_type_tbl.DELETE;
8966     vinf_maximum_size_tbl.DELETE;
8967     vinf_number_precision_tbl.DELETE;
8968     vinf_alphanum_allowed_tbl.DELETE;
8969     vinf_uppercase_only_tbl.DELETE;
8970     vinf_num_mode_enabled_tbl.DELETE;
8971     vinf_maximum_value_tbl.DELETE;
8972     vinf_minimum_value_tbl.DELETE;
8973 
8974     --vinf_flex_value_orig_tbl.DELETE;
8975 
8976     err_batch_process_id_tbl.DELETE;
8977     err_article_title_tbl.DELETE;
8978     err_interface_id_tbl.DELETE;
8979     err_error_number_tbl.DELETE;
8980     err_object_version_number_tbl.DELETE;
8981     err_error_type_tbl.DELETE;
8982     err_entity_tbl.DELETE;
8983     err_error_description_tbl.DELETE;
8984 
8985    EXIT WHEN l_val_interface_csr%NOTFOUND;
8986 END LOOP;
8987 
8988 
8989 -----------------------------------------------------------------------
8990 -- End of outermost loop for bulk fetch
8991 -----------------------------------------------------------------------
8992 
8993 IF l_val_interface_csr%ISOPEN THEN
8994 CLOSE l_val_interface_csr;
8995 END IF;
8996 
8997 
8998 --##count:add up last processed counts
8999 l_tot_rows_processed := l_tot_rows_processed + l_part_rows_processed;
9000 l_tot_rows_failed := l_tot_rows_failed + l_part_rows_failed;
9001 l_tot_rows_warned := l_tot_rows_warned + l_part_rows_warned;
9002 
9003 --Update Batch Process Table as a last step
9004 UPDATE OKC_ART_INT_BATPROCS_ALL
9005 SET
9006   TOTAL_ROWS_PROCESSED       = l_tot_rows_processed,
9007   TOTAL_ROWS_FAILED          = l_tot_rows_failed,
9008   TOTAL_ROWS_WARNED          = l_tot_rows_warned,
9009   END_DATE                   = SYSDATE,
9010   PROGRAM_ID                 = l_program_id,
9011   REQUEST_ID                 = l_request_id,
9012   PROGRAM_LOGIN_ID           = l_program_login_id,
9013   PROGRAM_APPLICATION_ID     = l_program_appl_id,
9014   OBJECT_VERSION_NUMBER      = OBJECT_VERSION_NUMBER + 1,
9015   LAST_UPDATED_BY            = l_user_id,
9016   LAST_UPDATE_LOGIN          = l_login_id,
9017   LAST_UPDATE_DATE           = SYSDATE
9018 WHERE
9019   BATCH_PROCESS_ID  = l_batch_process_id
9020   AND ENTITY = 'Value';
9021 
9022 IF err_error_number_tbl.COUNT > 0 THEN
9023  insert_error_array(
9024    x_return_status => x_return_status,
9025    x_msg_count     => x_msg_count,
9026    x_msg_data      => x_msg_data
9027  );
9028 END IF;
9029 
9030 -- Print statistic of this run in the log
9031 -- Commented for new XML Based Import - Moved to new_wrap_up in conc_import_articles
9032 --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');
9033 commit; -- Final commit for status update
9034 
9035 IF (l_debug = 'Y') THEN
9036  okc_debug.log('2000: Leaving Fnd_flex_values import', 2);
9037 END IF;
9038 --x_return_status := l_return_status; this may cause to erase error x_return_status
9039 
9040 EXCEPTION
9041 
9042   WHEN FND_API.G_EXC_ERROR THEN
9043       IF (l_debug = 'Y') THEN
9044          okc_debug.log('3000: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_ERROR Exception', 2);
9045       END IF;
9046       --Insert Errors into Error table if there is any
9047       insert_error_array(
9048        x_return_status => x_return_status,
9049        x_msg_count     => x_msg_count,
9050        x_msg_data      => x_msg_data
9051       );
9052       x_return_status := G_RET_STS_ERROR ;
9053 
9054       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9055       IF (l_debug = 'Y') THEN
9056          okc_debug.log('4000: Leaving Fnd_flex_values_Import: OKC_API.G_EXCEPTION_UNEXPECTED_ERROR Exception', 2);
9057       END IF;
9058       --Insert Errors into Error table if there is any
9059 
9060       insert_error_array(
9061        x_return_status => x_return_status,
9062        x_msg_count     => x_msg_count,
9063        x_msg_data      => x_msg_data
9064       );
9065       commit;
9066 
9067       IF l_val_interface_csr%ISOPEN THEN
9068          CLOSE l_val_interface_csr;
9069       END IF;
9070 
9071       x_return_status := G_RET_STS_UNEXP_ERROR ;
9072       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
9073         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
9074       END IF;
9075       get_print_msgs_stack(p_msg_data => x_msg_data);
9076 
9077   WHEN l_insert_errors_exception THEN
9078       --
9079       -- In this exception handling, we don't insert error array again
9080       -- because error happend in the module
9081       --
9082       IF (l_debug = 'Y') THEN
9083         okc_debug.log('5000: Leaving Fnd_flex_values_Import because of EXCEPTION in insert_error_array: '||sqlerrm, 2);
9084       END IF;
9085 
9086       IF l_val_interface_csr%ISOPEN THEN
9087          CLOSE l_val_interface_csr;
9088       END IF;
9089 
9090 
9091       --x_return_status := G_RET_STS_UNEXP_ERROR ;
9092       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
9093         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
9094       END IF;
9095       get_print_msgs_stack(p_msg_data => x_msg_data);
9096       commit;
9097 
9098   WHEN OTHERS THEN
9099       IF (l_debug = 'Y') THEN
9100         okc_debug.log('5000: Leaving Fnd_flex_values_Import because of EXCEPTION: '||sqlerrm, 2);
9101       END IF;
9102       --Insert Errors into Error table if there is any
9103       insert_error_array(
9104        x_return_status => x_return_status,
9105        x_msg_count     => x_msg_count,
9106        x_msg_data      => x_msg_data
9107       );
9108       commit;
9109       --
9110       IF l_val_interface_csr%ISOPEN THEN
9111          CLOSE l_val_interface_csr;
9112       END IF;
9113 
9114       x_return_status := G_RET_STS_UNEXP_ERROR ;
9115       IF FND_MSG_PUB.Check_Msg_Level( FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR ) THEN
9116         FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME, l_api_name );
9117       END IF;
9118 	 get_print_msgs_stack(p_msg_data => x_msg_data);
9119 END import_fnd_flex_values;
9120 
9121 -- MOAC
9122 /*
9123   BEGIN
9124        OPEN cur_org_csr;
9125        FETCH cur_org_csr INTO G_CURRENT_ORG_ID;
9126        CLOSE cur_org_csr;
9127 */
9128 
9129 END OKC_ARTICLES_IMPORT_GRP;