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

TCODE BP

Former Member
0 Likes
2,415

Hello friends

Their is a TCODE BP in CRM

where i need to update Language data in Adress Tab-strip and IS CUSTOMER field in Classification Tab-strip.

When iam try to do recording for this it is not working.

how can i update data for this fields know.

thanks and regads

8 REPLIES 8
Read only

Former Member
0 Likes
1,584

Sush,

i would suggest you to post this one in CRM for better and quick reply.

Amit.

Read only

Former Member
0 Likes
1,584

Try this FM: BAPI_BUPA_ADDRESS_CHANGE or BAPI_BUPA_CENTRAL_CHANGE

Read only

0 Likes
1,584

Hello Sourav,

I neww to update only Language fields in Address Tab and IS Customer field in classification.

How can i do this with the BAPI's that u had given

Read only

0 Likes
1,584

Use the FM BAPI_BUPA_CENTRAL_CHANGE and pass the BUSINESSPARTNER, CENTRALDATA, CENTRALDATA_X to change the language.

You can update relationship by using BAPI_BUPR_RELATIONSHIP_CHANGE

Below is a sample code that i used to "delete" and "create" 'HAS APR Relationship'. You may refer it.

==============================================

************************************************************************

  • Includes *

************************************************************************

INCLUDE:

z_report_header. "Include for standart report header

************************************************************************

  • Type Declaration *

************************************************************************

TYPES:

*Type for input file structure

BEGIN OF x_file,

bp TYPE char10, "BP Number

apr_id TYPE char10, "APR ID

distance TYPE char11, "Distance

status_msg(132) TYPE c, "APR Status Message

END OF x_file,

*Type declaration for final information

BEGIN OF x_data,

bp TYPE bu_partner, "BP Number

apr_id TYPE bu_partner, "APR ID

distance TYPE s_distance, "Distance

status_msg TYPE tdline, "APR Status Message

apr_attrib_10 TYPE crmt_bu_katr10, "APR Attribute 10

del_flag TYPE char1, "Delete flag

END OF x_data,

*The final BP information

BEGIN OF x_bp_info,

bp TYPE bu_partner, "BP Number

status_msg TYPE tdline, "APR Status Message

bp_attrib_10 TYPE crmt_bu_katr10, "BP Attribute 10

bp_attrib_9 TYPE crmt_bu_katr9, "BP Attribute 9

create_rel TYPE char1, "Create relationship

std_apr TYPE bu_partner, "Standard Partner

END OF x_bp_info,

*Type declaration for final message

BEGIN OF x_message,

bp TYPE bu_partner, "BP Number

main_flag TYPE char1, "If it is the main msg

err_flag TYPE char1, "Error flag

message(125) TYPE c, "Message text

END OF x_message,

*Type for BP: General data I

BEGIN OF x_but000,

partner TYPE bu_partner, "BP Number

partner_guid TYPE bu_partner_guid, "BP GUID

xdele TYPE bu_xdele, "Central Archiving

xblck TYPE bu_xblck, "Central Block

END OF x_but000,

*Type for relation number

BEGIN OF x_but050,

relnr TYPE bu_relnr, "Relationship number

partner1 TYPE bu_partner, "Partner 1

partner2 TYPE bu_partner, "Partner 2

date_to TYPE bu_datto, "Validity date

END OF x_but050.

************************************************************************

  • Internal Table Declaration *

************************************************************************

DATA:

*File information

i_data TYPE STANDARD TABLE OF x_data INITIAL SIZE 0,

*Final BP info to update

i_bp_info TYPE STANDARD TABLE OF x_bp_info INITIAL SIZE 0,

*final Message table

i_message TYPE STANDARD TABLE OF x_message INITIAL SIZE 0,

*BP: General data I

i_but000 TYPE STANDARD TABLE OF x_but000 INITIAL SIZE 0,

*Relation number

i_but050 TYPE STANDARD TABLE OF x_but050 INITIAL SIZE 0,

"For table related to FRG0081

i_frg0081 TYPE STANDARD TABLE OF crmm_but_frg0081

INITIAL SIZE 0.

************************************************************************

  • Range Table Declaration *

************************************************************************

DATA:

r_bp TYPE RANGE OF bu_partner, "R-tab for BP

r_bp_apr TYPE RANGE OF bu_partner, "R-tab for BP, APR ID

r_apr TYPE RANGE OF bu_partner. "R-tab for APR ID

************************************************************************

  • Workarea Declaration *

************************************************************************

DATA:

wa_file TYPE x_file, "Input file

wa_data TYPE x_data, "File info

wa_bp_info TYPE x_bp_info, "Final BP info

wa_data_tmp TYPE x_data, "Temp Final info

wa_message TYPE x_message, "Message

wa_bp LIKE LINE OF r_bp, "BP number

wa_but000 TYPE x_but000, "BP: General data I

wa_but050 TYPE x_but050. "Relation no

************************************************************************

  • Global data declaration *

************************************************************************

DATA:

v_time(30) TYPE c, "Execution time

v_start_date TYPE sydatum, "Start Date

v_start_time TYPE syuzeit, "Start Time

v_end_date TYPE sydatum, "End Date

v_end_time TYPE syuzeit, "End Time

v_message TYPE string, "Message

v_count TYPE i, "BPs read

v_sucs_cnt TYPE i, "Success count

v_bp_guid TYPE bu_partner_guid, "BP GUID

v_sales_org TYPE crmt_sales_org, "Sales Org

v_dis_channel TYPE crmt_distribution_channel, "Distr Channel

v_division TYPE crmt_division, "Division

v_index TYPE sytabix. "Global index

************************************************************************

  • Constant Declaration *

************************************************************************

CONSTANTS:

c_check(1) TYPE c VALUE 'X', "Check

c_colon(1) TYPE c VALUE ':', "Colon

c_apath(30) TYPE c "App. srv path

VALUE '/data/interfaces/idd0312/',

c_fname(30) TYPE c "File name

VALUE 'IDD0312_BP_APR.dat',

c_reltyp TYPE bu_reltyp "Relationship type

VALUE 'ZRA001', "APR Distributor Rlshp

c_attrib_999 TYPE crmt_bu_katr10 VALUE '999', "Attrib 10 value

c_partner_fct TYPE crmt_partner_fct

VALUE 'Z0000024', "Partner Function

c_action TYPE bu_action VALUE 'U', "Action

c_rel TYPE char6 VALUE 'ZRA001', "APR Dist Reln

c_error TYPE char1 VALUE 'E', "Error

c_abend TYPE char1 VALUE 'A', "Abend

c_textid_apr TYPE tdid VALUE 'Z003', "APR Audit text id

c_object TYPE tdobject VALUE 'BUT000', "Object name

c_tdformat TYPE char1 VALUE '*', "Default paragraph

c_task TYPE char1 VALUE 'M', "Modify

c_validto TYPE timestamp VALUE '99991231235959',"Time

c_validfrom TYPE timestamp VALUE '10101000000'. "Time

************************************************************************

  • Selection Screen *

************************************************************************

SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-a01.

PARAMETERS:

p_afile TYPE localfile. "App. server file

SELECTION-SCREEN: END OF BLOCK b1.

************************************************************************

  • Initialization *

************************************************************************

INITIALIZATION.

  • Set the default file path

CONCATENATE c_apath c_fname INTO p_afile.

************************************************************************

  • At selection-screen on F4 help for Application Server file *

************************************************************************

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_afile.

  • Provide a F4 help for source file

PERFORM sub_afile_f4 USING p_afile.

************************************************************************

  • At selection-screen *

************************************************************************

AT SELECTION-SCREEN.

  • If the user click 'Execute' / press 'Enter' / press F8

IF sy-ucomm = 'ONLI' "Execute/F8

OR sy-ucomm = space. "Enter

  • Validate file path

PERFORM sub_validate_file_path.

ENDIF.

************************************************************************

  • Start of Selection *

************************************************************************

START-OF-SELECTION.

  • Set the run time clock on

PERFORM sub_startclock.

  • Import the file data

PERFORM sub_import_file_data.

  • Get the Business Partner General Data

PERFORM sub_get_bp_general_data.

  • Do extensive check & update i_data for further processing

PERFORM sub_check_update_i_data.

  • Populate the final BP information to update

PERFORM sub_gather_bp_details.

  • Update the BP

PERFORM sub_update_bp.

************************************************************************

  • End of Selection *

************************************************************************

END-OF-SELECTION.

  • Stop the application clock and calculate the execution time

PERFORM sub_stopclock.

  • Calculate the time duration

PERFORM sub_getduration.

  • Displaying summary for the report

PERFORM sub_display_summary.

  • Displaying detail report

PERFORM sub_display_report.

************************************************************************

  • Top of Page *

************************************************************************

TOP-OF-PAGE.

  • Display the report header

PERFORM sub_header USING sy-title space.

&----


*& Form sub_afile_f4

&----


  • Provide a F4 help for source application server file

----


  • -->P_P_AFILE text

----


FORM sub_afile_f4 USING p_p_afile TYPE localfile.

  • This function module provides the F4 help for application server

CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'

EXPORTING

directory = c_apath

filemask = space

IMPORTING

serverfile = p_p_afile

EXCEPTIONS

canceled_by_user = 1

OTHERS = 2.

  • If the help funtion has an error, display a message.

IF sy-subrc <> 0.

  • Message 'Unable to find filepath'.

MESSAGE i000 WITH 'Unable to find filepath'(001).

ENDIF.

ENDFORM. " sub_afile_f4

&----


*& Form sub_validate_file_path

&----


  • Check if the input file path is valid or not

----


  • No Parameter

----


FORM sub_validate_file_path .

  • Local data declaration

DATA: l_fname TYPE xuval. "Filename

  • Check if input is given

IF p_afile IS NOT INITIAL.

l_fname = p_afile.

  • Check the authority

CALL FUNCTION 'AUTHORITY_CHECK'

EXPORTING

object = 'S_DATASET'

field1 = 'PROGRAM'

value1 = sy-cprog

field2 = 'ACTVT'

value2 = '33'

field3 = 'FILENAME'

value3 = l_fname

EXCEPTIONS

user_dont_exist = 1

user_is_authorized = 2

user_not_authorized = 3

OTHERS = 4.

IF sy-subrc = 2.

  • Check if the path is valid

OPEN DATASET p_afile FOR INPUT IN TEXT MODE ENCODING DEFAULT

MESSAGE v_message.

  • If the file already exists

IF sy-subrc = 0.

  • Close the dataset

CLOSE DATASET p_afile.

ELSE.

SET CURSOR FIELD 'P_AFILE'.

MESSAGE e000 WITH v_message.

ENDIF.

ELSE.

SET CURSOR FIELD 'P_AFILE'.

MESSAGE e000(z_zzz_ca_messages)

WITH 'ERROR: No Authorization to the file!'(002).

ENDIF.

ELSE.

SET CURSOR FIELD 'P_AFILE'.

MESSAGE e000 WITH

'Please give the file path'(003).

ENDIF.

ENDFORM. " sub_validate_file_path

&----


*& Form sub_startclock

&----


  • This perform starts the system clock for calculating

  • execution time

----


  • No Parameters

----


FORM sub_startclock .

*--Starting the clock

GET TIME.

v_start_date = sy-datum.

v_start_time = sy-uzeit.

ENDFORM. " sub_startclock

&----


*& Form sub_stopclock

&----


  • Stop the clock

----


  • No parameters

----


FORM sub_stopclock .

*---Stopping the clock

GET TIME.

v_end_date = sy-datum. " Date

v_end_time = sy-uzeit. " Time

ENDFORM. " sub_stopclock

&----


*& Form sub_getduration

&----


  • Calculation of time required for execution

----


  • No parameter

----


FORM sub_getduration.

DATA: l_time TYPE i, "Time

l_secs(2) TYPE n, "Seconds

l_mins(2) TYPE n, "Minutes

l_hrs(2) TYPE n, "Hours

l_days TYPE i. "Days

*---Calculating the executing time

l_days = v_end_date - v_start_date.

l_time = ( v_end_time + ( l_days * 86400 ) ) - v_start_time .

l_hrs = l_time DIV 3600.

l_mins = ( l_time MOD 3600 ) DIV 60.

l_secs = ( l_time MOD 3600 ) MOD 60.

CONCATENATE l_hrs c_colon

l_mins c_colon

l_secs

INTO v_time.

ENDFORM. " sub_getduration

&----


*& Form sub_import_file_data

&----


  • Import the file data

----


  • -->P_I_FILE Table to store file data

----


FORM sub_import_file_data.

  • Show the progress bar

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

percentage = 0

text = 'Importing data from file...'(004).

  • Open the source file for reading

OPEN DATASET p_afile FOR INPUT IN TEXT MODE

ENCODING DEFAULT

MESSAGE v_message.

IF sy-subrc = 0.

  • Read each line in the source file and add it's contents to the

  • internal table.

  • Populate the range table for BP

wa_bp-sign = 'I'.

wa_bp-option = 'EQ'.

DO.

READ DATASET p_afile INTO wa_file.

  • EOF reached

IF sy-subrc <> 0.

EXIT.

ELSE.

  • Check if the distance is in proper format

IF NOT wa_file-distance CO '0123456789. '.

CONCATENATE 'Distance'(035)

wa_file-distance

'for APR Id'(036)

wa_file-apr_id

'is invalid'(037)

INTO v_message

SEPARATED BY space.

  • Add message

PERFORM sub_append_message USING wa_file-bp

space

c_check

v_message.

CONTINUE.

ENDIF.

  • Populate the final formatted table as well---------

CLEAR wa_data.

MOVE-CORRESPONDING wa_file TO wa_data.

  • Padding leading zeros to BP

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = wa_data-bp

IMPORTING

output = wa_data-bp.

  • Padding leading zeros to APR ID

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = wa_data-apr_id

IMPORTING

output = wa_data-apr_id.

APPEND wa_data TO i_data.

  • Store the BP and APR id in a range table for future use

wa_bp-low = wa_data-bp.

APPEND wa_bp TO r_bp.

APPEND wa_bp TO r_bp_apr.

wa_bp-low = wa_data-apr_id.

APPEND wa_bp TO r_bp_apr.

ENDIF.

ENDDO.

  • Get the uniuqe BP nos

IF r_bp[] IS NOT INITIAL.

SORT r_bp.

DELETE r_bp WHERE low = space.

DELETE ADJACENT DUPLICATES FROM r_bp.

ENDIF.

  • Get the unique APR ids

IF r_bp_apr[] IS NOT INITIAL.

SORT r_bp_apr.

DELETE r_bp_apr WHERE low = space.

DELETE ADJACENT DUPLICATES FROM r_bp_apr.

ENDIF.

  • Close the source file

CLOSE DATASET p_afile.

IF i_data[] IS INITIAL.

MESSAGE i000 WITH

'Sorry, the file does not contain any data'(005).

LEAVE LIST-PROCESSING.

ELSE.

SORT i_data BY bp apr_id.

ENDIF.

ELSE.

MESSAGE i000 WITH v_message.

LEAVE LIST-PROCESSING.

ENDIF.

  • Clear variables

CLEAR: wa_file, wa_data.

ENDFORM. " sub_import_file_data

&----


*& Form sub_get_bp_general_data

&----


  • Get the Business Partner general data & store in

  • the table i_but000

----


  • No Parameter

----


FORM sub_get_bp_general_data .

IF r_bp_apr[] IS NOT INITIAL.

SELECT partner "Partner no

partner_guid "Partner GUID

xdele "Central Archiving

xblck "Central Block

FROM but000 "BP: General data I

INTO TABLE i_but000

WHERE partner IN r_bp_apr[].

IF sy-subrc = 0.

SORT i_but000 BY partner.

ENDIF.

ENDIF.

ENDFORM. " sub_get_bp_general_data

&----


*& Form sub_check_update_i_data

&----


  • Check the contents of i_data for further processing.

  • It will contain Attrib_10 value for the Distributors

----


  • No Parameter

----


FORM sub_check_update_i_data .

DATA:

l_tabix TYPE sytabix, "Tabix-value

l_tabix2 TYPE sytabix, "Tabix-value

l_bp TYPE bu_partner, "BP number

l_bp2 TYPE bu_partner. "BP number

  • Show the progress bar

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

percentage = 0

text = 'Validating imported data...'(006).

LOOP AT i_data INTO wa_data.

l_tabix = sy-tabix.

  • For new BP (Check the BP)**************************

IF wa_data-bp = space

OR wa_data-bp NE l_bp.

l_bp = wa_data-bp.

  • Increase the Global counter

v_count = v_count + 1.

  • If BP number given is blank

IF wa_data-bp IS INITIAL.

v_message = 'BP number is blank in the file'(007).

  • Add message

PERFORM sub_append_message USING wa_data-bp

c_check

c_check

v_message.

  • Check it for deletion

wa_data-del_flag = c_check.

MODIFY i_data INDEX l_tabix

FROM wa_data

TRANSPORTING del_flag.

CONTINUE.

ELSE.

*>----Check if BP Exists/blocked/archived--


CLEAR: wa_but000, v_message.

READ TABLE i_but000 INTO wa_but000

WITH KEY partner = wa_data-bp

BINARY SEARCH.

  • If BP does not exist

IF sy-subrc NE 0.

CONCATENATE 'BP'(008)

wa_data-bp

'does not exist'(009)

INTO v_message

SEPARATED BY space.

ELSE.

  • If Centrally Archived

IF wa_but000-xdele = c_check.

CONCATENATE 'BP'(008)

wa_data-bp

'is Centrally Archived'(010)

INTO v_message

SEPARATED BY space.

  • If Centrally Blocked

ELSEIF wa_but000-xblck = c_check.

CONCATENATE 'BP'(008)

wa_data-bp

'is Centrally Blocked'(011)

INTO v_message

SEPARATED BY space.

ENDIF.

ENDIF.

  • If BP exists/blocked/centrally archived

IF v_message IS NOT INITIAL.

  • Add message

PERFORM sub_append_message USING wa_data-bp

c_check

c_check

v_message.

  • Check it for deletion

wa_data-del_flag = c_check.

MODIFY i_data FROM wa_data

TRANSPORTING del_flag

WHERE bp = wa_data-bp.

ENDIF.

*>----/Check if BP Exists/blocked/archived--


ENDIF.

ENDIF.

  • Check if it is not marked to delete

IF wa_data-del_flag IS INITIAL.

IF wa_data-apr_id IS NOT INITIAL.

  • If BP & APR ID are same

IF wa_data-bp = wa_data-apr_id.

CONCATENATE 'Relationship cannot be created between'(052)

'identical business partners'(053)

INTO v_message

SEPARATED BY space.

  • Add message

PERFORM sub_append_message USING wa_data-bp

space

c_check

v_message.

  • Check it for deletion

wa_data-del_flag = c_check.

MODIFY i_data INDEX l_tabix

FROM wa_data

TRANSPORTING del_flag.

CONTINUE.

ENDIF.

*>----Check if APR id Exists/blocked/archived--


CLEAR: wa_but000, v_message.

READ TABLE i_but000 INTO wa_but000

WITH KEY partner = wa_data-apr_id

BINARY SEARCH.

  • If APR ID does not exist

IF sy-subrc NE 0.

CONCATENATE 'APR Id'(054)

wa_data-apr_id

'does not exist'(009)

INTO v_message

SEPARATED BY space.

ELSE.

  • If Centrally Archived

IF wa_but000-xdele = c_check.

CONCATENATE 'APR Id'(054)

wa_data-apr_id

'is Centrally Archived'(010)

INTO v_message

SEPARATED BY space.

  • If Centrally Blocked

ELSEIF wa_but000-xblck = c_check.

CONCATENATE 'APR Id'(054)

wa_data-apr_id

'is Centrally Blocked'(011)

INTO v_message

SEPARATED BY space.

ENDIF.

ENDIF.

  • If BP exists/blocked/centrally archived

IF v_message IS NOT INITIAL.

  • Add message

PERFORM sub_append_message USING wa_data-bp

space

c_check

v_message.

  • Check it for deletion

wa_data-del_flag = c_check.

MODIFY i_data INDEX l_tabix

FROM wa_data

TRANSPORTING del_flag.

CONTINUE.

ENDIF.

*>----/Check if APR id Exists/blocked/archived--


  • Get the ATTRIB_10 Value for the Distributor

PERFORM sub_get_attrib_10_value USING wa_but000-partner_guid

CHANGING wa_data-apr_attrib_10.

  • If ATTRIB_10 value is not found

IF wa_data-apr_attrib_10 IS INITIAL.

CONCATENATE 'ATTRIB_10 value for the APR Id'(055)

wa_data-apr_id

'not found'(056)

INTO v_message

SEPARATED BY space.

  • Add message

PERFORM sub_append_message USING wa_data-bp

space

c_check

v_message.

  • Check it for deletion

wa_data-del_flag = c_check.

MODIFY i_data INDEX l_tabix

FROM wa_data

TRANSPORTING del_flag.

CONTINUE.

ELSE.

  • Update ATTRIB_10 vlaue to table

MODIFY i_data INDEX l_tabix

FROM wa_data

TRANSPORTING apr_attrib_10.

*>----


If there is any record for BP where APR ID has no value

  • Check if this check is performed only once for a BP

IF l_bp2 NE wa_data-bp.

l_bp2 = wa_data-bp.

READ TABLE i_data TRANSPORTING NO FIELDS

WITH KEY bp = wa_data-bp

apr_id = space.

IF sy-subrc = 0.

v_message = 'APR Id is blank'(057).

  • Add message

PERFORM sub_append_message USING wa_data-bp

space

c_check

v_message.

wa_data-del_flag = c_check.

MODIFY i_data FROM wa_data

TRANSPORTING del_flag

WHERE bp = wa_data-bp

AND apr_id = space.

ENDIF.

ENDIF. "l_bp NE wa_data-bp.

*>----


/If there is any record for BP where APR ID has no value

*>----


If same APR ID found multiple times for a BP

l_tabix2 = l_tabix + 1.

LOOP AT i_data FROM l_tabix2

INTO wa_data_tmp.

l_tabix2 = sy-tabix.

IF wa_data_tmp-bp NE wa_data-bp.

EXIT.

ENDIF.

  • If same APR ID

IF wa_data_tmp-apr_id = wa_data-apr_id.

CONCATENATE 'Duplicate APR Id'(058)

wa_data-apr_id

'for BP'(019)

wa_data-bp

INTO v_message

SEPARATED BY space.

  • Add message

PERFORM sub_append_message USING wa_data-bp

space

c_check

v_message.

  • Check it for deletion

wa_data_tmp-del_flag = c_check.

MODIFY i_data INDEX l_tabix2

FROM wa_data_tmp

TRANSPORTING del_flag.

ELSE.

EXIT.

ENDIF.

ENDLOOP.

*>-------/If same APR ID found multiple times for a BP

ENDIF. "IF wa_data-apr_attrib_10 IS INITIAL.

ENDIF. "IF wa_data-apr_id IS NOT INITIAL.

ENDIF. "IF wa_data-del_flag IS INITIAL.

ENDLOOP.

DELETE i_data WHERE del_flag = c_check.

  • Clear variables

CLEAR: wa_file, wa_data, wa_data_tmp, v_message.

ENDFORM. " sub_check_update_i_data

&----


*& Form sub_append_message

&----


  • Populate the final message table using the input parameter

----


  • -->P_L_BP Business Partner Number

  • -->P_L_MAIN_FLAG Main flag (As header)

  • -->P_L_ERR_FLAG Error Flag

  • -->P_L_MESSAGE Message text

----


FORM sub_append_message USING p_l_bp TYPE bu_partner

p_l_main_flag TYPE char1

p_l_err_flag TYPE char1

p_l_message TYPE string.

wa_message-bp = p_l_bp.

wa_message-main_flag = p_l_main_flag.

wa_message-err_flag = p_l_err_flag.

wa_message-message = p_l_message.

APPEND wa_message TO i_message.

CLEAR wa_message.

ENDFORM. " sub_append_message

&----


*& Form sub_get_attrib_10_value

&----


  • Get Atribute 10 for the Distributor

----


  • -->P_L_GUID Partner GUID

  • <--P_L_ATTRIB_10 ATTRIB_10 Value

----


FORM sub_get_attrib_10_value USING p_l_guid TYPE bu_partner_guid

CHANGING p_l_attrib_10 TYPE crmt_bu_katr10.

DATA : l_wa_frg0040_apr TYPE crmt_bus_frg0040.

"CRM BP Fragment Structure

  • Get the Attribute details

CALL FUNCTION 'CRM_BUPA_FRG0040_GET_DETAIL'

EXPORTING

iv_partner_guid = p_l_guid

IMPORTING

es_data = l_wa_frg0040_apr.

p_l_attrib_10 = l_wa_frg0040_apr-attrib_10.

ENDFORM. " sub_get_attrib_10_value

&----


*& Form sub_gather_bp_details

&----


  • Make decission about the relationship and ATTRIB values

  • based on the file info and update the final BP info table

----


  • No Parameter

----


FORM sub_gather_bp_details .

DATA:

l_std_partner TYPE bu_partner, "Standard partner

l_attrib1 TYPE crmt_bu_katr10, "Attrib value

l_attrib2 TYPE crmt_bu_katr10, "Attrib value

l_attrib3 TYPE crmt_bu_katr10. "Attrib value

SORT i_data BY bp distance.

CLEAR r_bp.

  • Populate the range table for BP

wa_bp-sign = 'I'.

wa_bp-option = 'EQ'.

LOOP AT i_data INTO wa_data_tmp.

wa_data = wa_data_tmp.

  • For the first record of BP

AT NEW bp.

  • If there is APR relations

IF wa_data-apr_id IS NOT INITIAL.

l_std_partner = wa_data-apr_id.

l_attrib1 = wa_data-apr_attrib_10.

ENDIF.

ENDAT.

  • Get the unique ATTRIB_10 value

IF wa_data-apr_attrib_10 NE l_attrib1.

IF l_attrib2 IS INITIAL.

l_attrib2 = wa_data-apr_attrib_10.

ELSEIF wa_data-apr_attrib_10 NE l_attrib2.

l_attrib3 = wa_data-apr_attrib_10.

ENDIF.

ENDIF.

AT END OF bp.

  • For APR Distributor relations

IF wa_data-apr_id IS NOT INITIAL.

wa_bp_info-bp = wa_data-bp.

  • If one unique APR Distributor

IF l_attrib1 IS NOT INITIAL

AND l_attrib2 IS INITIAL

AND l_attrib3 IS INITIAL.

wa_bp_info-bp_attrib_10 = l_attrib1.

wa_bp_info-create_rel = c_check.

wa_bp_info-std_apr = l_std_partner.

  • If two unique Distributor

ELSEIF l_attrib1 IS NOT INITIAL

AND l_attrib2 IS NOT INITIAL

AND l_attrib3 IS INITIAL.

wa_bp_info-bp_attrib_10 = l_attrib1.

wa_bp_info-bp_attrib_9 = l_attrib2.

wa_bp_info-create_rel = c_check.

  • If more than two unique Distributor

ELSEIF l_attrib1 IS NOT INITIAL

AND l_attrib2 IS NOT INITIAL

AND l_attrib3 IS NOT INITIAL.

wa_bp_info-bp_attrib_10 = c_attrib_999.

ENDIF.

APPEND wa_bp_info TO i_bp_info.

  • For APR Status message updation

ELSE.

wa_bp_info-bp = wa_data-bp.

wa_bp_info-status_msg = wa_data-status_msg.

wa_bp_info-bp_attrib_10 = c_attrib_999.

APPEND wa_bp_info TO i_bp_info.

ENDIF.

  • Populate the BP range table

wa_bp-low = wa_data-bp.

APPEND wa_bp TO r_bp.

CLEAR: wa_bp_info,

l_std_partner,

l_attrib1,

l_attrib2,

l_attrib3.

ENDAT.

ENDLOOP.

ENDFORM. " sub_gather_bp_details

&----


*& Form sub_update_bp

&----


  • Update the Business Partner

----


  • No Parameter

----


FORM sub_update_bp .

DATA:

l_subrc TYPE sysubrc, "sy-subrc value

"Temporary table for BP details

l_i_but000 TYPE STANDARD TABLE OF x_but000 INITIAL SIZE 0,

l_total TYPE i, "Total no

l_percent TYPE i, "Percentage complete.

l_per_text TYPE text70. "Updating BP..

*>Get sales area details for all BP----


IF r_bp[] IS NOT INITIAL.

l_i_but000[] = i_but000[].

SORT l_i_but000 BY partner.

DELETE l_i_but000 WHERE partner NOT IN r_bp.

  • DELETE ADJACENT DUPLICATES is not reqd.

  • as i_but000 contains unique BP

IF l_i_but000[] IS NOT INITIAL.

SELECT *

FROM crmm_but_frg0081

INTO TABLE i_frg0081

FOR ALL ENTRIES IN l_i_but000

WHERE partner_guid = l_i_but000-partner_guid

AND partner_fct = c_partner_fct

AND is_deflt_partner = c_check.

IF sy-subrc = 0.

SORT i_frg0081 BY partner_guid sales_org channel division.

ENDIF.

ENDIF.

ENDIF.

*>/Get sales area details for all BP----


SORT i_data BY bp.

SORT i_bp_info BY bp.

l_total = LINES( i_bp_info ).

LOOP AT i_bp_info INTO wa_bp_info.

l_percent = 100 * sy-tabix / l_total.

CONCATENATE 'Updating BP'(020)

wa_bp_info-bp

'...'(021)

INTO l_per_text

SEPARATED BY space.

  • Display process indicator

CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'

EXPORTING

percentage = l_percent

text = l_per_text.

CLEAR l_subrc.

  • Lock the BP

PERFORM sub_lock_bp USING wa_bp_info-bp

CHANGING l_subrc.

IF l_subrc = 0.

  • Get the BP GUID

CLEAR wa_but000.

READ TABLE i_but000 INTO wa_but000

WITH KEY partner = wa_bp_info-bp

BINARY SEARCH.

IF sy-subrc = 0.

  • Store BP GUID in a global variablw

v_bp_guid = wa_but000-partner_guid.

  • Populate sales data for future use

PERFORM sub_get_sales_data USING wa_bp_info-bp

CHANGING l_subrc.

IF l_subrc = 0.

  • Delete the existing APR relations

PERFORM sub_delete_relations USING wa_bp_info-bp

CHANGING l_subrc.

  • If all existing APR relations are deleted

IF l_subrc = 0.

  • Case for status message updation

IF wa_bp_info-status_msg IS NOT INITIAL.

  • Update ststus message

PERFORM sub_update_apr_text_for_bp USING wa_bp_info-bp

wa_bp_info-status_msg

CHANGING l_subrc.

ENDIF.

  • Case for relation creation

IF wa_bp_info-create_rel = c_check.

  • Create relation

PERFORM sub_create_relation USING wa_bp_info-bp

wa_bp_info-std_apr

CHANGING l_subrc.

ENDIF.

IF l_subrc = 0.

  • Update attrib 10 value

PERFORM sub_update_attrib_10 USING wa_bp_info-bp

wa_bp_info-bp_attrib_10

wa_bp_info-bp_attrib_9

CHANGING l_subrc.

ENDIF.

ENDIF.

ENDIF.

IF l_subrc = 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

v_sucs_cnt = v_sucs_cnt + 1.

  • Populate the error message

v_message = 'BP Updated Successfully'(022).

PERFORM sub_append_message USING wa_bp_info-bp

c_check

space

v_message.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

ENDIF.

ENDIF.

  • Unlock the BP

PERFORM sub_unlock_bp USING wa_bp_info-bp.

ENDIF.

ENDLOOP.

ENDFORM. " sub_update_bp

&----


*& Form sub_lock_bp

&----


  • Lock the BP for Updation

----


  • -->P_BP BP Number

  • <--P_SUBRC Subrc value

----


FORM sub_lock_bp USING p_bp TYPE bu_partner

CHANGING p_subrc TYPE sysubrc.

  • Check if the BP is locked for updation

CALL FUNCTION 'ENQUEUE_EBU_PARTNR'

EXPORTING

partner = p_bp

EXCEPTIONS

foreign_lock = 1

system_failure = 2

OTHERS = 3.

p_subrc = sy-subrc.

IF p_subrc NE 0.

CONCATENATE 'Business Partner is Currently Being Processed By'(023)

sy-msgv1

INTO v_message

SEPARATED BY space.

PERFORM sub_append_message USING p_bp

c_check

c_check

v_message.

ENDIF.

ENDFORM. " sub_lock_bp

&----


*& Form sub_get_sales_data

&----


  • Retrieve the Sales data and keep in global

  • variable for future use

----


  • -->P_BP BP Number

  • <--P_SUBRC Subrc value

----


FORM sub_get_sales_data USING p_bp TYPE bu_partner

CHANGING p_subrc TYPE sysubrc.

DATA:

l_i_sales_area TYPE STANDARD TABLE OF crmt_orgman_sales_area

INITIAL SIZE 0, "Sales area data

l_wa_sales_area TYPE crmt_orgman_sales_area."Sales area

  • Get sales area data

CALL FUNCTION 'CRM_ORGMAN_VTAREA_GET'

EXPORTING

iv_keydate = sy-datum

use_buffer = c_check

TABLES

et_sales_area_tab = l_i_sales_area

EXCEPTIONS

nothing_found = 1

OTHERS = 2.

IF sy-subrc = 0.

CLEAR l_wa_sales_area.

READ TABLE l_i_sales_area INTO l_wa_sales_area INDEX 1.

IF sy-subrc = 0.

v_sales_org = l_wa_sales_area-sales_org.

v_dis_channel = l_wa_sales_area-dis_channel.

v_division = l_wa_sales_area-division.

ENDIF.

ENDIF.

p_subrc = sy-subrc.

IF p_subrc NE 0.

v_message = 'Sales area data is not found'(024).

PERFORM sub_append_message USING p_bp

c_check

c_check

v_message.

ENDIF.

ENDFORM. " sub_get_sales_data

&----


*& Form sub_delete_relations

&----


  • Delete existing Has APR Distributor relationship for the BP

----


  • -->P_BP BP Number

  • <--P_SUBRC Subrc value

----


FORM sub_delete_relations USING p_bp TYPE bu_partner

CHANGING p_subrc TYPE sysubrc.

DATA:

"For Relationship data

l_i_relations TYPE STANDARD TABLE OF but050 INITIAL SIZE 0,

"For Return messages

l_i_return TYPE STANDARD TABLE OF bapiret2 INITIAL SIZE 0,

l_wa_relations TYPE but050, "For Relationship data.

l_wa_return TYPE bapiret2. "For return messages

  • To get all the relationships for a business partner

CALL FUNCTION 'BUB_BUPR_BUT050_READ'

EXPORTING

e_partner = p_bp

TABLES

et_relations = l_i_relations.

  • sy-subrc is not checked as exceptions is not thrown

IF NOT l_i_relations[] IS INITIAL.

  • Delete Standard Relation

PERFORM sub_delete_std_rel.

LOOP AT l_i_relations INTO l_wa_relations WHERE partner1 = p_bp

AND reltyp = c_rel.

REFRESH l_i_return[].

  • Delete the existing 'Has APR Distributor' relationships

CALL FUNCTION 'BAPI_BUPR_RELATIONSHIP_DELETE'

EXPORTING

businesspartner1 = p_bp

businesspartner2 = l_wa_relations-partner2

relationshipcategory = l_wa_relations-reltyp

TABLES

return = l_i_return.

LOOP AT l_i_return INTO l_wa_return WHERE type = c_error OR

type = c_abend .

p_subrc = 1.

  • Format the message

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

id = l_wa_return-id

lang = sy-langu

no = l_wa_return-number

v1 = l_wa_return-message_v1

v2 = l_wa_return-message_v2

v3 = l_wa_return-message_v3

v4 = l_wa_return-message_v4

IMPORTING

msg = v_message

EXCEPTIONS

not_found = 1

OTHERS = 2.

IF sy-subrc = 0.

  • Populate the error message

PERFORM sub_append_message USING p_bp

c_check

c_check

v_message.

ENDIF.

EXIT.

ENDLOOP.

IF p_subrc NE 0.

EXIT.

ENDIF.

ENDLOOP.

ENDIF.

ENDFORM. " sub_delete_relations

&----


*& Form sub_delete_std_rel

&----


  • Delete Existing Standard relation for the BP

----


  • No Parameter

----


FORM sub_delete_std_rel.

DATA:

l_i_frg0081 TYPE STANDARD TABLE OF crmt_bus_frg0081_wrk

INITIAL SIZE 0, "For table related to FRG0081

l_i_frg0080 TYPE STANDARD TABLE OF crmt_bus_frg0080_wrk

INITIAL SIZE 0, "For table related to FRG0080

l_wa_frg0081 TYPE crmt_bus_frg0081_wrk.

"For workarea related to FRG0081

  • Get data from Business Partner - Sales Area - Partner Function

READ TABLE i_frg0081 INTO l_wa_frg0081

WITH KEY partner_guid = v_bp_guid

sales_org = v_sales_org

channel = v_dis_channel

division = v_division

BINARY SEARCH.

IF sy-subrc = 0.

l_wa_frg0081-is_deflt_partner = space.

l_wa_frg0081-action = c_action.

l_wa_frg0081-xchng = c_check.

APPEND l_wa_frg0081 TO l_i_frg0081.

CLEAR l_wa_frg0081.

  • Uncheck standard partner indicator

CALL FUNCTION 'CRMH_BUPR_UPDATE'

TABLES

it_frg0080_wrk = l_i_frg0080

it_frg0081_wrk = l_i_frg0081.

ENDIF.

ENDFORM. " sub_delete_std_rel

&----


*& Form sub_create_relation

&----


  • Create 'Has APR Distributor' Relationship

----


  • -->P_BP BP Number

  • -->P_STD_APR Standard Relation

  • <--P_SUBRC Sy-subrc value

----


FORM sub_create_relation USING p_bp TYPE bu_partner

p_std_apr TYPE bu_partner

CHANGING p_subrc TYPE sysubrc.

DATA:

"For Return messages

l_i_return TYPE STANDARD TABLE OF bapiret2 INITIAL SIZE 0,

l_wa_return TYPE bapiret2. "For return messages

REFRESH r_apr.

CLEAR: r_apr, wa_bp.

  • Populate the range table for BP

wa_bp-sign = 'I'.

wa_bp-option = 'EQ'.

LOOP AT i_data FROM v_index

INTO wa_data.

  • Store the index in a global variable

v_index = sy-tabix.

IF wa_data-bp = p_bp.

  • To create the relationship "Has APR Distributor"

CALL FUNCTION 'BAPI_BUPR_RELATIONSHIP_CREATE'

EXPORTING

businesspartner1 = wa_data-bp

businesspartner2 = wa_data-apr_id

relationshipcategory = c_rel

TABLES

return = l_i_return.

LOOP AT l_i_return INTO l_wa_return WHERE type = c_error OR

type = c_abend .

p_subrc = 1.

  • Format the message

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

id = l_wa_return-id

lang = sy-langu

no = l_wa_return-number

v1 = l_wa_return-message_v1

v2 = l_wa_return-message_v2

v3 = l_wa_return-message_v3

v4 = l_wa_return-message_v4

IMPORTING

msg = v_message

EXCEPTIONS

not_found = 1

OTHERS = 2.

IF sy-subrc = 0.

  • Populate the error message

PERFORM sub_append_message USING p_bp

c_check

c_check

v_message.

ENDIF.

EXIT.

ENDLOOP.

  • Collect the APR ID for the successful relation

  • It will be used in the update relation

IF p_subrc = 0.

wa_bp-low = wa_data-apr_id.

APPEND wa_bp TO r_apr.

ELSE.

EXIT.

ENDIF.

  • The table i_data is sorted by bp...

  • If it finds any bp greater than p_bp... exit the loop

ELSEIF wa_data-bp > p_bp.

EXIT.

ENDIF.

ENDLOOP.

  • If successful, then Commit work

IF p_subrc = 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = c_check.

  • Update the relation

PERFORM sub_update_relation USING p_bp

p_std_apr.

ELSE.

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

ENDIF.

ENDFORM. " sub_create_relation

&----


*& Form sub_update_relation

&----


  • Update sales data & Standard check for the relation

----


  • -->P_BP BP Number

  • -->P_STD_APR Standard Relation

----


FORM sub_update_relation USING p_bp TYPE bu_partner

p_std_apr TYPE bu_partner.

DATA:

l_i_frg0081 TYPE STANDARD TABLE OF crmt_bus_frg0081_wrk

INITIAL SIZE 0, "For table related to FRG0081

l_i_frg0080 TYPE STANDARD TABLE OF crmt_bus_frg0080_wrk

INITIAL SIZE 0, "For table related to FRG0080

l_wa_frg0081 TYPE crmt_bus_frg0081_wrk.

REFRESH i_but050[].

IF r_apr[] IS NOT INITIAL.

  • Get the relationship number

SELECT relnr "BP Relationship No

partner1 "BP Number1

partner2 "BP Number2

date_to "Validity Date

FROM but050

INTO TABLE i_but050

WHERE partner1 = p_bp

AND partner2 IN r_apr[]

AND date_to >= sy-datum

AND reltyp = c_reltyp.

IF sy-subrc = 0.

SORT i_but050 BY partner2.

ENDIF.

ENDIF.

  • Update the relationship*************************************

l_wa_frg0081-partner_guid = v_bp_guid.

l_wa_frg0081-sales_org = v_sales_org.

l_wa_frg0081-channel = v_dis_channel.

l_wa_frg0081-division = v_division.

l_wa_frg0081-partner_fct = c_partner_fct.

l_wa_frg0081-valid_to = c_validto.

l_wa_frg0081-valid_from = c_validfrom.

l_wa_frg0081-xchng = c_check.

l_wa_frg0081-partner1 = p_bp.

l_wa_frg0081-action = c_action.

LOOP AT r_apr INTO wa_bp.

  • Get the relationship number

CLEAR wa_but050.

READ TABLE i_but050 INTO wa_but050

WITH KEY

partner2 = wa_bp-low

BINARY SEARCH.

IF sy-subrc = 0.

l_wa_frg0081-relnr = wa_but050-relnr.

ENDIF.

  • Get the APR guid

CLEAR wa_but000.

READ TABLE i_but000 INTO wa_but000

WITH KEY partner = wa_bp-low

BINARY SEARCH.

IF sy-subrc = 0.

l_wa_frg0081-rel_partner_guid =

wa_but000-partner_guid.

ENDIF.

  • Mark the standard relationship

IF wa_bp-low = p_std_apr.

l_wa_frg0081-is_deflt_partner = c_check.

ELSE.

CLEAR l_wa_frg0081-is_deflt_partner.

ENDIF.

  • Append the relationship

APPEND l_wa_frg0081 TO l_i_frg0081.

ENDLOOP.

  • Update the standard partner indicator (X)***********************

CALL FUNCTION 'CRMH_BUPR_UPDATE'

TABLES

it_frg0080_wrk = l_i_frg0080

it_frg0081_wrk = l_i_frg0081.

ENDFORM. " sub_update_relation

&----


*& Form sub_update_apr_text_for_bp

&----


  • Update APR audit text in transaction BP

----


  • -->P_BP BP Number

  • -->P_STATUS_MSG Status message

  • <--P_SUBRC Sy-subrc value

----


FORM sub_update_apr_text_for_bp USING p_bp TYPE bu_partner

p_status_msg TYPE tdline

CHANGING p_subrc TYPE sysubrc.

DATA:

l_i_header TYPE STANDARD TABLE OF thead,

l_i_longtexts TYPE STANDARD TABLE OF bus_ei_bupa_longtext,

l_i_lines TYPE comt_text_lines_t, "Text lines

l_wa_data_key TYPE bus_ei_struc_longtext_key, "Long text key

l_wa_header TYPE thead,

l_wa_longtexts TYPE bus_ei_bupa_longtext,

l_tdid TYPE tdid,

l_name TYPE tdobname,

l_wa_tline TYPE tline, "SAPscript Text line

l_wa_data TYPE bus_ei_struc_longtext. "Long text

l_tdid = c_textid_apr.

l_name = p_bp.

  • Read all old entries of ID numbers

CALL FUNCTION 'SELECT_TEXT'

EXPORTING

database_only = c_check

object = c_object

name = l_name

id = l_tdid

TABLES

selections = l_i_header

EXCEPTIONS

OTHERS = 0.

READ TABLE l_i_header INTO l_wa_header WITH KEY tdid = l_tdid.

IF sy-subrc = 0.

l_wa_longtexts-data_key-text_id = l_wa_header-tdid.

l_wa_longtexts-data_key-langu = l_wa_header-tdspras.

APPEND l_wa_longtexts TO l_i_longtexts.

ENDIF.

READ TABLE l_i_longtexts INTO l_wa_longtexts INDEX 1.

IF sy-subrc = 0.

  • Delete the long text if new text for that text-id is available

CALL FUNCTION 'DELETE_TEXT'

EXPORTING

id = l_wa_longtexts-data_key-text_id

language = l_wa_longtexts-data_key-langu

name = l_name

object = c_object.

ENDIF.

CLEAR: l_wa_header, l_wa_longtexts.

REFRESH : l_i_longtexts.

l_wa_tline-tdformat = c_tdformat.

l_wa_tline-tdline = p_status_msg.

APPEND l_wa_tline TO l_i_lines.

l_wa_data_key-text_id = c_textid_apr.

l_wa_data_key-langu = sy-langu.

l_wa_longtexts-task = c_task.

l_wa_longtexts-data_key = l_wa_data_key.

l_wa_data-lines = l_i_lines.

l_wa_longtexts-data = l_wa_data.

APPEND l_wa_longtexts TO l_i_longtexts.

l_wa_header-tdid = l_wa_longtexts-data_key-text_id.

l_wa_header-tdspras = l_wa_longtexts-data_key-langu.

l_wa_header-tdname = p_bp.

l_wa_header-tdobject = c_object.

  • Save the long text

CALL FUNCTION 'SAVE_TEXT'

EXPORTING

header = l_wa_header

TABLES

lines = l_wa_longtexts-data-lines

EXCEPTIONS

id = 1

language = 2

name = 3

object = 4

OTHERS = 5.

p_subrc = sy-subrc.

IF p_subrc = 0.

  • save text memory

CALL FUNCTION 'COMMIT_TEXT'

EXPORTING

object = c_object

name = l_name.

  • No need to check sy-subrc as no exception is thrown

ELSE.

v_message = 'Status message updation failed!'(050).

PERFORM sub_append_message USING p_bp

c_check

c_check

v_message.

ENDIF.

ENDFORM. " sub_update_apr_text_for_bp

&----


*& Form sub_update_attrib_10

&----


  • Update Attribute 9, 10 field the BP in Classification Tab

----


  • -->P_BP BP Number

  • -->P_ATTRIB_10 Attrib 10 value

  • -->P_ATTRIB_9 Attrib 9 value

  • <--P_SUBRC Subrc value

----


FORM sub_update_attrib_10 USING p_bp TYPE bu_partner

p_attrib_10 TYPE crmt_bu_katr10

p_attrib_9 TYPE crmt_bu_katr9

CHANGING p_subrc TYPE sysubrc.

DATA:

l_changed_on TYPE timestamp, "UTC Time Stamp

l_home_system TYPE logsys, "Logical system

l_wa_frg0040 TYPE crmm_but_frg0040, "For CRMM_BUT_FRG0040

l_wa_frg0041 TYPE crmm_but_frg0041, "For CRMM_BUT_FRG0041

l_wa_frg0040_bp TYPE crmt_bus_frg0040, "CRM BP Fragment Structure

l_wa_return TYPE bapiret2, "Return parameter

l_i_frg0040_old TYPE crmt_but_frg0040_t, "For CRMM_BUT_FRG0040

l_i_frg0040_new TYPE crmt_but_frg0040_t, "For CRMM_BUT_FRG0040

l_i_frg0041_old TYPE crmt_but_frg0041_t, "For CRMM_BUT_FRG0041

l_i_frg0041_new TYPE crmt_but_frg0041_t, "For CRMM_BUT_FRG0041

l_i_return TYPE STANDARD TABLE OF bapiret2."Return table

  • Get the attribute 10 field of the MAIN BP

CALL FUNCTION 'CRM_BUPA_FRG0040_GET_DETAIL'

EXPORTING

iv_partner_guid = v_bp_guid

IMPORTING

es_data = l_wa_frg0040_bp

et_return = l_i_return.

LOOP AT l_i_return INTO l_wa_return WHERE type = c_error OR

type = c_abend .

p_subrc = 1.

  • Format the message

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

id = l_wa_return-id

lang = sy-langu

no = l_wa_return-number

v1 = l_wa_return-message_v1

v2 = l_wa_return-message_v2

v3 = l_wa_return-message_v3

v4 = l_wa_return-message_v4

IMPORTING

msg = v_message

EXCEPTIONS

not_found = 1

OTHERS = 2.

IF sy-subrc = 0.

  • Populate the error message

PERFORM sub_append_message USING p_bp

c_check

c_check

v_message.

ENDIF.

EXIT.

ENDLOOP.

IF p_subrc = 0.

  • Change the currently valid data.

GET TIME STAMP FIELD l_changed_on.

  • Get home system

CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'

IMPORTING

own_logical_system = l_home_system

EXCEPTIONS

own_logical_system_not_defined = 1

OTHERS = 2.

IF sy-subrc = 0.

l_wa_frg0040-home_system = l_home_system.

ENDIF.

  • Populating the internal table for FRG0040

l_wa_frg0040-client = sy-mandt.

l_wa_frg0040-partner_guid = v_bp_guid.

l_wa_frg0040-changed_by = sy-uname.

l_wa_frg0040-changed_on = l_changed_on.

APPEND l_wa_frg0040 TO l_i_frg0040_old.

APPEND l_wa_frg0040 TO l_i_frg0040_new.

  • Populating the internal table for FRG0041

MOVE-CORRESPONDING l_wa_frg0040_bp TO l_wa_frg0041.

l_wa_frg0041-client = sy-mandt.

l_wa_frg0041-partner_guid = v_bp_guid.

l_wa_frg0041-valid_to = c_validto.

APPEND l_wa_frg0041 TO l_i_frg0041_old.

l_wa_frg0041-attrib_10 = p_attrib_10.

l_wa_frg0041-attrib_9 = p_attrib_9.

APPEND l_wa_frg0041 TO l_i_frg0041_new.

CALL FUNCTION 'CRM_BUPA_FRG0040_SAVE'

EXPORTING

iv_in_update_task = c_check

it_frg0040_old = l_i_frg0040_old

it_frg0041_old = l_i_frg0041_old

it_frg0040_new = l_i_frg0040_new

it_frg0041_new = l_i_frg0041_new.

ENDIF.

ENDFORM. " sub_update_attrib_10

&----


*& Form sub_unlock_bp

&----


  • Unlock the BP

----


  • -->P_BP Unlock the BP

----


FORM sub_unlock_bp USING p_bp TYPE bu_partner.

CALL FUNCTION 'DEQUEUE_EBU_PARTNR'

EXPORTING

partner = p_bp.

ENDFORM. " sub_unlock_bp

&----


*& Form sub_display_summary

&----


  • Displaying header for the report

----


  • No parameter

----


FORM sub_display_summary .

DATA: l_str TYPE string,

l_count_tmp TYPE i.

  • It is written because sy-pagno can not be set without write statement

WRITE space.

  • Output basic report header details

IF sy-pagno = 1.

SKIP 1.

WRITE: / 'Summary:'(025),

/ '.................................................'(026).

SKIP.

  • Write the report header

  • This conversion is done because the

  • filename data element creates new line

l_str = p_afile.

l_count_tmp = v_count - v_sucs_cnt.

WRITE: /3 'Source File :'(027), l_str,

/3 'Target System :'(028), sy-sysid,

/3 'No of BP :'(029), v_count LEFT-JUSTIFIED,

/3 'Updated :'(030), v_sucs_cnt LEFT-JUSTIFIED,

/3 'Failed :'(031), l_count_tmp LEFT-JUSTIFIED,

/3 'Execution Time:'(032), v_time.

ENDIF.

ENDFORM. " sub_display_summary

&----


*& Form sub_display_report

&----


  • Display detail report

----


  • No Parameter

----


FORM sub_display_report .

SORT i_message BY bp main_flag.

SKIP 2.

WRITE: / 'Detail Result:'(033),

/ '.................................................'(026).

  • Display the field level

ULINE AT /(142).

FORMAT COLOR COL_HEADING INTENSIFIED OFF.

WRITE: /1 sy-vline, 'BP'(008),

15 sy-vline, 'Message'(034),

142 sy-vline.

ULINE AT /(142).

  • Display the records

LOOP AT i_message INTO wa_message.

  • If successful

IF wa_message-err_flag = space.

FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.

  • If failed

ELSE.

FORMAT COLOR COL_NEGATIVE INTENSIFIED OFF.

ENDIF.

  • Display the details

WRITE: /1 sy-vline, wa_message-bp,

15 sy-vline, wa_message-message,

142 sy-vline.

ENDLOOP.

ULINE AT /(142).

FORMAT RESET.

ENDFORM. " sub_display_report

==============================================

Read only

Former Member
0 Likes
1,584

in crm bdc will not help u go for some Fm.........

BPOB_MAINTAIN_CHANGES&CRM_TM_UI_BP_MAINTAIN

check this..............else.........

Regards

Anbu

Read only

Former Member
0 Likes
1,584

BDC won't work. Go to function group BUBA_3 there you will find lots of APIs which will help you.

Read only

Former Member
0 Likes
1,584

You can use this bapi.

BAPI_BUPA_ADDRESS_CHANGE.

Read only

0 Likes
1,584

Hi,

I think as for my knowledge the recording for the transaction BP is similar to the recording fo the SAP Njoy transactions which is not feasible.

So Please search for the available bAPIS.

REgards

Abhilash.