Guest User

Untitled

a guest
May 28th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 73.47 KB | None | 0 0
  1. *"* local class implementation for public class
  2. *"* use this source file for the implementation part of
  3. *"* local helper classes
  4.  
  5. CLASS 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.  
  529. ENDCLASS. "lcl_1o_service IMPLEMENTATION
  530.  
  531.  
  532. *----------------------------------------------------------------------*
  533. * CLASS lcl_partner_service IMPLEMENTATION
  534. *----------------------------------------------------------------------*
  535. *
  536. *----------------------------------------------------------------------*
  537. CLASS 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.  
  2185. ENDCLASS. "lcl_partner_service IMPLEMENTATION
Add Comment
Please, Sign In to add comment