DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSP_ORDERLINES_PVT

Source


1 PACKAGE BODY CSP_ORDERLINES_PVT AS
2 /* $Header: cspvtmlb.pls 115.11 2003/05/02 17:17:58 phegde ship $ */
3 -- Start of Comments
4 -- Package name     : CSP_ORDERLINES_PVT
5 -- Purpose          :
6 -- History          :
7 -- NOTE             : CSP: api_version_number is 1.0
8 -- End of Comments
9 
10 
11 G_PKG_NAME CONSTANT VARCHAR2(30):= 'CSP_ORDERLINES_PVT';
12 G_FILE_NAME CONSTANT VARCHAR2(12) := 'cspvtmlb.pls';
13 
14 G_USER_ID         NUMBER := FND_GLOBAL.USER_ID;
15 G_LOGIN_ID        NUMBER := FND_GLOBAL.LOGIN_ID;
16 
17 -- Hint: Primary key needs to be returned.
18 PROCEDURE Create_orderlines(
19     P_Api_Version_Number         IN   NUMBER,
20     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
21     P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
22     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
23     P_mol_Rec     IN    mol_Rec_Type  := G_MISS_mol_REC,
24   --Hint: Add detail tables as parameter lists if it's master-detail relationship.
25     X_LINE_ID     OUT NOCOPY  NUMBER,
26     X_Return_Status              OUT NOCOPY  VARCHAR2,
27     X_Msg_Count                  OUT NOCOPY  NUMBER,
28     X_Msg_Data                   OUT NOCOPY  VARCHAR2
29     )
30 
31  IS
32 l_api_name                CONSTANT VARCHAR2(30) := 'Create_orderlines';
33 l_api_version_number      CONSTANT NUMBER   := 1.0;
34 l_return_status_full        VARCHAR2(1);
35 l_identity_sales_member_rec AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
36  BEGIN
37       -- Standard Start of API savepoint
38       SAVEPOINT CREATE_ORDERLINES_PVT;
39 
40       -- Standard call to check for call compatibility.
41       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
42                                          p_api_version_number,
43                                            l_api_name,
44                                            G_PKG_NAME)
45       THEN
46           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
47       END IF;
48 
49 
50       -- Initialize message list if p_init_msg_list is set to TRUE.
51       IF FND_API.to_Boolean( p_init_msg_list )
52       THEN
53           FND_MSG_PUB.initialize;
54       END IF;
55 
56 
57       -- Debug Message
58       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'start');
59 
60 
61       -- Initialize API return status to SUCCESS
62       x_return_status := FND_API.G_RET_STS_SUCCESS;
63 
64       --
65       -- API body
66       --
67 
68 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
69 /*
70       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is invoked for customization purpose
71       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
72       THEN
73           AS_CALLOUT_PKG.Create_orderlines_BC(
74                   p_api_version_number   =>  2.0,
75                   p_init_msg_list        =>  FND_API.G_FALSE,
76                   p_commit               =>  FND_API.G_FALSE,
77                   p_validation_level     =>  p_validation_level,
78                   P_mol_Rec      =>  P_mol_Rec,
79           -- Hint: Add detail tables as parameter lists if it's master-detail relationship.
80                   x_return_status        =>  x_return_status,
81                   x_msg_count            =>  x_msg_count,
82                   x_msg_data             =>  x_msg_data);
83       END IF;
84 */
85       -- ******************************************************************
86       -- Validate Environment
87       -- ******************************************************************
88       IF FND_GLOBAL.User_Id IS NULL
89       THEN
90           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
91           THEN
92               FND_MESSAGE.Set_Name(' + appShortName +', 'UT_CANNOT_GET_PROFILE_VALUE');
93               FND_MESSAGE.Set_Token('PROFILE', 'USER_ID', FALSE);
94               FND_MSG_PUB.ADD;
95           END IF;
96           RAISE FND_API.G_EXC_ERROR;
97       END IF;
98 
99 /* commented out by CSP DEC 06, 1999.
100 
101       AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
102           p_api_version_number => 2.0
103          ,p_salesforce_id => NULL
104          ,x_return_status => x_return_status
105          ,x_msg_count => x_msg_count
106          ,x_msg_data => x_msg_data
107          ,x_sales_member_rec => l_identity_sales_member_rec);
108 
109       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
110           RAISE FND_API.G_EXC_ERROR;
111       END IF;
112 
113 */
114       IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
115       THEN
116           -- Debug message
117           JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Validate_orderlines');
118 
119           -- Invoke validation procedures
120           Validate_orderlines(
121               p_init_msg_list    => FND_API.G_FALSE,
122               p_validation_level => p_validation_level,
123               p_validation_mode  => JTF_PLSQL_API.G_CREATE,
124               P_mol_Rec  =>  P_mol_Rec,
125               x_return_status    => x_return_status,
126               x_msg_count        => x_msg_count,
127               x_msg_data         => x_msg_data);
128       END IF;
129 
130       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
131           RAISE FND_API.G_EXC_ERROR;
132       END IF;
133 
134       -- Hint: Add corresponding Master-Detail business logic here if necessary.
135 
136       -- Debug Message
137       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Calling create table handler');
138 
139       -- Invoke table handler(CSP_MOVEORDER_LINES_PKG.Insert_Row)
140       CSP_MOVEORDER_LINES_PKG.Insert_Row(
141           p_LINE_ID  => p_mol_rec.LINE_ID,
142           p_CREATED_BY  => G_USER_ID,
143           p_CREATION_DATE  => sysdate,
144           p_LAST_UPDATED_BY  => G_USER_ID,
145           p_LAST_UPDATE_DATE  => sysdate,
146           p_LAST_UPDATED_LOGIN  => G_LOGIN_ID,
147           p_HEADER_ID  => p_mol_rec.HEADER_ID,
148           p_CUSTOMER_PO  => p_mol_rec.CUSTOMER_PO,
149           p_INCIDENT_ID  => p_mol_rec.INCIDENT_ID,
150           p_TASK_ID  => p_mol_rec.TASK_ID,
151           p_TASK_ASSIGNMENT_ID  => p_mol_rec.TASK_ASSIGNMENT_ID,
152           p_COMMENTS  => p_mol_rec.COMMENTS,
153           p_ATTRIBUTE_CATEGORY  => p_mol_rec.ATTRIBUTE_CATEGORY,
154           p_ATTRIBUTE1  => p_mol_rec.ATTRIBUTE1,
155           p_ATTRIBUTE2  => p_mol_rec.ATTRIBUTE2,
156           p_ATTRIBUTE3  => p_mol_rec.ATTRIBUTE3,
157           p_ATTRIBUTE4  => p_mol_rec.ATTRIBUTE4,
158           p_ATTRIBUTE5  => p_mol_rec.ATTRIBUTE5,
159           p_ATTRIBUTE6  => p_mol_rec.ATTRIBUTE6,
160           p_ATTRIBUTE7  => p_mol_rec.ATTRIBUTE7,
161           p_ATTRIBUTE8  => p_mol_rec.ATTRIBUTE8,
162           p_ATTRIBUTE9  => p_mol_rec.ATTRIBUTE9,
163           p_ATTRIBUTE10  => p_mol_rec.ATTRIBUTE10,
164           p_ATTRIBUTE11  => p_mol_rec.ATTRIBUTE11,
165           p_ATTRIBUTE12  => p_mol_rec.ATTRIBUTE12,
166           p_ATTRIBUTE13  => p_mol_rec.ATTRIBUTE13,
167           p_ATTRIBUTE14  => p_mol_rec.ATTRIBUTE14,
168           p_ATTRIBUTE15  => p_mol_rec.ATTRIBUTE15);
169       -- Hint: Primary key should be returned.
170       -- x_LINE_ID := px_LINE_ID;
171          x_LINE_ID := p_mol_rec.LINE_ID;
172 
173       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
174           RAISE FND_API.G_EXC_ERROR;
175       END IF;
176 
177       --
178       -- End of API body
179       --
180 
181       -- Standard check for p_commit
182       IF FND_API.to_Boolean( p_commit )
183       THEN
184           COMMIT WORK;
185       END IF;
186 
187 
188       -- Debug Message
189       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'end');
190 
191 
192       -- Standard call to get message count and if count is 1, get message info.
193       FND_MSG_PUB.Count_And_Get
194       (  p_count          =>   x_msg_count,
195          p_data           =>   x_msg_data
196       );
197 
198 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
199 /*
200       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is invoked for customization purpose
201       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
202       THEN
203           AS_CALLOUT_PKG.Create_orderlines_AC(
204                   p_api_version_number   =>  2.0,
205                   p_init_msg_list        =>  FND_API.G_FALSE,
206                   p_commit               =>  FND_API.G_FALSE,
207                   p_validation_level     =>  p_validation_level,
208                   P_mol_Rec      =>  P_mol_Rec,
209           -- Hint: Add detail tables as parameter lists if it's master-detail relationship.
210                   x_return_status        =>  x_return_status,
211                   x_msg_count            =>  x_msg_count,
212                   x_msg_data             =>  x_msg_data);
213       END IF;
214 */
215       EXCEPTION
216           WHEN FND_API.G_EXC_ERROR THEN
217               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
218                    P_API_NAME => L_API_NAME
219                   ,P_PKG_NAME => G_PKG_NAME
220                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
221                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
222                   ,X_MSG_COUNT => X_MSG_COUNT
223                   ,X_MSG_DATA => X_MSG_DATA
224                   ,X_RETURN_STATUS => X_RETURN_STATUS);
225 
226           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
227               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
228                    P_API_NAME => L_API_NAME
229                   ,P_PKG_NAME => G_PKG_NAME
230                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
231                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
232                   ,X_MSG_COUNT => X_MSG_COUNT
233                   ,X_MSG_DATA => X_MSG_DATA
234                   ,X_RETURN_STATUS => X_RETURN_STATUS);
235 
236           WHEN OTHERS THEN
237               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
238                    P_API_NAME => L_API_NAME
239                   ,P_PKG_NAME => G_PKG_NAME
240                   ,P_EXCEPTION_LEVEL => JTF_PLSQL_API.G_EXC_OTHERS
241                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
242                   ,X_MSG_COUNT => X_MSG_COUNT
243                   ,X_MSG_DATA => X_MSG_DATA
244                   ,X_RETURN_STATUS => X_RETURN_STATUS);
245 End Create_orderlines;
246 
247 
248 -- Hint: Add corresponding update detail table procedures if it's master-detail relationship.
249 PROCEDURE Update_orderlines(
250     P_Api_Version_Number         IN   NUMBER,
251     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
252     P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
253     p_validation_level           IN  NUMBER       := FND_API.G_VALID_LEVEL_FULL,
254     P_Identity_Salesforce_Id     IN   NUMBER       := NULL,
255     P_mol_Rec     IN    mol_Rec_Type,
256     X_Return_Status              OUT NOCOPY  VARCHAR2,
257     X_Msg_Count                  OUT NOCOPY  NUMBER,
258     X_Msg_Data                   OUT NOCOPY  VARCHAR2
259     )
260 
261  IS
262 /*
263 Cursor C_Get_orderlines(LINE_ID Number) IS
264     Select rowid,
265            LINE_ID,
266            CREATED_BY,
267            CREATION_DATE,
268            LAST_UPDATED_BY,
269            LAST_UPDATE_DATE,
270            LAST_UPDATED_LOGIN,
271            HEADER_ID,
272            CUSTOMER_PO,
273            INCIDENT_ID,
274            TASK_ID,
275            TASK_ASSIGNMENT_ID,
276            COMMENTS,
277            ATTRIBUTE_CATEGORY,
278            ATTRIBUTE1,
279            ATTRIBUTE2,
280            ATTRIBUTE3,
281            ATTRIBUTE4,
282            ATTRIBUTE5,
283            ATTRIBUTE6,
284            ATTRIBUTE7,
285            ATTRIBUTE8,
286            ATTRIBUTE9,
287            ATTRIBUTE10,
288            ATTRIBUTE11,
289            ATTRIBUTE12,
290            ATTRIBUTE13,
291            ATTRIBUTE14,
292            ATTRIBUTE15
293     From  CSP_MOVEORDER_LINES
294     -- Hint: Developer need to provide Where clause
295     For Update NOWAIT;
296 */
297 l_api_name                CONSTANT VARCHAR2(30) := 'Update_orderlines';
298 l_api_version_number      CONSTANT NUMBER   := 1.0;
299 -- Local Variables
300 l_identity_sales_member_rec   AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
301 l_ref_mol_rec  CSP_orderlines_PVT.mol_Rec_Type;
302 l_tar_mol_rec  CSP_orderlines_PVT.mol_Rec_Type := P_mol_Rec;
303 l_rowid  ROWID;
304  BEGIN
305       -- Standard Start of API savepoint
306       SAVEPOINT UPDATE_ORDERLINES_PVT;
307 
308       -- Standard call to check for call compatibility.
309       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
310                                          p_api_version_number,
311                                            l_api_name,
312                                            G_PKG_NAME)
313       THEN
314           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
315       END IF;
316 
317 
318       -- Initialize message list if p_init_msg_list is set to TRUE.
319       IF FND_API.to_Boolean( p_init_msg_list )
320       THEN
321           FND_MSG_PUB.initialize;
322       END IF;
323 
324 
325       -- Debug Message
326       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'start');
327 
328 
329       -- Initialize API return status to SUCCESS
330       x_return_status := FND_API.G_RET_STS_SUCCESS;
331 
332       --
333       -- Api body
334       --
335 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
336 /*
337       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is invoked for customization purpose
338       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
339       THEN
340           AS_CALLOUT_PKG.Update_orderlines_BU(
341                   p_api_version_number   =>  2.0,
342                   p_init_msg_list        =>  FND_API.G_FALSE,
343                   p_commit               =>  FND_API.G_FALSE,
344                   p_validation_level     =>  p_validation_level,
345                   p_identity_salesforce_id => p_identity_salesforce_id,
346                   P_mol_Rec      =>  P_mol_Rec,
347           -- Hint: Add detail tables as parameter lists if it's master-detail relationship.
348                   x_return_status        =>  x_return_status,
349                   x_msg_count            =>  x_msg_count,
350                   x_msg_data             =>  x_msg_data);
351       END IF;
352 */
353 
354 /* comment out by CSP DEC 06, 1999.
355       AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
356           p_api_version_number => 2.0
357          ,p_salesforce_id => p_identity_salesforce_id
358          ,x_return_status => x_return_status
359          ,x_msg_count => x_msg_count
360          ,x_msg_data => x_msg_data
361          ,x_sales_member_rec => l_identity_sales_member_rec);
362 
363       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
364           RAISE FND_API.G_EXC_ERROR;
365       END IF;
366 
367 */
368 
369       -- Debug Message
370       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: - Open Cursor to Select');
371 
372 /*
373       Open C_Get_orderlines( l_tar_mol_rec.LINE_ID);
374 
375       Fetch C_Get_orderlines into
376                l_rowid,
377                l_ref_mol_rec.LINE_ID,
378                l_ref_mol_rec.CREATED_BY,
379                l_ref_mol_rec.CREATION_DATE,
380                l_ref_mol_rec.LAST_UPDATED_BY,
381                l_ref_mol_rec.LAST_UPDATE_DATE,
382                l_ref_mol_rec.LAST_UPDATED_LOGIN,
383                l_ref_mol_rec.HEADER_ID,
384                l_ref_mol_rec.CUSTOMER_PO,
385                l_ref_mol_rec.INCIDENT_ID,
386                l_ref_mol_rec.TASK_ID,
387                l_ref_mol_rec.TASK_ASSIGNMENT_ID,
388                l_ref_mol_rec.COMMENTS,
389                l_ref_mol_rec.ATTRIBUTE_CATEGORY,
390                l_ref_mol_rec.ATTRIBUTE1,
391                l_ref_mol_rec.ATTRIBUTE2,
392                l_ref_mol_rec.ATTRIBUTE3,
393                l_ref_mol_rec.ATTRIBUTE4,
394                l_ref_mol_rec.ATTRIBUTE5,
395                l_ref_mol_rec.ATTRIBUTE6,
396                l_ref_mol_rec.ATTRIBUTE7,
397                l_ref_mol_rec.ATTRIBUTE8,
398                l_ref_mol_rec.ATTRIBUTE9,
399                l_ref_mol_rec.ATTRIBUTE10,
400                l_ref_mol_rec.ATTRIBUTE11,
401                l_ref_mol_rec.ATTRIBUTE12,
402                l_ref_mol_rec.ATTRIBUTE13,
403                l_ref_mol_rec.ATTRIBUTE14,
404                l_ref_mol_rec.ATTRIBUTE15;
405 
406        If ( C_Get_orderlines%NOTFOUND) Then
407            IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
408            THEN
409                FND_MESSAGE.Set_Name('CSP', 'API_MISSING_UPDATE_TARGET');
410                FND_MESSAGE.Set_Token ('INFO', 'orderlines', FALSE);
411                FND_MSG_PUB.Add;
412            END IF;
413            raise FND_API.G_EXC_ERROR;
414        END IF;
415        -- Debug Message
416        JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: - Close Cursor');
417        Close     C_Get_orderlines;
418 */
419 
420 /* commented out by klou, 01/07/00
421       If (l_tar_mol_rec.last_update_date is NULL or
422           l_tar_mol_rec.last_update_date = FND_API.G_MISS_Date ) Then
423           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
424           THEN
425               FND_MESSAGE.Set_Name('CSP', 'API_MISSING_ID');
426               FND_MESSAGE.Set_Token('COLUMN', 'Last_Update_Date', FALSE);
427               FND_MSG_PUB.ADD;
428           END IF;
429           raise FND_API.G_EXC_ERROR;
430       End if;
431 
432       -- Check Whether record has been changed by someone else
433       If (l_tar_mol_rec.last_update_date <> l_ref_mol_rec.last_update_date) Then
434           IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_ERROR)
435           THEN
436               FND_MESSAGE.Set_Name('CSP', 'API_RECORD_CHANGED');
437               FND_MESSAGE.Set_Token('INFO', 'orderlines', FALSE);
438               FND_MSG_PUB.ADD;
439           END IF;
440           raise FND_API.G_EXC_ERROR;
441       End if;
442 */
443       IF ( P_validation_level >= FND_API.G_VALID_LEVEL_FULL)
444       THEN
445           -- Debug message
446           JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Validate_orderlines');
447 
448           -- Invoke validation procedures
449           Validate_orderlines(
450               p_init_msg_list    => FND_API.G_FALSE,
451               p_validation_level => p_validation_level,
452               p_validation_mode  => JTF_PLSQL_API.G_UPDATE,
453               P_mol_Rec  =>  P_mol_Rec,
454               x_return_status    => x_return_status,
455               x_msg_count        => x_msg_count,
456               x_msg_data         => x_msg_data);
457       END IF;
458 
459       IF x_return_status<>FND_API.G_RET_STS_SUCCESS THEN
460           RAISE FND_API.G_EXC_ERROR;
461       END IF;
462 
463       -- Hint: Add corresponding Master-Detail business logic here if necessary.
464 
465       -- Debug Message
466       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Calling update table handler');
467 
468       -- Invoke table handler(CSP_MOVEORDER_LINES_PKG.Update_Row)
469       CSP_MOVEORDER_LINES_PKG.Update_Row(
470           p_LINE_ID  => p_mol_rec.LINE_ID,
471           p_CREATED_BY  => p_mol_rec.created_by,
472           p_CREATION_DATE  => p_mol_rec.creation_date,
473           p_LAST_UPDATED_BY  => p_mol_rec.last_updated_by,
474           p_LAST_UPDATE_DATE  => SYSDATE,
475           p_LAST_UPDATED_LOGIN  =>p_mol_rec.last_updated_login,
476           p_HEADER_ID  => p_mol_rec.HEADER_ID,
477           p_CUSTOMER_PO  => p_mol_rec.CUSTOMER_PO,
478           p_INCIDENT_ID  => p_mol_rec.INCIDENT_ID,
479           p_TASK_ID  => p_mol_rec.TASK_ID,
480           p_TASK_ASSIGNMENT_ID  => p_mol_rec.TASK_ASSIGNMENT_ID,
481           p_COMMENTS  => p_mol_rec.COMMENTS,
482           p_ATTRIBUTE_CATEGORY  => p_mol_rec.ATTRIBUTE_CATEGORY,
483           p_ATTRIBUTE1  => p_mol_rec.ATTRIBUTE1,
484           p_ATTRIBUTE2  => p_mol_rec.ATTRIBUTE2,
485           p_ATTRIBUTE3  => p_mol_rec.ATTRIBUTE3,
486           p_ATTRIBUTE4  => p_mol_rec.ATTRIBUTE4,
487           p_ATTRIBUTE5  => p_mol_rec.ATTRIBUTE5,
488           p_ATTRIBUTE6  => p_mol_rec.ATTRIBUTE6,
489           p_ATTRIBUTE7  => p_mol_rec.ATTRIBUTE7,
490           p_ATTRIBUTE8  => p_mol_rec.ATTRIBUTE8,
491           p_ATTRIBUTE9  => p_mol_rec.ATTRIBUTE9,
492           p_ATTRIBUTE10  => p_mol_rec.ATTRIBUTE10,
493           p_ATTRIBUTE11  => p_mol_rec.ATTRIBUTE11,
494           p_ATTRIBUTE12  => p_mol_rec.ATTRIBUTE12,
495           p_ATTRIBUTE13  => p_mol_rec.ATTRIBUTE13,
496           p_ATTRIBUTE14  => p_mol_rec.ATTRIBUTE14,
497           p_ATTRIBUTE15  => p_mol_rec.ATTRIBUTE15);
498       --
499       -- End of API body.
500       --
501 
502       -- Standard check for p_commit
503       IF FND_API.to_Boolean( p_commit )
504       THEN
505           COMMIT WORK;
506       END IF;
507 
508 
509       -- Debug Message
510       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'end');
511 
512 
513       -- Standard call to get message count and if count is 1, get message info.
514       FND_MSG_PUB.Count_And_Get
515       (  p_count          =>   x_msg_count,
516          p_data           =>   x_msg_data
517       );
518 
519 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
520 /*
521       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is invoked for customization purpose
522       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
523       THEN
524           AS_CALLOUT_PKG.Update_orderlines_AU(
525                   p_api_version_number   =>  2.0,
526                   p_init_msg_list        =>  FND_API.G_FALSE,
527                   p_commit               =>  FND_API.G_FALSE,
528                   p_validation_level     =>  p_validation_level,
529                   p_identity_salesforce_id => p_identity_salesforce_id,
530                   P_mol_Rec      =>  P_mol_Rec,
531           -- Hint: Add detail tables as parameter lists if it's master-detail relationship.
532                   x_return_status        =>  x_return_status,
533                   x_msg_count            =>  x_msg_count,
534                   x_msg_data             =>  x_msg_data);
535       END IF;
536 */
537       EXCEPTION
538           WHEN FND_API.G_EXC_ERROR THEN
539               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
540                    P_API_NAME => L_API_NAME
541                   ,P_PKG_NAME => G_PKG_NAME
542                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
543                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
544                   ,X_MSG_COUNT => X_MSG_COUNT
545                   ,X_MSG_DATA => X_MSG_DATA
546                   ,X_RETURN_STATUS => X_RETURN_STATUS);
547 
548           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
549               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
550                    P_API_NAME => L_API_NAME
551                   ,P_PKG_NAME => G_PKG_NAME
552                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
553                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
554                   ,X_MSG_COUNT => X_MSG_COUNT
555                   ,X_MSG_DATA => X_MSG_DATA
556                   ,X_RETURN_STATUS => X_RETURN_STATUS);
557 
558           WHEN OTHERS THEN
559               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
560                    P_API_NAME => L_API_NAME
561                   ,P_PKG_NAME => G_PKG_NAME
562                   ,P_EXCEPTION_LEVEL => JTF_PLSQL_API.G_EXC_OTHERS
563                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
564                   ,X_MSG_COUNT => X_MSG_COUNT
565                   ,X_MSG_DATA => X_MSG_DATA
566                   ,X_RETURN_STATUS => X_RETURN_STATUS);
567 End Update_orderlines;
568 
569 
570 -- Hint: Add corresponding delete detail table procedures if it's master-detail relationship.
571 --       The Master delete procedure may not be needed depends on different business requirements.
572 PROCEDURE Delete_orderlines(
573     P_Api_Version_Number         IN   NUMBER,
574     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
575     P_Commit                     IN   VARCHAR2     := FND_API.G_FALSE,
576     p_validation_level           IN   NUMBER       := FND_API.G_VALID_LEVEL_FULL,
577     P_identity_salesforce_id     IN   NUMBER       := NULL,
578     P_mol_Rec     IN mol_Rec_Type,
579     X_Return_Status              OUT NOCOPY  VARCHAR2,
580     X_Msg_Count                  OUT NOCOPY  NUMBER,
581     X_Msg_Data                   OUT NOCOPY  VARCHAR2
582     )
583 
584  IS
585 l_api_name                CONSTANT VARCHAR2(30) := 'Delete_orderlines';
586 l_api_version_number      CONSTANT NUMBER   := 1.0;
587 l_identity_sales_member_rec  AS_SALES_MEMBER_PUB.Sales_member_rec_Type;
588  BEGIN
589       -- Standard Start of API savepoint
590       SAVEPOINT DELETE_ORDERLINES_PVT;
591 
592       -- Standard call to check for call compatibility.
593       IF NOT FND_API.Compatible_API_Call ( l_api_version_number,
594                                          p_api_version_number,
595                                            l_api_name,
596                                            G_PKG_NAME)
597       THEN
598           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
599       END IF;
600 
601 
602       -- Initialize message list if p_init_msg_list is set to TRUE.
603       IF FND_API.to_Boolean( p_init_msg_list )
604       THEN
605           FND_MSG_PUB.initialize;
606       END IF;
607 
608 
609       -- Debug Message
610       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'start');
611 
612 
613       -- Initialize API return status to SUCCESS
614       x_return_status := FND_API.G_RET_STS_SUCCESS;
615 
616       --
617       -- Api body
618       --
619 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
620 /*
621       -- if profile AS_PRE_CUSTOM_ENABLED is set to 'Y', callout procedure is invoked for customization purpose
622       IF(FND_PROFILE.VALUE('AS_PRE_CUSTOM_ENABLED')='Y')
623       THEN
624           AS_CALLOUT_PKG.Delete_orderlines_BD(
625                   p_api_version_number   =>  2.0,
626                   p_init_msg_list        =>  FND_API.G_FALSE,
627                   p_commit               =>  FND_API.G_FALSE,
628                   p_validation_level     =>  p_validation_level,
629                   p_identity_salesforce_id => p_identity_salesforce_id,
630                   P_mol_Rec      =>  P_mol_Rec,
631           -- Hint: Add detail tables as parameter lists if it's master-detail relationship.
632                   x_return_status        =>  x_return_status,
633                   x_msg_count            =>  x_msg_count,
634                   x_msg_data             =>  x_msg_data);
635       END IF;
636 */
637 
638 /* comment out by CSP DEC 06, 1999.
639       AS_SALES_ORG_MANAGER_PVT.Get_CurrentUser(
640           p_api_version_number => 2.0
641          ,p_salesforce_id => p_identity_salesforce_id
642          ,x_return_status => x_return_status
643          ,x_msg_count => x_msg_count
644          ,x_msg_data => x_msg_data
645          ,x_sales_member_rec => l_identity_sales_member_rec);
646 
647       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
648           RAISE FND_API.G_EXC_ERROR;
649       END IF;
650 */
651       -- Debug Message
652       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP',  'Private API: Calling delete table handler');
653 
654       -- Invoke table handler(CSP_MOVEORDER_LINES_PKG.Delete_Row)
655       CSP_MOVEORDER_LINES_PKG.Delete_Row(
656           p_LINE_ID  => p_mol_rec.LINE_ID);
657       --
658       -- End of API body
659       --
660 
661       -- Standard check for p_commit
662       IF FND_API.to_Boolean( p_commit )
663       THEN
664           COMMIT WORK;
665       END IF;
666 
667 
668       -- Debug Message
669       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'end');
670 
671 
672       -- Standard call to get message count and if count is 1, get message info.
673       FND_MSG_PUB.Count_And_Get
674       (  p_count          =>   x_msg_count,
675          p_data           =>   x_msg_data
676       );
677 
678 -- Un-comment the following statements when AS_CALLOUT_PKG is ready.
679 /*
680       -- if profile AS_POST_CUSTOM_ENABLED is set to 'Y', callout procedure is invoked for customization purpose
681       IF(FND_PROFILE.VALUE('AS_POST_CUSTOM_ENABLED')='Y')
682       THEN
683           AS_CALLOUT_PKG.Delete_orderlines_AD(
684                   p_api_version_number   =>  2.0,
685                   p_init_msg_list        =>  FND_API.G_FALSE,
686                   p_commit               =>  FND_API.G_FALSE,
687                   p_validation_level     =>  p_validation_level,
688                   p_identity_salesforce_id => p_identity_salesforce_id,
689                   P_mol_Rec      =>  P_mol_Rec,
690           -- Hint: Add detail tables as parameter lists if it's master-detail relationship.
691                   x_return_status        =>  x_return_status,
692                   x_msg_count            =>  x_msg_count,
693                   x_msg_data             =>  x_msg_data);
694       END IF;
695 */
696       EXCEPTION
697           WHEN FND_API.G_EXC_ERROR THEN
698               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
699                    P_API_NAME => L_API_NAME
700                   ,P_PKG_NAME => G_PKG_NAME
701                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_ERROR
702                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
703                   ,X_MSG_COUNT => X_MSG_COUNT
704                   ,X_MSG_DATA => X_MSG_DATA
705                   ,X_RETURN_STATUS => X_RETURN_STATUS);
706 
707           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
708               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
709                    P_API_NAME => L_API_NAME
710                   ,P_PKG_NAME => G_PKG_NAME
711                   ,P_EXCEPTION_LEVEL => FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR
712                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
713                   ,X_MSG_COUNT => X_MSG_COUNT
714                   ,X_MSG_DATA => X_MSG_DATA
715                   ,X_RETURN_STATUS => X_RETURN_STATUS);
716 
717           WHEN OTHERS THEN
718               JTF_PLSQL_API.HANDLE_EXCEPTIONS(
719                    P_API_NAME => L_API_NAME
720                   ,P_PKG_NAME => G_PKG_NAME
721                   ,P_EXCEPTION_LEVEL => JTF_PLSQL_API.G_EXC_OTHERS
722                   ,P_PACKAGE_TYPE => JTF_PLSQL_API.G_PVT
723                   ,X_MSG_COUNT => X_MSG_COUNT
724                   ,X_MSG_DATA => X_MSG_DATA
725                   ,X_RETURN_STATUS => X_RETURN_STATUS);
726 End Delete_orderlines;
727 
728 
729 -- This procudure defines the columns for the Dynamic SQL.
730 PROCEDURE Define_Columns(
731     P_mol_Rec   IN  CSP_ORDERLINES_PUB.mol_Rec_Type,
732     p_cur_get_mol   IN   NUMBER
733 )
734 IS
735 BEGIN
736       -- Debug Message
737       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Define Columns Begins');
738 
739       -- define all columns for CSP_MOVEORDER_LINES_V view
740       dbms_sql.define_column(p_cur_get_mol, 1, P_mol_Rec.LINE_ID);
741       dbms_sql.define_column(p_cur_get_mol, 2, P_mol_Rec.LAST_UPDATED_LOGIN);
742       dbms_sql.define_column(p_cur_get_mol, 3, P_mol_Rec.HEADER_ID);
743       dbms_sql.define_column(p_cur_get_mol, 4, P_mol_Rec.CUSTOMER_PO, 30);
744       dbms_sql.define_column(p_cur_get_mol, 5, P_mol_Rec.INCIDENT_ID);
745       dbms_sql.define_column(p_cur_get_mol, 6, P_mol_Rec.TASK_ID);
746       dbms_sql.define_column(p_cur_get_mol, 7, P_mol_Rec.TASK_ASSIGNMENT_ID);
747       dbms_sql.define_column(p_cur_get_mol, 8, P_mol_Rec.COMMENTS, 240);
748       dbms_sql.define_column(p_cur_get_mol, 9, P_mol_Rec.ATTRIBUTE_CATEGORY, 30);
749       dbms_sql.define_column(p_cur_get_mol, 10, P_mol_Rec.ATTRIBUTE1, 150);
750       dbms_sql.define_column(p_cur_get_mol, 11, P_mol_Rec.ATTRIBUTE2, 150);
751       dbms_sql.define_column(p_cur_get_mol, 12, P_mol_Rec.ATTRIBUTE3, 150);
752       dbms_sql.define_column(p_cur_get_mol, 13, P_mol_Rec.ATTRIBUTE4, 150);
753       dbms_sql.define_column(p_cur_get_mol, 14, P_mol_Rec.ATTRIBUTE5, 150);
754       dbms_sql.define_column(p_cur_get_mol, 15, P_mol_Rec.ATTRIBUTE6, 150);
755       dbms_sql.define_column(p_cur_get_mol, 16, P_mol_Rec.ATTRIBUTE7, 150);
756       dbms_sql.define_column(p_cur_get_mol, 17, P_mol_Rec.ATTRIBUTE8, 150);
757       dbms_sql.define_column(p_cur_get_mol, 18, P_mol_Rec.ATTRIBUTE9, 150);
758       dbms_sql.define_column(p_cur_get_mol, 19, P_mol_Rec.ATTRIBUTE10, 150);
759       dbms_sql.define_column(p_cur_get_mol, 20, P_mol_Rec.ATTRIBUTE11, 150);
760       dbms_sql.define_column(p_cur_get_mol, 21, P_mol_Rec.ATTRIBUTE12, 150);
761       dbms_sql.define_column(p_cur_get_mol, 22, P_mol_Rec.ATTRIBUTE13, 150);
762       dbms_sql.define_column(p_cur_get_mol, 23, P_mol_Rec.ATTRIBUTE14, 150);
763       dbms_sql.define_column(p_cur_get_mol, 24, P_mol_Rec.ATTRIBUTE15, 150);
764 
765       -- Debug Message
766       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Define Columns Ends');
767 END Define_Columns;
768 
769 -- This procudure gets column values by the Dynamic SQL.
770 PROCEDURE Get_Column_Values(
771     p_cur_get_mol   IN   NUMBER,
772     X_mol_Rec   OUT NOCOPY  CSP_ORDERLINES_PUB.mol_Rec_Type
773 )
774 IS
775 BEGIN
776       -- Debug Message
777       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Get Column Values Begins');
778 
779       -- get all column values for CSP_MOVEORDER_LINES_V table
780       dbms_sql.column_value(p_cur_get_mol, 1, X_mol_Rec.LINE_ID);
781       dbms_sql.column_value(p_cur_get_mol, 2, X_mol_Rec.LAST_UPDATED_LOGIN);
782       dbms_sql.column_value(p_cur_get_mol, 3, X_mol_Rec.HEADER_ID);
783       dbms_sql.column_value(p_cur_get_mol, 4, X_mol_Rec.CUSTOMER_PO);
784       dbms_sql.column_value(p_cur_get_mol, 5, X_mol_Rec.INCIDENT_ID);
785       dbms_sql.column_value(p_cur_get_mol, 6, X_mol_Rec.TASK_ID);
786       dbms_sql.column_value(p_cur_get_mol, 7, X_mol_Rec.TASK_ASSIGNMENT_ID);
787       dbms_sql.column_value(p_cur_get_mol, 8, X_mol_Rec.COMMENTS);
788       dbms_sql.column_value(p_cur_get_mol, 9, X_mol_Rec.ATTRIBUTE_CATEGORY);
789       dbms_sql.column_value(p_cur_get_mol, 10, X_mol_Rec.ATTRIBUTE1);
790       dbms_sql.column_value(p_cur_get_mol, 11, X_mol_Rec.ATTRIBUTE2);
791       dbms_sql.column_value(p_cur_get_mol, 12, X_mol_Rec.ATTRIBUTE3);
792       dbms_sql.column_value(p_cur_get_mol, 13, X_mol_Rec.ATTRIBUTE4);
793       dbms_sql.column_value(p_cur_get_mol, 14, X_mol_Rec.ATTRIBUTE5);
794       dbms_sql.column_value(p_cur_get_mol, 15, X_mol_Rec.ATTRIBUTE6);
795       dbms_sql.column_value(p_cur_get_mol, 16, X_mol_Rec.ATTRIBUTE7);
796       dbms_sql.column_value(p_cur_get_mol, 17, X_mol_Rec.ATTRIBUTE8);
797       dbms_sql.column_value(p_cur_get_mol, 18, X_mol_Rec.ATTRIBUTE9);
798       dbms_sql.column_value(p_cur_get_mol, 19, X_mol_Rec.ATTRIBUTE10);
799       dbms_sql.column_value(p_cur_get_mol, 20, X_mol_Rec.ATTRIBUTE11);
800       dbms_sql.column_value(p_cur_get_mol, 21, X_mol_Rec.ATTRIBUTE12);
801       dbms_sql.column_value(p_cur_get_mol, 22, X_mol_Rec.ATTRIBUTE13);
802       dbms_sql.column_value(p_cur_get_mol, 23, X_mol_Rec.ATTRIBUTE14);
803       dbms_sql.column_value(p_cur_get_mol, 24, X_mol_Rec.ATTRIBUTE15);
804 
805       -- Debug Message
806       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Get Column Values Ends');
807 END Get_Column_Values;
808 
809 PROCEDURE Gen_mol_order_cl(
810     p_order_by_rec   IN   CSP_ORDERLINES_PUB.mol_sort_rec_type,
811     x_order_by_cl    OUT NOCOPY  VARCHAR2,
812     x_return_status  OUT NOCOPY  VARCHAR2,
813     x_msg_count      OUT NOCOPY  NUMBER,
814     x_msg_data       OUT NOCOPY  VARCHAR2
815 )
816 IS
817 l_order_by_cl        VARCHAR2(1000)   := NULL;
818 l_util_order_by_tbl  JTF_PLSQL_API.Util_order_by_tbl_type;
819 BEGIN
820       -- Debug Message
821       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Generate Order by Begins');
822 
823       -- Hint: Developer should add more statements according to CSP_sort_rec_type
824       -- Ex:
825       -- l_util_order_by_tbl(1).col_choice := p_order_by_rec.customer_name;
826       -- l_util_order_by_tbl(1).col_name := 'Customer_Name';
827 
828       -- Debug Message
829       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Invoke JTF_PLSQL_API.Translate_OrderBy');
830 
831       JTF_PLSQL_API.Translate_OrderBy(
832           p_api_version_number   =>   1.0
833          ,p_init_msg_list        =>   FND_API.G_FALSE
834          ,p_validation_level     =>   FND_API.G_VALID_LEVEL_FULL
835          ,p_order_by_tbl         =>   l_util_order_by_tbl
836          ,x_order_by_clause      =>   l_order_by_cl
837          ,x_return_status        =>   x_return_status
838          ,x_msg_count            =>   x_msg_count
839          ,x_msg_data             =>   x_msg_data);
840 
841       IF(l_order_by_cl IS NOT NULL) THEN
842           x_order_by_cl := 'order by' || l_order_by_cl;
843       ELSE
844           x_order_by_cl := NULL;
845       END IF;
846 
847       -- Debug Message
848       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Generate Order by Ends');
849 END Gen_mol_order_cl;
850 
851 -- This procedure bind the variables for the Dynamic SQL
852 PROCEDURE Bind(
853     P_mol_Rec   IN   CSP_ORDERLINES_PUB.mol_Rec_Type,
854     -- Hint: Add more binding variables here
855     p_cur_get_mol   IN   NUMBER
856 )
857 IS
858 BEGIN
859       -- Bind variables
860       -- Only those that are not NULL
861       -- Debug Message
862       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Bind Variables Begins');
863 
864       -- The following example applies to all columns,
865       -- developers can copy and paste them.
866       IF( (P_mol_Rec.LINE_ID IS NOT NULL) AND (P_mol_Rec.LINE_ID <> FND_API.G_MISS_NUM) )
867       THEN
868           DBMS_SQL.BIND_VARIABLE(p_cur_get_mol, ':p_LINE_ID', P_mol_Rec.LINE_ID);
869       END IF;
870 
871       -- Debug Message
872       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Bind Variables Ends');
873 END Bind;
874 
875 PROCEDURE Gen_Select(
876     x_select_cl   OUT NOCOPY   VARCHAR2
877 )
878 IS
879 BEGIN
880       -- Debug Message
881       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Generate Select Begins');
882 
883       x_select_cl := 'Select ' ||
884                 'CSP_MOVEORDER_LINES_V.LINE_ID,' ||
885                 'CSP_MOVEORDER_LINES_V.CREATED_BY,' ||
886                 'CSP_MOVEORDER_LINES_V.CREATION_DATE,' ||
887                 'CSP_MOVEORDER_LINES_V.LAST_UPDATED_BY,' ||
888                 'CSP_MOVEORDER_LINES_V.LAST_UPDATE_DATE,' ||
889                 'CSP_MOVEORDER_LINES_V.LAST_UPDATED_LOGIN,' ||
890                 'CSP_MOVEORDER_LINES_V.HEADER_ID,' ||
891                 'CSP_MOVEORDER_LINES_V.CUSTOMER_PO,' ||
892                 'CSP_MOVEORDER_LINES_V.INCIDENT_ID,' ||
893                 'CSP_MOVEORDER_LINES_V.TASK_ID,' ||
894                 'CSP_MOVEORDER_LINES_V.TASK_ASSIGNMENT_ID,' ||
895                 'CSP_MOVEORDER_LINES_V.COMMENTS,' ||
896                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE_CATEGORY,' ||
897                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE1,' ||
898                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE2,' ||
899                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE3,' ||
900                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE4,' ||
901                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE5,' ||
902                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE6,' ||
903                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE7,' ||
904                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE8,' ||
905                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE9,' ||
906                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE10,' ||
907                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE11,' ||
908                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE12,' ||
909                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE13,' ||
910                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE14,' ||
911                 'CSP_MOVEORDER_LINES_V.ATTRIBUTE15,' ||
912                 'from CSP_MOVEORDER_LINES_V';
913       -- Debug Message
914       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Generate Select Ends');
915 
916 END Gen_Select;
917 
918 PROCEDURE Gen_mol_Where(
919     P_mol_Rec     IN   CSP_ORDERLINES_PUB.mol_Rec_Type,
920     x_mol_where   OUT NOCOPY   VARCHAR2
921 )
922 IS
923 -- cursors to check if wildcard values '%' and '_' have been passed
924 -- as item values
925 CURSOR c_chk_str1(p_rec_item VARCHAR2) IS
926     SELECT INSTR(p_rec_item, '%', 1, 1)
927     FROM DUAL;
928 CURSOR c_chk_str2(p_rec_item VARCHAR2) IS
929     SELECT INSTR(p_rec_item, '_', 1, 1)
930     FROM DUAL;
931 
932 -- return values from cursors
933 str_csr1   NUMBER;
934 str_csr2   NUMBER;
935 l_operator VARCHAR2(10);
936 BEGIN
937       -- Debug Message
938       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Generate Where Begins');
939 
940       -- There are three examples for each kind of datatype:
941       -- NUMBER, DATE, VARCHAR2.
942       -- Developer can copy and paste the following codes for your own record.
943 
944       -- example for NUMBER datatype
945       IF( (P_mol_Rec.LINE_ID IS NOT NULL) AND (P_mol_Rec.LINE_ID <> FND_API.G_MISS_NUM) )
946       THEN
947           IF(x_mol_where IS NULL) THEN
948               x_mol_where := 'Where';
949           ELSE
950               x_mol_where := x_mol_where || ' AND ';
951           END IF;
952           x_mol_where := x_mol_where || 'P_mol_Rec.LINE_ID = :p_LINE_ID';
953       END IF;
954 
955       -- example for DATE datatype
956       IF( (P_mol_Rec.CREATION_DATE IS NOT NULL) AND (P_mol_Rec.CREATION_DATE <> FND_API.G_MISS_DATE) )
957       THEN
958           -- check if item value contains '%' wildcard
959           OPEN c_chk_str1(P_mol_Rec.CREATION_DATE);
960           FETCH c_chk_str1 INTO str_csr1;
961           CLOSE c_chk_str1;
962 
963           IF(str_csr1 <> 0) THEN
964               l_operator := ' LIKE ';
965           ELSE
966               l_operator := ' = ';
967           END IF;
968 
969           -- check if item value contains '_' wildcard
970           OPEN c_chk_str2(P_mol_Rec.CREATION_DATE);
971           FETCH c_chk_str2 INTO str_csr2;
972           CLOSE c_chk_str2;
973 
974           IF(str_csr2 <> 0) THEN
975               l_operator := ' LIKE ';
976           ELSE
977               l_operator := ' = ';
978           END IF;
979 
980           IF(x_mol_where IS NULL) THEN
981               x_mol_where := 'Where ';
982           ELSE
983               x_mol_where := x_mol_where || ' AND ';
984           END IF;
985           x_mol_where := x_mol_where || 'P_mol_Rec.CREATION_DATE ' || l_operator || ' :p_CREATION_DATE';
986       END IF;
987 
988       -- example for VARCHAR2 datatype
989       IF( (P_mol_Rec.CUSTOMER_PO IS NOT NULL) AND (P_mol_Rec.CUSTOMER_PO <> FND_API.G_MISS_CHAR) )
990       THEN
991           -- check if item value contains '%' wildcard
992           OPEN c_chk_str1(P_mol_Rec.CUSTOMER_PO);
993           FETCH c_chk_str1 INTO str_csr1;
994           CLOSE c_chk_str1;
995 
996           IF(str_csr1 <> 0) THEN
997               l_operator := ' LIKE ';
998           ELSE
999               l_operator := ' = ';
1000           END IF;
1001 
1002           -- check if item value contains '_' wildcard
1003           OPEN c_chk_str2(P_mol_Rec.CUSTOMER_PO);
1004           FETCH c_chk_str2 INTO str_csr2;
1005           CLOSE c_chk_str2;
1006 
1007           IF(str_csr2 <> 0) THEN
1008               l_operator := ' LIKE ';
1009           ELSE
1010               l_operator := ' = ';
1011           END IF;
1012 
1013           IF(x_mol_where IS NULL) THEN
1014               x_mol_where := 'Where ';
1015           ELSE
1016               x_mol_where := x_mol_where || ' AND ';
1017           END IF;
1018           x_mol_where := x_mol_where || 'P_mol_Rec.CUSTOMER_PO ' || l_operator || ' :p_CUSTOMER_PO';
1019       END IF;
1020 
1021       -- Add more IF statements for each column below
1022 
1023       -- Debug Message
1024       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: Generate Where Ends');
1025 
1026 END Gen_mol_Where;
1027 
1028 -- Item-level validation procedures
1029 PROCEDURE Validate_LINE_ID (
1030     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1031     P_Validation_mode            IN   VARCHAR2,
1032     P_LINE_ID                IN   NUMBER,
1033     P_HEADER_ID                  IN   NUMBER,       -- added for valiation of line_id 06-DEC-99, VL.
1034     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1035     X_Return_Status              OUT NOCOPY  VARCHAR2,
1036     X_Msg_Count                  OUT NOCOPY  NUMBER,
1037     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1038     )
1039 IS
1040     l_check_line_id NUMBER;
1041 BEGIN
1042 
1043       -- Initialize message list if p_init_msg_list is set to TRUE.
1044       IF FND_API.to_Boolean( p_init_msg_list )
1045       THEN
1046           FND_MSG_PUB.initialize;
1047       END IF;
1048 
1049 
1050       -- Initialize API return status to SUCCESS
1051       x_return_status := FND_API.G_RET_STS_SUCCESS;
1052 
1053       -- validate NOT NULL column
1054       IF(p_LINE_ID is NULL)
1055       THEN
1056           JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR, 'CSP', 'Private orderlines API: -Violate NOT NULL constraint(LINE_ID)');
1057           x_return_status := FND_API.G_RET_STS_ERROR;
1058       END IF;
1059 
1060       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1061       THEN
1062         NULL;
1063           -- Hint: Validate data
1064           -- IF p_LINE_ID is not NULL and p_LINE_ID <> G_MISS_CHAR
1065           -- verify if data is valid
1066           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1067         /* Removed by klou. This block of validations is moved to the csp_to_form_molines.validate_and_write.
1068           -- CSP line_id validation
1069           BEGIN
1070             SELECT organization_id into l_check_line_id
1071             from mtl_txn_request_lines
1072             where header_id = p_header_id
1073             and line_id = p_line_id;
1074 
1075           EXCEPTION
1076             WHEN NO_DATA_FOUND THEN
1077                 x_return_status := FND_API.G_RET_STS_ERROR;
1078                 x_msg_count := x_msg_count + 1;
1079                 x_msg_data := 'The Line ID is not valid for the Header ID. Or Header ID does not exists.';
1080             WHEN OTHERS THEN
1081                 x_return_status := FND_API.G_RET_STS_ERROR;
1082                 x_msg_count := x_msg_count + 1;
1083                 x_msg_data := 'Unexpected errors found. Please check the Line ID and Header ID.';
1084           END;
1085         */
1086       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1087       THEN
1088           -- Hint: Validate data
1089           -- IF p_LINE_ID <> G_MISS_CHAR
1090           -- verify if data is valid
1091           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1092           NULL;
1093       END IF;
1094 
1095       -- Standard call to get message count and if count is 1, get message info.
1096       FND_MSG_PUB.Count_And_Get
1097       (  p_count          =>   x_msg_count,
1098          p_data           =>   x_msg_data
1099       );
1100 
1101 END Validate_LINE_ID;
1102 
1103 
1104 PROCEDURE Validate_LAST_UPDATED_LOGIN (
1105     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1106     P_Validation_mode            IN   VARCHAR2,
1107     P_LAST_UPDATED_LOGIN                IN   NUMBER,
1108     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1109     X_Return_Status              OUT NOCOPY  VARCHAR2,
1110     X_Msg_Count                  OUT NOCOPY  NUMBER,
1111     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1112     )
1113 IS
1114 BEGIN
1115 
1116       -- Initialize message list if p_init_msg_list is set to TRUE.
1117       IF FND_API.to_Boolean( p_init_msg_list )
1118       THEN
1119           FND_MSG_PUB.initialize;
1120       END IF;
1121 
1122 
1123       -- Initialize API return status to SUCCESS
1124       x_return_status := FND_API.G_RET_STS_SUCCESS;
1125 
1126       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1127       THEN
1128           -- Hint: Validate data
1129           -- IF p_LAST_UPDATED_LOGIN is not NULL and p_LAST_UPDATED_LOGIN <> G_MISS_CHAR
1130           -- verify if data is valid
1131           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1132           NULL;
1133       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1134       THEN
1135           -- Hint: Validate data
1136           -- IF p_LAST_UPDATED_LOGIN <> G_MISS_CHAR
1137           -- verify if data is valid
1138           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1139           NULL;
1140       END IF;
1141 
1142       -- Standard call to get message count and if count is 1, get message info.
1143       FND_MSG_PUB.Count_And_Get
1144       (  p_count          =>   x_msg_count,
1145          p_data           =>   x_msg_data
1146       );
1147 
1148 END Validate_LAST_UPDATED_LOGIN;
1149 
1150 
1151 PROCEDURE Validate_HEADER_ID (
1152     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1153     P_Validation_mode            IN   VARCHAR2,
1154     P_HEADER_ID                IN   NUMBER,
1155     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1156     X_Return_Status              OUT NOCOPY  VARCHAR2,
1157     X_Msg_Count                  OUT NOCOPY  NUMBER,
1158     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1159     )
1160 IS
1161 BEGIN
1162 
1163       -- Initialize message list if p_init_msg_list is set to TRUE.
1164       IF FND_API.to_Boolean( p_init_msg_list )
1165       THEN
1166           FND_MSG_PUB.initialize;
1167       END IF;
1168 
1169 
1170       -- Initialize API return status to SUCCESS
1171       x_return_status := FND_API.G_RET_STS_SUCCESS;
1172 
1173       -- validate NOT NULL column
1174       IF(p_HEADER_ID is NULL)
1175       THEN
1176           JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_ERROR, 'CSP', 'Private orderlines API: -Violate NOT NULL constraint(HEADER_ID)');
1177           x_return_status := FND_API.G_RET_STS_ERROR;
1178       END IF;
1179 
1180       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1181       THEN
1182           -- Hint: Validate data
1183           -- IF p_HEADER_ID is not NULL and p_HEADER_ID <> G_MISS_CHAR
1184           -- verify if data is valid
1185           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1186           NULL;
1187       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1188       THEN
1189           -- Hint: Validate data
1190           -- IF p_HEADER_ID <> G_MISS_CHAR
1191           -- verify if data is valid
1192           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1193           NULL;
1194       END IF;
1195 
1196       -- Standard call to get message count and if count is 1, get message info.
1197       FND_MSG_PUB.Count_And_Get
1198       (  p_count          =>   x_msg_count,
1199          p_data           =>   x_msg_data
1200       );
1201 
1202 END Validate_HEADER_ID;
1203 
1204 
1205 PROCEDURE Validate_CUSTOMER_PO (
1206     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1207     P_Validation_mode            IN   VARCHAR2,
1208     P_CUSTOMER_PO                IN   VARCHAR2,
1209     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1210     X_Return_Status              OUT NOCOPY  VARCHAR2,
1211     X_Msg_Count                  OUT NOCOPY  NUMBER,
1212     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1213     )
1214 IS
1215 BEGIN
1216 
1217       -- Initialize message list if p_init_msg_list is set to TRUE.
1218       IF FND_API.to_Boolean( p_init_msg_list )
1219       THEN
1220           FND_MSG_PUB.initialize;
1221       END IF;
1222 
1223 
1224       -- Initialize API return status to SUCCESS
1225       x_return_status := FND_API.G_RET_STS_SUCCESS;
1226 
1227       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1228       THEN
1229           -- Hint: Validate data
1230           -- IF p_CUSTOMER_PO is not NULL and p_CUSTOMER_PO <> G_MISS_CHAR
1231           -- verify if data is valid
1232           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1233           NULL;
1234       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1235       THEN
1236           -- Hint: Validate data
1237           -- IF p_CUSTOMER_PO <> G_MISS_CHAR
1238           -- verify if data is valid
1239           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1240           NULL;
1241       END IF;
1242 
1243       -- Standard call to get message count and if count is 1, get message info.
1244       FND_MSG_PUB.Count_And_Get
1245       (  p_count          =>   x_msg_count,
1246          p_data           =>   x_msg_data
1247       );
1248 
1249 END Validate_CUSTOMER_PO;
1250 
1251 
1252 PROCEDURE Validate_INCIDENT_ID (
1253     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1254     P_Validation_mode            IN   VARCHAR2,
1255     P_INCIDENT_ID                IN   NUMBER,
1256     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1257     X_Return_Status              OUT NOCOPY  VARCHAR2,
1258     X_Msg_Count                  OUT NOCOPY  NUMBER,
1259     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1260     )
1261 IS
1262 BEGIN
1263 
1264       -- Initialize message list if p_init_msg_list is set to TRUE.
1265       IF FND_API.to_Boolean( p_init_msg_list )
1266       THEN
1267           FND_MSG_PUB.initialize;
1268       END IF;
1269 
1270 
1271       -- Initialize API return status to SUCCESS
1272       x_return_status := FND_API.G_RET_STS_SUCCESS;
1273 
1274       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1275       THEN
1276           -- Hint: Validate data
1277           -- IF p_INCIDENT_ID is not NULL and p_INCIDENT_ID <> G_MISS_CHAR
1278           -- verify if data is valid
1279           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1280           NULL;
1281       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1282       THEN
1283           -- Hint: Validate data
1284           -- IF p_INCIDENT_ID <> G_MISS_CHAR
1285           -- verify if data is valid
1286           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1287           NULL;
1288       END IF;
1289 
1290       -- Standard call to get message count and if count is 1, get message info.
1291       FND_MSG_PUB.Count_And_Get
1292       (  p_count          =>   x_msg_count,
1293          p_data           =>   x_msg_data
1294       );
1295 
1296 END Validate_INCIDENT_ID;
1297 
1298 
1299 PROCEDURE Validate_TASK_ID (
1300     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1301     P_Validation_mode            IN   VARCHAR2,
1302     P_TASK_ID                IN   NUMBER,
1303     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1304     X_Return_Status              OUT NOCOPY  VARCHAR2,
1305     X_Msg_Count                  OUT NOCOPY  NUMBER,
1306     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1307     )
1308 IS
1309 BEGIN
1310 
1311       -- Initialize message list if p_init_msg_list is set to TRUE.
1312       IF FND_API.to_Boolean( p_init_msg_list )
1313       THEN
1314           FND_MSG_PUB.initialize;
1315       END IF;
1316 
1317 
1318       -- Initialize API return status to SUCCESS
1319       x_return_status := FND_API.G_RET_STS_SUCCESS;
1320 
1321       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1322       THEN
1323           -- Hint: Validate data
1324           -- IF p_TASK_ID is not NULL and p_TASK_ID <> G_MISS_CHAR
1325           -- verify if data is valid
1326           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1327           NULL;
1328       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1329       THEN
1330           -- Hint: Validate data
1331           -- IF p_TASK_ID <> G_MISS_CHAR
1332           -- verify if data is valid
1333           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1334           NULL;
1335       END IF;
1336 
1337       -- Standard call to get message count and if count is 1, get message info.
1338       FND_MSG_PUB.Count_And_Get
1339       (  p_count          =>   x_msg_count,
1340          p_data           =>   x_msg_data
1341       );
1342 
1343 END Validate_TASK_ID;
1344 
1345 
1346 PROCEDURE Validate_TASK_ASSIGNMENT_ID (
1347     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1348     P_Validation_mode            IN   VARCHAR2,
1349     P_TASK_ASSIGNMENT_ID                IN   NUMBER,
1350     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1351     X_Return_Status              OUT NOCOPY  VARCHAR2,
1352     X_Msg_Count                  OUT NOCOPY  NUMBER,
1353     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1354     )
1355 IS
1356 BEGIN
1357 
1358       -- Initialize message list if p_init_msg_list is set to TRUE.
1359       IF FND_API.to_Boolean( p_init_msg_list )
1360       THEN
1361           FND_MSG_PUB.initialize;
1362       END IF;
1363 
1364 
1365       -- Initialize API return status to SUCCESS
1366       x_return_status := FND_API.G_RET_STS_SUCCESS;
1367 
1368       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1369       THEN
1370           -- Hint: Validate data
1371           -- IF p_TASK_ASSIGNMENT_ID is not NULL and p_TASK_ASSIGNMENT_ID <> G_MISS_CHAR
1372           -- verify if data is valid
1373           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1374           NULL;
1375       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1376       THEN
1377           -- Hint: Validate data
1378           -- IF p_TASK_ASSIGNMENT_ID <> G_MISS_CHAR
1379           -- verify if data is valid
1380           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1381           NULL;
1382       END IF;
1383 
1384       -- Standard call to get message count and if count is 1, get message info.
1385       FND_MSG_PUB.Count_And_Get
1386       (  p_count          =>   x_msg_count,
1387          p_data           =>   x_msg_data
1388       );
1389 
1390 END Validate_TASK_ASSIGNMENT_ID;
1391 
1392 
1393 PROCEDURE Validate_COMMENTS (
1394     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1395     P_Validation_mode            IN   VARCHAR2,
1396     P_COMMENTS                IN   VARCHAR2,
1397     -- Hint: You may add 'X_Item_Property_Rec  OUT NOCOPY     JTF_PLSQL_API.ITEM_PROPERTY_REC_TYPE' here if you'd like to pass back item property.
1398     X_Return_Status              OUT NOCOPY  VARCHAR2,
1399     X_Msg_Count                  OUT NOCOPY  NUMBER,
1400     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1401     )
1402 IS
1403 BEGIN
1404 
1405       -- Initialize message list if p_init_msg_list is set to TRUE.
1406       IF FND_API.to_Boolean( p_init_msg_list )
1407       THEN
1408           FND_MSG_PUB.initialize;
1409       END IF;
1410 
1411 
1412       -- Initialize API return status to SUCCESS
1413       x_return_status := FND_API.G_RET_STS_SUCCESS;
1414 
1415       IF(p_validation_mode = JTF_PLSQL_API.G_CREATE)
1416       THEN
1417           -- Hint: Validate data
1418           -- IF p_COMMENTS is not NULL and p_COMMENTS <> G_MISS_CHAR
1419           -- verify if data is valid
1420           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1421           NULL;
1422       ELSIF(p_validation_mode = JTF_PLSQL_API.G_UPDATE)
1423       THEN
1424           -- Hint: Validate data
1425           -- IF p_COMMENTS <> G_MISS_CHAR
1426           -- verify if data is valid
1427           -- if data is not valid : x_return_status := FND_API.G_RET_STS_ERROR;
1428           NULL;
1429       END IF;
1430 
1431       -- Standard call to get message count and if count is 1, get message info.
1432       FND_MSG_PUB.Count_And_Get
1433       (  p_count          =>   x_msg_count,
1434          p_data           =>   x_msg_data
1435       );
1436 
1437 END Validate_COMMENTS;
1438 
1439 
1440 -- Hint: inter-field level validation can be added here.
1441 -- Hint: If p_validation_mode = JTF_PLSQL_API.G_VALIDATE_UPDATE, we should use cursor
1442 --       to get old values for all fields used in inter-field validation and set all G_MISS_XXX fields to original value
1443 --       stored in database table.
1444 PROCEDURE Validate_mol_rec(
1445     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1446     P_Validation_mode            IN   VARCHAR2,
1447     P_mol_Rec     IN    mol_Rec_Type,
1448     X_Return_Status              OUT NOCOPY  VARCHAR2,
1449     X_Msg_Count                  OUT NOCOPY  NUMBER,
1450     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1451     )
1452 IS
1453 BEGIN
1454 
1455       -- Initialize message list if p_init_msg_list is set to TRUE.
1456       IF FND_API.to_Boolean( p_init_msg_list )
1457       THEN
1458           FND_MSG_PUB.initialize;
1459       END IF;
1460 
1461 
1462       -- Initialize API return status to SUCCESS
1463       x_return_status := FND_API.G_RET_STS_SUCCESS;
1464 
1465       -- Hint: Validate data
1466       -- If data not valid
1467       -- THEN
1468       -- x_return_status := FND_API.G_RET_STS_ERROR;
1469 
1470       -- Debug Message
1471       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'API_INVALID_RECORD');
1472 
1473       -- Standard call to get message count and if count is 1, get message info.
1474       FND_MSG_PUB.Count_And_Get
1475       (  p_count          =>   x_msg_count,
1476          p_data           =>   x_msg_data
1477       );
1478 
1479 END Validate_mol_Rec;
1480 
1481 PROCEDURE Validate_orderlines(
1482     P_Init_Msg_List              IN   VARCHAR2     := FND_API.G_FALSE,
1483     P_Validation_level           IN   NUMBER := FND_API.G_VALID_LEVEL_FULL,
1484     P_Validation_mode            IN   VARCHAR2,
1485     P_mol_Rec     IN    mol_Rec_Type,
1486     X_Return_Status              OUT NOCOPY  VARCHAR2,
1487     X_Msg_Count                  OUT NOCOPY  NUMBER,
1488     X_Msg_Data                   OUT NOCOPY  VARCHAR2
1489     )
1490 IS
1491 l_api_name   CONSTANT VARCHAR2(30) := 'Validate_orderlines';
1492  BEGIN
1493 
1494       -- Debug Message
1495       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'start');
1496 
1497 
1498       -- Initialize API return status to SUCCESS
1499       x_return_status := FND_API.G_RET_STS_SUCCESS;
1500 
1501       IF (p_validation_level >= JTF_PLSQL_API.G_VALID_LEVEL_ITEM) THEN
1502           -- Hint: We provide validation procedure for every column. Developer should delete
1503           --       unnecessary validation procedures.
1504           Validate_LINE_ID(
1505               p_init_msg_list          => FND_API.G_FALSE,
1506               p_validation_mode        => p_validation_mode,
1507               p_LINE_ID   => P_mol_Rec.LINE_ID,
1508               P_HEADER_ID => P_mol_Rec.HEADER_ID,
1509               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1510               x_return_status          => x_return_status,
1511               x_msg_count              => x_msg_count,
1512               x_msg_data               => x_msg_data);
1513           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1514               raise FND_API.G_EXC_ERROR;
1515           END IF;
1516 
1517           Validate_LAST_UPDATED_LOGIN(
1518               p_init_msg_list          => FND_API.G_FALSE,
1519               p_validation_mode        => p_validation_mode,
1520               p_LAST_UPDATED_LOGIN   => P_mol_Rec.LAST_UPDATED_LOGIN,
1521               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1522               x_return_status          => x_return_status,
1523               x_msg_count              => x_msg_count,
1524               x_msg_data               => x_msg_data);
1525           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1526               raise FND_API.G_EXC_ERROR;
1527           END IF;
1528 
1529           Validate_HEADER_ID(
1530               p_init_msg_list          => FND_API.G_FALSE,
1531               p_validation_mode        => p_validation_mode,
1532               p_HEADER_ID   => P_mol_Rec.HEADER_ID,
1533               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1534               x_return_status          => x_return_status,
1535               x_msg_count              => x_msg_count,
1536               x_msg_data               => x_msg_data);
1537           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1538               raise FND_API.G_EXC_ERROR;
1539           END IF;
1540 
1541           Validate_CUSTOMER_PO(
1542               p_init_msg_list          => FND_API.G_FALSE,
1543               p_validation_mode        => p_validation_mode,
1544               p_CUSTOMER_PO   => P_mol_Rec.CUSTOMER_PO,
1545               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1546               x_return_status          => x_return_status,
1547               x_msg_count              => x_msg_count,
1548               x_msg_data               => x_msg_data);
1549           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1550               raise FND_API.G_EXC_ERROR;
1551           END IF;
1552 
1553           Validate_INCIDENT_ID(
1554               p_init_msg_list          => FND_API.G_FALSE,
1555               p_validation_mode        => p_validation_mode,
1556               p_INCIDENT_ID   => P_mol_Rec.INCIDENT_ID,
1557               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1558               x_return_status          => x_return_status,
1559               x_msg_count              => x_msg_count,
1560               x_msg_data               => x_msg_data);
1561           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1562               raise FND_API.G_EXC_ERROR;
1563           END IF;
1564 
1565           Validate_TASK_ID(
1566               p_init_msg_list          => FND_API.G_FALSE,
1567               p_validation_mode        => p_validation_mode,
1568               p_TASK_ID   => P_mol_Rec.TASK_ID,
1569               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1570               x_return_status          => x_return_status,
1571               x_msg_count              => x_msg_count,
1572               x_msg_data               => x_msg_data);
1573           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1574               raise FND_API.G_EXC_ERROR;
1575           END IF;
1576 
1577           Validate_TASK_ASSIGNMENT_ID(
1578               p_init_msg_list          => FND_API.G_FALSE,
1579               p_validation_mode        => p_validation_mode,
1580               p_TASK_ASSIGNMENT_ID   => P_mol_Rec.TASK_ASSIGNMENT_ID,
1581               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1582               x_return_status          => x_return_status,
1583               x_msg_count              => x_msg_count,
1584               x_msg_data               => x_msg_data);
1585           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1586               raise FND_API.G_EXC_ERROR;
1587           END IF;
1588 
1589           Validate_COMMENTS(
1590               p_init_msg_list          => FND_API.G_FALSE,
1591               p_validation_mode        => p_validation_mode,
1592               p_COMMENTS   => P_mol_Rec.COMMENTS,
1593               -- Hint: You may add x_item_property_rec as one of your OUT parameter if you'd like to pass back item property.
1594               x_return_status          => x_return_status,
1595               x_msg_count              => x_msg_count,
1596               x_msg_data               => x_msg_data);
1597           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1598               raise FND_API.G_EXC_ERROR;
1599           END IF;
1600 
1601       END IF;
1602 
1603       IF (p_validation_level >= JTF_PLSQL_API.G_VALID_LEVEL_RECORD) THEN
1604           -- Hint: Inter-field level validation can be added here
1605           -- invoke record level validation procedures
1606           Validate_mol_Rec(
1607               p_init_msg_list          => FND_API.G_FALSE,
1608               p_validation_mode        => p_validation_mode,
1609           P_mol_Rec     =>    P_mol_Rec,
1610               x_return_status          => x_return_status,
1611               x_msg_count              => x_msg_count,
1612               x_msg_data               => x_msg_data);
1613 
1614           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1615               raise FND_API.G_EXC_ERROR;
1616           END IF;
1617       END IF;
1618 
1619       IF (p_validation_level >= JTF_PLSQL_API.G_VALID_LEVEL_INTER_RECORD) THEN
1620           -- invoke inter-record level validation procedures
1621           NULL;
1622       END IF;
1623 
1624       IF (p_validation_level >= JTF_PLSQL_API.G_VALID_LEVEL_INTER_ENTITY) THEN
1625           -- invoke inter-entity level validation procedures
1626           NULL;
1627       END IF;
1628 
1629 
1630       -- Debug Message
1631       JTF_PLSQL_API.Debug_Message(FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW, 'CSP', 'Private API: ' || l_api_name || 'end');
1632 
1633 END Validate_orderlines;
1634 
1635 End CSP_ORDERLINES_PVT;