DBA Data[Home] [Help]

PACKAGE BODY: APPS.CSL_COUNTER_PROP_VALUES_PKG

Source


1 PACKAGE BODY CSL_COUNTER_PROP_VALUES_PKG AS
2 /* $Header: cslvcpvb.pls 120.1 2005/08/30 01:33:41 utekumal noship $*/
3 
4 error EXCEPTION;
5 
6 /*** Globals ***/
7 g_object_name  CONSTANT VARCHAR2(30) := 'CSL_COUNTER_PROP_VALUES_PKG';  -- package name
8 g_pub_name     CONSTANT VARCHAR2(30) := 'CS_COUNTER_PROP_VALS';  -- publication item name
9 g_debug_level           NUMBER; -- debug level
10 
11 CURSOR c_CS_COUNTER_PROP_VALS( b_user_name VARCHAR2, b_tranid NUMBER) is
12   SELECT *
13   FROM  CSL_CS_COUNTER_PROP_VALS_inq
14   WHERE tranid$$ = b_tranid
15   AND   clid$$cs = b_user_name;
16 
17 /***
18   This procedure is called by APPLY_CLIENT_CHANGES when an inserted record is to be processed.
19 ***/
20 PROCEDURE APPLY_INSERT
21          (
22            p_record        IN c_CS_COUNTER_PROP_VALS%ROWTYPE,
23            p_error_msg     OUT NOCOPY    VARCHAR2,
24            x_return_status IN OUT NOCOPY VARCHAR2
25          ) IS
26 /*
27   cursor c_counter_group
28     ( b_counter_value_id number
29     )
30   is
31     select cc_v.counter_id         counter_id
32     ,      cc_v.counter_group_id   counter_group_id
33     ,      cc_v.counter_group_name counter_group_name
34     ,      c_grp.source_object_id
35     from   cs_counters_v cc_v, cs_counter_values c_val, cs_counter_groups c_grp
36     where  cc_v.counter_id = c_val.counter_id
37            AND c_val.counter_value_id = b_counter_value_id
38            AND cc_counter_group_id = c_grp.counter_group_id
39            AND c_grp.source_object_code = 'CP';
40 
41   cursor c_counter_properties
42     ( b_counter_id number
43     )
44   is
45     select count(*) number_of_props
46     from   cs_counter_properties ccp
47     where  ccp.counter_id = b_counter_id;
48 */
49   cursor c_counter_values
50     ( b_counter_value_id number
51     )
52   is
53     select ccv.counter_grp_log_id counter_grp_log_id
54     from   cs_counter_values ccv
55     where  ccv.counter_value_id = b_counter_value_id;
56 
57 --  r_counter_group           c_counter_group%rowtype;
58 --  r_counter_properties c_counter_properties%rowtype;
59   r_counter_values     c_counter_values%rowtype;
60 
61   --Bug 4496299
62   -- l_ctr_grp_log_rec   Cs_Ctr_Capture_Reading_pvt.Ctr_Grp_Log_Rec_Type;
63   --l_ctr_rdg_rec       Cs_Ctr_Capture_Reading_pvt.Ctr_Rdg_Rec_Type;
64   --l_prop_rdg_rec      Cs_Ctr_Capture_Reading_pvt.Prop_Rdg_Rec_Type;
65 --  l_prop_rdg_tbl      Cs_Ctr_Capture_Reading_pub.Prop_Rdg_Tbl_Type;
66   l_ctr_grp_id         number;
67   l_ctr_grp_log_id     number;
68   l_cnt_prop_vals       number;
69 
70 --  l_customer_product_id     number;
71 
72   l_msg_count NUMBER;
73   l_msg_data  VARCHAR2(240);
74 BEGIN
75   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
76     jtm_message_log_pkg.Log_Msg
77     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
78     , v_object_name => g_object_name
79     , v_message     => 'Entering ' || g_object_name || '.APPLY_INSERT'
80     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
81   END IF;
82 
83   -- For mobile Field Service we know that a counter_group_id is not
84   -- known, but the counter_id is known. Therefore we need to retrieve
85   -- the counter_group_id, using the counter_id.
86 /*
87   open c_counter_group
88     ( b_counter_value_id => csl_ctr_prop_values_rec.counter_value_id
89     );
90   fetch c_counter_group
91   into r_counter_group;
92   if c_counter_group%found
93   then
94     l_ctr_grp_id := r_counter_group.counter_group_id;
95     l_customer_product_id := r_counter_group.source_object_id;
96   else
97     l_ctr_grp_id := FND_API.G_MISS_NUM;
98     l_customer_product_id := FND_API.G_MISS_NUM;
99   end if;
100   close c_counter_group;
101 */
102   -- Determine the group_log_id for the counter_property_value.
103   open c_counter_values
104     ( b_counter_value_id => p_record.counter_value_id
105     );
106   fetch c_counter_values
107   into r_counter_values;
108   close c_counter_values;
109 
110   -- Fill the counter_group_log record, so it can be used to call the API
111 /*
112   l_ctr_grp_log_rec.counter_group_id := l_ctr_grp_id;
113   l_ctr_grp_log_rec.value_timestamp  := p_record.value_timestamp;
114   l_ctr_grp_log_rec.source_transaction_id   := l_customer_product_id;
115   l_ctr_grp_log_rec.source_transaction_code := 'FS';
116 */
117   -- Fill the counter_property_reading record, so it can be used to call the API
118 
119   --Bug 4496299
120   /*
121   l_prop_rdg_rec.counter_property_id := p_record.counter_property_id;
122   l_prop_rdg_rec.value_timestamp     := p_record.value_timestamp;
123   l_prop_rdg_rec.property_value      := p_record.property_value;
124   l_prop_rdg_rec.counter_prop_value_id := p_record.counter_prop_value_id;
125 
126   Cs_Ctr_Capture_Reading_pvt.Capture_Ctr_Property_Reading
127     ( p_api_version_number => 1.0
128     , p_init_msg_list      => FND_API.G_TRUE
129     , p_commit             => FND_API.G_FALSE
130     , p_validation_level   => FND_API.G_VALID_LEVEL_FULL
131     , p_prop_rdg_rec       => l_prop_rdg_rec
132     , p_counter_grp_log_id => r_counter_values.counter_grp_log_id
133     , x_return_status      => x_return_status
134     , x_msg_count          => l_msg_count
135     , x_msg_data           => l_msg_data
136     );
137    */
138 
139   -- Determine if all property-values for this counter have been processed.
140 /*  open c_counter_properties
141     ( b_counter_id => p_record.counter_id
142     );
143   fetch c_counter_properties
144   into r_counter_properties;
145   close c_counter_properties;
146 */
147 
148   --Bug 4496299
149 /*
150   SELECT COUNT(1) INTO l_cnt_prop_vals
151   FROM CSL_CS_COUNTER_PROP_VALS_INQ
152   WHERE COUNTER_VALUE_ID = p_record.COUNTER_VALUE_ID;
153 
154   if  l_cnt_prop_vals = 0 -- r_counter_properties.number_of_props = p_record.ctr_prop_count
155   then
156     -- All property values have been processed. Call the private API to close
157     -- the counter group log.
158     Cs_Ctr_Capture_Reading_pvt.Post_Capture_Counter_Reading
159       ( p_api_version_number => 1.0
160       , p_init_msg_list      => FND_API.G_TRUE
161       , p_commit             => FND_API.G_FALSE
162       , p_validation_level   => FND_API.G_VALID_LEVEL_FULL
163       , p_counter_grp_log_id => r_counter_values.counter_grp_log_id
164       , x_return_status      => x_return_status
165       , x_msg_count          => l_msg_count
166       , x_msg_data           => l_msg_data
167       );
168   end if;
169   */
170 
171   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
172     /*** exception occurred in API -> return errmsg ***/
173     p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
174       (
175         p_api_error      => TRUE
176       );
177   END IF;
178 
179   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
180     jtm_message_log_pkg.Log_Msg
181     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
182     , v_object_name => g_object_name
183     , v_message     => 'Leaving ' || g_object_name || '.APPLY_INSERT'
184     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
185   END IF;
186 
187 EXCEPTION WHEN OTHERS THEN
188   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
189     jtm_message_log_pkg.Log_Msg
190     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
191     , v_object_name => g_object_name
192     , v_message     => 'Exception occurred in APPLY_INSERT:' || fnd_global.local_chr(10) || sqlerrm
193     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
194   END IF;
195 
196   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_INSERT', sqlerrm);
197   p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
198     (
199       p_api_error      => TRUE
200     );
201 
202   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
203     jtm_message_log_pkg.Log_Msg
204     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
205     , v_object_name => g_object_name
206     , v_message     => 'Leaving ' || g_object_name || '.APPLY_INSERT'
207     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
208   END IF;
209 
210   x_return_status := FND_API.G_RET_STS_ERROR;
211 END APPLY_INSERT;
212 
213 /***
214   This procedure is called by APPLY_CLIENT_CHANGES when an updated record is to be processed.
215 ***/
216 PROCEDURE APPLY_UPDATE
217          (
218            p_record        IN c_CS_COUNTER_PROP_VALS%ROWTYPE,
219            p_error_msg     OUT NOCOPY    VARCHAR2,
220            x_return_status IN OUT NOCOPY VARCHAR2
221          ) IS
222   cursor c_counter_prop_value
223     ( b_counter_prop_value_id number
224     )
225   is
226     select counter_id
227     ,      counter_prop_value_id
228     ,      counter_grp_log_id
229     ,      object_version_number
230     from   cs_ctr_property_values_v
231     where  counter_prop_value_id = b_counter_prop_value_id;
232 
233   r_counter_prop_value c_counter_prop_value%rowtype;
234 
235   --Bug 4496299
236   --l_ctr_grp_log_rec    Cs_Ctr_Capture_Reading_pub.Ctr_Grp_Log_Rec_Type;
237   --l_ctr_rdg_rec        Cs_Ctr_Capture_Reading_pub.Ctr_Rdg_Rec_Type;
238   --l_prop_rdg_rec       Cs_Ctr_Capture_Reading_pub.Prop_Rdg_Rec_Type;
239   l_prop_rdg_tbl       Cs_Ctr_Capture_Reading_pub.Prop_Rdg_Tbl_Type;
240   l_ctr_grp_id         number;
241   l_ctr_grp_log_id     number;
242 
243   l_msg_count NUMBER;
244   l_msg_data  VARCHAR2(240);
245 BEGIN
246   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
247     jtm_message_log_pkg.Log_Msg
248     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
249     , v_object_name => g_object_name
250     , v_message     => 'Entering ' || g_object_name || '.APPLY_UPDATE'
251     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
252   END IF;
253 
254 
255   --Bug 4496299
256   /*
257   open c_counter_prop_value
258     ( p_record.counter_prop_value_id
259     );
260   fetch c_counter_prop_value
261   into r_counter_prop_value;
262   if c_counter_prop_value%found
263   then
264     l_ctr_grp_log_id := r_counter_prop_value.counter_grp_log_id;
265     l_prop_rdg_rec.object_version_number
266                                  := r_counter_prop_value.object_version_number;
267   else
268     -- Let the API complain with a message.
269     l_ctr_grp_log_id                     := FND_API.G_MISS_NUM;
270     l_prop_rdg_rec.object_version_number := FND_API.G_MISS_NUM;
271   end if;
272   close c_counter_prop_value;
273 
274   l_prop_rdg_rec.counter_property_id := p_record.counter_property_id;
275   l_prop_rdg_rec.value_timestamp     := p_record.value_timestamp;
276   l_prop_rdg_rec.property_value      := p_record.property_value;
277   l_prop_rdg_rec.counter_prop_value_id := p_record.counter_prop_value_id;
278   l_prop_rdg_tbl(1) := l_prop_rdg_rec;
279 
280   Cs_Ctr_Capture_Reading_pub.Update_Counter_Reading
281     ( p_api_version_number => 1.0
282     , p_validation_level   => FND_API.G_VALID_LEVEL_FULL
283     , p_init_msg_list      => FND_API.G_TRUE
284     , p_commit             => FND_API.G_FALSE
285     , p_prop_rdg_tbl       => l_prop_rdg_tbl
286     , p_ctr_grp_log_id     => l_ctr_grp_log_id
287     , x_return_status      => x_return_status
288     , x_msg_count          => l_msg_count
289     , x_msg_data           => l_msg_data
290     );
291 */
292 
293   IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
294     /*** exception occurred in API -> return errmsg ***/
295     p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
296       (
297         p_api_error      => TRUE
298       );
299   END IF;
300 
301   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
302     jtm_message_log_pkg.Log_Msg
303     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
304     , v_object_name => g_object_name
305     , v_message     => 'Leaving ' || g_object_name || '.APPLY_UPDATE'
306     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
307   END IF;
308 
309 EXCEPTION WHEN OTHERS THEN
310   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
311     jtm_message_log_pkg.Log_Msg
312     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
313     , v_object_name => g_object_name
314     , v_message     => 'Exception occurred in APPLY_UPDATE:' || fnd_global.local_chr(10) || sqlerrm
315     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
316   END IF;
317 
318   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_UPDATE', sqlerrm);
319   p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
320     (
321       p_api_error      => TRUE
322     );
323 
324   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
325     jtm_message_log_pkg.Log_Msg
326     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
327     , v_object_name => g_object_name
328     , v_message     => 'Leaving ' || g_object_name || '.APPLY_UPDATE'
329     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
330   END IF;
331 
332   x_return_status := FND_API.G_RET_STS_ERROR;
333 END APPLY_UPDATE;
334 
335 /***
336   This procedure is called by APPLY_CLIENT_CHANGES for every record in in-queue that needs to be processed.
337 ***/
338 PROCEDURE APPLY_RECORD
339          (
340            p_record        IN     c_CS_COUNTER_PROP_VALS%ROWTYPE,
341            p_error_msg     OUT NOCOPY    VARCHAR2,
342            x_return_status IN OUT NOCOPY VARCHAR2
343          ) IS
344 BEGIN
345   /*** initialize return status and message list ***/
346   x_return_status := FND_API.G_RET_STS_SUCCESS;
347   FND_MSG_PUB.INITIALIZE;
348 
349   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
350     jtm_message_log_pkg.Log_Msg
351     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
352     , v_object_name => g_object_name
353     , v_message     => 'Entering ' || g_object_name || '.APPLY_RECORD'
354     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
355   END IF;
356 
357   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
358     jtm_message_log_pkg.Log_Msg
359       ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
360       , v_object_name => g_object_name
361       , v_message     => 'Processing CS_COUNTER_PROP_VALS = ' || p_record.COUNTER_PROP_VALUE_ID /* put PK column here */ || fnd_global.local_chr(10) ||
362        'DMLTYPE = ' || p_record.dmltype$$
363       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
364   END IF;
365 
366   IF p_record.dmltype$$='I' THEN
367     -- Process insert
368     APPLY_INSERT
369       (
370         p_record,
371         p_error_msg,
372         x_return_status
373       );
374   ELSIF p_record.dmltype$$='U' THEN
375     -- Process update
376     APPLY_UPDATE
377       (
378        p_record,
379        p_error_msg,
380        x_return_status
381      );
382   ELSIF p_record.dmltype$$='D' THEN
383     -- Process delete; not supported for this entity
384     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
385       jtm_message_log_pkg.Log_Msg
386         ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
387         , v_object_name => g_object_name
388         , v_message     => 'Delete is not supported for this entity'
389         , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
390     END IF;
391 
392     p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
393       (
394         p_message        => 'CSL_DML_OPERATION'
395       , p_token_name1    => 'DML'
396       , p_token_value1   => p_record.dmltype$$
397       );
398 
399     x_return_status := FND_API.G_RET_STS_ERROR;
400   ELSE
401     -- invalid dml type
402     IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
403        jtm_message_log_pkg.Log_Msg
404       ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
405       , v_object_name => g_object_name
406       , v_message     => 'Invalid DML type: ' || p_record.dmltype$$
407       , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
408     END IF;
409 
410     p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
411       (
412         p_message        => 'CSL_DML_OPERATION'
413       , p_token_name1    => 'DML'
414       , p_token_value1   => p_record.dmltype$$
415       );
416 
417     x_return_status := FND_API.G_RET_STS_ERROR;
418   END IF;
419 
420   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
421     jtm_message_log_pkg.Log_Msg
422     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
423     , v_object_name => g_object_name
424     , v_message     => 'Leaving ' || g_object_name || '.APPLY_RECORD'
425     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
426   END IF;
427 EXCEPTION WHEN OTHERS THEN
428   /*** defer record when any process exception occurs ***/
429   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
430     jtm_message_log_pkg.Log_Msg
431     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
432     , v_object_name => g_object_name
433     , v_message     => 'Exception occurred in APPLY_RECORD:' || fnd_global.local_chr(10) || sqlerrm
434     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
435   END IF;
436 
437   fnd_msg_pub.Add_Exc_Msg( g_object_name, 'APPLY_RECORD', sqlerrm);
438   p_error_msg := CSL_SERVICEL_WRAPPER_PKG.GET_ERROR_MESSAGE_TEXT
439     (
440       p_api_error      => TRUE
441     );
442 
443   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
444     jtm_message_log_pkg.Log_Msg
445     ( v_object_id   => p_record.COUNTER_PROP_VALUE_ID -- put PK column here
446     , v_object_name => g_object_name
447     , v_message     => 'Leaving ' || g_object_name || '.APPLY_RECORD'
448     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
449   END IF;
450 
451   x_return_status := FND_API.G_RET_STS_ERROR;
452 END APPLY_RECORD;
453 
454 /***
455   This procedure is called by CSL_SERVICEL_WRAPPER_PKG when publication item CS_COUNTER_PROP_VALS
456   is dirty. This happens when a mobile field service device executed DML on an updatable table and did
457   a fast sync. This procedure will insert the data that came from mobile into the backend tables using
458   public APIs.
459 ***/
460 PROCEDURE APPLY_CLIENT_CHANGES
461          (
462            p_user_name     IN VARCHAR2,
463            p_tranid        IN NUMBER,
464            p_debug_level   IN NUMBER,
465            x_return_status IN OUT NOCOPY VARCHAR2
466          ) IS
467 
468   l_process_status VARCHAR2(1);
469   l_error_msg      VARCHAR2(4000);
470 BEGIN
471   g_debug_level := p_debug_level;
472   x_return_status := FND_API.G_RET_STS_SUCCESS;
473 
474   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
475     jtm_message_log_pkg.Log_Msg
476     ( v_object_id   => null
477     , v_object_name => g_object_name
478     , v_message     => 'Entering ' || g_object_name || '.Apply_Client_Changes'
479     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
480   END IF;
481 
482   /*** loop through CS_COUNTER_PROP_VALS records in inqueue ***/
483   FOR r_CS_COUNTER_PROP_VALS IN c_CS_COUNTER_PROP_VALS( p_user_name, p_tranid) LOOP
484 
485     SAVEPOINT save_rec;
486 
487     /*** apply record ***/
488     APPLY_RECORD
489       (
490         r_CS_COUNTER_PROP_VALS
491       , l_error_msg
492       , l_process_status
493       );
494 
495     /*** was record processed successfully? ***/
496     IF l_process_status = FND_API.G_RET_STS_SUCCESS THEN
497       /*** Yes -> delete record from inqueue ***/
498       IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
499         jtm_message_log_pkg.Log_Msg
500         ( v_object_id   => r_CS_COUNTER_PROP_VALS.COUNTER_PROP_VALUE_ID -- put PK column here
501         , v_object_name => g_object_name
502         , v_message     => 'Record successfully processed, deleting from inqueue'
503         , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
504       END IF;
505 
506       CSL_SERVICEL_WRAPPER_PKG.DELETE_RECORD
507         (
508           p_user_name,
509           p_tranid,
510           r_CS_COUNTER_PROP_VALS.seqno$$,
511           r_CS_COUNTER_PROP_VALS.COUNTER_PROP_VALUE_ID, -- put PK column here
512           g_object_name,
513           g_pub_name,
514           l_error_msg,
515           l_process_status
516         );
517 
518       /*** was delete successful? ***/
519       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
520         /*** no -> rollback ***/
521         IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
522           jtm_message_log_pkg.Log_Msg
523           ( v_object_id   => r_CS_COUNTER_PROP_VALS.COUNTER_PROP_VALUE_ID -- put PK column here
524           , v_object_name => g_object_name
525           , v_message     => 'Deleting from inqueue failed, rolling back to savepoint'
526           , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
527         END IF;
528         ROLLBACK TO save_rec;
529       END IF;
530     END IF;
531 
532     IF l_process_Status <> FND_API.G_RET_STS_SUCCESS THEN
533       /*** Record was not processed successfully or delete failed -> defer and reject record ***/
534       IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
535         jtm_message_log_pkg.Log_Msg
536         ( v_object_id   => r_CS_COUNTER_PROP_VALS.COUNTER_PROP_VALUE_ID -- put PK column here
537         , v_object_name => g_object_name
538         , v_message     => 'Record not processed successfully, deferring and rejecting record'
539         , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
540       END IF;
541 
542       CSL_SERVICEL_WRAPPER_PKG.DEFER_RECORD
543        (
544          p_user_name
545        , p_tranid
546        , r_CS_COUNTER_PROP_VALS.seqno$$
547        , r_CS_COUNTER_PROP_VALS.COUNTER_PROP_VALUE_ID -- put PK column here
548        , g_object_name
549        , g_pub_name
550        , l_error_msg
551        , l_process_status
552        );
553 
554       /*** Was defer successful? ***/
555       IF l_process_status <> FND_API.G_RET_STS_SUCCESS THEN
556         /*** no -> rollback ***/
557         IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM THEN
558           jtm_message_log_pkg.Log_Msg
559           ( v_object_id   => r_CS_COUNTER_PROP_VALS.COUNTER_PROP_VALUE_ID -- put PK column here
560           , v_object_name => g_object_name
561           , v_message     => 'Defer record failed, rolling back to savepoint'
562           , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_MEDIUM);
563         END IF;
564         ROLLBACK TO save_rec;
565       END IF;
566     END IF;
567 
568   END LOOP;
569 
570   IF g_debug_level = JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL THEN
571     jtm_message_log_pkg.Log_Msg
572     ( v_object_id   => null
573     , v_object_name => g_object_name
574     , v_message     => 'Leaving ' || g_object_name || '.Apply_Client_Changes'
575     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_FULL);
576   END IF;
577 
578 EXCEPTION WHEN OTHERS THEN
579   /*** catch and log exceptions ***/
580   IF g_debug_level >= JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR THEN
581     jtm_message_log_pkg.Log_Msg
582     ( v_object_id   => null
583     , v_object_name => g_object_name
584     , v_message     => 'Exception occurred in APPLY_CLIENT_CHANGES:' || fnd_global.local_chr(10) || sqlerrm
585     , v_level_id    => JTM_HOOK_UTIL_PKG.G_DEBUG_LEVEL_ERROR);
586   END IF;
587   x_return_status := FND_API.G_RET_STS_ERROR;
588 END APPLY_CLIENT_CHANGES;
589 
590 END CSL_COUNTER_PROP_VALUES_PKG;