Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

how to avoid using bapi_commit inside a loop .

Former Member
0 Likes
1,018

Hi ,

Need a help.

This is a program for uploading business partners in CRM.

The basic logic of the program is as below:

- There are two types of records in the upload file – new/ old ones to be updated

- A new record is identified by checking if a BP exits based on the cust id

- In case it is a new record certain BAPI’s are called to create a new BP, else the address details, identification etc are updated for the existing one.

- SQL analysis of the program showed that the maximum amount of time is taken in INSERT/UPDTAE/COMMIT processes.

When we raised the issue with SAP , they stated that the problem occurs due to the very high no of BAPI_COMMIT calls which is within the loop.

The standard BAPI available allows passing of one record at a time. Hence passing multiple records at a time and a single commit did not seem feasible.

Also while updating since there are different BAPI’s for address and identification it is being called in a sequence and commit issued after each. If commit is excluded it gives a locking error since the first BAPI tends to lock the record and does not allow subsequent BAPI call

kindly suggest me with a solution of using a less commit for updating series of records.

The code is as follows:

&----


*& Report ZBP_BDCP_ACCTRNSDATA_UPLOAD *

*& *

&----


*& Created By : Radhu Shankar.G *

*& Purpose : Program to Create Investors with the transaction *

*& data received from the De-dupe Software. *

*& Note : Can be Executed or scheduled only in Background *

&----


REPORT zbp_bdcp_acctrnsdata_upload LINE-SIZE 255 LINE-COUNT 65 NO STANDARD PAGE HEADING

MESSAGE-ID zcrm_upload.

TABLES : bbp_iu01.

----


  • Selection Screen

----


SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001.

PARAMETERS: p_file TYPE string LOWER CASE OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK blk1.

SELECTION-SCREEN: BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002.

SELECT-OPTIONS:s_email FOR bbp_iu01-email NO INTERVALS.

SELECTION-SCREEN: END OF BLOCK blk2.

SELECTION-SCREEN: BEGIN OF BLOCK blk3 WITH FRAME TITLE text-003.

SELECTION-SCREEN COMMENT /1(72) text-004.

SELECTION-SCREEN COMMENT /1(72) text-006.

SELECTION-SCREEN COMMENT /1(72) text-007.

SELECTION-SCREEN COMMENT /1(72) text-005.

SELECTION-SCREEN: END OF BLOCK blk3.

----


  • Data Declaration

----


  • Main Upload structure and internal table

DATA : BEGIN OF i_main,

cust_id TYPE bu_bpext, " Customer ID

inv_type_code TYPE crmt_mktpfchr_atvalue, " Investor Type Code

insti_tag TYPE crmt_mktpfchr_atvalue, " Retail/Instituitional Tag

name TYPE char120, " Name

address1 TYPE ad_strspp1, " Address1

address2 TYPE ad_strspp2, " Address2

address3 TYPE ad_street, " Address3

city TYPE ad_city1, " City

state TYPE t005u-bezei, " Region/State

country TYPE landx50, " Country

pin_code TYPE ad_pstcd1, " Pin Code

off_phone1 TYPE ad_tlnmbr, " Office Telephone Number1

off_phone2 TYPE ad_tlnmbr, " Office Telephone Number2

res_phone1 TYPE ad_tlnmbr, " Residence Telephone Number1

res_phone2 TYPE ad_tlnmbr, " Residence Telephone Number1

mobile TYPE ad_mbnmbr1, " Mobile Number

email TYPE ad_smtpadr, " Email ID

birth_date TYPE bu_birthdt, " Birth Date

pan_no TYPE bu_id_number, " Pan Number

lob TYPE crmt_mktpfchr_atvalue, " Line of Business

fam_tag TYPE bu_id_number, " FAM Tag Number

mod_date TYPE sy-datum, " Modified Date

END OF i_main.

DATA : it_main LIKE i_main OCCURS 0 WITH HEADER LINE.

  • Error file structure and internal table

DATA : BEGIN OF i_error,

cust_id TYPE bu_bpext, " Customer ID

inv_type_code TYPE crmt_mktpfchr_atvalue, " Investor Type Code

insti_tag TYPE crmt_mktpfchr_atvalue, " Retail/Instituitional Tag

name TYPE char120, " Name

address1 TYPE ad_strspp1, " Address1

address2 TYPE ad_strspp2, " Address2

address3 TYPE ad_street, " Address3

city TYPE ad_city1, " City

state TYPE t005u-bezei, " Region/State

country TYPE landx50, " Country

pin_code TYPE ad_pstcd1, " Pin Code

off_phone1 TYPE ad_tlnmbr, " Office Telephone Number1

off_phone2 TYPE ad_tlnmbr, " Office Telephone Number2

res_phone1 TYPE ad_tlnmbr, " Residence Telephone Number1

res_phone2 TYPE ad_tlnmbr, " Residence Telephone Number1

mobile TYPE ad_mbnmbr1, " Mobile Number

email TYPE ad_smtpadr, " Email ID

birth_date TYPE bu_birthdt, " Birth Date

pan_no TYPE bu_id_number, " Pan Number

lob TYPE crmt_mktpfchr_atvalue, " Line of Business

fam_tag TYPE bu_id_number, " FAM Tag Number

mod_date TYPE sy-datum, " Modified Date

bp TYPE bapibus1006_head-bpartner, " BP

recno(4) TYPE c, " Record No

message(255) TYPE c, " Error Message

END OF i_error.

DATA : it_error LIKE i_error OCCURS 0 WITH HEADER LINE.

  • BP Telephone, Email & Role Details

DATA : w_bp_tel TYPE bapiadtel,

it_bp_tel TYPE bapiadtel OCCURS 0 WITH HEADER LINE,

it_bp_tel1 TYPE bapiadtel OCCURS 0 WITH HEADER LINE,

it_bp_email TYPE bapiadsmtp OCCURS 0 WITH HEADER LINE,

it_bp_email1 TYPE bapiadsmtp OCCURS 0 WITH HEADER LINE,

it_bapicomrem TYPE STANDARD TABLE OF bapicomrem WITH HEADER LINE,

it_bapicomrem_x TYPE STANDARD TABLE OF bapicomrex WITH HEADER LINE,

it_tel_x TYPE STANDARD TABLE OF bapiadtelx WITH HEADER LINE,

it_email_x TYPE STANDARD TABLE OF bapiadsmtx WITH HEADER LINE,

it_role TYPE bapibusisb990_bproles OCCURS 0 WITH HEADER LINE,

it_role_cp TYPE bapibusisb990_bproles OCCURS 0 WITH HEADER LINE.

  • BP Identication Details

DATA: BEGIN OF it_identification OCCURS 0,

idcategory TYPE bapibus1006_identification_key-identificationcategory,

idnumber TYPE bapibus1006_identification_key-identificationnumber,

END OF it_identification.

DATA : w_identification TYPE bapibus1006_identification.

  • BP Marketing Attributes

DATA : BEGIN OF it_crmt OCCURS 0,

crmt TYPE crmt_mktprof_keys-profile_template_id,

END OF it_crmt.

DATA : it_crmt1 TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,

it_crmt2 TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,

it_crmt3 TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,

it_crmt4 TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,

it_crmt5 TYPE STANDARD TABLE OF crmt_mktprof_comw WITH HEADER LINE,

it_bp_ret TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.

  • BP Basic Details

DATA : v_partn_cat TYPE bapibus1006_head-partn_cat,

w_central TYPE bapibus1006_central,

w_central_x TYPE bapibus1006_central_x,

w_central_org TYPE bapibus1006_central_organ,

w_central_per TYPE bapibus1006_central_person,

w_central_group TYPE bapibus1006_central_group,

w_centralorg_x TYPE bapibus1006_central_organ_x,

w_centralperson_x TYPE bapibus1006_central_person_x,

w_centralgrp_x TYPE bapibus1006_central_group_x,

w_address TYPE bapibus1006_address,

w_addr_x TYPE bapibus1006_address_x,

v_bp TYPE bapibus1006_head-bpartner.

  • Declaration for Duplication Check

DATA : w_zacc_address TYPE zacc_address,

g_dup_status TYPE i.

DATA : it_dup_bp TYPE STANDARD TABLE OF zbuspartner WITH HEADER LINE.

CONSTANTS: c_pan TYPE bu_id_type VALUE 'ZID003',

c_fam_tag TYPE bu_id_type VALUE 'ZID011',

c_cust TYPE bu_id_type VALUE 'ZID009'.

  • Other Declarations

DATA : v_inv_type TYPE crmt_mktpfchr_atvalue, " Investor Type Code

v_file TYPE string,

v_firstname TYPE bu_nameor1,

v_filename1(14) TYPE c,

v_filename2(14) TYPE c,

v_lines TYPE int4,

v_cat TYPE bu_type,

recno TYPE int4,

loopno TYPE int4,

it_iden_ret TYPE bapiret2 OCCURS 0,

it_attr_ret TYPE bapiret2 OCCURS 0,

it_role_ret TYPE bapiret2 OCCURS 0,

wa_iden_ret TYPE bapiret2,

wa_attr_ret TYPE bapiret2,

it_iden_flag TYPE c,

it_attr_flag TYPE c,

flag_central TYPE c,

flag_addr TYPE c,

flag_bp TYPE c,

flag_suc TYPE c,

flag_exist TYPE c,

flag_exit TYPE c,

g_bp_msg TYPE string,

g_bp_msg1 TYPE string.

DATA : BEGIN OF i_success,

rec TYPE int4, "Record

name TYPE bu_nameor1, "Name

bp TYPE bapibus1006_head-bpartner, "Business Partner

END OF i_success,

it_success LIKE i_success OCCURS 0 WITH HEADER LINE,

it_upd_success LIKE i_success OCCURS 0 WITH HEADER LINE.

  • Data Declaration for converting spool request to PDF and to trigger mail

DATA : gd_recsize TYPE i.

  • Spool IDs

TYPES : BEGIN OF t_tbtcp.

INCLUDE STRUCTURE tbtcp.

TYPES : END OF t_tbtcp.

DATA : it_tbtcp TYPE STANDARD TABLE OF t_tbtcp INITIAL SIZE 0,

wa_tbtcp TYPE t_tbtcp.

  • Job Runtime Parameters

DATA : gd_eventid LIKE tbtcm-eventid,

gd_eventparm LIKE tbtcm-eventparm,

gd_external_program_active LIKE tbtcm-xpgactive,

gd_jobcount LIKE tbtcm-jobcount,

gd_jobname LIKE tbtcm-jobname,

gd_stepcount LIKE tbtcm-stepcount,

gd_error TYPE sy-subrc,

gd_reciever TYPE sy-subrc.

DATA : w_recsize TYPE i.

DATA : gd_subject LIKE sodocchgi1-obj_descr,

it_mess_bod LIKE solisti1 OCCURS 0 WITH HEADER LINE,

it_mess_att LIKE solisti1 OCCURS 0 WITH HEADER LINE,

gd_sender_type LIKE soextreci1-adr_typ,

gd_attachment_desc TYPE so_obj_nam,

gd_attachment_name TYPE so_obj_des.

  • Spool to PDF conversions

DATA : gd_spool_nr LIKE tsp01-rqident,

gd_destination LIKE rlgrap-filename,

gd_bytecount LIKE tst01-dsize,

gd_buffer TYPE string.

  • Binary store for PDF

DATA : BEGIN OF it_pdf_output OCCURS 0.

INCLUDE STRUCTURE tline.

DATA : END OF it_pdf_output.

DATA : v_email1 TYPE somlreci1-receiver,

v_sender TYPE somlreci1-receiver.

CONSTANTS: c_no(1) TYPE c VALUE ' ',

c_device(4) TYPE c VALUE 'LOCL',

c_delspl TYPE c VALUE 'X'.

DATA : BEGIN OF result OCCURS 0,

line(100) TYPE c,

END OF result.

DATA:i_id_tab TYPE STANDARD TABLE OF bapibus1006_id_details WITH HEADER LINE.

  • eliminting the error for convt page error

data: g_spl type c value ''.

  • eliminting the error for convt page error

----


  • Initialization

----


  • Renaming the target file daily

CONCATENATE '_' sy-datum '.txt' INTO v_filename1.

CONCATENATE '_' sy-datum '.TXT' INTO v_filename2.

----


  • START-OF-SELECTION

----


START-OF-SELECTION.

SELECT COUNT(*) FROM zbp_tax_status.

IF sy-subrc <> 0.

SKIP 2.

WRITE:/ text-011.

STOP.

ENDIF.

REFRESH : it_main.

  • Uploading the file from either presentatinon layer or application server

PERFORM file_upload.

  • Creating the BP number and assigning & adding up other attributes

LOOP AT it_main.

PERFORM data_fill. " Filling up global structures & variables

  • IF v_bp IS INITIAL.

  • PERFORM duplication_check. " Duplication check

  • ENDIF.

PERFORM bp_creation. " BP Creation

PERFORM return_fill. " Filling up Return Tables

CLEAR : v_bp, it_main, flag_exit, g_dup_status, it_identification, it_crmt, it_crmt1, it_crmt2, it_crmt3, it_crmt4, it_crmt5,

w_bp_tel,it_bp_tel,it_bp_tel1,it_bp_email,it_bp_email1,it_tel_x,it_email_x,w_addr_x,w_centralorg_x,w_centralperson_x,

w_centralgrp_x,flag_addr,flag_central,it_iden_flag,it_attr_flag,it_bapicomrem,w_central,w_central_x, v_inv_type,it_bapicomrem_x,

w_central_org,w_central_per,w_central_group,flag_bp,flag_suc,flag_exist,it_bp_ret,g_bp_msg,g_bp_msg1,v_cat,wa_attr_ret.

REFRESH :it_identification, it_crmt, it_crmt1, it_crmt2, it_crmt3, it_crmt4, it_crmt5,it_bapicomrem,

it_bp_tel,it_bp_tel1,it_bp_email,it_bp_email1,it_tel_x,it_email_x,it_bp_ret,it_bapicomrem_x.

ENDLOOP.

  • Downloading the file to be reprocessed to the application server

IF it_error[] IS NOT INITIAL.

PERFORM error_file_download.

ENDIF.

  • Constructing the Return Messages for the Job

PERFORM return_messages. " Return Message Construction

  • Converting the return messages into PDF file and trigerring a mail notification

IF sy-batch EQ 'X'.

PERFORM get_job_details.

PERFORM obtain_spool_id.

PERFORM convert_spool_to_pdf.

PERFORM process_email.

PERFORM trigger_email.

ENDIF.

&----


*& Form file_upload

&----


FORM file_upload .

  • Data declatration

DATA: l_filestr TYPE string.

CLASS cl_abap_char_utilities DEFINITION LOAD.

CONSTANTS: con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.

REPLACE '.txt' WITH v_filename1 INTO p_file .

REPLACE '.TXT' WITH v_filename2 INTO p_file .

MOVE p_file TO v_file.

IF sy-batch EQ 'X'.

  • Uploading the file from application server if the job is scheduled in background

OPEN DATASET p_file FOR INPUT IN TEXT MODE ENCODING DEFAULT

  • eliminting the error for convt page error

IGNORING CONVERSION ERRORS REPLACEMENT CHARACTER g_spl.

  • eliminting the error for convt page error

IF sy-subrc = 0.

DO.

READ DATASET p_file INTO l_filestr.

IF sy-subrc <> 0.

EXIT.

ELSE.

CLEAR it_main.

SPLIT l_filestr AT con_tab INTO:

it_main-cust_id it_main-inv_type_code

it_main-insti_tag it_main-name

it_main-address1 it_main-address2

it_main-address3 it_main-city

it_main-state it_main-country

it_main-pin_code it_main-off_phone1

it_main-off_phone2 it_main-res_phone1

it_main-res_phone2 it_main-mobile

it_main-email it_main-birth_date

it_main-pan_no it_main-lob

it_main-fam_tag it_main-mod_date.

APPEND it_main.

ENDIF.

ENDDO.

ELSE.

WRITE : / 'The file',

p_file,

'is not found.'.

STOP.

ENDIF.

CLOSE DATASET p_file.

ELSE.

WRITE : / 'The Program can only be executed in the background.'.

STOP.

ENDIF.

CLEAR : l_filestr, it_main.

ENDFORM. " file_upload

&----


*& Form data_fill

&----


FORM data_fill .

  • Filling up Partner Category (v_Partn_cat) ,workarea (w_central), workarea (w_central_org) & workarea (w_central_per)

SELECT SINGLE bp_category tax_status FROM zbp_tax_status

INTO (v_partn_cat,v_inv_type)

WHERE inv_code EQ it_main-inv_type_code.

  • Filling up the Authorization Group

IF it_main-lob EQ 'M' AND it_main-insti_tag EQ 'N'.

w_central-authorizationgroup = 'ZMFR'.

ELSEIF it_main-lob EQ 'M' AND it_main-insti_tag EQ 'Y'.

w_central-authorizationgroup = 'ZMFI'.

ELSEIF it_main-lob EQ 'P' AND it_main-insti_tag EQ 'N'.

w_central-authorizationgroup = 'ZPMR'.

ELSEIF it_main-lob EQ 'P' AND it_main-insti_tag EQ 'Y'.

w_central-authorizationgroup = 'ZPMI'.

ELSEIF it_main-lob EQ 'A' AND it_main-insti_tag EQ 'N'.

w_central-authorizationgroup = 'ZBOR'.

ELSEIF it_main-lob EQ 'A' AND it_main-insti_tag EQ 'Y'.

w_central-authorizationgroup = 'ZBOI'.

ENDIF.

  • Filling up workarea (w_address)

IF it_main-address1 IS NOT INITIAL.

MOVE : it_main-address1 TO w_address-str_suppl1,

it_main-address1 TO w_zacc_address-address1,

'X' TO w_addr_x-str_suppl1 .

ENDIF.

IF it_main-address2 IS NOT INITIAL.

MOVE : it_main-address2 TO w_address-str_suppl2,

it_main-address2 TO w_zacc_address-address2,

'X' TO w_addr_x-str_suppl2 .

ENDIF.

IF it_main-address3 IS NOT INITIAL.

MOVE : it_main-address3 TO w_address-street,

it_main-address3 TO w_zacc_address-address3,

'X' TO w_addr_x-street.

ENDIF.

IF it_main-city IS NOT INITIAL.

MOVE : it_main-city TO w_address-city,

it_main-city TO w_zacc_address-city,

'X' TO w_addr_x-city.

ENDIF.

IF it_main-pin_code IS NOT INITIAL.

MOVE : it_main-pin_code TO w_address-postl_cod1,

'X' TO w_addr_x-postl_cod1.

TRANSLATE w_address-postl_cod1 TO UPPER CASE.

ENDIF.

IF it_main-country IS NOT INITIAL.

MOVE : 'X' TO w_addr_x-country.

ENDIF.

IF it_main-state IS NOT INITIAL.

MOVE: 'X' TO w_addr_x-region.

ENDIF.

  • Picking up Country & State Codes

SELECT SINGLE land1 FROM t005t INTO w_address-country

WHERE spras EQ 'E'

AND landx50 EQ it_main-country.

IF sy-subrc EQ 0.

SELECT SINGLE bland FROM t005u INTO w_address-region

WHERE spras EQ 'E'

AND land1 EQ w_address-country

AND bezei EQ it_main-state.

IF sy-subrc NE 0.

w_address-region = 'ZZ'.

ENDIF.

ELSE.

w_address-country = 'ZZ'.

SELECT SINGLE bland FROM t005u INTO w_address-region

WHERE spras EQ 'E'

AND land1 EQ w_address-country

AND bezei EQ it_main-state.

IF sy-subrc NE 0.

w_address-region = 'ZZ'.

ENDIF.

ENDIF.

w_zacc_address-country = w_address-country.

w_zacc_address-state = w_address-region.

  • Filling up the BP Role Detail

it_role-partnerrole = 'Z1INVS'.

APPEND it_role.

  • Finding out the BP number from the client ID

IF it_main-cust_id IS NOT INITIAL.

SELECT SINGLE partner FROM but0id INTO v_bp

WHERE type EQ 'ZID009'

AND idnumber EQ it_main-cust_id.

IF sy-subrc = 0.

SELECT SINGLE type FROM but000 INTO v_cat

WHERE partner = v_bp.

PERFORM name_processing USING v_cat.

ENDIF.

ENDIF.

IF v_bp IS INITIAL.

PERFORM name_processing USING v_partn_cat. " Processing the Name & Title depending on partner category

  • Filling up the Identication Number Details

IF it_main-cust_id IS NOT INITIAL. " Customer ID

it_identification-idcategory = 'ZID009'.

it_identification-idnumber = it_main-cust_id.

APPEND it_identification.

CLEAR it_identification.

ENDIF.

IF it_main-pan_no IS NOT INITIAL. " Pan Number

it_identification-idcategory = 'ZID003'.

it_identification-idnumber = it_main-pan_no.

APPEND it_identification.

CLEAR it_identification.

ENDIF.

IF it_main-fam_tag IS NOT INITIAL. " Family Tag Number

it_identification-idcategory = 'ZID011'.

it_identification-idnumber = it_main-fam_tag.

APPEND it_identification.

CLEAR it_identification.

ENDIF.

    • Filling up the Marketing Attributes

  • IF v_inv_type IS NOT INITIAL. " Tax status

  • it_crmt1-atname = 'TAX_STATUS'.

  • it_crmt1-atwrt = v_inv_type.

  • APPEND it_crmt1.

  • CLEAR : it_crmt1.

  • ENDIF.

*

  • IF it_main-lob IS NOT INITIAL. " Product Tag

  • it_crmt1-atname = 'LOB'.

  • IF it_main-lob EQ 'M'.

  • it_crmt1-atwrt = 'MF'.

  • ELSEIF it_main-lob EQ 'P'.

  • it_crmt1-atwrt = 'PMS'.

  • ELSEIF it_main-lob EQ 'A'.

  • it_crmt1-atwrt = 'BOTH'.

  • ENDIF.

  • APPEND it_crmt1.

  • CLEAR : it_crmt1.

  • ENDIF.

*

  • IF it_main-insti_tag IS NOT INITIAL. " Retail/Instituitional Tag

  • it_crmt1-atname = 'ORGANISATION_STRUCTURE'.

  • IF it_main-insti_tag EQ 'N'.

  • it_crmt1-atwrt = 'RETAIL'.

  • ELSEIF it_main-insti_tag EQ 'Y'.

  • it_crmt1-atwrt = 'INSTITUTIONAL'.

  • ELSEIF it_main-insti_tag EQ 'F'.

  • it_crmt1-atwrt = 'INTERNATIONAL'.

  • ENDIF.

  • APPEND it_crmt1.

  • CLEAR : it_crmt1.

  • ENDIF.

*

  • it_crmt2-atname = 'VIP'.

  • it_crmt2-atwrt = 'NOT CLASSIFIED'.

  • APPEND it_crmt2.

  • CLEAR : it_crmt2.

*

  • it_crmt3-atname = 'PRIORITY'.

  • it_crmt3-atwrt = 'NOT CLASSIFIED'.

  • APPEND it_crmt3.

  • CLEAR : it_crmt3.

*

  • it_crmt4-atname = 'CONTACTBLE'.

  • it_crmt4-atwrt = 'NOT CLASSIFIED'.

  • APPEND it_crmt4.

  • CLEAR : it_crmt4.

*

  • it_crmt5-atname = 'SOURCE'.

  • it_crmt5-atwrt = 'CAMS'.

  • APPEND it_crmt5.

  • CLEAR : it_crmt5.

*

  • it_crmt-crmt = 'CENTALISED_CLF_INV'.

  • APPEND it_crmt.

  • it_crmt-crmt = 'GENERAL_CLF_INV'.

  • APPEND it_crmt.

  • it_crmt-crmt = 'MF_CLF_INV'.

  • APPEND it_crmt.

  • it_crmt-crmt = 'PMS_CLF_INV'.

  • APPEND it_crmt.

  • it_crmt-crmt = 'SOURCE'.

  • APPEND it_crmt.

  • CLEAR it_crmt-crmt.

ENDIF.

  • For Return Message

recno = recno + 1.

ENDFORM. " data_fill

&----


*& Form duplication_check

&----


FORM duplication_check .

DATA : l_lines TYPE i.

IF v_firstname IS NOT INITIAL.

CALL FUNCTION 'ZACC_DUPLICATIONCHECK'

EXPORTING

role = 'Z1INVS'

firstname = v_firstname

pan_no = it_main-pan_no

mobile = it_main-mobile

email = it_main-email

address = w_zacc_address

partnercategory = v_partn_cat

IMPORTING

status = g_dup_status

TABLES

buspartner = it_dup_bp.

DESCRIBE TABLE it_dup_bp LINES l_lines.

IF l_lines EQ 1.

IF g_dup_status EQ 1.

READ TABLE it_dup_bp INDEX 1.

MOVE it_dup_bp-partner TO v_bp.

ELSEIF g_dup_status EQ 2.

flag_exit = 'X'.

ENDIF.

ELSEIF l_lines GT 1.

flag_exit = 'X'.

ENDIF.

ENDIF.

CLEAR : l_lines, v_firstname.

ENDFORM. " duplication_check

&----


*& Form name_processing

&----


FORM name_processing USING uv_cat TYPE bu_type.

IF it_main-name IS NOT INITIAL.

  • If category is Person

IF uv_cat EQ 1.

CALL FUNCTION 'ZGET_NAME_FROM_STRING'

EXPORTING

name = it_main-name

IMPORTING

first = w_central_per-firstname

middle = w_central_per-middlename

last = w_central_per-lastname.

w_centralperson_x-firstname = 'X'.

w_centralperson_x-middlename = 'X'.

w_centralperson_x-lastname = 'X'.

w_centralperson_x-birthdate = 'X'.

MOVE : it_main-birth_date TO w_central_per-birthdate,

w_central_per-firstname TO v_firstname.

ELSEIF uv_cat EQ 2.

  • If category is organisation

CALL FUNCTION 'ZGET_NAME_FROM_STRING'

EXPORTING

name = it_main-name

IMPORTING

first = w_central_org-name2

middle = w_central_org-name1

last = w_central_org-name3.

w_centralorg_x-name1 = 'X'.

w_centralorg_x-name2 = 'X'.

w_centralorg_x-name3 = 'X'.

MOVE w_central_org-name2 TO v_firstname.

ELSEIF uv_cat EQ 3.

  • If category is group

CALL FUNCTION 'ZGET_NAME_FROM_STRING'

EXPORTING

name = it_main-name

IMPORTING

first = w_central_group-namegroup2

middle = w_central_group-namegroup1.

w_centralgrp_x-namegroup1 = 'X'.

w_centralgrp_x-namegroup2 = 'X'.

MOVE w_central_group-namegroup2 TO v_firstname.

ENDIF.

MOVE : it_main-name+0(8) TO w_central-searchterm1,

'X' TO w_central_x-searchterm1.

ENDIF.

ENDFORM. " name_processing

&----


*& Form bp_creation

&----


FORM bp_creation.

DATA:l_identification TYPE bapibus1006_identification_key-identificationnumber.

  • BP Creation

IF v_bp IS INITIAL.

  • Filling up the Telephone Details

MOVE : w_address-country TO w_bp_tel-country.

IF it_main-off_phone1 IS NOT INITIAL. " Office Telephone1

w_bp_tel-r_3_user = '1'.

w_bp_tel-telephone = it_main-off_phone1.

APPEND w_bp_tel TO it_bp_tel.

CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'OFFICE PHONE1'.

APPEND it_bapicomrem.

ENDIF.

IF it_main-off_phone2 IS NOT INITIAL. " Office Telephone2

w_bp_tel-telephone = it_main-off_phone2.

APPEND w_bp_tel TO it_bp_tel.

CLEAR : w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'OFFICE PHONE2'.

APPEND it_bapicomrem.

ENDIF.

IF it_main-res_phone1 IS NOT INITIAL. " Residence Telephone1

w_bp_tel-telephone = it_main-res_phone1.

APPEND w_bp_tel TO it_bp_tel.

CLEAR : w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'RESIDENCE PHONE1'.

APPEND it_bapicomrem.

ENDIF.

IF it_main-res_phone2 IS NOT INITIAL. " Residence Telephone2

w_bp_tel-telephone = it_main-res_phone2.

APPEND w_bp_tel TO it_bp_tel.

CLEAR : w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'RESIDENCE PHONE2'.

APPEND it_bapicomrem.

ENDIF.

IF it_main-mobile IS NOT INITIAL. " Mobile Number

w_bp_tel-r_3_user = '3'.

w_bp_tel-telephone = it_main-mobile.

APPEND w_bp_tel TO it_bp_tel.

CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.

ENDIF.

  • Filling up the E-Mail Details

IF it_main-email IS NOT INITIAL. " E-mail1

it_bp_email-e_mail = it_main-email.

APPEND it_bp_email.

CLEAR it_bp_email.

ENDIF.

  • BAPI for BP creation

CALL FUNCTION 'BAPI_BUPA_FS_CREATE_FROM_DATA2'

EXPORTING

partnercategory = v_partn_cat

centraldata = w_central

centraldataperson = w_central_per

centraldataorganization = w_central_org

centraldatagroup = w_central_group

addressdata = w_address

IMPORTING

businesspartner = v_bp

TABLES

telefondata = it_bp_tel

communicationnotes = it_bapicomrem

e_maildata = it_bp_email

roles = it_role

return = it_bp_ret.

IF v_bp IS NOT INITIAL.

flag_bp = 'X'.

ENDIF.

  • Commiting the transaction

PERFORM transaction_commit.

  • To add Identification details to BP

PERFORM add_details.

CLEAR : v_partn_cat, w_central, w_central_per, w_central_org, it_bp_tel, it_bp_email, it_role.

REFRESH : it_bp_tel, it_bp_email, it_role.

ELSE.

flag_exist = 'X'.

  • If BP exists,address,communication and ID details will be updated

CALL FUNCTION 'BAPI_BUPA_CENTRAL_CHANGE'

EXPORTING

businesspartner = v_bp

centraldata = w_central

centraldataperson = w_central_per

centraldataorganization = w_central_org

centraldatagroup = w_central_group

centraldata_x = w_central_x

centraldataperson_x = w_centralperson_x

centraldataorganization_x = w_centralorg_x

centraldatagroup_x = w_centralgrp_x

TABLES

return = it_bp_ret.

READ TABLE it_bp_ret WITH KEY type = 'E'.

IF sy-subrc = 0.

flag_central = 'E'.

g_bp_msg = it_bp_ret-message.

CLEAR:it_bp_ret.

REFRESH:it_bp_ret.

ELSE.

flag_suc = 'X'.

ENDIF.

PERFORM transaction_commit.

  • To get the existing communication details

CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL'

EXPORTING

businesspartner = v_bp

TABLES

bapiadtel = it_bp_tel1

bapiadsmtp = it_bp_email1.

LOOP AT it_bp_tel1 WHERE r_3_user = '1' OR r_3_user = ' '.

it_bp_tel-consnumber = it_bp_tel1-consnumber.

it_tel_x-updateflag = 'D'.

APPEND:it_bp_tel,

it_tel_x.

CLEAR: it_bp_tel,

it_tel_x.

ENDLOOP.

IF it_main-mobile IS NOT INITIAL .

LOOP AT it_bp_tel1 WHERE r_3_user = '2' OR r_3_user = '3'.

it_bp_tel-consnumber = it_bp_tel1-consnumber.

it_tel_x-updateflag = 'D'.

APPEND:it_bp_tel,

it_tel_x.

CLEAR: it_bp_tel,

it_tel_x.

ENDLOOP.

ENDIF.

*Updating communication details

IF it_main-off_phone1 IS NOT INITIAL. " Office Telephone1

w_bp_tel-r_3_user = '1'.

w_bp_tel-telephone = it_main-off_phone1.

it_tel_x-telephone = 'I'.

it_tel_x-updateflag = 'I'.

APPEND:it_tel_x.

CLEAR: it_tel_x.

APPEND w_bp_tel TO it_bp_tel.

CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'OFFICE PHONE1'.

APPEND it_bapicomrem.

it_bapicomrem_x-comm_type = 'I'.

it_bapicomrem_x-langu = 'I'.

it_bapicomrem_x-comm_notes = 'I'.

it_bapicomrem_x-updateflag = 'I'.

APPEND it_bapicomrem_x.

ENDIF.

IF it_main-off_phone2 IS NOT INITIAL. " Office Telephone2

w_bp_tel-telephone = it_main-off_phone2.

APPEND w_bp_tel TO it_bp_tel.

it_tel_x-telephone = 'I'.

it_tel_x-updateflag = 'I'.

APPEND:it_tel_x.

CLEAR:it_tel_x.

CLEAR : w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'OFFICE PHONE2'.

APPEND it_bapicomrem.

it_bapicomrem_x-comm_type = 'I'.

it_bapicomrem_x-langu = 'I'.

it_bapicomrem_x-comm_notes = 'I'.

it_bapicomrem_x-updateflag = 'I'.

APPEND it_bapicomrem_x.

ENDIF.

IF it_main-res_phone1 IS NOT INITIAL. " Residence Telephone1

w_bp_tel-telephone = it_main-res_phone1.

APPEND w_bp_tel TO it_bp_tel.

it_tel_x-telephone = 'I'.

it_tel_x-updateflag = 'I'.

APPEND:it_tel_x.

CLEAR:it_tel_x.

CLEAR : w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'RESIDECE PHONE1'.

APPEND it_bapicomrem.

it_bapicomrem_x-comm_type = 'I'.

it_bapicomrem_x-langu = 'I'.

it_bapicomrem_x-comm_notes = 'I'.

it_bapicomrem_x-updateflag = 'I'.

APPEND it_bapicomrem_x.

ENDIF.

IF it_main-res_phone2 IS NOT INITIAL. " Residence Telephone2

w_bp_tel-telephone = it_main-res_phone2.

APPEND w_bp_tel TO it_bp_tel.

it_tel_x-telephone = 'I'.

it_tel_x-updateflag = 'I'.

APPEND:it_tel_x.

CLEAR:it_tel_x.

CLEAR : w_bp_tel-telephone.

it_bapicomrem-comm_type = 'TEL'.

it_bapicomrem-langu = 'EN'.

it_bapicomrem-comm_notes = 'RESIDECE PHONE2'.

APPEND it_bapicomrem.

it_bapicomrem_x-comm_type = 'I'.

it_bapicomrem_x-langu = 'I'.

it_bapicomrem_x-comm_notes = 'I'.

it_bapicomrem_x-updateflag = 'I'.

APPEND it_bapicomrem_x.

ENDIF.

IF it_main-mobile IS NOT INITIAL. " Mobile Number

w_bp_tel-r_3_user = '3'.

w_bp_tel-telephone = it_main-mobile.

APPEND w_bp_tel TO it_bp_tel.

it_tel_x-telephone = 'I'.

it_tel_x-updateflag = 'I'.

APPEND:it_tel_x.

CLEAR:it_tel_x.

CLEAR : w_bp_tel-r_3_user, w_bp_tel-telephone.

ENDIF.

IF it_main-email IS NOT INITIAL.

LOOP AT it_bp_email1.

it_bp_email-consnumber = it_bp_email1-consnumber.

it_email_x-updateflag = 'D'.

APPEND:it_bp_email,

it_email_x.

ENDLOOP.

it_bp_email-e_mail = it_main-email.

it_email_x-e_mail = 'I'.

it_email_x-updateflag = 'I'.

APPEND:it_bp_email,

it_email_x.

CLEAR:it_bp_email,

it_email_x.

ENDIF.

REFRESH:it_bp_ret.

  • BP Change

CALL FUNCTION 'BAPI_BUPA_ADDRESS_CHANGE'

EXPORTING

businesspartner = v_bp

addressdata = w_address

addressdata_x = w_addr_x

TABLES

bapiadtel = it_bp_tel

bapicomrem = it_bapicomrem

bapiadtel_x = it_tel_x

bapiadsmtp = it_bp_email

bapiadsmt_x = it_email_x

bapicomre_x = it_bapicomrem_x

return = it_bp_ret.

READ TABLE it_bp_ret WITH KEY type = 'E'.

IF sy-subrc = 0.

flag_addr = 'E'.

g_bp_msg1 = it_bp_ret-message.

ELSE.

flag_suc = 'X'.

ENDIF.

PERFORM transaction_commit.

REFRESH it_bp_ret.

IF it_main-pan_no IS NOT INITIAL OR it_main-fam_tag IS NOT INITIAL OR it_main-cust_id IS NOT INITIAL.

  • Retreiving the existing Identification details

PERFORM id_get USING v_bp.

ENDIF.

  • PAN number addition

IF it_main-pan_no IS NOT INITIAL.

CLEAR l_identification.

MOVE it_main-pan_no TO l_identification.

TRANSLATE l_identification TO UPPER CASE.

READ TABLE i_id_tab WITH KEY identificationtype = c_pan.

IF sy-subrc = 0.

  • To remove existing PAN number

PERFORM id_remove USING v_bp c_pan i_id_tab-identificationnumber.

READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_iden_flag = 'E'.

ELSE.

flag_suc = 'X'.

  • Performing transaction commit

PERFORM transaction_commit.

ENDIF.

ENDIF.

CLEAR:it_iden_ret[],it_iden_ret.

  • To add new PAN number

PERFORM id_add USING v_bp c_pan l_identification.

READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_iden_flag = 'E'.

ELSE.

flag_suc = 'X'.

PERFORM transaction_commit.

ENDIF.

ENDIF.

  • Customer ID addition

IF it_main-cust_id IS NOT INITIAL AND ( g_dup_status = 1 ).

CLEAR l_identification.

MOVE it_main-cust_id TO l_identification.

TRANSLATE l_identification TO UPPER CASE.

READ TABLE i_id_tab WITH KEY identificationtype = c_cust.

IF sy-subrc = 0.

  • To remove existing Customer ID

PERFORM id_remove USING v_bp c_cust i_id_tab-identificationnumber.

READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_iden_flag = 'E'.

ELSE.

  • Performing transaction commit

PERFORM transaction_commit.

ENDIF.

ENDIF.

CLEAR:it_iden_ret[],it_iden_ret.

  • To add new Customer ID number

PERFORM id_add USING v_bp c_cust l_identification.

READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_iden_flag = 'E'.

ELSE.

flag_suc ='X'.

PERFORM transaction_commit.

ENDIF.

ENDIF.

    • To add marketing attributes

  • IF it_main-insti_tag IS NOT INITIAL AND it_main-lob IS NOT INITIAL.

  • PERFORM add_makt_attr .

  • ELSE.

  • it_attr_flag = 'E'.

  • ENDIF.

  • Family tag addition

IF it_main-fam_tag IS NOT INITIAL.

CLEAR l_identification.

MOVE it_main-fam_tag TO l_identification.

TRANSLATE l_identification TO UPPER CASE.

READ TABLE i_id_tab WITH KEY identificationtype = c_fam_tag.

IF sy-subrc = 0.

  • To remove the existing family tag

PERFORM id_remove USING v_bp c_fam_tag i_id_tab-identificationnumber.

READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_iden_flag = 'E'.

ELSE.

PERFORM transaction_commit.

ENDIF.

ENDIF.

CLEAR:it_iden_ret[],it_iden_ret.

  • To add new Family Tag

PERFORM id_add USING v_bp c_fam_tag l_identification.

READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_iden_flag = 'E'.

ELSE.

PERFORM transaction_commit.

flag_suc = 'X'.

ENDIF.

ENDIF.

ENDIF.

ENDFORM. " bp_creation

&----


*& Form return_fill

&----


  • Filling up the Return Log Tables

FORM return_fill .

IF flag_exit IS INITIAL.

IF v_bp IS INITIAL.

MOVE-CORRESPONDING it_main TO it_error.

MOVE : recno TO it_error-recno.

READ TABLE it_bp_ret WITH KEY type = 'E'.

IF it_bp_ret-id = 'FSBP_BAPI' AND it_bp_ret-number = '052'.

MOVE text-016 TO it_error-message.

ELSE.

MOVE it_bp_ret-message TO it_error-message.

ENDIF.

CLEAR it_bp_ret-message.

APPEND it_error.

ELSE.

IF it_iden_flag EQ 'E' OR it_attr_flag EQ 'E' OR flag_addr EQ 'E' OR flag_central EQ 'E' OR w_address-country EQ 'ZZ' OR w_address-region EQ 'ZZ'.

MOVE-CORRESPONDING it_main TO it_error.

MOVE : v_bp TO it_error-bp,

recno TO it_error-recno.

IF flag_bp EQ 'X'.

CONCATENATE it_error-message text-017 INTO it_error-message SEPARATED BY space.

ENDIF.

IF flag_suc EQ 'X'.

CONCATENATE it_error-message text-018 INTO it_error-message SEPARATED BY space.

ENDIF.

IF it_iden_flag EQ 'E'.

CONCATENATE it_error-message text-011 INTO it_error-message SEPARATED BY space.

ENDIF.

IF it_attr_flag EQ 'E' .

CONCATENATE it_error-message text-012 INTO it_error-message SEPARATED BY space.

ENDIF.

IF flag_addr EQ 'E'.

CONCATENATE it_error-message text-013 g_bp_msg1 INTO it_error-message SEPARATED BY space.

ENDIF.

IF flag_central EQ 'E'.

CONCATENATE it_error-message text-014 g_bp_msg INTO it_error-message SEPARATED BY space.

ENDIF.

IF w_address-country EQ 'ZZ' OR w_address-region EQ 'ZZ'.

CONCATENATE it_error-message text-015 INTO it_error-message SEPARATED BY space.

ENDIF.

APPEND it_error.

IF ( it_iden_flag NE 'E' AND it_attr_flag NE 'E' AND flag_addr NE 'E' AND flag_central NE 'E' AND flag_exist NE 'X' )

AND ( w_address-country EQ 'ZZ' OR w_address-region EQ 'ZZ' ).

MOVE : v_bp TO it_success-bp,

recno TO it_success-rec,

it_main-name TO it_success-name.

APPEND it_success.

CLEAR it_success.

ELSEIF it_iden_flag NE 'E' AND it_attr_flag NE 'E' AND flag_addr NE 'E' AND flag_central NE 'E' AND flag_exist EQ 'X'

AND ( w_address-country EQ 'ZZ' OR w_address-region EQ 'ZZ' ).

MOVE : v_bp TO it_upd_success-bp,

recno TO it_upd_success-rec,

it_main-name TO it_upd_success-name.

APPEND it_upd_success.

CLEAR it_upd_success.

ENDIF.

ELSEIF it_iden_flag NE 'E' AND it_attr_flag NE 'E' AND flag_addr NE 'E' AND flag_central NE 'E' AND flag_exist NE 'X'.

MOVE : v_bp TO it_success-bp,

recno TO it_success-rec,

it_main-name TO it_success-name.

APPEND it_success.

CLEAR it_success.

ELSEIF it_iden_flag NE 'E' AND it_attr_flag NE 'E' AND flag_addr NE 'E' AND flag_central NE 'E' AND flag_exist EQ 'X' .

MOVE : v_bp TO it_upd_success-bp,

recno TO it_upd_success-rec,

it_main-name TO it_upd_success-name.

APPEND it_upd_success.

CLEAR it_upd_success.

ENDIF.

ENDIF.

ELSE.

MOVE-CORRESPONDING it_main TO it_error.

MOVE : recno TO it_error-recno,

it_main-name TO it_error-name,

v_bp TO it_error-bp.

MOVE 'Error due to more than one duplicate for the BP ( ' TO it_error-message.

LOOP AT it_dup_bp.

CONCATENATE it_error-message it_dup_bp-partner '/' INTO it_error-message.

ENDLOOP.

CONCATENATE it_error-message ' ).' INTO it_error-message.

APPEND it_error.

ENDIF.

CLEAR : it_iden_flag, it_attr_flag, it_main, it_success, it_error, it_dup_bp.

REFRESH : it_bp_ret, it_dup_bp.

ENDFORM. " return_fill

&----


*& Form error_file_download

&----


FORM error_file_download .

DATA : l_filestring TYPE string.

CLASS cl_abap_char_utilities DEFINITION LOAD.

CONSTANTS: con_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.

REPLACE '.txt' WITH '_error.txt' INTO p_file .

REPLACE '.TXT' WITH '_ERROR.TXT' INTO p_file .

OPEN DATASET p_file FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.

LOOP AT it_error.

CONCATENATE it_error-cust_id it_error-inv_type_code

it_error-insti_tag it_error-name

it_error-address1 it_error-address2

it_error-address3 it_error-city

it_error-state it_error-country

it_error-pin_code it_error-off_phone1

it_error-off_phone2 it_error-res_phone1

it_error-res_phone2 it_error-mobile

it_error-email it_error-birth_date

it_error-pan_no it_error-lob

it_error-fam_tag it_error-mod_date

it_error-bp it_error-recno

it_error-message

INTO l_filestring SEPARATED BY con_tab.

TRANSFER l_filestring TO p_file.

CLEAR l_filestring.

ENDLOOP.

CLOSE DATASET p_file.

ENDFORM. " error_file_download

&----


*& Form return_messages

&----


  • To write down the return messages

FORM return_messages.

DATA: l_success_lines TYPE int4,

l_error_lines TYPE int4.

DESCRIBE TABLE it_success LINES l_success_lines.

DESCRIBE TABLE it_error LINES l_error_lines.

SKIP 2.

  • Writing down the number of records processed in the Data Upload Status Report

DESCRIBE TABLE it_main LINES v_lines.

WRITE : / 'File Name:', v_file , 90 ' INPUT RECORDS = ', v_lines.

CLEAR : v_lines.

SKIP 2.

WRITE: / text-019,l_success_lines.

CLEAR l_success_lines.

DESCRIBE TABLE it_upd_success LINES l_success_lines.

WRITE: / text-020,l_success_lines.

WRITE: / text-021,l_error_lines.

IF it_error[] IS NOT INITIAL.

WRITE: / text-022, p_file.

ENDIF.

IF it_success[] IS NOT INITIAL.

SKIP 4.

WRITE:text-023.

WRITE:/'----


'.

SKIP.

WRITE: / '----


'.

WRITE: / 'Successful Records'.

WRITE: / '----


'.

WRITE: /1 text-008,15 text-009,75 text-010.

LOOP AT it_success.

WRITE: /1 it_success-rec CENTERED,

15 it_success-name LEFT-JUSTIFIED,

75 it_success-bp CENTERED.

ENDLOOP.

ENDIF.

IF it_upd_success[] IS NOT INITIAL.

SKIP 2.

WRITE:text-024.

WRITE:/'----


'.

SKIP.

WRITE: /1 text-008,15 text-009,75 text-010.

LOOP AT it_upd_success.

WRITE: /1 it_upd_success-rec CENTERED,

15 it_upd_success-name LEFT-JUSTIFIED,

75 it_upd_success-bp CENTERED.

ENDLOOP.

ENDIF.

  • For Spool request to be converted to PDF

NEW-PAGE.

COMMIT WORK.

NEW-PAGE PRINT OFF.

ENDFORM. " return_messages

&----


*& Form transaction_commit

&----


FORM transaction_commit.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = 'X'.

ENDFORM. " transaction_commit

&----


*& Form get_job_details

&----


FORM get_job_details.

  • Get current job details

CALL FUNCTION 'GET_JOB_RUNTIME_INFO'

IMPORTING

eventid = gd_eventid

eventparm = gd_eventparm

external_program_active = gd_external_program_active

jobcount = gd_jobcount

jobname = gd_jobname

stepcount = gd_stepcount

EXCEPTIONS

no_runtime_info = 1

OTHERS = 2.

ENDFORM. " get_job_details

&----


*& Form obtain_spool_id

&----


  • To obtain the spool ID generated

FORM obtain_spool_id.

CHECK NOT ( gd_jobname IS INITIAL ).

CHECK NOT ( gd_jobcount IS INITIAL ).

SELECT * FROM tbtcp

INTO TABLE it_tbtcp

WHERE jobname = gd_jobname

AND jobcount = gd_jobcount

AND stepcount = gd_stepcount

AND listident <> '0000000000'

ORDER BY jobname

jobcount

stepcount.

READ TABLE it_tbtcp INTO wa_tbtcp INDEX 1.

IF sy-subrc = 0.

gd_spool_nr = wa_tbtcp-listident.

MESSAGE s004 WITH gd_spool_nr.

ELSE.

MESSAGE s005.

ENDIF.

ENDFORM. " obtain_spool_id

&----


*& Form convert_spool_to_pdf

&----


FORM convert_spool_to_pdf.

CALL FUNCTION 'CONVERT_ABAPSPOOLJOB_2_PDF'

EXPORTING

src_spoolid = gd_spool_nr

no_dialog = c_no

dst_device = c_device

IMPORTING

pdf_bytecount = gd_bytecount

TABLES

pdf = it_pdf_output

EXCEPTIONS

err_no_abap_spooljob = 1

err_no_spooljob = 2

err_no_permission = 3

err_conv_not_possible = 4

err_bad_destdevice = 5

user_cancelled = 6

err_spoolerror = 7

err_temseerror = 8

err_btcjob_open_failed = 9

err_btcjob_submit_failed = 10

err_btcjob_close_failed = 11

OTHERS = 12.

CHECK sy-subrc = 0.

  • Transfer the 132-long strings to 255-long strings

LOOP AT it_pdf_output.

TRANSLATE it_pdf_output USING ' ~'.

CONCATENATE gd_buffer it_pdf_output INTO gd_buffer.

ENDLOOP.

TRANSLATE gd_buffer USING '~ '.

DO.

it_mess_att = gd_buffer.

APPEND it_mess_att.

SHIFT gd_buffer LEFT BY 255 PLACES.

IF gd_buffer IS INITIAL.

EXIT.

ENDIF.

ENDDO.

ENDFORM. " convert_spool_to_pdf

&----


*& Form process_email

&----


FORM process_email .

DESCRIBE TABLE it_mess_att LINES gd_recsize.

CHECK gd_recsize > 0.

PERFORM send_email USING v_email1.

ENDFORM. " process_email

&----


*& Form send_email

&----


FORM send_email USING p_email.

  • CHECK NOT ( p_email IS INITIAL ).

REFRESH it_mess_bod.

  • Default subject matter

gd_subject = 'Subject'.

gd_attachment_desc = 'Joblog'.

it_mess_bod = 'Hi,'.

APPEND it_mess_bod.

CLEAR it_mess_bod.

it_mess_bod = ' The batch job which creates Accounts with the transaction data from De-Dupe Software have been Completed.'.

APPEND it_mess_bod.

CLEAR it_mess_bod.

it_mess_bod = ' The joblog have been attached as a PDF file.'.

APPEND it_mess_bod.

CLEAR it_mess_bod.

it_mess_bod = 'Regards,'.

APPEND it_mess_bod.

CLEAR it_mess_bod.

it_mess_bod = 'Job Scheduler'.

APPEND it_mess_bod.

CLEAR it_mess_bod.

APPEND it_mess_bod.

APPEND it_mess_bod.

it_mess_bod = '***********************************This is a system generated mail*************************************'.

APPEND it_mess_bod.

  • If no sender specified - default blank

IF v_sender EQ space.

gd_sender_type = space.

ELSE.

gd_sender_type = 'INT'.

ENDIF.

  • Send file by email as .xls speadsheet

PERFORM send_file_as_email_attachment

TABLES it_mess_bod

it_mess_att

USING p_email

'Joblog for the Account Creation Batch Job'

'PDF'

gd_attachment_name

gd_attachment_desc

v_sender

gd_sender_type

CHANGING gd_error

gd_reciever.

ENDFORM. "send_email

&----


*& Form send_file_as_email_attachment

&----


FORM send_file_as_email_attachment TABLES it_message

it_attach

USING p_email

p_mtitle

p_format

p_filename

p_attdescription

p_sender_address

p_sender_addres_type

CHANGING p_error

p_reciever.

DATA : ld_error TYPE sy-subrc,

ld_reciever TYPE sy-subrc,

ld_mtitle LIKE sodocchgi1-obj_descr,

ld_email LIKE somlreci1-receiver,

ld_format TYPE so_obj_tp ,

ld_attdescription TYPE so_obj_nam ,

ld_attfilename TYPE so_obj_des ,

ld_sender_address LIKE soextreci1-receiver,

ld_sender_address_type LIKE soextreci1-adr_typ,

ld_receiver LIKE sy-subrc.

DATA : t_packing_list LIKE sopcklsti1 OCCURS 0 WITH HEADER LINE,

t_contents LIKE solisti1 OCCURS 0 WITH HEADER LINE,

t_receivers LIKE somlreci1 OCCURS 0 WITH HEADER LINE,

t_attachment LIKE solisti1 OCCURS 0 WITH HEADER LINE,

t_object_header LIKE solisti1 OCCURS 0 WITH HEADER LINE,

w_cnt TYPE i,

w_sent_all(1) TYPE c,

w_doc_data LIKE sodocchgi1.

ld_email = p_email.

ld_mtitle = p_mtitle.

ld_format = p_format.

ld_attdescription = p_attdescription.

ld_attfilename = p_filename.

ld_sender_address = p_sender_address.

ld_sender_address_type = p_sender_addres_type.

  • Fill the document data.

w_doc_data-doc_size = 1.

  • Populate the subject/generic message attributes

w_doc_data-obj_langu = sy-langu.

w_doc_data-obj_name = 'SAPRPT'.

w_doc_data-obj_descr = ld_mtitle .

w_doc_data-sensitivty = 'F'.

  • Fill the document data and get size of attachment

CLEAR w_doc_data.

READ TABLE it_attach INDEX w_cnt.

w_doc_data-doc_size =

( w_cnt - 1 ) * 255 + STRLEN( it_attach ).

w_doc_data-obj_langu = sy-langu.

w_doc_data-obj_name = 'SAPRPT'.

w_doc_data-obj_descr = ld_mtitle.

w_doc_data-sensitivty = 'F'.

CLEAR t_attachment.

REFRESH t_attachment.

t_attachment[] = it_attach[].

  • Describe the body of the message

CLEAR t_packing_list.

REFRESH t_packing_list.

t_packing_list-transf_bin = space.

t_packing_list-head_start = 1.

t_packing_list-head_num = 0.

t_packing_list-body_start = 1.

DESCRIBE TABLE it_message LINES t_packing_list-body_num.

t_packing_list-doc_type = 'RAW'.

APPEND t_packing_list.

  • Create attachment notification

t_packing_list-transf_bin = 'X'.

t_packing_list-head_start = 1.

t_packing_list-head_num = 1.

t_packing_list-body_start = 1.

DESCRIBE TABLE t_attachment LINES t_packing_list-body_num.

t_packing_list-doc_type = ld_format.

t_packing_list-obj_descr = ld_attdescription.

t_packing_list-obj_name = ld_attfilename.

t_packing_list-doc_size = t_packing_list-body_num * 255.

APPEND t_packing_list.

REFRESH t_receivers.

  • Add the recipients email address

LOOP AT s_email.

CLEAR t_receivers.

t_receivers-receiver = s_email-low.

t_receivers-rec_type = 'U'.

t_receivers-com_type = 'INT'.

t_receivers-notif_del = 'X'.

t_receivers-notif_ndel = 'X'.

APPEND t_receivers.

ENDLOOP.

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'

EXPORTING

document_data = w_doc_data

put_in_outbox = 'X'

commit_work = 'X'

IMPORTING

sent_to_all = w_sent_all

TABLES

packing_list = t_packing_list

contents_bin = t_attachment

contents_txt = it_message

receivers = t_receivers

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

document_type_not_exist = 3

operation_no_authorization = 4

parameter_error = 5

x_error = 6

enqueue_error = 7

OTHERS = 8.

  • Populate zerror return code

ld_error = sy-subrc.

  • Populate zreceiver return code

LOOP AT t_receivers.

ld_receiver = t_receivers-retrn_code.

ENDLOOP.

ENDFORM. " send_file_as_email_attachment

&----


*& Form trigger_email

&----


FORM trigger_email.

WAIT UP TO 5 SECONDS.

SUBMIT rsconn01 WITH mode = 'INT'

WITH output = 'X'

AND RETURN.

ENDFORM. " trigger_email

&----


*& Form id_get

&----


  • To get the ID details of existing BP

----


FORM id_get USING uv_bp TYPE bu_partner.

CLEAR:i_id_tab,i_id_tab[].

CALL FUNCTION 'BAPI_IDENTIFICATIONDETAILS_GET'

EXPORTING

businesspartner = uv_bp

TABLES

identificationdetail = i_id_tab

return = it_bp_ret.

ENDFORM. " id_get

&----


*& Form ADD_DETAILS

&----


  • To add Identification numbers to the BP

----


  • Adding up Identification numbers to the BP

FORM add_details.

IF v_bp IS NOT INITIAL.

LOOP AT it_identification.

TRANSLATE it_identification-idnumber TO UPPER CASE.

CALL FUNCTION 'BAPI_IDENTIFICATION_ADD'

EXPORTING

businesspartner = v_bp

identificationcategory = it_identification-idcategory

identificationnumber = it_identification-idnumber

identification = w_identification

TABLES

return = it_iden_ret.

PERFORM transaction_commit.

READ TABLE it_iden_ret INTO wa_iden_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_iden_flag = 'E'.

ENDIF.

CLEAR : it_iden_ret, wa_iden_ret.

REFRESH : it_iden_ret.

ENDLOOP.

CLEAR : it_identification.

REFRESH : it_identification.

  • PERFORM add_makt_attr.

ENDIF.

ENDFORM. " ADD_DETAILS

&----


*& Form add_makt_attr

&----


  • To add marketing attributes to the BP

----


FORM add_makt_attr .

  • Assigning Marketing Attributes to the BP

IF v_bp IS NOT INITIAL.

LOOP AT it_crmt.

loopno = loopno + 1.

IF loopno EQ 2.

it_crmt1[] = it_crmt2[].

REFRESH it_crmt2.

ELSEIF loopno EQ 3.

it_crmt1[] = it_crmt3[].

REFRESH it_crmt3.

ELSEIF loopno EQ 4.

it_crmt1[] = it_crmt4[].

REFRESH it_crmt4.

ELSEIF loopno EQ 5.

it_crmt1[] = it_crmt5[].

REFRESH it_crmt5.

ENDIF.

IF it_crmt-crmt IS NOT INITIAL AND it_crmt1[] IS NOT INITIAL.

CALL FUNCTION 'CRM_MKTBP_CHANGE_BP'

EXPORTING

iv_profile_template_id = it_crmt-crmt

iv_partner = v_bp

iv_msa = 'X'

iv_commit = 'X'

iv_convert_values = 'X'

TABLES

it_imp_seltab = it_crmt1

et_return = it_attr_ret.

PERFORM transaction_commit.

ENDIF.

READ TABLE it_attr_ret INTO wa_attr_ret WITH KEY type = 'E'.

IF sy-subrc EQ 0.

it_attr_flag = 'E'.

ELSEIF flag_exist = 'X'.

flag_suc = 'X'.

ENDIF.

CLEAR : it_crmt1.

REFRESH : it_crmt1.

ENDLOOP.

CLEAR : it_crmt, loopno.

REFRESH : it_crmt.

ENDIF.

ENDFORM. " add_makt_attr

&----


*& Form id_remove

&----


  • To remove existing Identification details

----


FORM id_remove USING uv_bp TYPE bu_partner

uv_id_type TYPE bu_id_category

uv_id_num TYPE bu_id_number .

REFRESH it_iden_ret.

CALL FUNCTION 'BAPI_IDENTIFICATION_REMOVE'

EXPORTING

businesspartner = uv_bp

identificationcategory = uv_id_type

identificationnumber = uv_id_num

TABLES

return = it_iden_ret.

ENDFORM. " id_remove

&----


*& Form id_add

&----


  • To add Identification to BP

----


FORM id_add USING uv_bp TYPE bu_partner

uv_id_type TYPE bu_id_category

uv_identification TYPE bu_id_number.

CALL FUNCTION 'BAPI_IDENTIFICATION_ADD'

EXPORTING

businesspartner = uv_bp

identificationcategory = uv_id_type

identificationnumber = uv_identification

identification = w_identification

TABLES

return = it_iden_ret.

ENDFORM. " id_add

1 REPLY 1
Read only

Former Member
0 Likes
656

Guy&#65292;i don't regard here is anybody wanna read so much code .For more constructive answers, you would distill core question from your program.