· 8 years ago · May 28, 2018, 09:40 PM
1*"* local class implementation for public class
2*"* use this source file for the implementation part of
3*"* local helper classes
4
5CLASS lcl_1o_service IMPLEMENTATION.
6
7 METHOD build_status_com.
8
9 INCLUDE : crm_object_names_con.
10
11 DATA : ls_status_com TYPE crmt_status_com,
12 ls_status_key TYPE crmt_status_logical_key,
13 ls_input_fields TYPE crmt_input_field,
14 ls_field_names TYPE crmt_input_field_names.
15
16* build status communication data
17 ls_status_com-ref_guid = io_crm_order->get_crm_obj_guid( ).
18 ls_status_com-ref_kind = io_crm_order->get_crm_obj_kind( ).
19 ls_status_com-user_stat_proc = iv_status_profile.
20 ls_status_com-status = iv_status.
21 ls_status_com-activate = abap_true.
22 INSERT ls_status_com INTO TABLE ct_status_com.
23
24* build input fields
25 ls_input_fields-ref_guid = io_crm_order->get_crm_obj_guid( ).
26 ls_input_fields-ref_kind = io_crm_order->get_crm_obj_kind( ).
27 ls_input_fields-objectname = gc_object_name-status.
28 MOVE-CORRESPONDING ls_status_com TO ls_status_key.
29 ls_input_fields-logical_key = ls_status_key.
30
31 CLEAR : ls_field_names.
32 ls_field_names-fieldname = 'STATUS'.
33 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
34
35 CLEAR : ls_field_names.
36 ls_field_names-fieldname = 'USER_STAT_PROC'.
37 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
38
39 CLEAR : ls_field_names.
40 ls_field_names-fieldname = 'ACTIVATE'.
41 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
42
43 INSERT ls_input_fields INTO TABLE ct_input_fields.
44
45 ENDMETHOD. "build_status_com
46
47 METHOD build_partner_com.
48
49 INCLUDE : crm_object_names_con.
50
51 DATA : lv_object_guid TYPE crmt_object_guid,
52 lv_object_kind TYPE crmt_object_kind,
53 ls_partner_wrk TYPE crmt_partner_external_wrk,
54
55 ls_partner_com TYPE crmt_partner_com,
56 ls_partner_key TYPE crmt_partner_logic_partner_key,
57 ls_input_fields TYPE crmt_input_field,
58 ls_field_names TYPE crmt_input_field_names.
59
60* read current partner details
61 IF iv_new_partner = abap_false.
62 lv_object_guid = io_crm_order->get_crm_obj_guid( ).
63 lv_object_kind = io_crm_order->get_crm_obj_kind( ).
64 CALL FUNCTION 'CRM_PARTNER_READ_OW'
65 EXPORTING
66 iv_ref_guid = lv_object_guid
67 iv_ref_kind = lv_object_kind
68 iv_partner_fct = iv_partner_fct
69 IMPORTING
70 es_partner_wrk = ls_partner_wrk
71 EXCEPTIONS
72 error_occurred = 1
73 parameter_error = 2
74 entry_does_not_exist = 3
75 OTHERS = 4.
76 ENDIF.
77
78* build partner communication data
79 MOVE-CORRESPONDING ls_partner_wrk TO ls_partner_com.
80 ls_partner_com-ref_guid = io_crm_order->get_crm_obj_guid( ).
81 ls_partner_com-ref_kind = io_crm_order->get_crm_obj_kind( ).
82 ls_partner_com-partner_no = iv_partner.
83 ls_partner_com-partner_fct = iv_partner_fct.
84 ls_partner_com-display_type = 'BP'.
85 ls_partner_com-no_type = 'BP'.
86 INSERT ls_partner_com INTO TABLE ct_partner_com.
87
88* build input fields
89 ls_input_fields-ref_guid = io_crm_order->get_crm_obj_guid( ).
90 ls_input_fields-ref_kind = io_crm_order->get_crm_obj_kind( ).
91 ls_input_fields-objectname = gc_object_name-partner.
92 MOVE-CORRESPONDING ls_partner_com TO ls_partner_key.
93 ls_input_fields-logical_key = ls_partner_key.
94
95 CLEAR : ls_field_names.
96 ls_field_names-fieldname = 'PARTNER_NO'.
97 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
98
99 CLEAR : ls_field_names.
100 ls_field_names-fieldname = 'PARTNER_FCT'.
101 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
102
103 CLEAR : ls_field_names.
104 ls_field_names-fieldname = 'DISPLAY_TYPE'.
105 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
106
107 CLEAR : ls_field_names.
108 ls_field_names-fieldname = 'NO_TYPE'.
109 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
110
111 CLEAR : ls_field_names.
112 ls_field_names-fieldname = 'REF_PARTNER_NO'.
113 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
114
115 CLEAR : ls_field_names.
116 ls_field_names-fieldname = 'REF_PARTNER_FCT'.
117 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
118
119 CLEAR : ls_field_names.
120 ls_field_names-fieldname = 'REF_DISPLAY_TYPE'.
121 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
122
123 CLEAR : ls_field_names.
124 ls_field_names-fieldname = 'REF_NO_TYPE'.
125 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
126
127 INSERT ls_input_fields INTO TABLE ct_input_fields.
128
129 ENDMETHOD. "build_partner_com
130
131
132 METHOD build_text_com.
133
134 INCLUDE : crm_object_names_con, crm_object_kinds_con.
135
136 DATA : ls_text_com TYPE crmt_text_com,
137 ls_input_fields TYPE crmt_input_field,
138 ls_field_names TYPE crmt_input_field_names.
139
140* build text communication data
141 ls_text_com-ref_guid = io_crm_order->get_crm_obj_guid( ).
142 ls_text_com-ref_kind = io_crm_order->get_crm_obj_kind( ).
143 ls_text_com-tdid = iv_text_id.
144 ls_text_com-tdspras = sy-langu.
145 ls_text_com-tdstyle = 'SYSTEM'.
146 ls_text_com-tdform = 'SYSTEM'.
147 ls_text_com-lines = it_text.
148 ls_text_com-mode = 'A'.
149 INSERT ls_text_com INTO TABLE ct_text_com.
150
151* build input fields
152 ls_input_fields-ref_guid = io_crm_order->get_crm_obj_guid( ).
153 ls_input_fields-ref_kind = io_crm_order->get_crm_obj_kind( ).
154 ls_input_fields-objectname = gc_object_name-texts.
155 ls_input_fields-logical_key = ls_input_fields-ref_guid.
156 IF ls_input_fields-ref_kind = gc_object_kind-orderadm_h.
157 CONCATENATE 'CRM_ORDERH' ls_input_fields-logical_key
158 INTO ls_input_fields-logical_key.
159 ELSE.
160 CONCATENATE 'CRM_ORDERI' ls_input_fields-logical_key
161 INTO ls_input_fields-logical_key.
162 ENDIF.
163
164 CLEAR : ls_field_names.
165 ls_field_names-fieldname = 'LINES'.
166 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
167
168 INSERT ls_input_fields INTO TABLE ct_input_fields.
169
170 ENDMETHOD. "build_text_com
171
172 METHOD build_lead_com.
173
174 INCLUDE : crm_object_names_con.
175
176 DATA : lv_lead_h_guid TYPE crmt_object_guid,
177 ls_lead_h_wrk TYPE crmt_lead_h_wrk,
178
179 ls_lead_com TYPE crmt_lead_h_com,
180 ls_input_fields TYPE crmt_input_field,
181 ls_field_names TYPE crmt_input_field_names.
182
183 lv_lead_h_guid = io_crm_order->get_crm_obj_guid( ).
184
185* read Lead header from object buffer
186 CALL FUNCTION 'CRM_LEAD_H_READ_OW'
187 EXPORTING
188 iv_ref_guid = lv_lead_h_guid
189 IMPORTING
190 es_lead_h_wrk = ls_lead_h_wrk
191 EXCEPTIONS
192 lead_header_not_found = 1
193 OTHERS = 2.
194
195* build lead communication data
196 MOVE-CORRESPONDING ls_lead_h_wrk TO ls_lead_com.
197 ls_lead_com-ref_guid = io_crm_order->get_crm_obj_guid( ).
198 ls_lead_com-importance = iv_priority.
199 ls_lead_com-lead_type = iv_lead_group.
200 INSERT ls_lead_com INTO TABLE ct_lead_h_com.
201
202* build input fields
203 ls_input_fields-ref_guid = io_crm_order->get_crm_obj_guid( ).
204 ls_input_fields-ref_kind = io_crm_order->get_crm_obj_kind( ).
205 ls_input_fields-objectname = gc_object_name-lead_h.
206
207 CLEAR : ls_field_names.
208 ls_field_names-fieldname = 'IMPORTANCE'.
209 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
210
211 CLEAR : ls_field_names.
212 ls_field_names-fieldname = 'LEAD_TYPE'.
213 INSERT ls_field_names INTO TABLE ls_input_fields-field_names.
214
215 INSERT ls_input_fields INTO TABLE ct_input_fields.
216
217 ENDMETHOD. "build_lead_com
218
219 METHOD build_orderadm_i_com.
220
221 INCLUDE : crm_object_names_con,
222 crm_object_kinds_con,
223 crm_changeable_con,
224 crm_mode_con.
225
226 DATA : lv_orderadm_h_guid TYPE crmt_object_guid,
227 lv_item_guid TYPE crmt_object_guid,
228 lv_item_handle TYPE crmt_handle,
229
230 ls_lead_h_wrk TYPE crmt_orderadm_i_com,
231 ls_orderadm_i TYPE crmt_orderadm_i_com,
232 ls_schedlin_i TYPE crmt_schedlin_i_com,
233 ls_product_i TYPE crmt_product_i_com,
234 ls_pricing_i TYPE crmt_pricing_i_com,
235 ls_pricing TYPE crmt_pricing_com,
236 ls_orderadm_h TYPE crmt_orderadm_h_wrk,
237 ls_pridoc TYPE crmt_pridoc_com,
238 lt_cond_add TYPE prct_cond_external_input_t,
239 ls_cond_add TYPE prct_cond_external_input,
240
241
242 lt_input_field TYPE crmt_input_field_tab,
243 ls_input_field TYPE crmt_input_field,
244 ls_field_names TYPE crmt_input_field_names.
245
246 DATA : ls_partner_com TYPE crmt_partner_com,
247 ls_partner_key TYPE crmt_partner_logic_partner_key,
248 lv_ordered_prod TYPE comt_product_id.
249
250* CONSTANTS : lc_ordered_prod TYPE comt_product_id VALUE 'SPORDTEST'. "'CERMUG288'
251
252
253 lv_orderadm_h_guid = io_crm_order->get_crm_obj_guid( ).
254
255 CALL FUNCTION 'CRM_ORDERADM_H_READ_OW'
256 EXPORTING
257 iv_orderadm_h_guid = lv_orderadm_h_guid
258 IMPORTING
259 es_orderadm_h_wrk = ls_orderadm_h
260 EXCEPTIONS
261 admin_header_not_found = 1
262 OTHERS = 2.
263
264 SELECT SINGLE product_id INTO lv_ordered_prod FROM zisa_sp_product
265 WHERE process_type = ls_orderadm_h-process_type.
266
267 CALL FUNCTION 'CRM_GUID_CREATE'
268 IMPORTING
269 ev_guid = lv_item_guid.
270
271 ls_orderadm_i-mode = gc_mode-create.
272 lv_item_handle = '200'.
273
274
275* Create a new Admin item (includes Product ID) for the order.
276
277 ls_orderadm_i-header = lv_orderadm_h_guid.
278 ls_orderadm_i-guid = lv_item_guid.
279 ls_orderadm_i-header_handle = '100'.
280 ls_orderadm_i-handle = lv_item_handle.
281 ls_orderadm_i-ordered_prod = lv_ordered_prod.
282 ls_orderadm_i-description = is_sorder_data-product_desc.
283 ls_orderadm_i-itm_language = 'E'.
284* ls_orderadm_i-itm_type = 'ZTAN'. "Sales Item
285 INSERT ls_orderadm_i INTO TABLE ct_orderadm_i.
286* - input fields.
287 CLEAR: ls_input_field, ls_field_names.
288 ls_input_field-ref_handle = lv_item_handle.
289 ls_input_field-ref_guid = lv_item_guid.
290 ls_input_field-ref_kind = gc_object_ref_kind-orderadm_i.
291 ls_input_field-objectname = gc_object_name-orderadm_i.
292 ls_field_names-fieldname = 'DESCRIPTION'.
293 ls_field_names-changeable = gc_changeable-no_check.
294 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
295 ls_field_names-fieldname = 'ORDERED_PROD'.
296 ls_field_names-changeable = gc_changeable-yes.
297 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
298 ls_field_names-fieldname = 'ITM_LANGUAGE'.
299 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
300
301
302 INSERT ls_input_field INTO TABLE ct_input_fields.
303
304* Handy function to reset total shcedule line qty.
305 CALL FUNCTION 'CRM_SCHEDLIN_I_SET_TTLQTY_OW'
306 EXPORTING
307 iv_item_guid = lv_item_guid
308 iv_total_qty = '1'
309 IMPORTING
310 es_schedlin_i_com = ls_schedlin_i
311 et_input_fields = lt_input_field
312 EXCEPTIONS
313 error_occurred = 1
314 OTHERS = 2.
315
316 ls_schedlin_i-ref_handle = lv_item_handle.
317 INSERT ls_schedlin_i INTO TABLE ct_schedlin_i.
318 LOOP AT lt_input_field INTO ls_input_field.
319 ls_input_field-ref_handle = lv_item_handle.
320 INSERT ls_input_field INTO TABLE ct_input_fields.
321 ENDLOOP.
322
323
324*********FILL IT_PRIDOC
325*Item Level Conditions Tab
326 ls_pridoc-ref_guid = lv_item_guid.
327 ls_pridoc-ref_handle = lv_item_handle.
328 ls_pridoc-ref_kind = gc_object_ref_kind-orderadm_i.
329
330 ls_cond_add-kschl = 'ZVKP'.
331 ls_cond_add-kbetr = is_sorder_data-sellprice.
332 ls_cond_add-kpein = '1'.
333
334 INSERT ls_cond_add INTO TABLE lt_cond_add.
335 CLEAR ls_cond_add.
336 ls_pridoc-cond_add = lt_cond_add.
337 CLEAR lt_cond_add[].
338 INSERT ls_pridoc INTO TABLE ct_pridoc .
339
340 ls_input_field-ref_guid = lv_item_guid.
341 ls_input_field-ref_kind = gc_object_ref_kind-orderadm_i.
342 ls_input_field-ref_handle = lv_item_handle.
343 ls_input_field-objectname = gc_object_name-pridoc.
344
345
346
347*** Fill currency into et_pricing and corresponding et_input_fields
348*
349* ls_pricing-ref_guid = lv_item_guid.
350* ls_pricing-ref_handle = lv_item_handle.
351* ls_pricing-ref_kind = gc_object_ref_kind-orderadm_i.
352* ls_pricing-currency = 'AUD'. "i.e. field CURRENCY
353* INSERT ls_pricing INTO TABLE ct_pricing.
354*
355* ls_field_names-fieldname = 'CURRENCY'.
356* INSERT ls_field_names INTO TABLE ls_input_field-field_names.
357*
358* ls_input_field-ref_guid = lv_item_guid.
359* ls_input_field-ref_handle = lv_item_handle.
360* ls_input_field-ref_kind = gc_object_ref_kind-orderadm_i.
361* ls_input_field-objectname = gc_object_name-pricing.
362* INSERT ls_input_field INTO TABLE ct_input_fields.
363*
364** Build Pricing_i for the item.
365* ls_pricing_i-ref_guid = lv_item_guid.
366* ls_pricing_i-ref_handle = lv_item_handle.
367* ls_pricing_i-net_value_man = is_sorder_data-sellprice.
368* ls_pricing_i-target_value = is_sorder_data-sellprice.
369* ls_pricing_i-cost_amount_man = is_sorder_data-costprice.
370* INSERT ls_pricing_i INTO TABLE ct_pricing_i.
371*
372** - input fields.
373* CLEAR: ls_input_field, ls_field_names.
374* ls_input_field-ref_handle = lv_item_handle.
375* ls_input_field-ref_guid = lv_item_guid.
376* ls_input_field-ref_kind = gc_object_ref_kind-orderadm_i.
377* ls_input_field-objectname = gc_object_name-pricing_i.
378* ls_field_names-fieldname = 'NET_VALUE_MAN'.
379* INSERT ls_field_names INTO TABLE ls_input_field-field_names.
380* ls_field_names-fieldname = 'TARGET_VALUE'.
381* INSERT ls_field_names INTO TABLE ls_input_field-field_names.
382* ls_field_names-fieldname = 'COST_AMOUNT_MAN'.
383* INSERT ls_field_names INTO TABLE ls_input_field-field_names.
384* INSERT ls_input_field INTO TABLE ct_input_fields.
385
386** Build Product Unit for the item.
387* ls_product_i-ref_guid = lv_item_guid.
388* ls_product_i-ref_handle = lv_item_handle.
389* ls_input_field-objectname = gc_object_name-product_i.
390* ls_product_i-process_qty_unit = 'EA'.
391* INSERT ls_product_i INTO TABLE ct_product_i.
392** - input fields.
393* CLEAR: ls_input_field, ls_field_names.
394* ls_input_field-ref_handle = lv_item_handle.
395* ls_input_field-ref_guid = lv_item_guid.
396* ls_input_field-ref_kind = gc_object_ref_kind-orderadm_i.
397* ls_input_field-objectname = gc_object_name-product_i.
398* ls_field_names-fieldname = 'PROCESS_QTY_UNIT'.
399* INSERT ls_field_names INTO TABLE ls_input_field-field_names.
400* INSERT ls_input_field INTO TABLE ct_input_fields.
401
402* build partner communication data
403 ls_partner_com-ref_guid = io_crm_order->get_crm_obj_guid( ).
404 ls_partner_com-ref_kind = io_crm_order->get_crm_obj_kind( ).
405 ls_partner_com-partner_no = is_sorder_data-bu_partner_org.
406 ls_partner_com-partner_fct = iv_partner_fct.
407 ls_partner_com-mainpartner = 'X'.
408 ls_partner_com-display_type = 'BP'.
409 ls_partner_com-no_type = 'BP'.
410 INSERT ls_partner_com INTO TABLE ct_partner_com.
411
412* build input fields
413 ls_input_field-ref_guid = io_crm_order->get_crm_obj_guid( ).
414 ls_input_field-ref_kind = io_crm_order->get_crm_obj_kind( ).
415 ls_input_field-objectname = gc_object_name-partner.
416 MOVE-CORRESPONDING ls_partner_com TO ls_partner_key.
417 ls_input_field-logical_key = ls_partner_key.
418
419 CLEAR : ls_field_names.
420 ls_field_names-fieldname = 'PARTNER_NO'.
421 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
422
423 CLEAR : ls_field_names.
424 ls_field_names-fieldname = 'PARTNER_FCT'.
425 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
426
427 CLEAR : ls_field_names.
428 ls_field_names-fieldname = 'MAINPARTNER'.
429 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
430
431 CLEAR : ls_field_names.
432 ls_field_names-fieldname = 'DISPLAY_TYPE'.
433 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
434
435 CLEAR : ls_field_names.
436 ls_field_names-fieldname = 'NO_TYPE'.
437 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
438
439 CLEAR : ls_field_names.
440 ls_field_names-fieldname = 'REF_PARTNER_NO'.
441 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
442
443 CLEAR : ls_field_names.
444 ls_field_names-fieldname = 'REF_PARTNER_FCT'.
445 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
446
447 CLEAR : ls_field_names.
448 ls_field_names-fieldname = 'REF_DISPLAY_TYPE'.
449 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
450
451 CLEAR : ls_field_names.
452 ls_field_names-fieldname = 'REF_NO_TYPE'.
453 INSERT ls_field_names INTO TABLE ls_input_field-field_names.
454
455 INSERT ls_input_field INTO TABLE ct_input_fields.
456
457
458 ENDMETHOD. "build_orderadm_i_com
459
460 METHOD call_order_maintain.
461
462 DATA : lt_input_fields TYPE crmt_input_field_tab.
463
464* call maintain API
465 lt_input_fields = it_input_fields.
466 CALL FUNCTION 'CRM_ORDER_MAINTAIN'
467 EXPORTING
468 it_lead_h = it_lead_h_com
469 it_partner = it_partner_com
470 it_status = it_status_com
471 it_pricing = it_pricing
472 it_pricing_i = it_pricing_i
473 it_product_i = it_product_i
474 it_pridoc = ct_pridoc
475 it_text = it_text_com
476 it_schedlin_i = it_schedlin_i
477 CHANGING
478 ct_orderadm_i = ct_orderadm_i
479 ct_input_fields = lt_input_fields
480 EXCEPTIONS
481 error_occurred = 1
482 document_locked = 2
483 no_change_allowed = 3
484 no_authority = 4
485 OTHERS = 5.
486 IF sy-subrc <> 0.
487 ev_error = abap_true.
488 ELSE.
489 ev_error = abap_false.
490 ENDIF.
491
492 ENDMETHOD. "call_order_maintain
493
494 METHOD get_header_guid.
495
496 INCLUDE : crm_object_kinds_con.
497
498 DATA : lv_object_guid TYPE crmt_object_guid.
499
500 IF io_crm_order->get_crm_obj_kind( ) = gc_object_kind-orderadm_i.
501 lv_object_guid = io_crm_order->get_crm_obj_guid( ).
502 CALL FUNCTION 'CRM_ORDERADM_I_READ_OW'
503 EXPORTING
504 iv_guid = lv_object_guid
505 IMPORTING
506 ev_header_guid = ev_header_guid
507 EXCEPTIONS
508 item_not_found = 1
509 OTHERS = 2.
510 ELSE.
511 ev_header_guid = io_crm_order->get_crm_obj_guid( ).
512 ENDIF.
513
514 ENDMETHOD. "get_header_guid
515
516 METHOD get_header_detail.
517
518 CALL FUNCTION 'CRM_ORDERADM_H_READ_OW'
519 EXPORTING
520 iv_orderadm_h_guid = iv_header_guid
521 IMPORTING
522 ev_object_id = ev_object_id
523 EXCEPTIONS
524 admin_header_not_found = 1
525 OTHERS = 2.
526
527 ENDMETHOD. "get_header_guid
528
529ENDCLASS. "lcl_1o_service IMPLEMENTATION
530
531
532*----------------------------------------------------------------------*
533* CLASS lcl_partner_service IMPLEMENTATION
534*----------------------------------------------------------------------*
535*
536*----------------------------------------------------------------------*
537CLASS lcl_partner_service IMPLEMENTATION.
538
539 METHOD constructor.
540 gv_input_channel = iv_input_channel.
541* fill instance attributes
542 SELECT *
543 FROM zbp_user_dflt_c
544 INTO TABLE gt_user_defaults.
545
546 ENDMETHOD. "constructor
547
548
549 METHOD create_organisation.
550
551 DATA:
552 ls_central TYPE bapibus1006_central,
553 ls_bp_org TYPE bapibus1006_central_organ,
554 ls_address TYPE bapibus1006_address,
555 lt_telephone TYPE STANDARD TABLE OF bapiadtel,
556 ls_telephone TYPE bapiadtel,
557 lt_fax TYPE STANDARD TABLE OF bapiadfax,
558 ls_fax TYPE bapiadfax,
559 lt_email TYPE STANDARD TABLE OF bapiadsmtp,
560 ls_email TYPE bapiadsmtp,
561 lv_role TYPE bu_role,
562 ls_tax_number TYPE dfkkbptaxnum,
563 ls_industry_sector TYPE but0is,
564 lt_return TYPE bapiret2_t,
565 ls_return TYPE bapiret2,
566 lt_refer_check TYPE STANDARD TABLE OF zwr_refer_check,
567 ls_refer_check LIKE LINE OF lt_refer_check,
568 lv_reference TYPE bu_partner.
569
570* Category for creating Organization
571 CONSTANTS:
572 lc_category_org TYPE bu_type VALUE '2'.
573
574* reference to search term 2
575* as Goran's program required, all 'cpa' relative reference would be save as 'CPA'.
576* lv_reference = is_extra_data-store_id.
577* TRANSLATE lv_reference TO UPPER CASE.
578* SELECT * FROM zwr_refer_check INTO TABLE lt_refer_check.
579* LOOP AT lt_refer_check INTO ls_refer_check.
580* IF lv_reference = ls_refer_check-zrefer.
581* ls_central-searchterm2 = 'CPA'.
582* EXIT.
583* ENDIF.
584* ENDLOOP.
585**********************************************
586* the new buying group process requires that the 'customer reference' is saved into the serach term2.
587 ls_central-searchterm2 = is_extra_data-store_id.
588
589* map basic data
590 ls_central-title_key = is_org_data-title.
591 ls_bp_org-name1 = is_org_data-name1 .
592 ls_bp_org-name2 = is_org_data-name2 .
593 ls_bp_org-name3 = is_org_data-name3 .
594 ls_bp_org-legalform = is_extra_data-entity .
595 ls_bp_org-foundationdate = is_extra_data-date_establish.
596 IF is_org_data-org_bpkind = 'DEMO'.
597 ls_central-partnertype = is_org_data-org_bpkind.
598 ENDIF.
599
600 TRANSLATE:
601 ls_bp_org-name1 TO UPPER CASE,
602 ls_bp_org-name2 TO UPPER CASE,
603 ls_bp_org-name3 TO UPPER CASE.
604
605* map address details
606 ls_address-house_no = is_addr_data-house_num1.
607 ls_address-street = is_addr_data-street.
608 ls_address-city = is_addr_data-city1.
609 ls_address-postl_cod1 = is_addr_data-post_code1.
610 ls_address-region = is_addr_data-region.
611 ls_address-country = is_addr_data-country.
612 ls_address-comm_type = is_addr_data-comm_type.
613 ls_address-pcode1_ext = is_addr_data-pcode1_ext.
614 ls_address-pcode2_ext = is_addr_data-pcode2_ext.
615
616* maintain communication details
617 IF is_comm_data-telephone IS NOT INITIAL.
618 ls_telephone-telephone = is_comm_data-telephone.
619 APPEND ls_telephone TO lt_telephone.
620 ENDIF.
621 IF is_comm_data-fax IS NOT INITIAL.
622 ls_fax-fax = is_comm_data-fax.
623 APPEND ls_fax TO lt_fax.
624 ENDIF.
625 IF is_comm_data-email IS NOT INITIAL.
626 ls_email-e_mail = is_comm_data-email.
627 APPEND ls_email TO lt_email.
628 ENDIF.
629
630* Create business partner
631 READ TABLE is_org_data-org_roles
632 TRANSPORTING NO FIELDS
633 FROM 'CRM006'.
634 IF sy-subrc = 0.
635 CALL FUNCTION 'BAPI_BPCONSUMER_CREATE'
636 DESTINATION 'NONE'
637 KEEPING LOGICAL UNIT OF WORK
638 EXPORTING
639 partner_category = lc_category_org
640 partner_central_data = ls_central
641 central_data_organization = ls_bp_org
642 partner_addr = ls_address
643 duplicate_message_type_addr = '-'
644* ACCEPT_ERROR_ADDR =
645 IMPORTING
646 businesspartner = ev_partner
647 TABLES
648 partner_tel_addr = lt_telephone
649 partner_fax_addr = lt_fax
650 partner_email_addr = lt_email
651 return = lt_return.
652 ELSE.
653 CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
654 DESTINATION 'NONE'
655 KEEPING LOGICAL UNIT OF WORK
656 EXPORTING
657 partnercategory = lc_category_org
658 centraldata = ls_central
659 centraldataorganization = ls_bp_org
660 addressdata = ls_address
661 duplicate_message_type = '-'
662* ACCEPT_ERROR = ' '
663 IMPORTING
664 businesspartner = ev_partner
665 TABLES
666 telefondata = lt_telephone
667 faxdata = lt_fax
668 e_maildata = lt_email
669 return = lt_return.
670 ENDIF.
671
672* check for errors
673 LOOP AT lt_return
674 INTO ls_return
675 WHERE type CA 'EAX'.
676 APPEND ls_return TO et_error_messages.
677 ENDLOOP.
678 IF et_error_messages IS NOT INITIAL.
679 RETURN.
680 ENDIF.
681
682* add roles
683 LOOP AT is_org_data-org_roles
684 INTO lv_role.
685 IF lv_role <> 'CRM006'.
686 me->add_role(
687 EXPORTING iv_partner = ev_partner
688 iv_role = lv_role
689 CHANGING ct_error_messages = et_error_messages ).
690 IF et_error_messages IS NOT INITIAL.
691 RETURN.
692 ENDIF.
693 ENDIF.
694 ENDLOOP.
695
696* add tax number
697 IF is_extra_data-abn IS NOT INITIAL.
698 me->add_tax_number(
699 EXPORTING iv_partner = ev_partner
700 iv_tax_type = is_extra_data-tax_type
701 iv_tax_number = is_extra_data-abn
702 CHANGING ct_error_messages = et_error_messages ).
703 IF et_error_messages IS NOT INITIAL.
704 RETURN.
705 ENDIF.
706 ENDIF.
707 LOOP AT is_extra_data-tax_numbers
708 INTO ls_tax_number.
709 me->add_tax_number(
710 EXPORTING iv_partner = ev_partner
711 iv_tax_type = ls_tax_number-taxtype
712 iv_tax_number = ls_tax_number-taxnum
713 CHANGING ct_error_messages = et_error_messages ).
714 IF et_error_messages IS NOT INITIAL.
715 RETURN.
716 ENDIF.
717 ENDLOOP.
718
719* industry sector
720 LOOP AT is_extra_data-industry
721 INTO ls_industry_sector.
722 me->add_industry_sector(
723 EXPORTING iv_partner = ev_partner
724 iv_system = ls_industry_sector-istype
725 iv_sector = ls_industry_sector-ind_sector
726 CHANGING ct_error_messages = et_error_messages ).
727 IF et_error_messages IS NOT INITIAL.
728 RETURN.
729 ENDIF.
730 ENDLOOP.
731
732 ENDMETHOD. "create_organisation
733
734
735 METHOD update_organisation.
736
737 DATA:
738 ls_central TYPE bapibus1006_central,
739 ls_central_old TYPE bapibus1006_central,
740 ls_central_x TYPE bapibus1006_central_x,
741 ls_bp_org_old TYPE bapibus1006_central_organ,
742 ls_bp_org TYPE bapibus1006_central_organ,
743 ls_bp_org_x TYPE bapibus1006_central_organ_x,
744 lv_role TYPE bu_role,
745 ls_tax_number TYPE dfkkbptaxnum,
746 ls_industry_sector TYPE but0is,
747 lt_return TYPE bapiret2_t,
748 ls_return TYPE bapiret2.
749
750* Category for Organization
751 CONSTANTS:
752 lc_category_org TYPE bu_type VALUE '2'.
753
754* map basic data
755 ls_central-title_key = is_org_data-title.
756 ls_bp_org-name1 = is_org_data-name1 .
757 ls_bp_org-name2 = is_org_data-name2 .
758 ls_bp_org-name3 = is_org_data-name3 .
759 ls_bp_org-legalform = is_extra_data-entity .
760 ls_bp_org-foundationdate = is_extra_data-date_establish.
761
762 TRANSLATE:
763 ls_bp_org-name1 TO UPPER CASE,
764 ls_bp_org-name2 TO UPPER CASE,
765 ls_bp_org-name3 TO UPPER CASE.
766
767* call FM to change BP if any structure field value has changed.
768 CALL FUNCTION 'BAPI_BUPA_CENTRAL_GETDETAIL'
769 EXPORTING
770 businesspartner = iv_partner
771 IMPORTING
772* centraldata = ls_central_old
773 centraldataorganization = ls_bp_org_old
774 TABLES
775 return = lt_return.
776
777 me->assign_xstructure(
778 EXPORTING is_old_structure = ls_bp_org_old
779 CHANGING cs_new_structure = ls_bp_org
780 cs_x_structure = ls_bp_org_x ).
781
782 IF ls_bp_org_x IS NOT INITIAL.
783
784 CALL FUNCTION 'BAPI_BUPA_CENTRAL_CHANGE'
785 DESTINATION 'NONE'
786 KEEPING LOGICAL UNIT OF WORK
787 EXPORTING
788 businesspartner = iv_partner
789 centraldataorganization = ls_bp_org
790 centraldataorganization_x = ls_bp_org_x
791 TABLES
792 return = lt_return.
793
794** check for errors
795 LOOP AT lt_return
796 INTO ls_return
797 WHERE type CA 'EAX'.
798 APPEND ls_return TO et_error_messages.
799 ENDLOOP.
800 IF et_error_messages IS NOT INITIAL.
801 RETURN.
802 ENDIF.
803 ENDIF.
804
805*update the customer reference*
806 IF is_extra_data-store_id IS NOT INITIAL.
807 ls_central-searchterm2 = is_extra_data-store_id.
808 ls_central_x-searchterm2 = 'X'.
809 CALL FUNCTION 'BAPI_BUPA_CENTRAL_CHANGE'
810 DESTINATION 'NONE'
811 KEEPING LOGICAL UNIT OF WORK
812 EXPORTING
813 businesspartner = iv_partner
814 centraldata = ls_central
815 centraldata_x = ls_central_x
816 TABLES
817 return = lt_return.
818
819** check for errors
820 LOOP AT lt_return
821 INTO ls_return
822 WHERE type CA 'EAX'.
823 APPEND ls_return TO et_error_messages.
824 ENDLOOP.
825 IF et_error_messages IS NOT INITIAL.
826 RETURN.
827 ENDIF.
828 ENDIF.
829************************************************
830
831*if webrequest is from websphere commerce dont update org address or abn
832 IF zcl_channel_util=>is_via_webservice( gv_input_channel ) EQ abap_false.
833 me->addressupdate( EXPORTING iv_partner = iv_partner
834 is_addr_data = is_addr_data
835 is_comm_data = is_comm_data
836 CHANGING ct_error_messages = et_error_messages ).
837
838* add/update roles
839 LOOP AT is_org_data-org_roles
840 INTO lv_role.
841 IF lv_role <> 'CRM006'.
842 me->add_role(
843 EXPORTING iv_partner = iv_partner
844 iv_role = lv_role
845 CHANGING ct_error_messages = et_error_messages ).
846 IF et_error_messages IS NOT INITIAL.
847 RETURN.
848 ENDIF.
849 ENDIF.
850 ENDLOOP.
851
852* update tax number
853 IF is_extra_data-abn IS NOT INITIAL.
854 me->update_tax_number(
855 EXPORTING iv_partner = iv_partner
856 iv_tax_type = is_extra_data-tax_type
857 iv_tax_number = is_extra_data-abn
858 CHANGING ct_error_messages = et_error_messages ).
859 IF et_error_messages IS NOT INITIAL.
860 RETURN.
861 ENDIF.
862 ENDIF.
863
864 LOOP AT is_extra_data-tax_numbers
865 INTO ls_tax_number.
866 me->update_tax_number(
867 EXPORTING iv_partner = iv_partner
868 iv_tax_type = ls_tax_number-taxtype
869 iv_tax_number = ls_tax_number-taxnum
870 CHANGING ct_error_messages = et_error_messages ).
871 IF et_error_messages IS NOT INITIAL.
872 RETURN.
873 ENDIF.
874 ENDLOOP.
875 ENDIF.
876* industry sector
877 LOOP AT is_extra_data-industry
878 INTO ls_industry_sector.
879 me->update_industry_sector(
880 EXPORTING iv_partner = iv_partner
881 iv_system = ls_industry_sector-istype
882 iv_sector = ls_industry_sector-ind_sector
883 CHANGING ct_error_messages = et_error_messages ).
884 IF et_error_messages IS NOT INITIAL.
885 RETURN.
886 ENDIF.
887 ENDLOOP.
888
889 ENDMETHOD. "update_organisation
890
891 METHOD assign_xstructure.
892 DATA : lv_index TYPE syindex.
893 FIELD-SYMBOLS : <iv_old_value> TYPE ANY,
894 <iv_new_value> TYPE ANY,
895 <iv_new_value_x> TYPE ANY.
896
897 DO.
898 lv_index = sy-index.
899 ASSIGN COMPONENT lv_index
900 OF STRUCTURE cs_new_structure TO <iv_new_value>.
901 IF sy-subrc <> 0. EXIT. ENDIF.
902 ASSIGN COMPONENT lv_index
903 OF STRUCTURE is_old_structure TO <iv_old_value>.
904 IF sy-subrc <> 0. EXIT. ENDIF.
905 ASSIGN COMPONENT lv_index
906 OF STRUCTURE cs_x_structure TO <iv_new_value_x>.
907 me->compare_value(
908 EXPORTING iv_old_value = <iv_old_value>
909 CHANGING cv_new_value = <iv_new_value>
910 cv_new_value_x = <iv_new_value_x> ).
911 ENDDO.
912
913
914 ENDMETHOD. "assign_xstructure.
915
916
917 METHOD compare_value.
918
919 IF iv_old_value <> cv_new_value.
920*if webrequest is from websphere commerce and no value is pass then dont update
921 IF zcl_channel_util=>is_via_webservice( gv_input_channel ) EQ abap_true AND cv_new_value IS INITIAL.
922 cv_new_value_x = if_crm_boolean=>false.
923 CLEAR : cv_new_value.
924 ELSE.
925 cv_new_value_x = if_crm_boolean=>true.
926 ENDIF.
927 ELSE.
928 cv_new_value_x = if_crm_boolean=>false.
929 CLEAR : cv_new_value.
930 ENDIF.
931
932 ENDMETHOD. " compare_value
933
934
935 METHOD create_person.
936
937 DATA:
938 ls_central TYPE bapibus1006_central,
939 ls_bp_person TYPE bapibus1006_central_person,
940 ls_address TYPE bapibus1006_address,
941 lt_telephone TYPE STANDARD TABLE OF bapiadtel,
942 ls_telephone TYPE bapiadtel,
943 lt_fax TYPE STANDARD TABLE OF bapiadfax,
944 ls_fax TYPE bapiadfax,
945 lt_email TYPE STANDARD TABLE OF bapiadsmtp,
946 ls_email TYPE bapiadsmtp,
947 lv_role TYPE bu_role,
948 lt_return TYPE bapiret2_t,
949 ls_return TYPE bapiret2.
950
951* Category for creating person
952 CONSTANTS:
953 lc_person_org TYPE bu_type VALUE '1'.
954
955* map basic data
956 ls_central-title_key = is_person_data-title_p.
957 ls_central-partnerlanguage = is_person_data-langu_cr_p.
958 CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
959 EXPORTING
960 input = ls_central-partnerlanguage
961 IMPORTING
962 output = ls_central-partnerlanguageiso.
963 ls_bp_person-firstname = is_person_data-name_first.
964 ls_bp_person-lastname = is_person_data-name_last.
965 ls_bp_person-correspondlanguage = is_person_data-langu_cr_p.
966 CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
967 EXPORTING
968 input = ls_bp_person-correspondlanguage
969 IMPORTING
970 output = ls_bp_person-correspondlanguageiso.
971 IF is_person_data-per_bpkind = 'DEMO'.
972 ls_central-partnertype = is_person_data-per_bpkind.
973 ENDIF.
974
975
976* map address details
977 ls_address-house_no = is_addr_data-house_num1.
978 ls_address-street = is_addr_data-street.
979 ls_address-city = is_addr_data-city1.
980 ls_address-postl_cod1 = is_addr_data-post_code1.
981 ls_address-region = is_addr_data-region.
982 ls_address-country = is_addr_data-country.
983 ls_address-comm_type = is_addr_data-comm_type.
984 ls_address-pcode1_ext = is_addr_data-pcode1_ext.
985 ls_address-pcode2_ext = is_addr_data-pcode2_ext.
986
987
988* maintain communication details
989 IF is_comm_data-telephone IS NOT INITIAL.
990 ls_telephone-telephone = is_comm_data-telephone.
991 APPEND ls_telephone TO lt_telephone.
992 ENDIF.
993 IF is_comm_data-mobile IS NOT INITIAL.
994 ls_telephone-telephone = is_comm_data-mobile.
995 ls_telephone-r_3_user = '2'.
996 APPEND ls_telephone TO lt_telephone.
997 ENDIF.
998 IF is_comm_data-fax IS NOT INITIAL.
999 ls_fax-fax = is_comm_data-fax.
1000 APPEND ls_fax TO lt_fax.
1001 ENDIF.
1002 IF is_comm_data-email IS NOT INITIAL.
1003 ls_email-e_mail = is_comm_data-email.
1004 APPEND ls_email TO lt_email.
1005 ENDIF.
1006
1007* Create business partner
1008 READ TABLE is_person_data-person_roles
1009 TRANSPORTING NO FIELDS
1010 FROM 'CRM006'.
1011 IF sy-subrc = 0.
1012 CALL FUNCTION 'BAPI_BPCONSUMER_CREATE'
1013 DESTINATION 'NONE'
1014 KEEPING LOGICAL UNIT OF WORK
1015 EXPORTING
1016 partner_category = lc_person_org
1017 partner_central_data = ls_central
1018 central_data_person = ls_bp_person
1019 partner_addr = ls_address
1020 duplicate_message_type_addr = '-'
1021 accept_error_addr = iv_accept_error
1022 IMPORTING
1023 businesspartner = ev_partner
1024 TABLES
1025 partner_tel_addr = lt_telephone
1026 partner_fax_addr = lt_fax
1027 partner_email_addr = lt_email
1028 return = lt_return.
1029 ELSE.
1030 CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
1031 DESTINATION 'NONE'
1032 KEEPING LOGICAL UNIT OF WORK
1033 EXPORTING
1034 partnercategory = lc_person_org
1035 centraldata = ls_central
1036 centraldataperson = ls_bp_person
1037 addressdata = ls_address
1038 duplicate_message_type = '-'
1039 accept_error = iv_accept_error
1040 IMPORTING
1041 businesspartner = ev_partner
1042 TABLES
1043 telefondata = lt_telephone
1044 faxdata = lt_fax
1045 e_maildata = lt_email
1046 return = lt_return.
1047 ENDIF.
1048
1049* check for errors
1050 LOOP AT lt_return
1051 INTO ls_return
1052 WHERE type CA 'EAX'.
1053 APPEND ls_return TO et_error_messages.
1054 ENDLOOP.
1055 IF et_error_messages IS NOT INITIAL.
1056 RETURN.
1057 ENDIF.
1058
1059* add roles
1060 LOOP AT is_person_data-person_roles
1061 INTO lv_role.
1062 IF lv_role <> 'CRM006'.
1063 me->add_role(
1064 EXPORTING iv_partner = ev_partner
1065 iv_role = lv_role
1066 CHANGING ct_error_messages = et_error_messages ).
1067 IF et_error_messages IS NOT INITIAL.
1068 RETURN.
1069 ENDIF.
1070 ENDIF.
1071 ENDLOOP.
1072
1073
1074 ENDMETHOD. "create_person
1075
1076
1077 METHOD update_30day_person.
1078
1079 DATA:
1080 ls_address_data_old TYPE bapibus1006_address,
1081 ls_address_new TYPE bapibus1006_address,
1082 ls_address_new_x TYPE bapibus1006_address_x,
1083 lt_bapiadtel_old TYPE TABLE OF bapiadtel,
1084 lt_bapiadsmtp_old TYPE TABLE OF bapiadsmtp,
1085 ls_bapiadtel_old TYPE bapiadtel,
1086 ls_bapiadsmtp_old TYPE bapiadsmtp,
1087 lt_bapiadtel_new TYPE STANDARD TABLE OF bapiadtel,
1088 ls_telephone TYPE bapiadtel,
1089 lt_bapiadtel_new_x TYPE TABLE OF bapiadtelx,
1090 ls_bapiadtel_new_x TYPE bapiadtelx,
1091 lt_bapiadsmtp_new TYPE STANDARD TABLE OF bapiadsmtp,
1092 ls_email TYPE bapiadsmtp,
1093 lt_bapiadsmt_new_x TYPE TABLE OF bapiadsmtx,
1094 ls_bapiadsmt_new_x TYPE bapiadsmtx,
1095 lt_return TYPE bapiret2_t,
1096 ls_return TYPE bapiret2.
1097
1098
1099* Maintain Address
1100 CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL'
1101 EXPORTING
1102 businesspartner = iv_partner
1103 IMPORTING
1104 addressdata = ls_address_data_old
1105 TABLES
1106 bapiadtel = lt_bapiadtel_old
1107 bapiadsmtp = lt_bapiadsmtp_old
1108 return = lt_return.
1109
1110* map address details
1111 IF ls_address_data_old-comm_type IS INITIAL.
1112 ls_address_new-comm_type = is_addr_data-comm_type.
1113 me->compare_value(
1114 EXPORTING iv_old_value = ls_address_data_old-comm_type
1115 CHANGING cv_new_value = ls_address_new-comm_type
1116 cv_new_value_x = ls_address_new_x-comm_type ).
1117 ENDIF.
1118
1119* maintain communication details
1120 IF is_comm_data-telephone IS NOT INITIAL.
1121 READ TABLE lt_bapiadtel_old INTO ls_bapiadtel_old WITH KEY std_no = if_crm_boolean=>true.
1122 IF ls_bapiadtel_old-telephone NE is_comm_data-telephone.
1123 ls_telephone = ls_bapiadtel_old.
1124 ls_telephone-telephone = is_comm_data-telephone.
1125 APPEND ls_telephone TO lt_bapiadtel_new.
1126 ls_bapiadtel_new_x-telephone = if_crm_boolean=>true.
1127 IF ls_bapiadtel_old-telephone IS NOT INITIAL.
1128 ls_bapiadtel_new_x-updateflag = 'U'.
1129 ELSE.
1130 ls_bapiadtel_new_x-updateflag = 'I'.
1131 ENDIF.
1132 APPEND ls_bapiadtel_new_x TO lt_bapiadtel_new_x.
1133 ENDIF.
1134 ENDIF.
1135 IF is_comm_data-email IS NOT INITIAL.
1136 READ TABLE lt_bapiadsmtp_old INTO ls_bapiadsmtp_old WITH KEY std_no = if_crm_boolean=>true.
1137 IF ls_bapiadsmtp_old-e_mail NE is_comm_data-email.
1138 ls_email = ls_bapiadsmtp_old.
1139 ls_email-e_mail = is_comm_data-email.
1140 APPEND ls_email TO lt_bapiadsmtp_new.
1141 ls_bapiadsmt_new_x-e_mail = if_crm_boolean=>true.
1142 IF ls_bapiadsmtp_old-e_mail IS INITIAL.
1143 ls_bapiadsmt_new_x-updateflag = 'U'.
1144 ELSE.
1145 ls_bapiadsmt_new_x-updateflag = 'I'.
1146 ENDIF.
1147 APPEND ls_bapiadsmt_new_x TO lt_bapiadsmt_new_x.
1148 ENDIF.
1149 ENDIF.
1150*
1151 IF ls_address_new_x IS NOT INITIAL OR
1152 lt_bapiadtel_new_x[] IS NOT INITIAL OR
1153 lt_bapiadsmt_new_x[] IS NOT INITIAL.
1154 CALL FUNCTION 'BAPI_BUPA_ADDRESS_CHANGE'
1155 DESTINATION 'NONE'
1156 KEEPING LOGICAL UNIT OF WORK
1157 EXPORTING
1158 businesspartner = iv_partner
1159 addressdata = ls_address_new
1160 addressdata_x = ls_address_new_x
1161* DUPLICATE_MESSAGE_TYPE =
1162* ACCEPT_ERROR = ' '
1163 TABLES
1164 bapiadtel = lt_bapiadtel_new
1165 bapiadsmtp = lt_bapiadsmtp_new
1166 bapiadtel_x = lt_bapiadtel_new_x
1167 bapiadsmt_x = lt_bapiadsmt_new_x
1168 return = lt_return.
1169* ADDRESSDUPLICATES =
1170 ENDIF.
1171
1172
1173 ENDMETHOD. "update_30day_person
1174
1175
1176
1177 METHOD create_alt_address.
1178
1179 DATA: ls_addressusage TYPE bapibus1006_addressusage,
1180 lt_addressusage TYPE STANDARD TABLE OF bapibus1006_addressusage.
1181
1182* set up the address type to delivery....
1183 ls_addressusage-addresstype = iv_adrkind. " 'ZOW_DELIV'.
1184 ls_addressusage-standardaddressusage = 'X'.
1185 INSERT ls_addressusage INTO TABLE lt_addressusage.
1186
1187* if postal address exists update in background
1188 CALL FUNCTION 'BAPI_BUPA_ADDRESS_ADD'
1189 DESTINATION 'NONE'
1190 KEEPING LOGICAL UNIT OF WORK
1191 EXPORTING
1192 businesspartner = iv_partner
1193 addressdata = is_address
1194 duplicate_message_type = '-'
1195 accept_error = 'X'
1196 TABLES
1197 addressusage = lt_addressusage
1198 return = et_error_messages.
1199
1200* return error messages
1201 DELETE et_error_messages WHERE type <> 'E'.
1202
1203 ENDMETHOD. " create_delivery_address
1204
1205 METHOD create_cp_relationship.
1206
1207 DATA : lv_address_guid TYPE bu_address_guid,
1208 lv_address_guid_bapi TYPE bu_address_guid_bapi,
1209 lt_telephone TYPE STANDARD TABLE OF bapiadtel,
1210 ls_telephone TYPE bapiadtel,
1211 lt_fax TYPE STANDARD TABLE OF bapiadfax,
1212 ls_fax TYPE bapiadfax,
1213 lt_email TYPE STANDARD TABLE OF bapiadsmtp,
1214 ls_email TYPE bapiadsmtp,
1215 lt_return TYPE bapiret2_t,
1216 ls_return TYPE bapiret2.
1217
1218* get org address details
1219 CALL FUNCTION 'BUPA_ADDRESSES_GET'
1220 DESTINATION 'NONE'
1221 KEEPING LOGICAL UNIT OF WORK
1222 EXPORTING
1223 iv_partner = iv_partner
1224 IMPORTING
1225 ev_standard_addrguid = lv_address_guid.
1226
1227* add contact person role for business partner
1228 me->add_role(
1229 EXPORTING iv_partner = iv_partner_cp
1230 iv_role = 'BUP001'
1231 CHANGING ct_error_messages = et_error_messages ).
1232 IF et_error_messages IS NOT INITIAL.
1233 RETURN.
1234 ENDIF.
1235
1236* maintain communication details
1237 IF is_comm_data-telephone IS NOT INITIAL.
1238 ls_telephone-telephone = is_comm_data-telephone.
1239 APPEND ls_telephone TO lt_telephone.
1240 ENDIF.
1241 IF is_comm_data-mobile IS NOT INITIAL.
1242 ls_telephone-telephone = is_comm_data-mobile.
1243 ls_telephone-r_3_user = '2'.
1244 APPEND ls_telephone TO lt_telephone.
1245 ENDIF.
1246 IF is_comm_data-fax IS NOT INITIAL.
1247 ls_fax-fax = is_comm_data-fax.
1248 APPEND ls_fax TO lt_fax.
1249 ENDIF.
1250 IF is_comm_data-email IS NOT INITIAL.
1251 ls_email-e_mail = is_comm_data-email.
1252 APPEND ls_email TO lt_email.
1253 ENDIF.
1254
1255* maintain relationship
1256 lv_address_guid_bapi = lv_address_guid.
1257 CALL FUNCTION 'BAPI_BUPR_CONTP_CREATE'
1258 DESTINATION 'NONE'
1259 KEEPING LOGICAL UNIT OF WORK
1260 EXPORTING
1261 businesspartner = iv_partner
1262 contactperson = iv_partner_cp
1263 addressguid = lv_address_guid_bapi
1264 duplicate_message_type = '-'
1265 TABLES
1266 bapiadtel = lt_telephone
1267 bapiadfax = lt_fax
1268 bapiadsmtp = lt_email
1269 return = lt_return.
1270
1271* check for errors
1272 LOOP AT lt_return
1273 INTO ls_return
1274 WHERE type CA 'EAX'.
1275 APPEND ls_return TO et_error_messages.
1276 ENDLOOP.
1277 IF et_error_messages IS NOT INITIAL.
1278 RETURN.
1279 ENDIF.
1280
1281 ENDMETHOD. "create_cp_relationship
1282
1283 METHOD update_org_mktatt.
1284
1285 INCLUDE : crm_mode_con.
1286
1287 DATA: ls_mktbp_wrk TYPE crmt_mktbp_wrk,
1288 lv_data_changed TYPE xfeld,
1289 lv_partner_guid TYPE bu_partner_guid,
1290 ls_mkt_attr TYPE crmt_name_value_pair,
1291 lt_return TYPE bapiret2_t,
1292 ls_return TYPE bapiret2.
1293
1294 FIELD-SYMBOLS: <fs_charvalues> TYPE crmt_mktprof_comw.
1295
1296* get bp guid
1297 CALL FUNCTION 'BUPA_NUMBERS_GET'
1298 EXPORTING
1299 iv_partner = iv_partner
1300 IMPORTING
1301 ev_partner_guid = lv_partner_guid
1302 TABLES
1303 et_return = lt_return.
1304* ET_PARTNER = .
1305
1306 IF iv_create IS INITIAL.
1307* Check whether this Attribute Set is already assigned
1308 CALL FUNCTION 'CRM_MKTBP_READ_OW'
1309 EXPORTING
1310 iv_bp_guid = lv_partner_guid
1311 iv_profile_template_id = 'CSC-ORGANISATION'
1312 IMPORTING
1313 es_mktbp_wrk = ls_mktbp_wrk
1314 TABLES
1315 et_return = lt_return.
1316
1317* update with new values
1318 LOOP AT ls_mktbp_wrk-charvalues ASSIGNING <fs_charvalues>.
1319 CASE <fs_charvalues>-atname.
1320 WHEN 'INDUSTRY_BUCKETS'.
1321 IF <fs_charvalues>-atwrt IS INITIAL.
1322*bug from the beginning of time !
1323* <fs_charvalues>-atwrt = is_extra_data-no_employees.
1324 <fs_charvalues>-atwrt = is_extra_data-bus_industry.
1325 ENDIF.
1326 WHEN 'OWDNOE'.
1327 IF <fs_charvalues>-atwrt IS INITIAL.
1328*bug from the beginning of time !
1329* <fs_charvalues>-atwrt = is_extra_data-bus_industry.
1330 <fs_charvalues>-atwrt = is_extra_data-no_employees.
1331 ENDIF.
1332 ENDCASE.
1333 ENDLOOP.
1334
1335* general update
1336 LOOP AT ls_mktbp_wrk-charvalues ASSIGNING <fs_charvalues>.
1337 READ TABLE is_extra_data-marketing_attr
1338 INTO ls_mkt_attr
1339 WITH KEY name = <fs_charvalues>-atname.
1340 IF sy-subrc EQ 0.
1341 <fs_charvalues>-atwrt = ls_mkt_attr-value.
1342 ENDIF.
1343 ENDLOOP.
1344 ls_mktbp_wrk-mode = gc_mode-change.
1345
1346 ELSE.
1347
1348* create marketing attributes for business partner
1349 me->new_mktatt(
1350 EXPORTING iv_partner_guid = lv_partner_guid
1351 iv_class = 'CSC-ORGANISATION'
1352 is_extra_data = is_extra_data
1353 is_bp_mkt = is_bp_mkt
1354 CHANGING ct_bp_charvalues = ls_mktbp_wrk-charvalues
1355 ct_error_messages = et_error_messages ).
1356 IF et_error_messages IS NOT INITIAL.
1357 RETURN.
1358 ENDIF.
1359
1360 ENDIF.
1361
1362* Assign Attribute Set to BP
1363 CALL FUNCTION 'CRM_MKTBP_MAINTAIN_OW'
1364 EXPORTING
1365 is_mktbp_wrk = ls_mktbp_wrk
1366 IMPORTING
1367 ev_data_changed = lv_data_changed
1368 TABLES
1369 et_return = lt_return.
1370
1371* commit changes
1372 CALL FUNCTION 'CRM_MKTBP_SAVE_OB'
1373 EXPORTING
1374 iv_save_all_objects = 'X'
1375 iv_commit = ' '.
1376
1377* check for errors
1378 LOOP AT lt_return
1379 INTO ls_return
1380 WHERE type CA 'EAX'.
1381 APPEND ls_return TO et_error_messages.
1382 ENDLOOP.
1383 IF et_error_messages IS NOT INITIAL.
1384 RETURN.
1385 ENDIF.
1386
1387 ENDMETHOD. "update_org_mktatt
1388
1389 METHOD update_per_mktatt.
1390
1391 DATA: ls_mktbp_wrk TYPE crmt_mktbp_wrk,
1392 lv_data_changed TYPE xfeld,
1393 lv_partner_guid TYPE bu_partner_guid,
1394 lt_return TYPE bapiret2_t,
1395 ls_return TYPE bapiret2.
1396
1397 FIELD-SYMBOLS: <fs_charvalues> TYPE crmt_mktprof_comw.
1398*websphere commerce webrequest does not have these details.
1399 CHECK zcl_channel_util=>is_via_webservice( gv_input_channel ) EQ abap_false.
1400
1401* get bp guid
1402 CALL FUNCTION 'BUPA_NUMBERS_GET'
1403 EXPORTING
1404 iv_partner = iv_partner
1405 IMPORTING
1406 ev_partner_guid = lv_partner_guid
1407 TABLES
1408 et_return = lt_return.
1409* ET_PARTNER = .
1410
1411 IF iv_create IS INITIAL.
1412* Check whether this Attribute Set is already assigned
1413 CALL FUNCTION 'CRM_MKTBP_READ_OW'
1414 EXPORTING
1415 iv_bp_guid = lv_partner_guid
1416 iv_profile_template_id = 'CSC-CONTACTS'
1417 IMPORTING
1418 es_mktbp_wrk = ls_mktbp_wrk
1419 TABLES
1420 et_return = lt_return.
1421
1422* update with new values
1423 LOOP AT ls_mktbp_wrk-charvalues ASSIGNING <fs_charvalues>
1424 WHERE atname = 'LESS_MAIL_FLAGS'.
1425
1426 CASE <fs_charvalues>-atwrt.
1427
1428 WHEN 'OPTINOFALLCATALOGUES'.
1429 IF is_bp_mkt-optinofallcatalogues IS INITIAL.
1430 DELETE ls_mktbp_wrk-charvalues INDEX sy-tabix.
1431 ENDIF.
1432
1433 WHEN 'OPTINFAX'.
1434 IF is_bp_mkt-optinfax IS INITIAL.
1435 DELETE ls_mktbp_wrk-charvalues INDEX sy-tabix.
1436 ENDIF.
1437
1438 WHEN 'OPTINPHONE'.
1439 IF is_bp_mkt-optinphone IS INITIAL.
1440 DELETE ls_mktbp_wrk-charvalues INDEX sy-tabix.
1441 ENDIF.
1442
1443 WHEN 'OPTINEMAIL'.
1444 IF is_bp_mkt-optinemail IS INITIAL.
1445 DELETE ls_mktbp_wrk-charvalues INDEX sy-tabix.
1446 ENDIF.
1447
1448 ENDCASE.
1449 ENDLOOP.
1450
1451* set mode to change
1452 ls_mktbp_wrk-mode = 'C'.
1453
1454 ELSE.
1455
1456* create marketing attributes for business partner
1457 me->new_mktatt(
1458 EXPORTING iv_partner_guid = lv_partner_guid
1459 iv_class = 'CSC-CONTACTS'
1460 is_extra_data = is_extra_data
1461 is_bp_mkt = is_bp_mkt
1462 CHANGING ct_bp_charvalues = ls_mktbp_wrk-charvalues
1463 ct_error_messages = et_error_messages ).
1464 IF et_error_messages IS NOT INITIAL.
1465 RETURN.
1466 ENDIF.
1467
1468 ENDIF.
1469
1470 CLEAR lt_return.
1471
1472* Assign Attribute Set to BP
1473 CALL FUNCTION 'CRM_MKTBP_MAINTAIN_OW'
1474 EXPORTING
1475 is_mktbp_wrk = ls_mktbp_wrk
1476 IMPORTING
1477 ev_data_changed = lv_data_changed
1478 TABLES
1479 et_return = lt_return.
1480
1481 LOOP AT lt_return
1482 TRANSPORTING NO FIELDS
1483 WHERE type CA 'EAX'.
1484 APPEND ls_return TO et_error_messages.
1485 ENDLOOP.
1486 IF et_error_messages IS NOT INITIAL.
1487 RETURN.
1488 ENDIF.
1489
1490* commit changes
1491 CALL FUNCTION 'CRM_MKTBP_SAVE_OB'
1492 EXPORTING
1493 iv_save_all_objects = 'X'
1494 iv_commit = ' '.
1495
1496* check for errors
1497 LOOP AT lt_return
1498 INTO ls_return
1499 WHERE type CA 'EAX'.
1500 APPEND ls_return TO et_error_messages.
1501 ENDLOOP.
1502 IF et_error_messages IS NOT INITIAL.
1503 RETURN.
1504 ENDIF.
1505
1506 ENDMETHOD. "update_per_mktatt
1507
1508 METHOD addressupdate.
1509 DATA:
1510 ls_address_data_old TYPE bapibus1006_address,
1511 lt_bapiadtel_old TYPE TABLE OF bapiadtel,
1512 lt_bapiadfax_old TYPE TABLE OF bapiadfax,
1513 lt_bapiadsmtp_old TYPE TABLE OF bapiadsmtp,
1514 ls_bapiadtel_old TYPE bapiadtel,
1515 ls_bapiadfax_old TYPE bapiadfax,
1516 ls_bapiadsmtp_old TYPE bapiadsmtp,
1517 ls_address_new TYPE bapibus1006_address,
1518 ls_address_new_x TYPE bapibus1006_address_x,
1519 lt_bapiadtel_new TYPE STANDARD TABLE OF bapiadtel,
1520 ls_telephone TYPE bapiadtel,
1521 lt_bapiadtel_new_x TYPE TABLE OF bapiadtelx,
1522 ls_bapiadtel_new_x TYPE bapiadtelx,
1523 lt_bapiadfax_new TYPE STANDARD TABLE OF bapiadfax,
1524 ls_fax TYPE bapiadfax,
1525 lt_bapiadfax_new_x TYPE TABLE OF bapiadfaxx,
1526 ls_bapiadfax_new_x TYPE bapiadfaxx,
1527 lt_bapiadsmtp_new TYPE STANDARD TABLE OF bapiadsmtp,
1528 ls_email TYPE bapiadsmtp,
1529 lt_bapiadsmt_new_x TYPE TABLE OF bapiadsmtx,
1530 ls_bapiadsmt_new_x TYPE bapiadsmtx,
1531 lt_return TYPE bapiret2_t,
1532 ls_return TYPE bapiret2.
1533
1534* Maintain Address
1535 CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL'
1536 EXPORTING
1537 businesspartner = iv_partner
1538 IMPORTING
1539 addressdata = ls_address_data_old
1540 TABLES
1541 bapiadtel = lt_bapiadtel_old
1542 bapiadfax = lt_bapiadfax_old
1543 bapiadsmtp = lt_bapiadsmtp_old
1544 return = lt_return.
1545
1546 LOOP AT lt_return
1547 TRANSPORTING NO FIELDS
1548 WHERE type CA 'EAX'.
1549 APPEND ls_return TO ct_error_messages.
1550 ENDLOOP.
1551 IF ct_error_messages IS NOT INITIAL.
1552 RETURN.
1553 ENDIF.
1554
1555
1556* map address details
1557
1558 ls_address_new-house_no = is_addr_data-house_num1.
1559 me->compare_value(
1560 EXPORTING iv_old_value = ls_address_data_old-house_no
1561 CHANGING cv_new_value = ls_address_new-house_no
1562 cv_new_value_x = ls_address_new_x-house_no ).
1563 ls_address_new-street = is_addr_data-street.
1564 me->compare_value(
1565 EXPORTING iv_old_value = ls_address_data_old-street
1566 CHANGING cv_new_value = ls_address_new-street
1567 cv_new_value_x = ls_address_new_x-street ).
1568 ls_address_new-city = is_addr_data-city1.
1569 me->compare_value(
1570 EXPORTING iv_old_value = ls_address_data_old-city
1571 CHANGING cv_new_value = ls_address_new-city
1572 cv_new_value_x = ls_address_new_x-city ).
1573 ls_address_new-postl_cod1 = is_addr_data-post_code1.
1574 me->compare_value(
1575 EXPORTING iv_old_value = ls_address_data_old-postl_cod1
1576 CHANGING cv_new_value = ls_address_new-postl_cod1
1577 cv_new_value_x = ls_address_new_x-postl_cod1 ).
1578 ls_address_new-region = is_addr_data-region.
1579 me->compare_value(
1580 EXPORTING iv_old_value = ls_address_data_old-region
1581 CHANGING cv_new_value = ls_address_new-region
1582 cv_new_value_x = ls_address_new_x-region ).
1583 ls_address_new-comm_type = is_addr_data-comm_type.
1584 me->compare_value(
1585 EXPORTING iv_old_value = ls_address_data_old-comm_type
1586 CHANGING cv_new_value = ls_address_new-comm_type
1587 cv_new_value_x = ls_address_new_x-comm_type ).
1588 ls_address_new-pcode1_ext = is_addr_data-pcode1_ext.
1589 me->compare_value(
1590 EXPORTING iv_old_value = ls_address_data_old-pcode1_ext
1591 CHANGING cv_new_value = ls_address_new-pcode1_ext
1592 cv_new_value_x = ls_address_new_x-pcode1_ext ).
1593 ls_address_new-pcode2_ext = is_addr_data-pcode2_ext.
1594 me->compare_value(
1595 EXPORTING iv_old_value = ls_address_data_old-pcode2_ext
1596 CHANGING cv_new_value = ls_address_new-pcode2_ext
1597 cv_new_value_x = ls_address_new_x-pcode2_ext ).
1598
1599
1600* maintain communication details
1601 IF is_comm_data-telephone IS NOT INITIAL.
1602 READ TABLE lt_bapiadtel_old INTO ls_bapiadtel_old WITH KEY std_no = if_crm_boolean=>true.
1603 IF ls_bapiadtel_old-telephone NE is_comm_data-telephone.
1604 ls_telephone = ls_bapiadtel_old.
1605 ls_telephone-telephone = is_comm_data-telephone.
1606 APPEND ls_telephone TO lt_bapiadtel_new.
1607 ls_bapiadtel_new_x-telephone = if_crm_boolean=>true.
1608 ls_bapiadtel_new_x-updateflag = 'U'.
1609 APPEND ls_bapiadtel_new_x TO lt_bapiadtel_new_x.
1610 ENDIF.
1611 ENDIF.
1612 IF is_comm_data-fax IS NOT INITIAL.
1613 READ TABLE lt_bapiadfax_old INTO ls_bapiadfax_old WITH KEY std_no = if_crm_boolean=>true.
1614 IF ls_bapiadfax_old-fax NE is_comm_data-fax.
1615 ls_fax = ls_bapiadfax_old.
1616 ls_fax-fax = is_comm_data-fax.
1617 APPEND ls_fax TO lt_bapiadfax_new.
1618 ls_bapiadfax_new_x-fax = if_crm_boolean=>true.
1619 IF ls_bapiadfax_old-fax IS NOT INITIAL.
1620 ls_bapiadfax_new_x-updateflag = 'U'.
1621 ELSE.
1622 ls_bapiadfax_new_x-updateflag = 'I'.
1623 ENDIF.
1624 APPEND ls_bapiadfax_new_x TO lt_bapiadfax_new_x.
1625 ENDIF.
1626 ENDIF.
1627 IF is_comm_data-email IS NOT INITIAL.
1628 READ TABLE lt_bapiadsmtp_old INTO ls_bapiadsmtp_old WITH KEY std_no = if_crm_boolean=>true.
1629 IF ls_bapiadsmtp_old-e_mail NE is_comm_data-email.
1630 ls_email = ls_bapiadsmtp_old.
1631 ls_email-e_mail = is_comm_data-email.
1632 APPEND ls_email TO lt_bapiadsmtp_new.
1633 ls_bapiadsmt_new_x-e_mail = if_crm_boolean=>true.
1634 IF ls_bapiadsmtp_old-e_mail IS NOT INITIAL.
1635 ls_bapiadsmt_new_x-updateflag = 'U'.
1636 ELSE.
1637 ls_bapiadsmt_new_x-updateflag = 'I'.
1638 ENDIF.
1639 APPEND ls_bapiadsmt_new_x TO lt_bapiadsmt_new_x.
1640 ENDIF.
1641 ENDIF.
1642*
1643 IF ls_address_new_x IS NOT INITIAL OR
1644 lt_bapiadtel_new_x[] IS NOT INITIAL OR
1645 lt_bapiadfax_new_x[] IS NOT INITIAL OR
1646 lt_bapiadsmt_new_x[] IS NOT INITIAL.
1647 CALL FUNCTION 'BAPI_BUPA_ADDRESS_CHANGE'
1648 DESTINATION 'NONE'
1649 KEEPING LOGICAL UNIT OF WORK
1650 EXPORTING
1651 businesspartner = iv_partner
1652 addressdata = ls_address_new
1653 addressdata_x = ls_address_new_x
1654* DUPLICATE_MESSAGE_TYPE =
1655* ACCEPT_ERROR = ' '
1656 TABLES
1657 bapiadtel = lt_bapiadtel_new
1658 bapiadfax = lt_bapiadfax_new
1659 bapiadsmtp = lt_bapiadsmtp_new
1660 bapiadtel_x = lt_bapiadtel_new_x
1661 bapiadfax_x = lt_bapiadfax_new_x
1662 bapiadsmt_x = lt_bapiadsmt_new_x
1663 return = lt_return.
1664* ADDRESSDUPLICATES =
1665 ENDIF.
1666
1667
1668 ENDMETHOD. "update_per_mktatt
1669
1670 METHOD add_role.
1671
1672 DATA : lt_return TYPE bapiret2_t,
1673 ls_return TYPE bapiret2.
1674
1675* check if role has already been assigned
1676 CALL FUNCTION 'BAPI_BUPA_ROLE_EXISTENCE_CHECK'
1677 DESTINATION 'NONE'
1678 KEEPING LOGICAL UNIT OF WORK
1679 EXPORTING
1680 businesspartner = iv_partner
1681 businesspartnerrole = iv_role
1682 TABLES
1683 return = lt_return.
1684 LOOP AT lt_return
1685 TRANSPORTING NO FIELDS
1686 WHERE type CA 'EAX'.
1687 EXIT.
1688 ENDLOOP.
1689 IF sy-subrc <> 0.
1690 RETURN.
1691 ENDIF.
1692
1693* call API to add role
1694 CLEAR : lt_return.
1695 CALL FUNCTION 'BAPI_BUPA_ROLE_ADD'
1696 DESTINATION 'NONE'
1697 KEEPING LOGICAL UNIT OF WORK
1698 EXPORTING
1699 businesspartner = iv_partner
1700 businesspartnerrole = iv_role
1701 TABLES
1702 return = lt_return.
1703
1704* add error messages
1705 LOOP AT lt_return
1706 INTO ls_return
1707 WHERE type CA 'EAX'.
1708 APPEND ls_return TO ct_error_messages.
1709 ENDLOOP.
1710
1711 ENDMETHOD. "add_role
1712
1713 METHOD add_tax_number.
1714
1715 DATA : lt_return TYPE bapiret2_t,
1716 ls_return TYPE bapiret2.
1717
1718* call API to add role
1719 CLEAR : lt_return.
1720 CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
1721 DESTINATION 'NONE'
1722 KEEPING LOGICAL UNIT OF WORK
1723 EXPORTING
1724 businesspartner = iv_partner
1725 taxtype = iv_tax_type
1726 taxnumber = iv_tax_number
1727 TABLES
1728 return = lt_return.
1729
1730* add error messages
1731 LOOP AT lt_return
1732 INTO ls_return
1733 WHERE type CA 'EAX'.
1734 APPEND ls_return TO ct_error_messages.
1735 ENDLOOP.
1736
1737 ENDMETHOD. "add_tax_number
1738
1739
1740
1741 METHOD update_tax_number.
1742
1743 DATA : lv_tax_number TYPE bptaxnum,
1744 lt_return TYPE bapiret2_t,
1745 ls_return TYPE bapiret2.
1746
1747
1748 CALL FUNCTION 'BUPA_TAX_GET_DETAIL'
1749 EXPORTING
1750 iv_partner = iv_partner
1751 iv_tax_type = iv_tax_type
1752 IMPORTING
1753 ev_tax_number = lv_tax_number
1754 TABLES
1755 ct_return = lt_return
1756 EXCEPTIONS
1757 no_record_found = 1
1758 OTHERS = 2.
1759
1760
1761 IF lv_tax_number IS INITIAL.
1762* call API to add role
1763 CLEAR : lt_return.
1764 CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
1765 DESTINATION 'NONE'
1766 KEEPING LOGICAL UNIT OF WORK
1767 EXPORTING
1768 businesspartner = iv_partner
1769 taxtype = iv_tax_type
1770 taxnumber = iv_tax_number
1771 TABLES
1772 return = lt_return.
1773 ELSEIF lv_tax_number NE iv_tax_number.
1774 CALL FUNCTION 'BAPI_BUPA_TAX_CHANGE'
1775 DESTINATION 'NONE'
1776 KEEPING LOGICAL UNIT OF WORK
1777 EXPORTING
1778 businesspartner = iv_partner
1779 taxtype = iv_tax_type
1780 taxnumber = iv_tax_number
1781 TABLES
1782 return = lt_return.
1783 ENDIF.
1784
1785* add error messages
1786 LOOP AT lt_return
1787 INTO ls_return
1788 WHERE type CA 'EAX'.
1789 APPEND ls_return TO ct_error_messages.
1790 ENDLOOP.
1791
1792 ENDMETHOD. "update_tax_number
1793
1794 METHOD add_industry_sector.
1795
1796 DATA : lt_return TYPE bapiret2_t,
1797 ls_return TYPE bapiret2.
1798
1799* call API to add role
1800 CLEAR : lt_return.
1801 CALL FUNCTION 'BAPI_INDUSTRYSECTOR_ADD'
1802 DESTINATION 'NONE'
1803 KEEPING LOGICAL UNIT OF WORK
1804 EXPORTING
1805 businesspartner = iv_partner
1806 industrysectorkeysystem = iv_system
1807 industrysector = iv_sector
1808 defaultindustry = abap_true
1809 TABLES
1810 return = lt_return.
1811
1812* add error messages
1813 LOOP AT lt_return
1814 INTO ls_return
1815 WHERE type CA 'EAX'.
1816 APPEND ls_return TO ct_error_messages.
1817 ENDLOOP.
1818
1819 ENDMETHOD. "add_industry_sector
1820
1821
1822 METHOD update_industry_sector.
1823
1824 DATA : lt_isector TYPE TABLE OF bapibus1006_industrysector,
1825 ls_isector TYPE bapibus1006_industrysector,
1826 ls_default TYPE bapibus1006_industrysector_x,
1827 lt_return TYPE bapiret2_t,
1828 ls_return TYPE bapiret2.
1829
1830
1831 CALL FUNCTION 'BAPI_INDUSTRYSECTORDETAILS_GET'
1832 EXPORTING
1833 businesspartner = iv_partner
1834 TABLES
1835 industrysectordetail = lt_isector
1836 return = lt_return.
1837
1838 CLEAR : lt_return.
1839 IF lt_isector[] IS INITIAL.
1840* call API to add industry sector
1841 CALL FUNCTION 'BAPI_INDUSTRYSECTOR_ADD'
1842 DESTINATION 'NONE'
1843 KEEPING LOGICAL UNIT OF WORK
1844 EXPORTING
1845 businesspartner = iv_partner
1846 industrysectorkeysystem = iv_system
1847 industrysector = iv_sector
1848 defaultindustry = abap_true
1849 TABLES
1850 return = lt_return.
1851
1852 ELSE.
1853 READ TABLE lt_isector INTO ls_isector WITH KEY defaultindustrysector = if_crm_boolean=>true
1854 industrysectorkeysystem = iv_system.
1855 IF sy-subrc <> 0.
1856 READ TABLE lt_isector INTO ls_isector WITH KEY industrysectorkeysystem = iv_system.
1857 ENDIF.
1858 IF ls_isector-industrysector NE iv_sector.
1859 IF ls_isector-industrysector IS NOT INITIAL.
1860 CALL FUNCTION 'BAPI_INDUSTRYSECTOR_REMOVE'
1861 DESTINATION 'NONE'
1862 KEEPING LOGICAL UNIT OF WORK
1863 EXPORTING
1864 businesspartner = iv_partner
1865 industrysectorkeysystem = iv_system
1866 industrysector = ls_isector-industrysector
1867 TABLES
1868 return = lt_return.
1869 ENDIF.
1870
1871 CALL FUNCTION 'BAPI_INDUSTRYSECTOR_ADD'
1872 DESTINATION 'NONE'
1873 KEEPING LOGICAL UNIT OF WORK
1874 EXPORTING
1875 businesspartner = iv_partner
1876 industrysectorkeysystem = iv_system
1877 industrysector = iv_sector
1878 defaultindustry = abap_true
1879 TABLES
1880 return = lt_return.
1881
1882* ls_default = if_crm_boolean=>true.
1883* CALL FUNCTION 'BAPI_INDUSTRYSECTOR_CHANGE'
1884* DESTINATION 'NONE'
1885* KEEPING LOGICAL UNIT OF WORK
1886* EXPORTING
1887* businesspartner = iv_partner
1888* industrysectorkeysystem = iv_system
1889* industrysector = iv_sector
1890* defaultindustry = if_crm_boolean=>true
1891* defaultindustry_x = ls_default
1892* TABLES
1893* return = lt_return.
1894 ENDIF.
1895
1896 ENDIF.
1897
1898* add error messages
1899 LOOP AT lt_return
1900 INTO ls_return
1901 WHERE type CA 'EAX'.
1902 APPEND ls_return TO ct_error_messages.
1903 ENDLOOP.
1904
1905 ENDMETHOD. "update_industry_sector
1906
1907 METHOD new_mktatt.
1908
1909 DATA : ls_mktbp_wrk TYPE crmt_mktbp_wrk,
1910 ls_class_desc TYPE bapi1003_catch_r,
1911 lt_class_desc TYPE STANDARD TABLE OF bapi1003_catch_r,
1912 lt_class_text TYPE STANDARD TABLE OF bapi1003_longtext_r,
1913 ls_class_char TYPE bapi1003_charact_r ,
1914 lt_class_char TYPE STANDARD TABLE OF bapi1003_charact_r ,
1915 ls_char_values TYPE bapi1003_char_val_r,
1916 lt_char_values TYPE STANDARD TABLE OF bapi1003_char_val_r,
1917 ls_bp_charvalues TYPE crmt_mktprof_comw,
1918 lt_bp_charvalues TYPE crmt_mktprof_comw_t,
1919 lt_return TYPE bapiret2_t,
1920 ls_return TYPE bapiret2.
1921
1922* Get Attribute Set Details
1923 CALL FUNCTION 'BAPI_CLASS_READ'
1924 EXPORTING
1925 classtype = 'BUP'
1926 classnum = iv_class
1927 TABLES
1928 classdescriptions = lt_class_desc
1929 classlongtexts = lt_class_text
1930 classcharacteristics = lt_class_char
1931 classcharactvalues = lt_char_values.
1932
1933 READ TABLE lt_class_desc INDEX 1 INTO ls_class_desc .
1934
1935 CLEAR: ls_mktbp_wrk.
1936 ls_mktbp_wrk-guid = iv_partner_guid.
1937 ls_mktbp_wrk-profile_template_id = iv_class.
1938 ls_mktbp_wrk-profile_template_descr = ls_class_desc-catchword.
1939 ls_mktbp_wrk-mode = 'A'.
1940
1941* Populate Chacteristics and Values
1942 LOOP AT lt_class_char INTO ls_class_char.
1943
1944 LOOP AT lt_char_values INTO ls_char_values
1945 WHERE name_char EQ ls_class_char-name_char
1946 AND default_flag EQ 'X'.
1947
1948 ls_bp_charvalues-atname = ls_class_char-name_char.
1949 ls_bp_charvalues-atwrt = ls_char_values-char_value.
1950 APPEND ls_bp_charvalues TO lt_bp_charvalues.
1951 CLEAR ls_bp_charvalues.
1952
1953 ENDLOOP.
1954
1955 IF sy-subrc NE 0.
1956 CASE ls_class_char-name_char.
1957 WHEN 'INDUSTRY_BUCKETS'.
1958 ls_bp_charvalues-atwrt = is_extra_data-bus_industry.
1959 WHEN 'OWDNOE'.
1960 ls_bp_charvalues-atwrt = is_extra_data-no_employees.
1961 WHEN 'OPTINOFALLCATALOGUES'.
1962 ls_bp_charvalues-atwrt = is_bp_mkt-optinofallcatalogues.
1963 WHEN 'OPTINFAX'.
1964 ls_bp_charvalues-atwrt = is_bp_mkt-optinfax.
1965 WHEN 'OPTINPHONE'.
1966 ls_bp_charvalues-atwrt = is_bp_mkt-optinphone.
1967 WHEN 'OPTINEMAIL'.
1968 ls_bp_charvalues-atwrt = is_bp_mkt-optinemail.
1969 ENDCASE.
1970 ls_bp_charvalues-atname = ls_class_char-name_char.
1971 APPEND ls_bp_charvalues TO lt_bp_charvalues.
1972 ENDIF.
1973
1974 ENDLOOP.
1975
1976 ct_bp_charvalues[] = lt_bp_charvalues[].
1977
1978 ENDMETHOD. "new_mktatt
1979
1980 METHOD add_internetuser.
1981
1982 DATA:
1983 lv_password(8) TYPE c,
1984 lv_bname TYPE xubname,
1985 ls_alias TYPE bapialias,
1986 ls_username TYPE bapibname,
1987 ls_password TYPE bapipwd,
1988 ls_iuser_cust TYPE crmt_iuser_b2c_cust,
1989 ls_reference TYPE bapirefus,
1990 ls_refuser TYPE bapibname,
1991 ls_address TYPE bapiaddr3,
1992 lv_contact_guid TYPE bu_partner_guid,
1993 lv_personid TYPE personid,
1994 ls_defaults TYPE bapidefaul,
1995 lv_userid TYPE syuname,
1996 lt_return TYPE bapiret2_t,
1997 ls_return TYPE bapiret2,
1998
1999 ls_bus000_eew TYPE bus000_eew,
2000 ls_bus000_eew_x TYPE bus000_eew_x,
2001
2002 ls_user_defaults TYPE zbp_user_dflt_c.
2003
2004 FIELD-SYMBOLS : <lv_data> TYPE ANY.
2005
2006
2007 CHECK is_isalogin-alias IS NOT INITIAL.
2008
2009 IF is_isalogin-password IS INITIAL.
2010* Generate a new password.
2011 CALL FUNCTION 'RSEC_GENERATE_PASSWORD'
2012 EXPORTING
2013 alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
2014 alphabet_length = 26
2015 output_length = 8
2016 IMPORTING
2017 output = lv_password
2018 EXCEPTIONS
2019 some_error = 1.
2020
2021 ls_password-bapipwd = lv_password.
2022
2023 ELSE.
2024 ls_password-bapipwd = is_isalogin-password.
2025 ENDIF.
2026
2027* set required data
2028 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
2029 EXPORTING
2030 input = iv_partner
2031 IMPORTING
2032 output = ls_username-bapibname.
2033
2034 IF is_person_data-per_bpkind = 'DEMO'.
2035 CONCATENATE 'DEMO' iv_partner INTO ls_alias-useralias.
2036 ls_refuser = 'ISAUSER_DEMO'.
2037 ELSE.
2038 ls_alias-useralias = is_isalogin-alias.
2039
2040* determine the referenceuser
2041 CALL FUNCTION 'CRM_IUSER_B2C_CUSTOMIZE_READ'
2042 IMPORTING
2043 es_iuser_b2c_cust = ls_iuser_cust.
2044 IF NOT ls_iuser_cust-refuservar IS INITIAL.
2045 ls_reference = ls_iuser_cust-refuservar.
2046 CALL FUNCTION 'SUSR_INTERNET_REFUSER_VARIABLE'
2047 EXPORTING
2048 refuser_variable = ls_reference
2049 IMPORTING
2050 refuser = ls_reference.
2051 ls_refuser = ls_reference.
2052 ENDIF.
2053
2054
2055 ENDIF.
2056
2057 ls_address-firstname = is_person_data-name_first.
2058 ls_address-lastname = is_person_data-name_last.
2059
2060
2061* set user defaults based on customizing
2062 LOOP AT gt_user_defaults
2063 INTO ls_user_defaults.
2064 UNASSIGN <lv_data>.
2065 ASSIGN COMPONENT ls_user_defaults-fieldname
2066 OF STRUCTURE ls_defaults TO <lv_data>.
2067 IF <lv_data> IS ASSIGNED.
2068 <lv_data> = ls_user_defaults-value.
2069 ENDIF.
2070 ENDLOOP.
2071
2072
2073* Create new B2B Iuser
2074 CALL FUNCTION 'COM_BPUS_INTERNETUSER_CREATE'
2075 EXPORTING
2076 is_alias = ls_alias
2077 is_username = ls_username
2078 is_password = ls_password
2079 is_referenceuser = ls_refuser
2080 is_address = ls_address
2081 iv_businesspartner = iv_partner
2082 is_defaults = ls_defaults
2083 IMPORTING
2084 es_username = ls_username
2085 es_password = ls_password
2086 TABLES
2087 et_return = lt_return
2088 EXCEPTIONS
2089 alias_already_exists = 1
2090 user_already_exists = 2
2091 username_generate_error = 3
2092 user_create_error = 4
2093 password_change_error = 5
2094 user_lock_error = 6
2095 internal_error = 7
2096 password_generate_error = 8
2097 activitygroups_assign_error = 9
2098 OTHERS = 10.
2099
2100* add error messages
2101 LOOP AT lt_return
2102 INTO ls_return
2103 WHERE type CA 'EAX'.
2104 APPEND ls_return TO et_error_messages.
2105 ENDLOOP.
2106 IF et_error_messages IS NOT INITIAL.
2107 RETURN.
2108 ENDIF.
2109
2110 es_isalogin-alias = ls_alias.
2111 es_isalogin-password = ls_password.
2112
2113
2114* Get contact GUID
2115 CALL FUNCTION 'BUPA_NUMBERS_READ'
2116 EXPORTING
2117 iv_partner = iv_partner
2118 IMPORTING
2119 ev_partner_guid = lv_contact_guid
2120 EXCEPTIONS
2121 OTHERS = 1.
2122
2123* Create central person
2124 lv_userid = ls_username-bapibname.
2125 CALL FUNCTION 'CRM_BUPA_CREATECENTRALPERSON'
2126 EXPORTING
2127 iv_bu_partner_guid = lv_contact_guid
2128 iv_user_id = lv_userid
2129 IMPORTING
2130 ev_person_id = lv_personid
2131 EXCEPTIONS
2132 error_message = 1.
2133
2134* change central data of BP to include password
2135 CALL FUNCTION 'BUPA_CENTRAL_CI_GET_DETAIL'
2136 EXPORTING
2137 iv_partner = iv_partner
2138 IMPORTING
2139 es_bus000_eew = ls_bus000_eew.
2140 ls_bus000_eew-zzinitialpas = ls_password-bapipwd.
2141 ls_bus000_eew_x-zzinitialpas = abap_true.
2142 CLEAR : lt_return.
2143 CALL FUNCTION 'BUPA_CENTRAL_CI_CHANGE'
2144 EXPORTING
2145 is_bus000_eew = ls_bus000_eew
2146 is_bus000_eew_x = ls_bus000_eew_x
2147 IMPORTING
2148 et_return = lt_return.
2149
2150* add error messages
2151 LOOP AT lt_return
2152 INTO ls_return
2153 WHERE type CA 'EAX'.
2154 APPEND ls_return TO et_error_messages.
2155 ENDLOOP.
2156 IF et_error_messages IS NOT INITIAL.
2157 RETURN.
2158 ENDIF.
2159
2160 ENDMETHOD. "add_internetuser
2161
2162 METHOD commit.
2163
2164 DATA : ls_return TYPE bapiret2.
2165
2166 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
2167 DESTINATION 'NONE'
2168 KEEPING LOGICAL UNIT OF WORK
2169 EXPORTING
2170 wait = abap_true
2171 IMPORTING
2172 return = ls_return.
2173
2174 ENDMETHOD. "commit
2175
2176
2177 METHOD rollback.
2178
2179 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
2180 DESTINATION 'NONE'
2181 KEEPING LOGICAL UNIT OF WORK.
2182
2183 ENDMETHOD. "rollback
2184
2185ENDCLASS. "lcl_partner_service IMPLEMENTATION