DBA Data[Home] [Help]

PACKAGE BODY: APPS.JTF_AMV_ITEM_PUB

Source


1 PACKAGE BODY jtf_amv_item_pub AS
2 /*  $Header: jtfpitmb.pls 115.8 2002/11/26 19:15:41 stopiwal ship $ */
3 --
4 -- NAME
5 --   JTF_AMV_ITEM_PUB
6 --
7 -- HISTORY
8 --   11/30/1999        PWU        CREATED
9 --
10 G_PKG_NAME          CONSTANT VARCHAR2(30) := 'JTF_AMV_ITEM_PUB';
11 G_FILE_NAME         CONSTANT VARCHAR2(12) := 'jtfpitmb.pls';
12 --
13 G_EMP_RES_CATE      CONSTANT VARCHAR2(30) := 'EMPLOYEE';
14 G_USED_BY_ITEM      CONSTANT VARCHAR2(30) := 'ITEM';
15 G_MES_APPL_ID       CONSTANT NUMBER := 520;
16 -- G_ISTORE_APPL_ID    CONSTANT NUMBER := 671; --short name 'IBE'
17 --
18 TYPE    CursorType    IS REF CURSOR;
19 --
20 --------------------------------------------------------------------------------
21 ------------------------------- Private Proceudre ------------------------------
22 FUNCTION CURRENT_USER_ID return number AS
23 BEGIN
24     return FND_GLOBAL.user_id;
25 END CURRENT_USER_ID;
26 --
27 FUNCTION CURRENT_LOGIN_ID return number AS
28 BEGIN
29     return FND_GLOBAL.conc_login_id;
30 END CURRENT_LOGIN_ID;
31 
32 FUNCTION check_lookup_exists(
33    p_lookup_table_name  IN VARCHAR2 := 'FND_LOOKUP_VALUES',
34    p_lookup_type        IN VARCHAR2,
35    p_lookup_code        IN VARCHAR2
36 ) Return VARCHAR2 AS
37    l_sql   VARCHAR2(200);
38    l_count NUMBER;
39 BEGIN
40    l_sql := 'SELECT COUNT(*) FROM ' || p_lookup_table_name;
41    l_sql := l_sql || ' WHERE lookup_type = ''' || p_lookup_type ||'''';
42    l_sql := l_sql || ' AND lookup_code = ''' || p_lookup_code ||'''';
43    l_sql := l_sql || ' AND enabled_flag = ''Y''';
44 
45    EXECUTE IMMEDIATE l_sql INTO l_count;
46 
47    IF l_count = 0 THEN
48       RETURN FND_API.g_false;
49    ELSE
50       RETURN FND_API.g_true;
51    END IF;
52 END check_lookup_exists;
53 
54 FUNCTION Is_ApplIdValid
55 (
56     p_application_id IN NUMBER
57 ) RETURN Boolean  AS
58 --
59 CURSOR Check_ApplicationID_csr is
60 Select application_id
61 From   fnd_application
62 where  application_id = p_application_id;
63 l_valid_flag  BOOLEAN := FALSE;
64 l_tmp_number  NUMBER;
65 --
66 BEGIN
67   OPEN  Check_ApplicationID_csr;
68   FETCH Check_ApplicationID_csr INTO l_tmp_number;
69   IF (Check_ApplicationID_csr%NOTFOUND) THEN
70       l_valid_flag := FALSE;
71   ELSE
72       l_valid_flag := TRUE;
73   END IF;
74   CLOSE Check_ApplicationID_csr;
75   return l_valid_flag;
76 END Is_ApplIdValid;
77 --------------------------------------------------------------------------------
78 FUNCTION Is_ItemIdValid
79 (
80     p_item_id IN NUMBER
81 ) RETURN Boolean  AS
82 --
83 CURSOR Check_ItemID_csr is
84 Select item_id
85 From   jtf_amv_items_b
86 where  item_id = p_item_id;
87 l_valid_flag  BOOLEAN := FALSE;
88 l_tmp_number  NUMBER;
89 --
90 BEGIN
91   OPEN  Check_ItemID_csr;
92   FETCH Check_ItemID_csr INTO l_tmp_number;
93   IF (Check_ItemID_csr%NOTFOUND) THEN
94      l_valid_flag := FALSE;
95   ELSE
96      l_valid_flag := TRUE;
97   END IF;
98   CLOSE Check_ItemID_csr;
99   return l_valid_flag;
100 END Is_ItemIdValid;
101 --------------------------------------------------------------------------------
102 --------------------------------------------------------------------------------
103 PROCEDURE Create_Item
104 (
105     p_api_version       IN  NUMBER,
106     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
107     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
108     x_return_status     OUT NOCOPY  VARCHAR2,
109     x_msg_count         OUT NOCOPY  NUMBER,
110     x_msg_data          OUT NOCOPY  VARCHAR2,
111     p_item_rec          IN  ITEM_REC_TYPE,
112     x_item_id           OUT NOCOPY  NUMBER
113 )  IS
114 l_api_name             CONSTANT VARCHAR2(30) := 'Create_Item';
115 l_api_version          CONSTANT NUMBER := 1.0;
116 --
117 l_row_id               VARCHAR2(500);
118 l_current_date         DATE;
119 l_item_rec             ITEM_REC_TYPE := p_item_rec;
120 --
121 CURSOR Get_DateAndId_csr IS
122 select
123       JTF_AMV_ITEMS_B_S.nextval, sysdate
124 from dual;
125 --
126 BEGIN
127     -- Standard call to check for call compatibility.
128     SAVEPOINT  Create_Item_Pub;
129     IF NOT FND_API.Compatible_API_Call (
130          l_api_version,
131          p_api_version,
132          l_api_name,
133          G_PKG_NAME) THEN
134         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
135     END IF;
136     --Initialize message list if p_init_msg_list is TRUE.
137     IF FND_API.To_Boolean (p_init_msg_list) THEN
138        FND_MSG_PUB.initialize;
139     END IF;
140     -- Initialize API return status to success
141     x_return_status := FND_API.G_RET_STS_SUCCESS;
142     -- Check if application id of the item record is valid
143     IF (Is_ApplIdValid(l_item_rec.application_id) <> TRUE) THEN
144        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
145            FND_MESSAGE.Set_name('JTF','JTF_AMV_APPLICATIONID_INVALID');
146            FND_MESSAGE.Set_Token('ID',
147                to_char( nvl(l_item_rec.application_id, -1) ) );
148            FND_MSG_PUB.Add;
149        END IF;
150        RAISE  FND_API.G_EXC_ERROR;
151     END IF;
152     -- Get the item id from sequence and date from current date.
153     OPEN  Get_DateAndId_csr;
154     FETCH Get_DateAndId_csr Into l_item_rec.item_id, l_current_date;
155     CLOSE Get_DateAndId_csr;
156     -- set version number to 1.
157     l_item_rec.object_version_number := 1;
158     IF (l_item_rec.external_access_flag <> FND_API.G_TRUE OR
159         l_item_rec.external_access_flag IS NULL) THEN
160         l_item_rec.external_access_flag := FND_API.G_FALSE;
161     END IF;
162     IF (l_item_rec.item_name is null OR
163         l_item_rec.item_name = FND_API.G_MISS_CHAR) THEN
164        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
165            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_NAME_NULL');
166            FND_MSG_PUB.Add;
167        END IF;
168        RAISE  FND_API.G_EXC_ERROR;
169     END IF;
170     IF (l_item_rec.description = FND_API.G_MISS_CHAR) THEN
171         l_item_rec.description := null;
172     END IF;
173     IF (l_item_rec.text_string = FND_API.G_MISS_CHAR) THEN
174         l_item_rec.text_string := null;
175     END IF;
176     IF (l_item_rec.language_code = FND_API.G_MISS_CHAR OR
177         l_item_rec.language_code IS NULL) THEN
178         l_item_rec.language_code := USERENV('LANG');
179     END IF;
180     IF (l_item_rec.status_code is null OR
181         l_item_rec.status_code = FND_API.G_MISS_CHAR) THEN
182         l_item_rec.status_code := 'ACTIVE';
183     END IF;
184     IF (l_item_rec.effective_start_date = FND_API.G_MISS_DATE) THEN
185         l_item_rec.effective_start_date := null;
186     END IF;
187     IF (l_item_rec.expiration_date = FND_API.G_MISS_DATE) THEN
188         l_item_rec.expiration_date := null;
189     END IF;
190     IF (l_item_rec.item_type = FND_API.G_MISS_CHAR) THEN
191         l_item_rec.item_type := null;
192     END IF;
193     IF (l_item_rec.url_string = FND_API.G_MISS_CHAR) THEN
194         l_item_rec.url_string := null;
195     END IF;
196     IF (l_item_rec.publication_date = FND_API.G_MISS_DATE) THEN
197         l_item_rec.publication_date := null;
198     END IF;
199     IF (l_item_rec.priority = FND_API.G_MISS_CHAR) THEN
200         l_item_rec.priority := null;
201     END IF;
202     IF (l_item_rec.content_type_id = FND_API.G_MISS_NUM) THEN
203         l_item_rec.content_type_id := null;
204     END IF;
205     IF (l_item_rec.owner_id = FND_API.G_MISS_NUM) THEN
206         l_item_rec.owner_id := null;
207     END IF;
208     IF (l_item_rec.default_approver_id = FND_API.G_MISS_NUM) THEN
209         l_item_rec.default_approver_id := null;
210     END IF;
211     IF (l_item_rec.item_destination_type = FND_API.G_MISS_CHAR) THEN
212         l_item_rec.item_destination_type := null;
213     END IF;
214     IF (l_item_rec.access_name = FND_API.G_MISS_CHAR) THEN
215         l_item_rec.access_name := null;
216     END IF;
217     IF (l_item_rec.deliverable_type_code = FND_API.G_MISS_CHAR) THEN
218         l_item_rec.deliverable_type_code := null;
219     END IF;
220     IF (l_item_rec.applicable_to_code = FND_API.G_MISS_CHAR) THEN
221         l_item_rec.applicable_to_code := null;
222     END IF;
223     -- If called from MES (MES has its own requirement)
224     IF (l_item_rec.application_id = G_MES_APPL_ID) THEN
225         -- Check if item type in the item record is null
226         IF (l_item_rec.item_type IS NULL ) THEN
227            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
228                FND_MESSAGE.Set_name('JTF','JTF_AMV_NULL_ITEM_TYPE');
229                FND_MSG_PUB.Add;
230            END IF;
231            RAISE  FND_API.G_EXC_ERROR;
232         END IF;
233 
234         -- Check if effective start date in the item object is null
235         -- If so, make it effective immediately.
236         IF (l_item_rec.effective_start_date is null) THEN
237            l_item_rec.effective_start_date := sysdate;
238         END IF;
239         -- Check if priority in the item object is null
240         -- Maybe we should check if the priority is valid
241         IF (l_item_rec.priority is null ) THEN
242            l_item_rec.priority := 'LOW';
243         END IF;
244 /*
245     ELSIF (l_item_rec.application_id = G_ISTORE_APPL_ID ) THEN
246        IF (l_item_rec.access_name is null ) THEN
247           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
248               FND_MESSAGE.Set_name('JTF','JTF_AMV_ACCESS_NAME_MISSING');
249               FND_MSG_PUB.Add;
250           END IF;
251           RAISE  FND_API.G_EXC_ERROR;
252        END IF;
253        IF (l_item_rec.deliverable_type_code is null ) THEN
254           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
255               FND_MESSAGE.Set_name('JTF','JTF_AMV_TYPE_CODE_NULL');
256               FND_MSG_PUB.Add;
257           END IF;
258           RAISE  FND_API.G_EXC_ERROR;
259        ELSE
260           IF check_lookup_exists
261              (
262                p_lookup_type  => 'JTF_AMV_DELV_TYPE_CODE',
263                p_lookup_code  => l_item_rec.deliverable_type_code
264              ) = FND_API.G_FALSE THEN
265              IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
266                  FND_MESSAGE.Set_name('JTF','JTF_AMV_TYPE_CODE_WRONG');
267                  FND_MSG_PUB.Add;
268              END IF;
269              RAISE FND_API.G_EXC_ERROR;
270           END IF;
271        END IF;
272        IF (l_item_rec.applicable_to_code is null ) THEN
273           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
274               FND_MESSAGE.Set_name('JTF','JTF_AMV_APPLICABLE_CODE_NULL');
275               FND_MSG_PUB.Add;
276           END IF;
277           RAISE  FND_API.G_EXC_ERROR;
278        ELSE
279           IF check_lookup_exists
280              (
281                p_lookup_type  => 'JTF_AMV_APPLI_TO_CODE',
282                p_lookup_code  => l_item_rec.applicable_to_code
283              ) = FND_API.G_FALSE THEN
284              IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
285                  FND_MESSAGE.Set_name('JTF','JTF_AMV_APPL_TO_CODE_WRONG');
286                  FND_MSG_PUB.Add;
287              END IF;
288              RAISE FND_API.G_EXC_ERROR;
289           END IF;
290        END IF;
291     */
292     END IF; --END OF (OUTER) IF
293     --Do create the record now.
294     JTF_AMV_ITEMS_PKG.INSERT_ROW
295     (
296         X_ROWID => l_row_id,
297         X_ITEM_ID =>l_item_rec.item_id,
298         X_OBJECT_VERSION_NUMBER => 1,
299         X_CREATION_DATE => l_current_date,
300         X_CREATED_BY    => CURRENT_USER_ID,
301         X_LAST_UPDATE_DATE => l_current_date,
302         X_LAST_UPDATED_BY => CURRENT_USER_ID,
303         X_LAST_UPDATE_LOGIN => CURRENT_LOGIN_ID,
304         X_APPLICATION_ID => l_item_rec.application_id,
305         X_EXTERNAL_ACCESS_FLAG => l_item_rec.external_access_flag,
306         X_ITEM_NAME => l_item_rec.item_name,
307         X_DESCRIPTION => l_item_rec.description,
308         X_TEXT_STRING => l_item_rec.text_string,
309         X_LANGUAGE_CODE => l_item_rec.language_code,
310         X_STATUS_CODE => l_item_rec.status_code,
311         X_EFFECTIVE_START_DATE => l_item_rec.effective_start_date,
312         X_EXPIRATION_DATE => l_item_rec.expiration_date,
313         X_ITEM_TYPE => l_item_rec.item_type,
314         X_URL_STRING => l_item_rec.url_string,
315         X_PUBLICATION_DATE => l_item_rec.publication_date,
316         X_PRIORITY => l_item_rec.priority,
317         X_CONTENT_TYPE_ID => l_item_rec.content_type_id,
318         X_OWNER_ID => l_item_rec.owner_id,
319         X_DEFAULT_APPROVER_ID => l_item_rec.default_approver_id,
320         X_ITEM_DESTINATION_TYPE => l_item_rec.item_destination_type,
321         X_ACCESS_NAME => l_item_rec.access_name,
322         X_DELIVERABLE_TYPE_CODE => l_item_rec.deliverable_type_code,
323         X_APPLICABLE_TO_CODE => l_item_rec.applicable_to_code,
324         X_ATTRIBUTE_CATEGORY => null,
325         X_ATTRIBUTE1 => null,
326         X_ATTRIBUTE2 => null,
327         X_ATTRIBUTE3 => null,
328         X_ATTRIBUTE4 => null,
329         X_ATTRIBUTE5 => null,
330         X_ATTRIBUTE6 => null,
331         X_ATTRIBUTE7 => null,
332         X_ATTRIBUTE8 => null,
333         X_ATTRIBUTE9 => null,
334         X_ATTRIBUTE10 => null,
335         X_ATTRIBUTE11 => null,
336         X_ATTRIBUTE12 => null,
337         X_ATTRIBUTE13 => null,
338         X_ATTRIBUTE14 => null,
339         X_ATTRIBUTE15 => null
340     );
341     -- pass back the item id.
342     x_item_id := l_item_rec.item_id;
343     --Standard check of commit
344     IF FND_API.To_Boolean ( p_commit ) THEN
345         COMMIT WORK;
346     END IF;
347     --Standard call to get message count and if count=1, get the message
348     FND_MSG_PUB.Count_And_Get (
349        p_encoded => FND_API.G_FALSE,
350        p_count => x_msg_count,
351        p_data  => x_msg_data
352        );
353 EXCEPTION
354    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
355        ROLLBACK TO Create_Item_Pub;
356        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
357        -- Standard call to get message count and if count=1, get the message
358        FND_MSG_PUB.Count_And_Get (
359           p_encoded => FND_API.G_FALSE,
360           p_count => x_msg_count,
361           p_data  => x_msg_data
362           );
363    WHEN FND_API.G_EXC_ERROR THEN
364        ROLLBACK TO Create_Item_Pub;
365        x_return_status := FND_API.G_RET_STS_ERROR;
366        -- Standard call to get message count and if count=1, get the message
367        FND_MSG_PUB.Count_And_Get (
368           p_encoded => FND_API.G_FALSE,
369           p_count => x_msg_count,
370           p_data  => x_msg_data
371           );
372    WHEN OTHERS THEN
373        ROLLBACK TO Create_Item_Pub;
374        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
375        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
376           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
377        END IF;
378        -- Standard call to get message count and if count=1, get the message
379        FND_MSG_PUB.Count_And_Get (
380           p_encoded => FND_API.G_FALSE,
381           p_count => x_msg_count,
382           p_data  => x_msg_data
383           );
384 END Create_Item;
385 --------------------------------------------------------------------------------
386 PROCEDURE Delete_Item
387 (
388     p_api_version       IN  NUMBER,
389     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
390     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
391     x_return_status     OUT NOCOPY  VARCHAR2,
392     x_msg_count         OUT NOCOPY  NUMBER,
393     x_msg_data          OUT NOCOPY  VARCHAR2,
394     p_item_id           IN  NUMBER
395 ) AS
396 l_api_name             CONSTANT VARCHAR2(30) := 'Delete_Item';
397 l_api_version          CONSTANT NUMBER := 1.0;
398 --
399 BEGIN
400     -- Standard call to check for call compatibility.
401     SAVEPOINT  Delete_Item_Pub;
402     IF NOT FND_API.Compatible_API_Call (
403          l_api_version,
404          p_api_version,
405          l_api_name,
406          G_PKG_NAME) THEN
407         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
408     END IF;
409     --Initialize message list if p_init_msg_list is TRUE.
410     IF FND_API.To_Boolean (p_init_msg_list) THEN
411        FND_MSG_PUB.initialize;
412     END IF;
413     -- Initialize API return status to success
414     x_return_status := FND_API.G_RET_STS_SUCCESS;
415     -- Check if item id is valid.
416     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
417        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
418            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
419            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
420            FND_MSG_PUB.Add;
421        END IF;
422        RAISE FND_API.G_EXC_ERROR;
423     END IF;
424     -- Delete the item's authors.
425     Delete from jtf_amv_item_authors
426     where item_id = p_item_id;
427     -- Delete the item's keywords.
428     Delete from jtf_amv_item_keywords
429     where item_id = p_item_id;
430     -- Remove item's files.
431     Delete from jtf_amv_attachments
432     where attachment_used_by_id = p_item_id
433     and   attachment_used_by = G_USED_BY_ITEM;
434     -- Finally delete the item itself.
435     JTF_AMV_ITEMS_PKG.DELETE_ROW ( p_item_id );
436     --Standard check of commit
437     IF FND_API.To_Boolean ( p_commit ) THEN
438         COMMIT WORK;
439     END IF;
440     --Standard call to get message count and if count=1, get the message
441     FND_MSG_PUB.Count_And_Get (
442        p_encoded => FND_API.G_FALSE,
443        p_count => x_msg_count,
444        p_data  => x_msg_data
445        );
446 EXCEPTION
447    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
448        ROLLBACK TO  Delete_Item_Pub;
449        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
450        -- Standard call to get message count and if count=1, get the message
451        FND_MSG_PUB.Count_And_Get (
452           p_encoded => FND_API.G_FALSE,
453           p_count => x_msg_count,
454           p_data  => x_msg_data
455           );
456    WHEN FND_API.G_EXC_ERROR THEN
457        ROLLBACK TO  Delete_Item_Pub;
458        x_return_status := FND_API.G_RET_STS_ERROR;
459        -- Standard call to get message count and if count=1, get the message
460        FND_MSG_PUB.Count_And_Get (
461           p_encoded => FND_API.G_FALSE,
462           p_count => x_msg_count,
463           p_data  => x_msg_data
464           );
465    WHEN OTHERS THEN
466        ROLLBACK TO  Delete_Item_Pub;
467        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
468        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
469           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
470        END IF;
471        -- Standard call to get message count and if count=1, get the message
472        FND_MSG_PUB.Count_And_Get (
473           p_encoded => FND_API.G_FALSE,
474           p_count => x_msg_count,
475           p_data  => x_msg_data
476           );
477 END Delete_Item;
478 --------------------------------------------------------------------------------
479 PROCEDURE Update_Item
480 (
481     p_api_version       IN  NUMBER,
482     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
483     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
484     x_return_status     OUT NOCOPY  VARCHAR2,
485     x_msg_count         OUT NOCOPY  NUMBER,
486     x_msg_data          OUT NOCOPY  VARCHAR2,
487     p_item_rec          IN  ITEM_REC_TYPE
488 ) AS
489 l_api_name             CONSTANT VARCHAR2(30) := 'Update_Item';
490 l_api_version          CONSTANT NUMBER := 1.0;
491 --
492 l_item_id              NUMBER;
493 l_current_date         DATE;
494 l_new_item_rec         ITEM_REC_TYPE := p_item_rec;
495 l_old_item_rec         ITEM_REC_TYPE;
496 l_record_change_flag   boolean  := false;
497 --
498 BEGIN
499     -- Standard call to check for call compatibility.
500     SAVEPOINT  Update_Item_Pub;
501     IF NOT FND_API.Compatible_API_Call (
502          l_api_version,
503          p_api_version,
504          l_api_name,
505          G_PKG_NAME) THEN
506         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
507     END IF;
508     --Initialize message list if p_init_msg_list is TRUE.
509     IF FND_API.To_Boolean (p_init_msg_list) THEN
510        FND_MSG_PUB.initialize;
511     END IF;
512     -- Initialize API return status to success
513     x_return_status := FND_API.G_RET_STS_SUCCESS;
514     --  MAKE SURE THE PASSED ITEM RECORD HAS ALL THE RIGHT INFORMATION.
515     -- Get the original record data
516     Get_Item
517     (
518       p_api_version       => p_api_version,
519       x_return_status     => x_return_status,
520       x_msg_count         => x_msg_count,
521       x_msg_data          => x_msg_data,
522       p_item_id           => p_item_rec.item_id,
523       x_item_rec          => l_old_item_rec
524     );
525     -- Check if item id is valid.
526     IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
527        RAISE FND_API.G_EXC_ERROR;
528     END IF;
529     -- Check to see if the record has been changed,
530     -- via compare object version number.
531     IF (l_old_item_rec.object_version_number =
532        l_new_item_rec.object_version_number) THEN
533        l_new_item_rec.object_version_number :=
534           l_new_item_rec.object_version_number +1;
535     ELSE
536        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
537            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_CHANGED');
538            FND_MESSAGE.Set_Token('ID',
539               to_char(nvl(l_new_item_rec.item_id,-1)) );
540            FND_MSG_PUB.Add;
541        END IF;
542        RAISE FND_API.G_EXC_ERROR;
543     END IF;
544     --Checking application id.
545     IF ( l_new_item_rec.application_id IS NULL  OR
546        l_new_item_rec.application_id = FND_API.G_MISS_NUM OR
547        l_new_item_rec.application_id = l_old_item_rec.application_id) THEN
548        l_new_item_rec.application_id := l_old_item_rec.application_id;
549     ELSE
550        -- Check if application in the item object is valid
551        l_record_change_flag := true;
552        IF (Is_ApplIdValid(l_new_item_rec.application_id) <> TRUE) THEN
553           IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
554               FND_MESSAGE.Set_name('JTF','JTF_AMV_APPLICATIONID_INVALID');
555               FND_MESSAGE.Set_Token('ID',
556                   to_char( l_new_item_rec.application_id ) );
557               FND_MSG_PUB.Add;
558           END IF;
559           RAISE  FND_API.G_EXC_ERROR;
560        END IF;
561     END IF;
562     --Checking external access flag
563     If (l_new_item_rec.external_access_flag is NULL OR
564           l_new_item_rec.external_access_flag =
565           l_old_item_rec.external_access_flag OR
566         l_new_item_rec.external_access_flag = FND_API.G_MISS_CHAR ) THEN
567         l_new_item_rec.external_access_flag :=
568               l_old_item_rec.external_access_flag;
569     ELSE
570        IF (l_new_item_rec.external_access_flag <> FND_API.G_TRUE) THEN
571            l_new_item_rec.external_access_flag := FND_API.G_FALSE;
572        END IF;
573        IF (l_new_item_rec.external_access_flag <>
574            l_old_item_rec.external_access_flag) THEN
575            l_record_change_flag := true;
576        END IF;
577     END IF;
578     --Checking item name, which is translatable so default to G_MISS
579     If (l_new_item_rec.item_name is NULL OR
580         l_new_item_rec.item_name = FND_API.G_MISS_CHAR  OR
581         l_new_item_rec.item_name = l_old_item_rec.item_name) THEN
582        l_new_item_rec.item_name := FND_API.G_MISS_CHAR;
583     ELSE
584        l_record_change_flag := true;
585     END IF;
586     --Checking description which is translatable so default to G_MISS
587     IF ( l_new_item_rec.description = FND_API.G_MISS_CHAR  OR
588          l_new_item_rec.description IS NULL AND
589          l_old_item_rec.description IS NULL        OR
590        l_new_item_rec.description = l_old_item_rec.description) THEN
591        l_new_item_rec.description := FND_API.G_MISS_CHAR;
592     ELSE
593        l_record_change_flag := true;
594     END IF;
595     --Checking text string which is translatable so default to G_MISS
596     IF ( l_new_item_rec.text_string = FND_API.G_MISS_CHAR  OR
597          l_new_item_rec.text_string IS NULL AND
598          l_old_item_rec.text_string IS NULL        OR
599        l_new_item_rec.text_string = l_old_item_rec.text_string) THEN
600        l_new_item_rec.text_string := FND_API.G_MISS_CHAR;
601     ELSE
602        l_record_change_flag := true;
603     END IF;
604     --Checking language code
605     IF ( l_new_item_rec.language_code IS NULL OR
606        l_new_item_rec.language_code = FND_API.G_MISS_CHAR  OR
607        l_new_item_rec.language_code = l_old_item_rec.language_code) THEN
608        l_new_item_rec.language_code := l_old_item_rec.language_code;
609     ELSE
610        l_record_change_flag := true;
611     END IF;
612     --Checking status code
613     IF ( l_new_item_rec.status_code IS NULL OR
614        l_new_item_rec.status_code = FND_API.G_MISS_CHAR  OR
615        l_new_item_rec.status_code = l_old_item_rec.status_code) THEN
616        l_new_item_rec.status_code := l_old_item_rec.status_code;
617     ELSE
618        l_record_change_flag := true;
619     END IF;
620     --Checking starting date.
621     If ( l_new_item_rec.effective_start_date = FND_API.G_MISS_DATE  OR
622             l_new_item_rec.effective_start_date is NULL AND
623             l_old_item_rec.effective_start_date is NULL OR
624             l_new_item_rec.effective_start_date =
625             l_old_item_rec.effective_start_date) THEN
626        l_new_item_rec.effective_start_date :=
627            l_old_item_rec.effective_start_date;
628     ELSE
629        l_record_change_flag := true;
630     END IF;
631     --Checking end date.
632     IF ( l_new_item_rec.expiration_date = FND_API.G_MISS_DATE  OR
633             l_new_item_rec.expiration_date is NULL AND
634             l_old_item_rec.expiration_date is NULL     OR
635             l_new_item_rec.expiration_date =
636             l_old_item_rec.expiration_date) THEN
637        l_new_item_rec.expiration_date := l_old_item_rec.expiration_date;
638     ELSE
639        l_record_change_flag := true;
640     END IF;
641     --Checking item type
642     IF (l_new_item_rec.item_type = FND_API.G_MISS_CHAR  OR
643        l_new_item_rec.item_type is null and
644        l_old_item_rec.item_type is null      OR
645        l_new_item_rec.item_type = l_old_item_rec.item_type) THEN
646        l_new_item_rec.item_type := l_old_item_rec.item_type;
647     ELSE
648        l_record_change_flag := true;
649     END IF;
650     --Checking URL
651     IF ( l_new_item_rec.url_string = FND_API.G_MISS_CHAR  OR
652        l_new_item_rec.url_string IS NULL AND
653        l_old_item_rec.url_string IS NULL         OR
654        l_new_item_rec.url_string = l_old_item_rec.url_string) THEN
655        l_new_item_rec.url_string := l_old_item_rec.url_string;
656     ELSE
657        l_record_change_flag := true;
658     END IF;
659     --Checking publication date
660     IF ( l_new_item_rec.publication_date = FND_API.G_MISS_DATE  OR
661             l_new_item_rec.publication_date IS NULL AND
662             l_old_item_rec.publication_date IS NULL      OR
663             l_new_item_rec.publication_date =
664             l_old_item_rec.publication_date) THEN
665        l_new_item_rec.publication_date := l_old_item_rec.publication_date;
666     ELSE
667        l_record_change_flag := true;
668     END IF;
669     --Checking priority
670     IF ( l_new_item_rec.priority = FND_API.G_MISS_CHAR  OR
671        l_new_item_rec.priority IS NULL  AND
672        l_old_item_rec.priority IS NULL       OR
673        l_new_item_rec.priority = l_old_item_rec.priority) THEN
674        l_new_item_rec.priority := l_old_item_rec.priority;
675     ELSE
676        l_record_change_flag := true;
677     END IF;
678     --Checking content type id.
679     IF ( l_new_item_rec.content_type_id = FND_API.G_MISS_NUM  OR
680         l_new_item_rec.content_type_id is NULL AND
681         l_old_item_rec.content_type_id is NULL     OR
682        l_new_item_rec.content_type_id = l_old_item_rec.content_type_id) THEN
683        l_new_item_rec.content_type_id := l_old_item_rec.content_type_id;
684     ELSE
685        l_record_change_flag := true;
686     END IF;
687     --Checking owner user id.
688     IF ( l_new_item_rec.owner_id = FND_API.G_MISS_NUM  OR
689        l_new_item_rec.owner_id IS NULL AND
690        l_old_item_rec.owner_id IS NULL     OR
691        l_new_item_rec.owner_id = l_old_item_rec.owner_id) THEN
692        l_new_item_rec.owner_id := l_old_item_rec.owner_id;
693     ELSE
694        l_record_change_flag := true;
695     END IF;
696     --Checking default approver user id.
697     IF ( l_new_item_rec.default_approver_id = FND_API.G_MISS_NUM  OR
698        l_new_item_rec.default_approver_id IS NULL AND
699        l_old_item_rec.default_approver_id IS NULL      OR
700        l_new_item_rec.default_approver_id =
701        l_old_item_rec.default_approver_id) THEN
702        l_new_item_rec.default_approver_id := l_old_item_rec.default_approver_id;
703     ELSE
704        l_record_change_flag := true;
705     END IF;
706     --Checking destination type
707     IF ( l_new_item_rec.item_destination_type = FND_API.G_MISS_CHAR  OR
708        l_new_item_rec.item_destination_type IS NULL AND
709        l_old_item_rec.item_destination_type IS NULL     OR
710        l_new_item_rec.item_destination_type =
711        l_old_item_rec.item_destination_type) THEN
712        l_new_item_rec.item_destination_type :=
713           l_old_item_rec.item_destination_type;
714     ELSE
715        l_record_change_flag := true;
716     END IF;
717     --Checking access name
718     IF ( l_new_item_rec.access_name = FND_API.G_MISS_CHAR  OR
719        l_new_item_rec.access_name IS NULL AND
720        l_old_item_rec.access_name IS NULL     OR
721        l_new_item_rec.access_name =
722        l_old_item_rec.access_name) THEN
723        l_new_item_rec.access_name := l_old_item_rec.access_name;
724     ELSE
725        l_record_change_flag := true;
726        /*
727        -- Istore specific.
728        IF (l_new_item_rec.application_id = G_ISTORE_APPL_ID OR
729            l_new_item_rec.application_id = FND_API.G_MISS_CHAR and
730            l_old_item_rec.application_id = G_ISTORE_APPL_ID ) THEN
731           IF (l_new_item_rec.access_name IS NULL) THEN
732              IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
733                  FND_MESSAGE.Set_name('JTF','JTF_AMV_ACCESS_NAME_MISSING');
734                  FND_MSG_PUB.Add;
735              END IF;
736              RAISE FND_API.G_EXC_ERROR;
737           END IF;
738        END IF;
739        */
740     END IF;
741     --Checking deliverable type code.
742     IF ( l_new_item_rec.deliverable_type_code = FND_API.G_MISS_CHAR  OR
743        l_new_item_rec.deliverable_type_code IS NULL AND
744        l_old_item_rec.deliverable_type_code IS NULL     OR
745        l_new_item_rec.deliverable_type_code =
746        l_old_item_rec.deliverable_type_code) THEN
747        l_new_item_rec.deliverable_type_code :=
748              l_old_item_rec.deliverable_type_code;
749     ELSE
750        l_record_change_flag := true;
751        /*
752        -- Istore specific.
753        IF (l_new_item_rec.application_id = G_ISTORE_APPL_ID) THEN
754           IF check_lookup_exists
755              (
756                p_lookup_type  => 'JTF_AMV_DELV_TYPE_CODE',
757                p_lookup_code  => l_new_item_rec.deliverable_type_code
758              ) = FND_API.G_FALSE THEN
759              IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
760                  FND_MESSAGE.Set_name('JTF','JTF_AMV_TYPE_CODE_WRONG');
761                  FND_MSG_PUB.Add;
762              END IF;
763              RAISE FND_API.G_EXC_ERROR;
764           END IF;
765        END IF;
766        */
767     END IF;
768     --Checking applicable_to_code
769     IF ( l_new_item_rec.applicable_to_code = FND_API.G_MISS_CHAR  OR
770        l_new_item_rec.applicable_to_code IS NULL AND
771        l_old_item_rec.applicable_to_code IS NULL     OR
772        l_new_item_rec.applicable_to_code =
773        l_old_item_rec.applicable_to_code) THEN
774        l_new_item_rec.applicable_to_code :=
775           l_old_item_rec.applicable_to_code;
776     ELSE
777        l_record_change_flag := true;
778        /*
779        -- Istore specific.
780        IF (l_new_item_rec.application_id = G_ISTORE_APPL_ID) THEN
781           IF check_lookup_exists
782              (
783                p_lookup_type  => 'JTF_AMV_APPLI_TO_CODE',
784                p_lookup_code  => l_new_item_rec.applicable_to_code
785              ) = FND_API.G_FALSE THEN
786              IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
787                  FND_MESSAGE.Set_name('JTF','JTF_AMV_APPL_TO_CODE_WRONG');
788                  FND_MSG_PUB.Add;
789              END IF;
790              RAISE FND_API.G_EXC_ERROR;
791           END IF;
792        END IF;
793        */
794     END IF;
795     -- Now update the item record.
796     IF (l_record_change_flag = TRUE) THEN
797         JTF_AMV_ITEMS_PKG.UPDATE_ROW
798         (
799             X_ITEM_ID =>l_new_item_rec.item_id,
800             X_OBJECT_VERSION_NUMBER => l_new_item_rec.object_version_number,
801             X_LAST_UPDATE_DATE => sysdate,
802             X_LAST_UPDATED_BY => CURRENT_USER_ID,
803             X_LAST_UPDATE_LOGIN => CURRENT_LOGIN_ID,
804             X_APPLICATION_ID => l_new_item_rec.application_id,
805             X_EXTERNAL_ACCESS_FLAG => l_new_item_rec.external_access_flag,
806             X_ITEM_NAME => l_new_item_rec.item_name,
807             X_DESCRIPTION => l_new_item_rec.description,
808             X_TEXT_STRING => l_new_item_rec.text_string,
809             X_LANGUAGE_CODE => l_new_item_rec.language_code,
810             X_STATUS_CODE => l_new_item_rec.status_code,
811             X_EFFECTIVE_START_DATE => l_new_item_rec.effective_start_date,
812             X_EXPIRATION_DATE => l_new_item_rec.expiration_date,
813             X_ITEM_TYPE => l_new_item_rec.item_type,
814             X_URL_STRING => l_new_item_rec.url_string,
815             X_PUBLICATION_DATE => l_new_item_rec.publication_date,
816             X_PRIORITY => l_new_item_rec.priority,
817             X_CONTENT_TYPE_ID => l_new_item_rec.content_type_id,
818             X_OWNER_ID => l_new_item_rec.owner_id,
819             X_DEFAULT_APPROVER_ID => l_new_item_rec.default_approver_id,
820             X_ITEM_DESTINATION_TYPE => l_new_item_rec.item_destination_type,
821             X_ACCESS_NAME => l_new_item_rec.access_name,
822             X_DELIVERABLE_TYPE_CODE => l_new_item_rec.deliverable_type_code,
823             X_APPLICABLE_TO_CODE => l_new_item_rec.applicable_to_code,
824 
825             X_ATTRIBUTE_CATEGORY => FND_API.G_MISS_CHAR,
826             X_ATTRIBUTE1 => FND_API.G_MISS_CHAR,
827             X_ATTRIBUTE2 => FND_API.G_MISS_CHAR,
828             X_ATTRIBUTE3 => FND_API.G_MISS_CHAR,
829             X_ATTRIBUTE4 => FND_API.G_MISS_CHAR,
830             X_ATTRIBUTE5 => FND_API.G_MISS_CHAR,
831             X_ATTRIBUTE6 => FND_API.G_MISS_CHAR,
832             X_ATTRIBUTE7 => FND_API.G_MISS_CHAR,
833             X_ATTRIBUTE8 => FND_API.G_MISS_CHAR,
834             X_ATTRIBUTE9 => FND_API.G_MISS_CHAR,
835             X_ATTRIBUTE10 => FND_API.G_MISS_CHAR,
836             X_ATTRIBUTE11 => FND_API.G_MISS_CHAR,
837             X_ATTRIBUTE12 => FND_API.G_MISS_CHAR,
838             X_ATTRIBUTE13 => FND_API.G_MISS_CHAR,
839             X_ATTRIBUTE14 => FND_API.G_MISS_CHAR,
840             X_ATTRIBUTE15 => FND_API.G_MISS_CHAR
841         );
842     END IF;
843     --Standard check of commit
844     IF FND_API.To_Boolean ( p_commit ) THEN
845         COMMIT WORK;
846     END IF;
847     --Standard call to get message count and if count=1, get the message
848     FND_MSG_PUB.Count_And_Get (
849        p_encoded => FND_API.G_FALSE,
850        p_count => x_msg_count,
851        p_data  => x_msg_data
852        );
853 EXCEPTION
854    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
855        ROLLBACK TO  Update_Item_Pub;
856        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
857        -- Standard call to get message count and if count=1, get the message
858        FND_MSG_PUB.Count_And_Get (
859           p_encoded => FND_API.G_FALSE,
860           p_count => x_msg_count,
861           p_data  => x_msg_data
862           );
863    WHEN FND_API.G_EXC_ERROR THEN
864        ROLLBACK TO  Update_Item_Pub;
865        x_return_status := FND_API.G_RET_STS_ERROR;
866        -- Standard call to get message count and if count=1, get the message
867        FND_MSG_PUB.Count_And_Get (
868           p_encoded => FND_API.G_FALSE,
869           p_count => x_msg_count,
870           p_data  => x_msg_data
871           );
872    WHEN OTHERS THEN
873        ROLLBACK TO  Update_Item_Pub;
874        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
875        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
876           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
877        END IF;
878        -- Standard call to get message count and if count=1, get the message
879        FND_MSG_PUB.Count_And_Get (
880           p_encoded => FND_API.G_FALSE,
881           p_count => x_msg_count,
882           p_data  => x_msg_data
883           );
884 END Update_Item;
885 --------------------------------------------------------------------------------
886 PROCEDURE Get_Item
887 (
888     p_api_version       IN  NUMBER,
889     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
890     x_return_status     OUT NOCOPY  VARCHAR2,
891     x_msg_count         OUT NOCOPY  NUMBER,
892     x_msg_data          OUT NOCOPY  VARCHAR2,
893     p_item_id           IN  NUMBER,
894     x_item_rec          OUT NOCOPY  ITEM_REC_TYPE
895 ) AS
896 l_api_name             CONSTANT VARCHAR2(30) := 'Get_Item';
897 l_api_version          CONSTANT NUMBER := 1.0;
898 l_current_user_id      NUMBER  := -1;
899 l_current_login_id     NUMBER  := -1;
900 l_current_user_status  NUMBER;
901 --
902 CURSOR Get_Item_csr IS
903 Select
904      item_id,
905      CREATION_DATE,
906      CREATED_BY,
907      LAST_UPDATE_DATE,
908      LAST_UPDATED_BY,
909      LAST_UPDATE_LOGIN,
910      OBJECT_VERSION_NUMBER,
911      APPLICATION_ID,
912      EXTERNAL_ACCESS_FLAG,
913      ITEM_NAME,
914      DESCRIPTION,
915      TEXT_STRING,
916      LANGUAGE_CODE,
917      STATUS_CODE,
918      effective_start_date,
919      expiration_date,
920      ITEM_TYPE,
921      URL_STRING,
922      PUBLICATION_DATE,
923      PRIORITY,
924      CONTENT_TYPE_ID,
925      OWNER_ID,
926      DEFAULT_APPROVER_ID,
927      ITEM_DESTINATION_TYPE,
928      access_name,
929      deliverable_type_code,
930      applicable_to_code
931 From  jtf_amv_items_vl
932 Where item_id = p_item_id;
933 --
934 BEGIN
935     -- Standard call to check for call compatibility.
936     IF NOT FND_API.Compatible_API_Call (
937          l_api_version,
938          p_api_version,
939          l_api_name,
940          G_PKG_NAME) THEN
941         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
942     END IF;
943     --Initialize message list if p_init_msg_list is TRUE.
944     IF FND_API.To_Boolean (p_init_msg_list) THEN
945        FND_MSG_PUB.initialize;
946     END IF;
947     -- Initialize API return status to success
948     x_return_status := FND_API.G_RET_STS_SUCCESS;
949     -- Now get the item data.
950     OPEN  Get_Item_csr;
951     FETCH Get_Item_csr  INTO x_item_rec;
952     IF (Get_Item_csr%NOTFOUND) THEN
953        CLOSE Get_Item_csr;
954        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
955            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
956            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
957            FND_MSG_PUB.Add;
958        END IF;
959        RAISE FND_API.G_EXC_ERROR;
960     END IF;
961     CLOSE Get_Item_csr;
962     --Standard call to get message count and if count=1, get the message
963     FND_MSG_PUB.Count_And_Get (
964        p_encoded => FND_API.G_FALSE,
965        p_count => x_msg_count,
966        p_data  => x_msg_data
967        );
968 EXCEPTION
969    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
970        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
971        -- Standard call to get message count and if count=1, get the message
972        FND_MSG_PUB.Count_And_Get (
973           p_encoded => FND_API.G_FALSE,
974           p_count => x_msg_count,
975           p_data  => x_msg_data
976           );
977    WHEN FND_API.G_EXC_ERROR THEN
978        x_return_status := FND_API.G_RET_STS_ERROR;
979        -- Standard call to get message count and if count=1, get the message
980        FND_MSG_PUB.Count_And_Get (
981           p_encoded => FND_API.G_FALSE,
982           p_count => x_msg_count,
983           p_data  => x_msg_data
984           );
985    WHEN OTHERS THEN
986        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
987        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
988           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
989        END IF;
990        -- Standard call to get message count and if count=1, get the message
991        FND_MSG_PUB.Count_And_Get (
992           p_encoded => FND_API.G_FALSE,
993           p_count => x_msg_count,
994           p_data  => x_msg_data
995           );
996 END Get_Item;
997 --------------------------------------------------------------------------------
998 ------------------------------ ITEM_KEYWORD ------------------------------------
999 PROCEDURE Add_ItemKeyword
1000 (
1001     p_api_version       IN  NUMBER,
1002     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1003     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1004     x_return_status     OUT NOCOPY  VARCHAR2,
1005     x_msg_count         OUT NOCOPY  NUMBER,
1006     x_msg_data          OUT NOCOPY  VARCHAR2,
1007     p_item_id           IN  NUMBER,
1008     p_keyword_tab       IN  CHAR_TAB_TYPE
1009 ) AS
1010 l_api_name             CONSTANT VARCHAR2(30) := 'Add_ItemKeyword';
1011 l_api_version          CONSTANT NUMBER := 1.0;
1012 --
1013 l_current_user_id      NUMBER := CURRENT_USER_ID;
1014 l_current_login_id     NUMBER := CURRENT_LOGIN_ID;
1015 l_count                NUMBER;
1016 l_temp_number          NUMBER;
1017 l_date                 DATE;
1018 --
1019 CURSOR Check_Itemkeyword_csr (p_kword in VARCHAR2) IS
1020 Select
1021      item_keyword_id
1022 From jtf_amv_item_keywords
1023 Where keyword = p_kword
1024 And   item_id = p_item_id;
1025 --
1026 CURSOR Get_IDandDate_csr is
1027 Select jtf_amv_item_keywords_s.nextval, sysdate
1028 From  Dual;
1029 --
1030 BEGIN
1031     -- Standard call to check for call compatibility.
1032     SAVEPOINT  Add_ItemKeyword_Pub;
1033     IF NOT FND_API.Compatible_API_Call (
1034          l_api_version,
1035          p_api_version,
1036          l_api_name,
1037          G_PKG_NAME) THEN
1038         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1039     END IF;
1040     --Initialize message list if p_init_msg_list is TRUE.
1041     IF FND_API.To_Boolean (p_init_msg_list) THEN
1042        FND_MSG_PUB.initialize;
1043     END IF;
1044     -- Initialize API return status to success
1045     x_return_status := FND_API.G_RET_STS_SUCCESS;
1046     -- Check if item id is valid.
1047     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1048        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1049            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1050            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1051            FND_MSG_PUB.Add;
1052        END IF;
1053        RAISE FND_API.G_EXC_ERROR;
1054     END IF;
1055     IF (p_keyword_tab is null) THEN
1056         l_count := 0;
1057     ELSE
1058         l_count := p_keyword_tab.count;
1059     END IF;
1060     FOR i IN 1..l_count LOOP
1061         OPEN  Check_Itemkeyword_csr( p_keyword_tab(i) );
1062         FETCH Check_Itemkeyword_csr INTO l_temp_number;
1063         IF (Check_Itemkeyword_csr%FOUND) THEN
1064            CLOSE Check_Itemkeyword_csr;
1065            x_return_status := FND_API.G_RET_STS_ERROR;
1066            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1067                FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_HAS_KEYWORD');
1068                FND_MESSAGE.Set_Token('ID',  to_char(p_item_id) );
1069                FND_MESSAGE.Set_Token('KEYWORD',  p_keyword_tab(i));
1070                FND_MSG_PUB.Add;
1071            END IF;
1072         ELSE
1073            CLOSE Check_Itemkeyword_csr;
1074            OPEN  Get_IDandDate_csr;
1075            FETCH Get_IDandDate_csr Into l_temp_number, l_date;
1076            CLOSE Get_IDandDate_csr;
1077            Insert Into jtf_amv_item_keywords
1078              (
1079                 ITEM_KEYWORD_ID,
1080                 OBJECT_VERSION_NUMBER,
1081                 LAST_UPDATE_DATE,
1082                 LAST_UPDATED_BY,
1083                 CREATION_DATE,
1084                 CREATED_BY,
1085                 LAST_UPDATE_LOGIN,
1086                 ITEM_ID,
1087                 KEYWORD
1088              ) VALUES
1089              (
1090                 l_temp_number,
1091                 1,
1092                 l_date,
1093                 l_current_user_id,
1094                 l_date,
1095                 l_current_user_id,
1096                 l_current_login_id,
1097                 p_item_id,
1098                 p_keyword_tab(i)
1099              );
1100         END IF;
1101     END LOOP;
1102     --Standard check of commit
1103     IF FND_API.To_Boolean ( p_commit ) THEN
1104         COMMIT WORK;
1105     END IF;
1106     --Standard call to get message count and if count=1, get the message
1107     FND_MSG_PUB.Count_And_Get (
1108        p_encoded => FND_API.G_FALSE,
1109        p_count => x_msg_count,
1110        p_data  => x_msg_data
1111        );
1112 EXCEPTION
1113    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1114        ROLLBACK TO Add_ItemKeyword_Pub;
1115        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1116        -- Standard call to get message count and if count=1, get the message
1117        FND_MSG_PUB.Count_And_Get (
1118           p_encoded => FND_API.G_FALSE,
1119           p_count => x_msg_count,
1120           p_data  => x_msg_data
1121           );
1122    WHEN FND_API.G_EXC_ERROR THEN
1123        ROLLBACK TO Add_ItemKeyword_Pub;
1124        x_return_status := FND_API.G_RET_STS_ERROR;
1125        -- Standard call to get message count and if count=1, get the message
1126        FND_MSG_PUB.Count_And_Get (
1127           p_encoded => FND_API.G_FALSE,
1128           p_count => x_msg_count,
1129           p_data  => x_msg_data
1130           );
1131    WHEN OTHERS THEN
1132        ROLLBACK TO Add_ItemKeyword_Pub;
1133        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1134        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1135           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1136        END IF;
1137        -- Standard call to get message count and if count=1, get the message
1138        FND_MSG_PUB.Count_And_Get (
1139           p_encoded => FND_API.G_FALSE,
1140           p_count => x_msg_count,
1141           p_data  => x_msg_data
1142           );
1143 END Add_ItemKeyword;
1144 --------------------------------------------------------------------------------
1145 PROCEDURE Add_ItemKeyword
1146 (
1147     p_api_version       IN  NUMBER,
1148     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1149     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1150     x_return_status     OUT NOCOPY  VARCHAR2,
1151     x_msg_count         OUT NOCOPY  NUMBER,
1152     x_msg_data          OUT NOCOPY  VARCHAR2,
1153     p_item_id           IN  NUMBER,
1154     p_keyword           IN  VARCHAR2
1155 ) AS
1156 l_char_tab           CHAR_TAB_TYPE;
1157 BEGIN
1158     l_char_tab := CHAR_TAB_TYPE();
1159     l_char_tab.extend;
1160     l_char_tab(1) := p_keyword;
1161     --
1162     Add_ItemKeyword
1163     (
1164         p_api_version       => p_api_version,
1165         p_init_msg_list     => p_init_msg_list,
1166         p_commit            => p_commit,
1167         x_return_status     => x_return_status,
1168         x_msg_count         => x_msg_count,
1169         x_msg_data          => x_msg_data,
1170         p_item_id           => p_item_id,
1171         p_keyword_tab       => l_char_tab
1172     );
1173 end Add_ItemKeyword;
1174 --------------------------------------------------------------------------------
1175 PROCEDURE Delete_ItemKeyword
1176 (
1177     p_api_version       IN  NUMBER,
1178     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1179     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1180     x_return_status     OUT NOCOPY  VARCHAR2,
1181     x_msg_count         OUT NOCOPY  NUMBER,
1182     x_msg_data          OUT NOCOPY  VARCHAR2,
1183     p_item_id           IN  NUMBER,
1184     p_keyword_tab       IN  CHAR_TAB_TYPE
1185 ) AS
1186 l_api_name             CONSTANT VARCHAR2(30) := 'Delete_ItemKeyword';
1187 l_api_version          CONSTANT NUMBER := 1.0;
1188 --
1189 l_count                NUMBER;
1190 l_temp_number          NUMBER;
1191 l_date                 DATE;
1192 --
1193 CURSOR Check_Itemkeyword_csr (p_kword in VARCHAR2) IS
1194 Select
1195      item_keyword_id
1196 From jtf_amv_item_keywords
1197 Where keyword = p_kword
1198 And   item_id = p_item_id;
1199 BEGIN
1200     -- Standard call to check for call compatibility.
1201     SAVEPOINT  Delete_ItemKeyword_Pub;
1202     IF NOT FND_API.Compatible_API_Call (
1203          l_api_version,
1204          p_api_version,
1205          l_api_name,
1206          G_PKG_NAME) THEN
1207         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1208     END IF;
1209     --Initialize message list if p_init_msg_list is TRUE.
1210     IF FND_API.To_Boolean (p_init_msg_list) THEN
1211        FND_MSG_PUB.initialize;
1212     END IF;
1213     -- Initialize API return status to success
1214     x_return_status := FND_API.G_RET_STS_SUCCESS;
1215     --
1216     -- Check if item id is valid.
1217     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1218        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1219            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1220            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1221            FND_MSG_PUB.Add;
1222        END IF;
1223        RAISE FND_API.G_EXC_ERROR;
1224     END IF;
1225     IF (p_keyword_tab IS NOT NULL) THEN
1226        l_count := p_keyword_tab.count;
1227        FOR i IN 1..l_count LOOP
1228            OPEN  Check_Itemkeyword_csr( p_keyword_tab(i) );
1229            FETCH Check_Itemkeyword_csr INTO l_temp_number;
1230            IF (Check_Itemkeyword_csr%NOTFOUND) THEN
1231               CLOSE Check_Itemkeyword_csr;
1232               x_return_status := FND_API.G_RET_STS_ERROR;
1233               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1234                   FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_HASNOT_KEYWORD');
1235                   FND_MESSAGE.Set_Token('ID',  to_char(p_item_id) );
1236                   FND_MESSAGE.Set_Token('KEYWORD',  p_keyword_tab(i));
1237                   FND_MSG_PUB.Add;
1238               END IF;
1239            ELSE
1240               CLOSE Check_Itemkeyword_csr;
1241               Delete from jtf_amv_item_keywords
1242               Where  item_keyword_id = l_temp_number;
1243            END IF;
1244        END LOOP;
1245     ELSE
1246        -- If no keyword specified, delete all the keywords of the item.
1247        Delete from jtf_amv_item_keywords
1248        Where  item_id = p_item_id;
1249     END IF;
1250     --Standard check of commit
1251     IF FND_API.To_Boolean ( p_commit ) THEN
1252         COMMIT WORK;
1253     END IF;
1254     --Standard call to get message count and if count=1, get the message
1255     FND_MSG_PUB.Count_And_Get (
1256        p_encoded => FND_API.G_FALSE,
1257        p_count => x_msg_count,
1258        p_data  => x_msg_data
1259        );
1260 EXCEPTION
1261    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1262        ROLLBACK TO  Delete_ItemKeyword_Pub;
1263        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1264        -- Standard call to get message count and if count=1, get the message
1265        FND_MSG_PUB.Count_And_Get (
1266           p_encoded => FND_API.G_FALSE,
1267           p_count => x_msg_count,
1268           p_data  => x_msg_data
1269           );
1270    WHEN FND_API.G_EXC_ERROR THEN
1271        ROLLBACK TO  Delete_ItemKeyword_Pub;
1272        x_return_status := FND_API.G_RET_STS_ERROR;
1273        -- Standard call to get message count and if count=1, get the message
1274        FND_MSG_PUB.Count_And_Get (
1275           p_encoded => FND_API.G_FALSE,
1276           p_count => x_msg_count,
1277           p_data  => x_msg_data
1278           );
1279    WHEN OTHERS THEN
1280        ROLLBACK TO  Delete_ItemKeyword_Pub;
1281        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1282        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1283           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1284        END IF;
1285        -- Standard call to get message count and if count=1, get the message
1286        FND_MSG_PUB.Count_And_Get (
1287           p_encoded => FND_API.G_FALSE,
1288           p_count => x_msg_count,
1289           p_data  => x_msg_data
1290           );
1291 END Delete_ItemKeyword;
1292 --------------------------------------------------------------------------------
1293 PROCEDURE Delete_ItemKeyword
1294 (
1295     p_api_version       IN  NUMBER,
1296     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1297     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1298     x_return_status     OUT NOCOPY  VARCHAR2,
1299     x_msg_count         OUT NOCOPY  NUMBER,
1300     x_msg_data          OUT NOCOPY  VARCHAR2,
1301     p_item_id           IN  NUMBER,
1302     p_keyword           IN  VARCHAR2
1303 ) AS
1304 l_char_tab           CHAR_TAB_TYPE;
1305 BEGIN
1306     l_char_tab := CHAR_TAB_TYPE(p_keyword);
1307     Delete_ItemKeyword
1308     (
1309         p_api_version       => p_api_version,
1310         p_init_msg_list     => p_init_msg_list,
1311         p_commit            => p_commit,
1312         x_return_status     => x_return_status,
1313         x_msg_count         => x_msg_count,
1314         x_msg_data          => x_msg_data,
1315         p_item_id           => p_item_id,
1316         p_keyword_tab       => l_char_tab
1317     );
1318 end Delete_ItemKeyword;
1319 --------------------------------------------------------------------------------
1320 PROCEDURE Replace_ItemKeyword
1321 (
1322     p_api_version       IN  NUMBER,
1323     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1324     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1325     x_return_status     OUT NOCOPY  VARCHAR2,
1326     x_msg_count         OUT NOCOPY  NUMBER,
1327     x_msg_data          OUT NOCOPY  VARCHAR2,
1328     p_item_id           IN  NUMBER,
1329     p_keyword_tab       IN  CHAR_TAB_TYPE
1330 ) AS
1331 l_api_name             CONSTANT VARCHAR2(30) := 'Replace_ItemKeyword';
1332 l_api_version          CONSTANT NUMBER := 1.0;
1333 l_current_user_id      NUMBER  := -1;
1334 l_current_login_id     NUMBER  := -1;
1335 l_current_user_status  NUMBER;
1336 --
1337 l_count                NUMBER;
1338 l_temp_number          NUMBER;
1339 l_date                 DATE;
1340 --
1341 BEGIN
1342     -- Standard call to check for call compatibility.
1343     SAVEPOINT  Replace_ItemKeyword_Pub;
1344     IF NOT FND_API.Compatible_API_Call (
1345          l_api_version,
1346          p_api_version,
1347          l_api_name,
1348          G_PKG_NAME) THEN
1349         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1350     END IF;
1351     --Initialize message list if p_init_msg_list is TRUE.
1352     IF FND_API.To_Boolean (p_init_msg_list) THEN
1353        FND_MSG_PUB.initialize;
1354     END IF;
1355     -- Initialize API return status to success
1356     x_return_status := FND_API.G_RET_STS_SUCCESS;
1357     -- Check if item id is valid.
1358     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1359        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1360            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1361            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1362            FND_MSG_PUB.Add;
1363        END IF;
1364        RAISE FND_API.G_EXC_ERROR;
1365     END IF;
1366     -- Delete all the item's original keyword
1367     Delete from jtf_amv_item_keywords
1368     Where  item_id = p_item_id;
1369     -- now add the new keywords
1370     Add_ItemKeyword
1371     (
1372         p_api_version       => p_api_version,
1373         p_init_msg_list     => p_init_msg_list,
1374         p_commit            => p_commit,
1375         x_return_status     => x_return_status,
1376         x_msg_count         => x_msg_count,
1377         x_msg_data          => x_msg_data,
1378         p_item_id           => p_item_id,
1379         p_keyword_tab       => p_keyword_tab
1380     );
1381     IF ( x_return_status = FND_API.G_RET_STS_UNEXP_ERROR) THEN
1382         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1383     ELSIF ( x_return_status = FND_API.G_RET_STS_ERROR) THEN
1384         RAISE  FND_API.G_EXC_ERROR;
1385     END IF;
1386     --Standard call to get message count and if count=1, get the message
1387     FND_MSG_PUB.Count_And_Get (
1388        p_encoded => FND_API.G_FALSE,
1389        p_count => x_msg_count,
1390        p_data  => x_msg_data
1391        );
1392 EXCEPTION
1393    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1394        ROLLBACK TO  Replace_ItemKeyword_Pub;
1395        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1396        -- Standard call to get message count and if count=1, get the message
1397        FND_MSG_PUB.Count_And_Get (
1398           p_encoded => FND_API.G_FALSE,
1399           p_count => x_msg_count,
1400           p_data  => x_msg_data
1401           );
1402    WHEN FND_API.G_EXC_ERROR THEN
1403        ROLLBACK TO  Replace_ItemKeyword_Pub;
1404        x_return_status := FND_API.G_RET_STS_ERROR;
1405        -- Standard call to get message count and if count=1, get the message
1406        FND_MSG_PUB.Count_And_Get (
1407           p_encoded => FND_API.G_FALSE,
1408           p_count => x_msg_count,
1409           p_data  => x_msg_data
1410           );
1411    WHEN OTHERS THEN
1412        ROLLBACK TO  Replace_ItemKeyword_Pub;
1413        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1414        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1415           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1416        END IF;
1417        -- Standard call to get message count and if count=1, get the message
1418        FND_MSG_PUB.Count_And_Get (
1419           p_encoded => FND_API.G_FALSE,
1420           p_count => x_msg_count,
1421           p_data  => x_msg_data
1422           );
1423 END Replace_ItemKeyword;
1424 --------------------------------------------------------------------------------
1425 PROCEDURE Get_ItemKeyword
1426 (
1427     p_api_version       IN  NUMBER,
1428     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1429     x_return_status     OUT NOCOPY  VARCHAR2,
1430     x_msg_count         OUT NOCOPY  NUMBER,
1431     x_msg_data          OUT NOCOPY  VARCHAR2,
1432     p_item_id           IN  NUMBER,
1433     x_keyword_tab       OUT NOCOPY  CHAR_TAB_TYPE
1434 ) AS
1435 l_api_name             CONSTANT VARCHAR2(30) := 'Get_ItemKeyword';
1436 l_api_version          CONSTANT NUMBER := 1.0;
1437 --
1438 l_fetch_count          NUMBER := 0;
1439 CURSOR Get_Keyword_csr is
1440 Select
1441     KEYWORD
1442 from  JTF_AMV_ITEM_KEYWORDS
1443 Where item_id = p_item_id;
1444 --
1445 BEGIN
1446     -- Standard call to check for call compatibility.
1447     IF NOT FND_API.Compatible_API_Call (
1448          l_api_version,
1449          p_api_version,
1450          l_api_name,
1451          G_PKG_NAME) THEN
1452         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1453     END IF;
1454     --Initialize message list if p_init_msg_list is TRUE.
1455     IF FND_API.To_Boolean (p_init_msg_list) THEN
1456        FND_MSG_PUB.initialize;
1457     END IF;
1458     -- Initialize API return status to success
1459     x_return_status := FND_API.G_RET_STS_SUCCESS;
1460     -- Check if item id is valid.
1461     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1462        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1463            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1464            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1465            FND_MSG_PUB.Add;
1466        END IF;
1467        RAISE FND_API.G_EXC_ERROR;
1468     END IF;
1469     --Execute the SQL statements to get records
1470     x_keyword_tab     := CHAR_TAB_TYPE();
1471     FOR kword in Get_Keyword_csr LOOP
1472         l_fetch_count := l_fetch_count + 1;
1473         x_keyword_tab.extend;
1474         x_keyword_tab(l_fetch_count) := kword.keyword;
1475     END LOOP;
1476     --Standard call to get message count and if count=1, get the message
1477     FND_MSG_PUB.Count_And_Get (
1478        p_encoded => FND_API.G_FALSE,
1479        p_count => x_msg_count,
1480        p_data  => x_msg_data
1481        );
1482 EXCEPTION
1483    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1484        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1485        -- Standard call to get message count and if count=1, get the message
1486        FND_MSG_PUB.Count_And_Get (
1487           p_encoded => FND_API.G_FALSE,
1488           p_count => x_msg_count,
1489           p_data  => x_msg_data
1490           );
1491    WHEN FND_API.G_EXC_ERROR THEN
1492        x_return_status := FND_API.G_RET_STS_ERROR;
1493        -- Standard call to get message count and if count=1, get the message
1494        FND_MSG_PUB.Count_And_Get (
1495           p_encoded => FND_API.G_FALSE,
1496           p_count => x_msg_count,
1497           p_data  => x_msg_data
1498           );
1499    WHEN OTHERS THEN
1500        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1501        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1502           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1503        END IF;
1504        -- Standard call to get message count and if count=1, get the message
1505        FND_MSG_PUB.Count_And_Get (
1506           p_encoded => FND_API.G_FALSE,
1507           p_count => x_msg_count,
1508           p_data  => x_msg_data
1509           );
1510 END Get_ItemKeyword;
1511 --------------------------------------------------------------------------------
1512 ------------------------------ ITEM_AUTHOR -------------------------------------
1513 PROCEDURE Add_ItemAuthor
1514 (
1515     p_api_version       IN  NUMBER,
1516     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1517     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1518     x_return_status     OUT NOCOPY  VARCHAR2,
1519     x_msg_count         OUT NOCOPY  NUMBER,
1520     x_msg_data          OUT NOCOPY  VARCHAR2,
1521     p_item_id           IN  NUMBER,
1522     p_author_tab        IN  CHAR_TAB_TYPE
1523 ) AS
1524 l_api_name             CONSTANT VARCHAR2(30) := 'Add_ItemAuthor';
1525 l_api_version          CONSTANT NUMBER := 1.0;
1526 --
1527 l_current_user_id      NUMBER := CURRENT_USER_ID;
1528 l_current_login_id     NUMBER := CURRENT_LOGIN_ID;
1529 l_count                NUMBER;
1530 l_temp_number          NUMBER;
1531 l_date                 DATE;
1532 --
1533 CURSOR Check_Itemauthor_csr (p_author in VARCHAR2) IS
1534 Select
1535      item_author_id
1536 From jtf_amv_item_authors
1537 Where author = p_author
1538 And   item_id = p_item_id;
1539 --
1540 CURSOR Get_IDandDate_csr is
1541 Select jtf_amv_item_authors_s.nextval, sysdate
1542 From  Dual;
1543 --
1544 BEGIN
1545     -- Standard call to check for call compatibility.
1546     SAVEPOINT  Add_ItemAuthor_Pub;
1547     IF NOT FND_API.Compatible_API_Call (
1548          l_api_version,
1549          p_api_version,
1550          l_api_name,
1551          G_PKG_NAME) THEN
1552         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1553     END IF;
1554     --Initialize message list if p_init_msg_list is TRUE.
1555     IF FND_API.To_Boolean (p_init_msg_list) THEN
1556        FND_MSG_PUB.initialize;
1557     END IF;
1558     -- Initialize API return status to success
1559     x_return_status := FND_API.G_RET_STS_SUCCESS;
1560     -- Check if item id is valid.
1561     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1562        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1563            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1564            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1565            FND_MSG_PUB.Add;
1566        END IF;
1567        RAISE FND_API.G_EXC_ERROR;
1568     END IF;
1569     IF (p_author_tab is null) THEN
1570         l_count := 0;
1571     ELSE
1572         l_count := p_author_tab.count;
1573     END IF;
1574     FOR i IN 1..l_count LOOP
1575         OPEN  Check_Itemauthor_csr( p_author_tab(i) );
1576         FETCH Check_Itemauthor_csr INTO l_temp_number;
1577         IF (Check_Itemauthor_csr%FOUND) THEN
1578            CLOSE Check_Itemauthor_csr;
1579            x_return_status := FND_API.G_RET_STS_ERROR;
1580            IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1581                FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_HAS_AUTHOR');
1582                FND_MESSAGE.Set_Token('ID',  to_char(p_item_id) );
1583                FND_MESSAGE.Set_Token('AUTHOR',  p_author_tab(i));
1584                FND_MSG_PUB.Add;
1585            END IF;
1586         ELSE
1587            CLOSE Check_Itemauthor_csr;
1588            OPEN  Get_IDandDate_csr;
1589            FETCH Get_IDandDate_csr Into l_temp_number, l_date;
1590            CLOSE Get_IDandDate_csr;
1591            Insert Into jtf_amv_item_authors
1592              (
1593                 ITEM_AUTHOR_ID,
1594                 OBJECT_VERSION_NUMBER,
1595                 LAST_UPDATE_DATE,
1596                 LAST_UPDATED_BY,
1597                 CREATION_DATE,
1598                 CREATED_BY,
1599                 LAST_UPDATE_LOGIN,
1600                 ITEM_ID,
1601                 AUTHOR
1602              ) VALUES
1603              (
1604                 l_temp_number,
1605                 1,
1606                 l_date,
1607                 l_current_user_id,
1608                 l_date,
1609                 l_current_user_id,
1610                 l_current_login_id,
1611                 p_item_id,
1612                 p_author_tab(i)
1613              );
1614         END IF;
1615     END LOOP;
1616     --Standard check of commit
1617     IF FND_API.To_Boolean ( p_commit ) THEN
1618         COMMIT WORK;
1619     END IF;
1620     --Standard call to get message count and if count=1, get the message
1621     FND_MSG_PUB.Count_And_Get (
1622        p_encoded => FND_API.G_FALSE,
1623        p_count => x_msg_count,
1624        p_data  => x_msg_data
1625        );
1626 EXCEPTION
1627    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1628        ROLLBACK TO Add_ItemAuthor_Pub;
1629        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1630        -- Standard call to get message count and if count=1, get the message
1631        FND_MSG_PUB.Count_And_Get (
1632           p_encoded => FND_API.G_FALSE,
1633           p_count => x_msg_count,
1634           p_data  => x_msg_data
1635           );
1636    WHEN FND_API.G_EXC_ERROR THEN
1637        ROLLBACK TO Add_ItemAuthor_Pub;
1638        x_return_status := FND_API.G_RET_STS_ERROR;
1639        -- Standard call to get message count and if count=1, get the message
1640        FND_MSG_PUB.Count_And_Get (
1641           p_encoded => FND_API.G_FALSE,
1642           p_count => x_msg_count,
1643           p_data  => x_msg_data
1644           );
1645    WHEN OTHERS THEN
1646        ROLLBACK TO Add_ItemAuthor_Pub;
1647        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1648        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1649           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1650        END IF;
1651        -- Standard call to get message count and if count=1, get the message
1652        FND_MSG_PUB.Count_And_Get (
1653           p_encoded => FND_API.G_FALSE,
1654           p_count => x_msg_count,
1655           p_data  => x_msg_data
1656           );
1657 END Add_ItemAuthor;
1658 --------------------------------------------------------------------------------
1659 PROCEDURE Add_ItemAuthor
1660 (
1661     p_api_version       IN  NUMBER,
1662     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1663     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1664     x_return_status     OUT NOCOPY  VARCHAR2,
1665     x_msg_count         OUT NOCOPY  NUMBER,
1666     x_msg_data          OUT NOCOPY  VARCHAR2,
1667     p_item_id           IN  NUMBER,
1668     p_author            IN  VARCHAR2
1669 ) AS
1670 l_char_tab           CHAR_TAB_TYPE;
1671 BEGIN
1672     l_char_tab := CHAR_TAB_TYPE(p_author);
1673     --
1674     Add_ItemAuthor
1675     (
1676         p_api_version       => p_api_version,
1677         p_init_msg_list     => p_init_msg_list,
1678         p_commit            => p_commit,
1679         x_return_status     => x_return_status,
1680         x_msg_count         => x_msg_count,
1681         x_msg_data          => x_msg_data,
1682         p_item_id           => p_item_id,
1683         p_author_tab       => l_char_tab
1684     );
1685 end Add_ItemAuthor;
1686 --------------------------------------------------------------------------------
1687 PROCEDURE Delete_ItemAuthor
1688 (
1689     p_api_version       IN  NUMBER,
1690     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1691     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1692     x_return_status     OUT NOCOPY  VARCHAR2,
1693     x_msg_count         OUT NOCOPY  NUMBER,
1694     x_msg_data          OUT NOCOPY  VARCHAR2,
1695     p_item_id           IN  NUMBER,
1696     p_author_tab        IN  CHAR_TAB_TYPE
1697 ) AS
1698 l_api_name             CONSTANT VARCHAR2(30) := 'Delete_ItemAuthor';
1699 l_api_version          CONSTANT NUMBER := 1.0;
1700 --
1701 l_count                NUMBER;
1702 l_temp_number          NUMBER;
1703 l_date                 DATE;
1704 --
1705 CURSOR Check_Itemauthor_csr (p_author in VARCHAR2) IS
1706 Select
1707      item_author_id
1708 From jtf_amv_item_authors
1709 Where author = p_author
1710 And   item_id = p_item_id;
1711 BEGIN
1712     -- Standard call to check for call compatibility.
1713     SAVEPOINT  Delete_ItemAuthor_Pub;
1714     IF NOT FND_API.Compatible_API_Call (
1715          l_api_version,
1716          p_api_version,
1717          l_api_name,
1718          G_PKG_NAME) THEN
1719         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1720     END IF;
1721     --Initialize message list if p_init_msg_list is TRUE.
1722     IF FND_API.To_Boolean (p_init_msg_list) THEN
1723        FND_MSG_PUB.initialize;
1724     END IF;
1725     -- Initialize API return status to success
1726     x_return_status := FND_API.G_RET_STS_SUCCESS;
1727     --
1728     -- Check if item id is valid.
1729     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1730        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1731            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1732            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1733            FND_MSG_PUB.Add;
1734        END IF;
1735        RAISE FND_API.G_EXC_ERROR;
1736     END IF;
1737     IF (p_author_tab IS NOT NULL) THEN
1738        l_count := p_author_tab.count;
1739        FOR i IN 1..l_count LOOP
1740            OPEN  Check_Itemauthor_csr( p_author_tab(i) );
1741            FETCH Check_Itemauthor_csr INTO l_temp_number;
1742            IF (Check_Itemauthor_csr%NOTFOUND) THEN
1743               CLOSE Check_Itemauthor_csr;
1744               x_return_status := FND_API.G_RET_STS_ERROR;
1745               IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1746                   FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_HASNOT_AUTHOR');
1747                   FND_MESSAGE.Set_Token('ID',  to_char(p_item_id) );
1748                   FND_MESSAGE.Set_Token('AUTHOR',  p_author_tab(i));
1749                   FND_MSG_PUB.Add;
1750               END IF;
1751            ELSE
1752               CLOSE Check_Itemauthor_csr;
1753               Delete from jtf_amv_item_authors
1754               Where  item_author_id = l_temp_number;
1755            END IF;
1756        END LOOP;
1757     ELSE
1758        -- If no author specified, delete all the authors of the item.
1759        Delete from jtf_amv_item_authors
1760        Where  item_id = p_item_id;
1761     END IF;
1762     --Standard check of commit
1763     IF FND_API.To_Boolean ( p_commit ) THEN
1764         COMMIT WORK;
1765     END IF;
1766     --Standard call to get message count and if count=1, get the message
1767     FND_MSG_PUB.Count_And_Get (
1768        p_encoded => FND_API.G_FALSE,
1769        p_count => x_msg_count,
1770        p_data  => x_msg_data
1771        );
1772 EXCEPTION
1773    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1774        ROLLBACK TO  Delete_ItemAuthor_Pub;
1775        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1776        -- Standard call to get message count and if count=1, get the message
1777        FND_MSG_PUB.Count_And_Get (
1778           p_encoded => FND_API.G_FALSE,
1779           p_count => x_msg_count,
1780           p_data  => x_msg_data
1781           );
1782    WHEN FND_API.G_EXC_ERROR THEN
1783        ROLLBACK TO  Delete_ItemAuthor_Pub;
1784        x_return_status := FND_API.G_RET_STS_ERROR;
1785        -- Standard call to get message count and if count=1, get the message
1786        FND_MSG_PUB.Count_And_Get (
1787           p_encoded => FND_API.G_FALSE,
1788           p_count => x_msg_count,
1789           p_data  => x_msg_data
1790           );
1791    WHEN OTHERS THEN
1792        ROLLBACK TO  Delete_ItemAuthor_Pub;
1793        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1794        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1795           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
1796        END IF;
1797        -- Standard call to get message count and if count=1, get the message
1798        FND_MSG_PUB.Count_And_Get (
1799           p_encoded => FND_API.G_FALSE,
1800           p_count => x_msg_count,
1801           p_data  => x_msg_data
1802           );
1803 END Delete_ItemAuthor;
1804 --------------------------------------------------------------------------------
1805 PROCEDURE Delete_ItemAuthor
1806 (
1807     p_api_version       IN  NUMBER,
1808     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1809     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1810     x_return_status     OUT NOCOPY  VARCHAR2,
1811     x_msg_count         OUT NOCOPY  NUMBER,
1812     x_msg_data          OUT NOCOPY  VARCHAR2,
1813     p_item_id           IN  NUMBER,
1814     p_author            IN  VARCHAR2
1815 ) AS
1816 l_char_tab           CHAR_TAB_TYPE;
1817 BEGIN
1818     l_char_tab := CHAR_TAB_TYPE(p_author);
1819     Delete_ItemAuthor
1820     (
1821         p_api_version       => p_api_version,
1822         p_init_msg_list     => p_init_msg_list,
1823         p_commit            => p_commit,
1824         x_return_status     => x_return_status,
1825         x_msg_count         => x_msg_count,
1826         x_msg_data          => x_msg_data,
1827         p_item_id           => p_item_id,
1828         p_author_tab       => l_char_tab
1829     );
1830 end Delete_ItemAuthor;
1831 --------------------------------------------------------------------------------
1832 PROCEDURE Replace_ItemAuthor
1833 (
1834     p_api_version       IN  NUMBER,
1835     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1836     p_commit            IN  VARCHAR2 := FND_API.G_FALSE,
1837     x_return_status     OUT NOCOPY  VARCHAR2,
1838     x_msg_count         OUT NOCOPY  NUMBER,
1839     x_msg_data          OUT NOCOPY  VARCHAR2,
1840     p_item_id           IN  NUMBER,
1841     p_author_tab        IN  CHAR_TAB_TYPE
1842 ) AS
1843 l_api_name             CONSTANT VARCHAR2(30) := 'Replace_ItemAuthor';
1844 l_api_version          CONSTANT NUMBER := 1.0;
1845 l_current_user_id      NUMBER  := -1;
1846 l_current_login_id     NUMBER  := -1;
1847 l_current_user_status  NUMBER;
1848 --
1849 l_count                NUMBER;
1850 l_temp_number          NUMBER;
1851 l_date                 DATE;
1852 --
1853 BEGIN
1854     -- Standard call to check for call compatibility.
1855     SAVEPOINT  Replace_ItemAuthor_Pub;
1856     IF NOT FND_API.Compatible_API_Call (
1857          l_api_version,
1858          p_api_version,
1859          l_api_name,
1860          G_PKG_NAME) THEN
1861         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1862     END IF;
1863     --Initialize message list if p_init_msg_list is TRUE.
1864     IF FND_API.To_Boolean (p_init_msg_list) THEN
1865        FND_MSG_PUB.initialize;
1866     END IF;
1867     -- Initialize API return status to success
1868     x_return_status := FND_API.G_RET_STS_SUCCESS;
1869     -- Check if item id is valid.
1870     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1871        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1872            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1873            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1874            FND_MSG_PUB.Add;
1875        END IF;
1876        RAISE FND_API.G_EXC_ERROR;
1877     END IF;
1878     -- Delete all the item's original author
1879     Delete from jtf_amv_item_authors
1880     Where  item_id = p_item_id;
1881     -- now add the new authors
1882     Add_ItemAuthor
1883     (
1884         p_api_version       => p_api_version,
1885         p_init_msg_list     => p_init_msg_list,
1886         p_commit            => p_commit,
1887         x_return_status     => x_return_status,
1888         x_msg_count         => x_msg_count,
1889         x_msg_data          => x_msg_data,
1890         p_item_id           => p_item_id,
1891         p_author_tab        => p_author_tab
1892     );
1893     --Standard call to get message count and if count=1, get the message
1894     FND_MSG_PUB.Count_And_Get (
1895        p_encoded => FND_API.G_FALSE,
1896        p_count => x_msg_count,
1897        p_data  => x_msg_data
1898        );
1899 EXCEPTION
1900    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1901        ROLLBACK TO  Replace_ItemAuthor_Pub;
1902        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1903        -- Standard call to get message count and if count=1, get the message
1904        FND_MSG_PUB.Count_And_Get (
1905           p_encoded => FND_API.G_FALSE,
1906           p_count => x_msg_count,
1907           p_data  => x_msg_data
1908           );
1909    WHEN FND_API.G_EXC_ERROR THEN
1910        ROLLBACK TO  Replace_ItemAuthor_Pub;
1911        x_return_status := FND_API.G_RET_STS_ERROR;
1912        -- Standard call to get message count and if count=1, get the message
1913        FND_MSG_PUB.Count_And_Get (
1914           p_encoded => FND_API.G_FALSE,
1915           p_count => x_msg_count,
1916           p_data  => x_msg_data
1917           );
1918    WHEN OTHERS THEN
1919        ROLLBACK TO  Replace_ItemAuthor_Pub;
1920        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1921        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
1922           FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME,l_api_name);
1923        END IF;
1924        -- Standard call to get message count and if count=1, get the message
1925        FND_MSG_PUB.Count_And_Get (
1926           p_encoded => FND_API.G_FALSE,
1927           p_count => x_msg_count,
1928           p_data  => x_msg_data
1929           );
1930 END Replace_ItemAuthor;
1931 --------------------------------------------------------------------------------
1932 PROCEDURE Get_ItemAuthor
1933 (
1934     p_api_version       IN  NUMBER,
1935     p_init_msg_list     IN  VARCHAR2 := FND_API.G_FALSE,
1936     x_return_status     OUT NOCOPY  VARCHAR2,
1937     x_msg_count         OUT NOCOPY  NUMBER,
1938     x_msg_data          OUT NOCOPY  VARCHAR2,
1939     p_item_id           IN  NUMBER,
1940     x_author_tab        OUT NOCOPY  CHAR_TAB_TYPE
1941 ) AS
1942 l_api_name             CONSTANT VARCHAR2(30) := 'Get_ItemAuthor';
1943 l_api_version          CONSTANT NUMBER := 1.0;
1944 --
1945 l_fetch_count          NUMBER := 0;
1946 CURSOR Get_Author_csr is
1947 Select
1948     AUTHOR
1949 from  JTF_AMV_ITEM_AUTHORS
1950 Where item_id = p_item_id;
1951 --
1952 BEGIN
1953     -- Standard call to check for call compatibility.
1954     IF NOT FND_API.Compatible_API_Call (
1955          l_api_version,
1956          p_api_version,
1957          l_api_name,
1958          G_PKG_NAME) THEN
1959         RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
1960     END IF;
1961     --Initialize message list if p_init_msg_list is TRUE.
1962     IF FND_API.To_Boolean (p_init_msg_list) THEN
1963        FND_MSG_PUB.initialize;
1964     END IF;
1965     -- Initialize API return status to success
1966     x_return_status := FND_API.G_RET_STS_SUCCESS;
1967     -- Check if item id is valid.
1968     IF (Is_ItemIdValid(p_item_id) <> TRUE) THEN
1969        IF FND_MSG_PUB.Check_Msg_level (FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1970            FND_MESSAGE.Set_name('JTF','JTF_AMV_ITEM_RECORD_MISSING');
1971            FND_MESSAGE.Set_Token('ID',  to_char(nvl(p_item_id, -1) ));
1972            FND_MSG_PUB.Add;
1973        END IF;
1974        RAISE FND_API.G_EXC_ERROR;
1975     END IF;
1976     --Execute the SQL statements to get records
1977     x_author_tab     := CHAR_TAB_TYPE();
1978     FOR rec in Get_Author_csr LOOP
1979         l_fetch_count := l_fetch_count + 1;
1980         x_author_tab.extend;
1981         x_author_tab(l_fetch_count) := rec.author;
1982     END LOOP;
1983     --Standard call to get message count and if count=1, get the message
1984     FND_MSG_PUB.Count_And_Get (
1985        p_encoded => FND_API.G_FALSE,
1986        p_count => x_msg_count,
1987        p_data  => x_msg_data
1988        );
1989 EXCEPTION
1990    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1991        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1992        -- Standard call to get message count and if count=1, get the message
1993        FND_MSG_PUB.Count_And_Get (
1994           p_encoded => FND_API.G_FALSE,
1995           p_count => x_msg_count,
1996           p_data  => x_msg_data
1997           );
1998    WHEN FND_API.G_EXC_ERROR THEN
1999        x_return_status := FND_API.G_RET_STS_ERROR;
2000        -- Standard call to get message count and if count=1, get the message
2001        FND_MSG_PUB.Count_And_Get (
2002           p_encoded => FND_API.G_FALSE,
2003           p_count => x_msg_count,
2004           p_data  => x_msg_data
2005           );
2006    WHEN OTHERS THEN
2007        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2008        IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR) THEN
2009           FND_MSG_PUB.Add_Exc_Msg( G_PKG_NAME,l_api_name);
2010        END IF;
2011        -- Standard call to get message count and if count=1, get the message
2012        FND_MSG_PUB.Count_And_Get (
2013           p_encoded => FND_API.G_FALSE,
2014           p_count => x_msg_count,
2015           p_data  => x_msg_data
2016           );
2017 END Get_ItemAuthor;
2018 --
2019 --------------------------------------------------------------------------------
2020 --------------------------------------------------------------------------------
2021 END jtf_amv_item_pub;