INV*更新物料信息

物料

  1 PROCEDURE update_item(p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false,
  2                         x_return_status OUT NOCOPY VARCHAR2,
  3                         x_msg_count     OUT NOCOPY NUMBER,
  4                         x_msg_data      OUT NOCOPY VARCHAR2) IS
  5   
  6     l_api_name CONSTANT VARCHAR2(30) := 'UPDATE_ITEM';
  7     l_savepoint_name VARCHAR2(30) := 'UPDATE_ITEM';
  8     l_item_rec1      inv_item_grp.item_rec_type;
  9     x_item_rec1      inv_item_grp.item_rec_type;
 10     l_item_rec       inv_item_grp.item_rec_type;
 11     x_item_rec       inv_item_grp.item_rec_type;
 12     x_error_tbl      inv_item_grp.error_tbl_type;
 13     -- x_return_status     VARCHAR2(10);
 14     l_user_id           NUMBER := 0; --User ID, Sysadmin here
 15     l_message           VARCHAR2(500);
 16     x_message           VARCHAR2(500);
 17     l_buyer_id          NUMBER;
 18     l_old_category_id   NUMBER;
 19     l_old_category_id1  NUMBER;
 20     l_category_id       NUMBER;
 21     l_category_id1      NUMBER;
 22     l_category_set_name VARCHAR2(240) := '库存';
 23     --l_item_id           NUMBER;
 24     --l_organization_id   NUMBER;
 25     l_errorcode        VARCHAR2(100);
 26     l_msg_count        NUMBER;
 27     l_structure_id     NUMBER;
 28     l_structure_id1    NUMBER;
 29     l_category_set_id  NUMBER;
 30     l_category_set_id1 NUMBER;
 31   
 32     l_chart_of_account_id NUMBER;
 33     l_ccid1               NUMBER;
 34     l_ccid2               NUMBER;
 35     l_ccid3               NUMBER;
 36     l_ccid4               NUMBER;
 37     l_default_org         NUMBER;
 38     l_organization_id     NUMBER;
 39     l_organization_id1    NUMBER;
 40     l_item_id             NUMBER;
 41     l_organization_id2    NUMBER;
 42     l_item_id1            NUMBER;
 43   
 44     l_err_count NUMBER;
 45   
 46     --更新类别信息
 47     l_category_rec inv_item_category_pub.category_rec_type;
 48   BEGIN
 49   
 50     -- and initialize message list, include debug message hint to enter api
 51     x_return_status := hss_api.start_activity(p_pkg_name      => g_pkg_name,
 52                                               p_api_name      => l_api_name,
 53                                               p_init_msg_list => p_init_msg_list);
 54     -- check if activity started successfully
 55     IF (x_return_status = fnd_api.g_ret_sts_unexp_error) THEN
 56       RAISE fnd_api.g_exc_unexpected_error;
 57     ELSIF (x_return_status = fnd_api.g_ret_sts_error) THEN
 58       RAISE fnd_api.g_exc_error;
 59     END IF;
 60   
 61     BEGIN
 62       SELECT mcs.category_set_id,
 63              mcs.structure_id
 64         INTO l_category_set_id,
 65              l_structure_id
 66         FROM mtl_category_sets mcs
 67        WHERE mcs.category_set_name = l_category_set_name;
 68     EXCEPTION
 69       WHEN OTHERS THEN
 70         hss_conc_utl.log_msg('无效的类别集!');
 71         RETURN;
 72     END;
 73   
 74     l_err_count := 0;
 75     FOR c IN (SELECT *
 76                 FROM cux.cux_mtl_update_prperty ccp
 77                WHERE nvl(ccp.return_stastus,
 78                          'N') <> 'S'
 79                ORDER BY ccp.item_code)
 80     LOOP
 81       SAVEPOINT l_savepoint_name; --设置保存点
 82     
 83       hss_conc_utl.log_msg('物料编码:' || c.item_code);
 84     
 85       l_message := NULL;
 86       --=============================================================================
 87       /*当需要更新物料说明和默认发运组织时,需先更新主组织的物料说明和默认发运组织*/
 88       --=============================================================================
 89       IF (c.desc_mir IS NOT NULL OR c.default_shipping_org IS NOT NULL) THEN
 90       
 91         l_item_rec1.organization_code := 'MST';
 92         l_item_rec1.item_number       := c.item_code;
 93       
 94         --IF (c.desc_mir IS NOT NULL) THEN
 95         --  l_item_rec1.description := c.desc_mir;
 96         --ELSE
 97         --  l_item_rec1.description := NULL;
 98         ---END IF;
 99       
100         IF c.item_desc IS NOT NULL THEN
101           l_item_rec1.long_description := c.item_desc;
102         ELSE
103           l_item_rec1.long_description := NULL;
104         END IF;
105       
106         IF (c.default_shipping_org IS NOT NULL) THEN
107           BEGIN
108             SELECT oog.organization_id
109               INTO l_default_org
110               FROM org_organization_definitions oog
111              WHERE oog.organization_code = c.default_shipping_org;
112           EXCEPTION
113             WHEN OTHERS THEN
114               l_default_org := NULL;
115           END;
116         
117           l_item_rec1.default_shipping_org := l_default_org;
118         ELSE
119           l_item_rec1.default_shipping_org := NULL;
120         END IF;
121       
122         --API
123         ----更新物料信息-----
124         inv_item_grp.update_item(p_commit        => fnd_api.g_false,
125                                  p_item_rec      => l_item_rec1,
126                                  x_item_rec      => x_item_rec1,
127                                  x_return_status => x_return_status,
128                                  x_error_tbl     => x_error_tbl);
129         IF x_return_status <> fnd_api.g_ret_sts_success THEN
130           -- l_message := NULL;
131           FOR i IN 1 .. x_error_tbl.count
132           LOOP
133             l_message := l_message || x_error_tbl(i).message_name;
134           END LOOP;
135           x_error_tbl.delete;
136           --ELSE
137           --  l_message := NULL;
138         END IF;
139       END IF; --IF (c.desc_mir IS NOT NULL OR c.default_shipping_org IS NOT NULL) THEN
140     
141       --=============================================================================
142       --更新子组织信息
143       --============================================================================
144       --Master Inv Organization first, then Current Inv Organization
145       l_item_rec.organization_code := c.organization_code;
146       l_item_rec.item_number       := c.item_code;
147     
148       IF c.buyer IS NOT NULL THEN
149         BEGIN
150           SELECT he.employee_id
151             INTO l_buyer_id
152             FROM hr_employees he
153            WHERE he.full_name = c.buyer;
154         EXCEPTION
155           WHEN OTHERS THEN
156             l_buyer_id := NULL;
157         END;
158         IF l_buyer_id IS NOT NULL THEN
159           l_item_rec.buyer_id := l_buyer_id;
160         END IF;
161       ELSE
162         l_item_rec.buyer_id := NULL;
163       END IF;
164       IF c.planer IS NOT NULL THEN
165         l_item_rec.planner_code := c.planer;
166       ELSE
167         l_item_rec.planner_code := NULL;
168       END IF;
169       IF c.attribute1 IS NOT NULL THEN
170         l_item_rec.attribute1 := c.attribute1;
171       ELSE
172         l_item_rec.attribute1 := NULL;
173       END IF;
174       IF c.attribute2 IS NOT NULL THEN
175         l_item_rec.attribute2 := c.attribute2;
176       ELSE
177         l_item_rec.attribute2 := NULL;
178       END IF;
179       IF c.attribute3 IS NOT NULL THEN
180         l_item_rec.attribute3 := c.attribute3;
181       ELSE
182         l_item_rec.attribute3 := NULL;
183       END IF;
184       IF c.attribute4 IS NOT NULL THEN
185         l_item_rec.attribute4 := c.attribute4;
186       ELSE
187         l_item_rec.attribute4 := NULL;
188       END IF;
189       IF c.attribute5 IS NOT NULL THEN
190         l_item_rec.attribute5 := c.attribute5;
191       ELSE
192         l_item_rec.attribute5 := NULL;
193       END IF;
194       IF c.attribute6 IS NOT NULL THEN
195         l_item_rec.attribute6 := c.attribute6;
196       ELSE
197         l_item_rec.attribute6 := NULL;
198       END IF;
199       IF c.attribute7 IS NOT NULL THEN
200         l_item_rec.attribute7 := c.attribute7;
201       ELSE
202         l_item_rec.attribute7 := NULL;
203       END IF;
204       IF c.attribute8 IS NOT NULL THEN
205         l_item_rec.attribute8 := c.attribute8;
206       ELSE
207         l_item_rec.attribute8 := NULL;
208       END IF;
209       IF c.attribute9 IS NOT NULL THEN
210         l_item_rec.attribute9 := c.attribute9;
211       ELSE
212         l_item_rec.attribute9 := NULL;
213       END IF;
214       IF c.attribute10 IS NOT NULL THEN
215         l_item_rec.attribute10 := c.attribute10;
216       ELSE
217         l_item_rec.attribute10 := NULL;
218       END IF;
219       IF c.attribute11 IS NOT NULL THEN
220         l_item_rec.attribute11 := c.attribute11;
221       ELSE
222         l_item_rec.attribute11 := NULL;
223       END IF;
224       IF c.attribute12 IS NOT NULL THEN
225         l_item_rec.attribute12 := c.attribute12;
226       ELSE
227         l_item_rec.attribute12 := NULL;
228       END IF;
229       IF c.attribute13 IS NOT NULL THEN
230         l_item_rec.attribute13 := c.attribute13;
231       ELSE
232         l_item_rec.attribute13 := NULL;
233       END IF;
234       IF c.attribute14 IS NOT NULL THEN
235         l_item_rec.attribute14 := c.attribute14;
236       ELSE
237         l_item_rec.attribute14 := NULL;
238       END IF;
239       IF c.attribute15 IS NOT NULL THEN
240         l_item_rec.attribute15 := c.attribute15;
241       ELSE
242         l_item_rec.attribute15 := NULL;
243       END IF;
244       IF c.attribute16 IS NOT NULL THEN
245         l_item_rec.attribute16 := c.attribute16;
246       ELSE
247         l_item_rec.attribute16 := NULL;
248       END IF;
249       IF c.attribute17 IS NOT NULL THEN
250         l_item_rec.attribute17 := c.attribute17;
251       ELSE
252         l_item_rec.attribute17 := NULL;
253       END IF;
254       IF c.attribute18 IS NOT NULL THEN
255         l_item_rec.attribute18 := c.attribute18;
256       ELSE
257         l_item_rec.attribute18 := NULL;
258       END IF;
259       IF c.attribute19 IS NOT NULL THEN
260         l_item_rec.attribute19 := c.attribute19;
261       ELSE
262         l_item_rec.attribute19 := NULL;
263       END IF;
264       IF c.attribute20 IS NOT NULL THEN
265         l_item_rec.attribute20 := c.attribute20;
266       ELSE
267         l_item_rec.attribute20 := NULL;
268       END IF;
269     
270       IF (c.supply_subinventory IS NOT NULL) THEN
271         l_item_rec.wip_supply_subinventory := c.supply_subinventory;
272       ELSE
273         l_item_rec.wip_supply_subinventory := NULL;
274       END IF;
275     
276       IF (c.min_quantity IS NOT NULL) THEN
277         l_item_rec.min_minmax_quantity := c.min_quantity;
278       ELSE
279         l_item_rec.min_minmax_quantity := NULL;
280       END IF;
281       IF (c.max_quantity IS NOT NULL) THEN
282         l_item_rec.max_minmax_quantity := c.max_quantity;
283       ELSE
284         l_item_rec.max_minmax_quantity := NULL;
285       END IF;
286       IF (c.min_order_quantity IS NOT NULL) THEN
287         l_item_rec.minimum_order_quantity := c.min_order_quantity;
288       ELSE
289         l_item_rec.minimum_order_quantity := NULL;
290       END IF;
291       IF (c.max_order_quantity IS NOT NULL) THEN
292         l_item_rec.maximum_order_quantity := c.max_order_quantity;
293       ELSE
294         l_item_rec.maximum_order_quantity := NULL;
295       END IF;
296       IF (c.fixed_order_quantity IS NOT NULL) THEN
297         l_item_rec.fixed_order_quantity := c.fixed_order_quantity;
298       ELSE
299         l_item_rec.fixed_order_quantity := NULL;
300       END IF;
301       IF (c.fixed_days_supply IS NOT NULL) THEN
302         l_item_rec.fixed_days_supply := c.fixed_days_supply;
303       ELSE
304         l_item_rec.fixed_days_supply := NULL;
305       END IF;
306       IF (c.fixed_lot_multiplier IS NOT NULL) THEN
307         l_item_rec.fixed_lot_multiplier := c.fixed_lot_multiplier;
308       ELSE
309         l_item_rec.fixed_lot_multiplier := NULL;
310       END IF;
311     
312       BEGIN
313         SELECT gsob.chart_of_accounts_id
314           INTO l_chart_of_account_id
315           FROM gl_sets_of_books             gsob,
316                hr_operating_units           hou,
317                org_organization_definitions ood
318          WHERE gsob.set_of_books_id = hou.set_of_books_id
319            AND hou.organization_id = ood.operating_unit
320            AND ood.organization_code = c.organization_code;
321       EXCEPTION
322         WHEN OTHERS THEN
323           hss_conc_utl.log_msg('chart_of_account_id 没有找到');
324         
325           l_message := l_message || '组织对应chart_of_account_id 没有找到==';
326       END;
327     
328       -----------------------
329     
330       IF (c.encumbrance_account IS NOT NULL) THEN
331         l_ccid1                        := fnd_flex_ext.get_ccid(application_short_name => 'SQLGL',
332                                                                 key_flex_code          => 'GL#',
333                                                                 structure_number       => l_chart_of_account_id,
334                                                                 validation_date        => to_char(SYSDATE,
335                                                                                                   'DD-MON-YYYY'),
336                                                                 concatenated_segments  => c.encumbrance_account);
337         l_item_rec.encumbrance_account := l_ccid1;
338       
339         IF (l_ccid1 IS NULL) THEN
340           hss_conc_utl.log_msg('更新保留款账户异常!');
341           l_message := l_message || '保留款账户异常==';
342         END IF;
343       ELSE
344         l_item_rec.encumbrance_account := NULL;
345       END IF;
346       IF (c.expense_account IS NOT NULL) THEN
347         l_ccid2                    := fnd_flex_ext.get_ccid(application_short_name => 'SQLGL',
348                                                             key_flex_code          => 'GL#',
349                                                             structure_number       => l_chart_of_account_id,
350                                                             validation_date        => to_char(SYSDATE,
351                                                                                               'DD-MON-YYYY'),
352                                                             concatenated_segments  => c.expense_account);
353         l_item_rec.expense_account := l_ccid2;
354       
355         IF (l_ccid2 IS NULL) THEN
356           hss_conc_utl.log_msg('更新费用账户异常!');
357           l_message := l_message || '费用账户异常==';
358         END IF;
359       ELSE
360         l_item_rec.expense_account := NULL;
361       END IF;
362     
363       --l_item_rec.sales_account := NULL;
364       IF (c.sales_account IS NOT NULL) THEN
365         l_ccid3                  := fnd_flex_ext.get_ccid(application_short_name => 'SQLGL',
366                                                           key_flex_code          => 'GL#',
367                                                           structure_number       => l_chart_of_account_id,
368                                                           validation_date        => to_char(SYSDATE,
369                                                                                             'DD-MON-YYYY'),
370                                                           concatenated_segments  => c.sales_account);
371         l_item_rec.sales_account := l_ccid3;
372       
373         IF (l_ccid3 IS NULL) THEN
374           hss_conc_utl.log_msg('更新销售账户异常!');
375           l_message := l_message || '销售账户异常==';
376         END IF;
377       ELSE
378         hss_conc_utl.log_msg('物料' || c.item_code || '下的销售账户不能为空');
379         l_message := l_message || '物料' || c.item_code || '下的销售账户不能为空==';
380         --  l_item_rec.sales_account := NULL;
381       END IF;
382     
383       --l_item_rec.cost_of_sales_account := NULL;
384       IF (c.cost_of_sales_account IS NOT NULL) THEN
385         l_ccid4                          := fnd_flex_ext.get_ccid(application_short_name => 'SQLGL',
386                                                                   key_flex_code          => 'GL#',
387                                                                   structure_number       => l_chart_of_account_id,
388                                                                   validation_date        => to_char(SYSDATE,
389                                                                                                     'DD-MON-YYYY'),
390                                                                   concatenated_segments  => c.cost_of_sales_account);
391         l_item_rec.cost_of_sales_account := l_ccid4;
392       
393         IF (l_ccid4 IS NULL) THEN
394           hss_conc_utl.log_msg('更新销售成本账户异常!');
395           l_message := l_message || '销售成本账户异常==';
396         END IF;
397       ELSE
398         hss_conc_utl.log_msg('物料' || c.item_code || '下的销售成本账户不能为空');
399         l_message := l_message || '物料' || c.item_code || '下的销售成本账户不能为空==';
400         --  l_item_rec.cost_of_sales_account := NULL;
401       END IF;
402       --API
403       ----更新物料信息-----
404       inv_item_grp.update_item(p_commit        => fnd_api.g_false,
405                                p_item_rec      => l_item_rec,
406                                x_item_rec      => x_item_rec,
407                                x_return_status => x_return_status,
408                                x_error_tbl     => x_error_tbl);
409     
410       --Result
411       IF x_return_status <> fnd_api.g_ret_sts_success THEN
412         FOR i IN 1 .. x_error_tbl.count
413         LOOP
414           l_message := l_message || x_error_tbl(i).message_name;
415         END LOOP;
416         x_error_tbl.delete;
417       END IF;
418     
419       IF x_return_status = fnd_api.g_ret_sts_success THEN
420         IF c.inv_category_contractsegment IS NOT NULL THEN
421         
422           BEGIN
423             --获取物料类别ID--------
424             SELECT mcv.category_id
425               INTO l_category_id
426               FROM mtl_categories_v mcv
427              WHERE 1 = 1
428                AND mcv.structure_id = l_structure_id
429                AND mcv.category_concat_segs = c.inv_category_contractsegment
430                AND (mcv.disable_date IS NULL OR mcv.disable_date > SYSDATE);
431           EXCEPTION
432             WHEN OTHERS THEN
433               l_category_id := NULL;
434           END;
435         
436           IF l_category_id IS NULL THEN
437             x_return_status := 'E';
438             l_message       := l_message || '物料类别 :' || c.inv_category_contractsegment || '无效';
439           ELSE
440           
441             ----获取原来类别id
442             BEGIN
443               SELECT mic.category_id
444                 INTO l_old_category_id
445                 FROM mtl_system_items_b  msi,
446                      mtl_item_categories mic
447                WHERE 1 = 1
448                  AND msi.inventory_item_id = mic.inventory_item_id
449                  AND msi.organization_id = mic.organization_id
450                  AND msi.inventory_item_id = x_item_rec.inventory_item_id
451                  AND msi.organization_id = x_item_rec.organization_id
452                  AND mic.category_set_id = l_category_set_id;
453             EXCEPTION
454               WHEN OTHERS THEN
455                 l_old_category_id := NULL;
456             END;
457           
458             --- inv_item_category_pub.Create_Category_Assignment
459             IF l_old_category_id IS NOT NULL
460                AND l_old_category_id <> l_category_id THEN
461               ---更新物料类别分配
462               inv_item_category_pub.update_category_assignment(p_api_version       => '1.0',
463                                                                p_init_msg_list     => fnd_api.g_true,
464                                                                p_commit            => fnd_api.g_false,
465                                                                p_category_id       => l_category_id,
466                                                                p_old_category_id   => l_old_category_id,
467                                                                p_category_set_id   => l_category_set_id,
468                                                                p_inventory_item_id => x_item_rec.inventory_item_id,
469                                                                p_organization_id   => x_item_rec.organization_id,
470                                                                x_return_status     => x_return_status,
471                                                                x_errorcode         => l_errorcode,
472                                                                x_msg_count         => l_msg_count,
473                                                                x_msg_data          => x_message);
474             
475               IF x_return_status <> fnd_api.g_ret_sts_success THEN
476               
477                 hss_conc_utl.log_msg('l_category_id:=' || l_category_id);
478                 hss_conc_utl.log_msg('l_category_set_id:=' || l_category_set_id);
479               
480                 l_message := l_message || '==分配物料类别报错:' || x_message;
481               
482               END IF;
483             ELSIF l_old_category_id IS NULL THEN
484               inv_item_category_pub.create_category_assignment(p_api_version       => '1.0',
485                                                                p_init_msg_list     => fnd_api.g_true,
486                                                                p_commit            => fnd_api.g_false,
487                                                                x_return_status     => x_return_status,
488                                                                x_errorcode         => l_errorcode,
489                                                                x_msg_count         => l_msg_count,
490                                                                x_msg_data          => x_message,
491                                                                p_category_id       => l_category_id,
492                                                                p_category_set_id   => l_category_set_id,
493                                                                p_inventory_item_id => x_item_rec.inventory_item_id,
494                                                                p_organization_id   => x_item_rec.organization_id);
495               IF x_return_status <> fnd_api.g_ret_sts_success THEN
496                 hss_conc_utl.log_msg('l_category_id1:=' || l_category_id);
497                 hss_conc_utl.log_msg('l_category_set_id1:=' || l_category_set_id);
498               
499                 l_message := l_message || '==创建物料类别报错:' || x_message;
500               END IF;
501             END IF;
502           END IF; --IF l_old_category_id IS NOT NULL
503         
504         END IF; -- IF c.inv_category_contractsegment IS NOT NULL THEN
505         
506       
507         --更新类别集
508         FOR rec_cate IN (SELECT mcs.category_set_id,
509                                 mcs.structure_id,
510                                 mcs.category_set_name
511                            FROM mtl_category_sets mcs
512                           WHERE 1 = 1
513                             AND ((mcs.category_set_name = 'BOSUN成本类别集' AND c.chenben_category IS NOT NULL) OR
514                                 (mcs.category_set_name = 'BOSUN生产类别集' AND c.shengchan_category IS NOT NULL) OR
515                                 (mcs.category_set_name = 'BOSUN折扣类别集' AND c.zhekou_category IS NOT NULL)))
516         LOOP
517           hss_conc_utl.log_msg('-----------------------------------');
518         
519           l_structure_id1    := rec_cate.structure_id;
520           l_category_set_id1 := rec_cate.category_set_id;
521         
522           BEGIN
523             --获取物料类别ID--------
524             l_category_id := NULL;
525             SELECT mcv.category_id
526               INTO l_category_id1
527               FROM mtl_categories_v mcv
528              WHERE 1 = 1
529                AND mcv.structure_id = l_structure_id1
530                AND mcv.category_concat_segs = decode(rec_cate.category_set_name,
531                                                      'BOSUN成本类别集',
532                                                      c.chenben_category,
533                                                      'BOSUN生产类别集',
534                                                      c.shengchan_category,
535                                                      'BOSUN折扣类别集',
536                                                      c.zhekou_category,
537                                                      NULL)
538                AND (mcv.disable_date IS NULL OR mcv.disable_date > SYSDATE);
539           EXCEPTION
540             WHEN OTHERS THEN
541               l_category_id1 := NULL;
542           END;
543         
544           IF (rec_cate.category_set_name IN ('BOSUN生产类别集',
545                                              'BOSUN成本类别集')) THEN
546           
547             l_organization_id2 := 102;
548           ELSE
549             l_organization_id2 := x_item_rec.organization_id;
550           END IF;
551         
552           ----获取原来类别id
553           BEGIN
554             SELECT mic.category_id
555               INTO l_old_category_id1
556               FROM mtl_system_items_b  msi,
557                    mtl_item_categories mic
558              WHERE 1 = 1
559                AND msi.inventory_item_id = mic.inventory_item_id
560                AND msi.organization_id = mic.organization_id
561                AND msi.inventory_item_id = x_item_rec.inventory_item_id
562                AND msi.organization_id = l_organization_id2
563                AND mic.category_set_id = l_category_set_id1;
564           EXCEPTION
565             WHEN OTHERS THEN
566               l_old_category_id1 := NULL;
567           END;
568         
569           hss_conc_utl.log_msg('l_old_category_id1:=' || l_old_category_id1);
570         
571           IF l_old_category_id1 IS NOT NULL
572           --    AND l_old_category_id1 <> l_category_id 
573            THEN
574             ---更新物料类别分配
575             hss_conc_utl.log_msg('---更新类别集');
576             inv_item_category_pub.update_category_assignment(p_api_version       => '1.0',
577                                                              p_init_msg_list     => fnd_api.g_true,
578                                                              p_commit            => fnd_api.g_false,
579                                                              p_category_id       => l_category_id1,
580                                                              p_old_category_id   => l_old_category_id1,
581                                                              p_category_set_id   => l_category_set_id1,
582                                                              p_inventory_item_id => x_item_rec.inventory_item_id,
583                                                              p_organization_id   => l_organization_id2,
584                                                              x_return_status     => x_return_status,
585                                                              x_errorcode         => l_errorcode,
586                                                              x_msg_count         => l_msg_count,
587                                                              x_msg_data          => x_message);
588           
589             IF x_return_status <> fnd_api.g_ret_sts_success THEN
590             
591               hss_conc_utl.log_msg('l_category_id1:=' || l_category_id1);
592               hss_conc_utl.log_msg('l_category_set_id:=' || l_category_set_id1);
593             
594               l_message := l_message || '--分配物料类别报错:' || x_message;
595             END IF;
596           ELSIF l_old_category_id1 IS NULL THEN
597             hss_conc_utl.log_msg('--创建类别集');
598           
599             inv_item_category_pub.create_category_assignment(p_api_version       => '1.0',
600                                                              p_init_msg_list     => fnd_api.g_true,
601                                                              p_commit            => fnd_api.g_false,
602                                                              x_return_status     => x_return_status,
603                                                              x_errorcode         => l_errorcode,
604                                                              x_msg_count         => l_msg_count,
605                                                              x_msg_data          => x_message,
606                                                              p_category_id       => l_category_id1,
607                                                              p_category_set_id   => l_category_set_id1,
608                                                              p_inventory_item_id => x_item_rec.inventory_item_id,
609                                                              p_organization_id   => l_organization_id2);
610             IF x_return_status <> fnd_api.g_ret_sts_success THEN
611             
612               hss_conc_utl.log_msg('l_category_id1:=' || l_category_id);
613               hss_conc_utl.log_msg('l_category_set_id1:=' || l_category_set_id1);
614             
615               l_message := l_message || '--创建物料类别报错:' || x_message;
616             END IF;
617           END IF;
618         
619         END LOOP;
620       
621       END IF; --IF x_return_status = fnd_api.g_ret_sts_success THEN
622     
623       IF (l_message IS NOT NULL) THEN
624         --dbms_transaction.rollback_savepoint(l_savepoint_name);
625         hss_conc_utl.log_msg('l_message:=' || l_message);
626         l_err_count := l_err_count + 1;
627       
628         ROLLBACK TO l_savepoint_name;
629       
630         UPDATE cux.cux_mtl_update_prperty t
631            SET t.return_stastus = 'E',
632                t.mes_text       = substr(l_message,
633                                          1,
634                                          2000)
635          WHERE t.id = c.id;
636       
637         l_message := NULL;
638         continue;
639       ELSE
640         UPDATE cux.cux_mtl_update_prperty t
641            SET t.return_stastus = x_return_status,
642                t.mes_text       = substr(l_message,
643                                          1,
644                                          200)
645          WHERE t.id = c.id;
646         l_message := NULL;
647       END IF;
648     END LOOP;
649   
650     IF (l_err_count > 0) THEN
651       hss_conc_utl.log_msg('存在异常未处理的数据,请求报黄!');
652       RAISE fnd_api.g_exc_error;
653     END IF;
654     -- end activity, include debug message hint to exit api
655     x_return_status := hss_api.end_activity(p_pkg_name  => g_pkg_name,
656                                             p_api_name  => l_api_name,
657                                             x_msg_count => x_msg_count,
658                                             x_msg_data  => x_msg_data);
659   
660   EXCEPTION
661     WHEN fnd_api.g_exc_error THEN
662       x_return_status := hss_api.handle_exceptions(p_pkg_name  => g_pkg_name,
663                                                    p_api_name  => l_api_name,
664                                                    p_exc_name  => hss_api.g_exc_name_error,
665                                                    x_msg_count => x_msg_count,
666                                                    x_msg_data  => x_msg_data);
667     WHEN fnd_api.g_exc_unexpected_error THEN
668       x_return_status := hss_api.handle_exceptions(p_pkg_name  => g_pkg_name,
669                                                    p_api_name  => l_api_name,
670                                                    p_exc_name  => hss_api.g_exc_name_unexp,
671                                                    x_msg_count => x_msg_count,
672                                                    x_msg_data  => x_msg_data);
673     WHEN OTHERS THEN
674       x_return_status := hss_api.handle_exceptions(p_pkg_name  => g_pkg_name,
675                                                    p_api_name  => l_api_name,
676                                                    p_exc_name  => hss_api.g_exc_name_others,
677                                                    x_msg_count => x_msg_count,
678                                                    x_msg_data  => x_msg_data);
679   END update_item;
物料属性更新
原文地址:https://www.cnblogs.com/wang-chen/p/5902806.html