Creating Business Partner In SAP CRM
*&———————————————————————*
*& Name : Premanand Shelke
*& Emp ID : 129210
*& Description : Sales Order Report by adding necessary header level
*& data and at least one item have quantity 3 or more.
*&———————————————————————
*&———————————————————————*
REPORT ZCRM_SO_ALL_210 NO STANDARD PAGE HEADING.
*———————————————————————-*
* Internal tables and work areas declaration
*———————————————————————-*
DATA: I_ORDERADM_H TYPE CRMT_ORDERADM_H_COMT,
WA_ORDERADM_H TYPE CRMT_ORDERADM_H_COM,
IT_ORDERADM_u TYPE CRMT_ORDERADM_I_COMT,
WA_ORDERADM_I TYPE CRMT_ORDERADM_I_COM,
I_PARTNER TYPE CRMT_PARTNER_COMT,
WA_PARTNER TYPE CRMT_PARTNER_COM,
I_ORGMAN TYPE CRMT_ORGMAN_COMT,
WA_ORGMAN TYPE CRMT_ORGMAN_COM,
IT_SALES TYPE CRMT_SALES_COMT,
WA_SALES TYPE CRMT_SALES_COM,
IT_PRICING TYPE CRMT_PRICING_COMT,
WA_PRICING TYPE CRMT_PRICING_COM,
IT_SHIPPING TYPE CRMT_SHIPPING_COMT,
WA_SHIPPING TYPE CRMT_SHIPPING_COM,
I_PRODUCT TYPE CRMT_PRODUCT_I_COMT,
WA_PRODUCT TYPE CRMT_PRODUCT_I_COM,
IT_SCHEDLIN_U TYPE CRMT_SCHEDLIN_I_COMT,
WA_SCHEDLIN_I TYPE CRMT_SCHEDLIN_I_COM,
I_SCHEDLIN TYPE CRMT_SCHEDLIN_EXTDT,
WA_SCHEDLIN TYPE CRMT_SCHEDLIN_EXTD,
WA_INPUT_FIELDS TYPE CRMT_INPUT_FIELD,
I_INPUT_FIELDS TYPE CRMT_INPUT_FIELD_TAB,
I_FIELD_NAMES TYPE CRMT_INPUT_FIELD_NAMES_TAB,
WA_FIELD_NAMES TYPE CRMT_INPUT_FIELD_NAMES,
I_OBJECT_SAVE TYPE TABLE OF BAPIBUS20001_GUID_DIS,
WA_OBJECT_SAVE TYPE BAPIBUS20001_GUID_DIS,
I_SAVED_OBJECTS TYPE TABLE OF BAPIBUS20001_OBJECT_ID,
WA_SAVED_OBJECTS TYPE BAPIBUS20001_OBJECT_ID,
IT_BAPIRET TYPE TABLE OF BAPIRET2.
*Variable Declaration
DATA: GV_GUID TYPE GUID_16,
GV_GUID_PROD TYPE guid_16,
GV_GUID1 TYPE GUID_16.
*Constant Declaration
DATA: C_HANDLE(10) TYPE N VALUE ‘0000000001’,
C_HANDLE1(10) TYPE N VALUE ‘0000000000’,
C_PART_HANDLE1(4) TYPE N VALUE ‘0001’,
C_PART_HANDLE2(4) TYPE N VALUE ‘0002’,
C_KIND_OF_ENTRY(1) TYPE C VALUE ‘C’,
C_B(1) TYPE C VALUE ‘B’,
C_PART_FCT1(8) TYPE N VALUE ‘00000001’,
C_PART_FCT2(8) TYPE N VALUE ‘00000002’,
C_PART_NO(32) TYPE C VALUE ‘SA-2509’,
C_DISP_TYPE(2) TYPE C VALUE ‘BP’,
C_NO_TYPE(2) TYPE C VALUE ‘BP’,
C_DISP(20) TYPE C VALUE ‘DISPLAY_TYPE’,
C_KIND(20) TYPE C VALUE ‘KIND_OF_ENTRY’,
C_NOTYPE(10) TYPE C VALUE ‘NO_TYPE’,
C_PARTFCT(15) TYPE C VALUE ‘PARTNER_FCT’,
C_PARTNO(10) TYPE C VALUE ‘PARTNER_NO’,
C_MODE(4) TYPE C VALUE ‘MODE’,
C_PTYPE(20) TYPE C VALUE ‘PROCESSTYPE’,
C_TA(4) TYPE C VALUE ‘TA’,
C_A(1) TYPE C VALUE ‘A’,
C_PARTNER(10) TYPE C VALUE ‘PARTNER’,
C_ORDERADM_H TYPE CRMT_OBJECT_NAME VALUE ‘ORDERADM_H’,
C_WINE(4) TYPE C VALUE ‘WINE’,
C_DESC(40) TYPE C VALUE ‘RED WINE’,
C_E(2) TYPE C VALUE ‘EN’,
C_TAN(4) TYPE C VALUE ‘TAN’,
C_ORDERED_PROD(20) TYPE C VALUE ‘ORDERED_PRODUCT’,
C_ORDERADM_I TYPE CRMT_OBJECT_NAME VALUE ‘ORDERADM_I’,
C_SCHEDLIN_I TYPE CRMT_OBJECT_NAME VALUE ‘SCHEDLIN_I’.
*———————————————————————-*
*Start of Selection.
*———————————————————————*
START-OF-SELECTION.
*Calling subroutine to create GUID.
PERFORM F_CREATE_GUID.
*Calling subroutine to create GUID.
PERFORM F_CREATE_GUID1.
*Assigning values to variables.
GV_GUID_PROD = ‘7B160839EF59C249’.
*Calling subroutine to fill values for the table CRMD_ORDERADM_H.
PERFORM F_CREATE_ORDERADMH USING C_HANDLE GV_GUID C_TA C_A.
*Calling subroutine to fill values for the table I_PARTNER.
PERFORM F_CREATE_PARTNER USING:
GV_GUID C_HANDLE1 C_A C_PART_HANDLE1
C_KIND_OF_ENTRY C_PART_FCT1 C_PART_NO C_DISP_TYPE C_NO_TYPE.
*Calling subroutine to fill values for the table I_ORGMAN.
PERFORM F_CREATE_ORGMAN.
*Calling subroutine to fill values for the table CRMD_ORDERADM_I.
PERFORM F_CREATE_ORDERADM_I.
*Calling subroutine to fill values for the table SCHEDLIN_I.
PERFORM F_CREATE_SCHEDLIN_I USING C_HANDLE1.
*Calling subroutine to call function module CRM_ORDER_MAINTAIN.
PERFORM F_CRM_ORDER_MAINTAIN.
*Calling function module to save order.
PERFORM F_ORDER_SAVE.
*&———————————————————————*
*& Form F_CREATE_ORDERADMH
*&———————————————————————*
* This subroutine is used to fill values in the internal table
* of ORDERADM_H.
*———————————————————————-*
FORM F_CREATE_ORDERADMH USING VALUE(P_HANDLE) TYPE N
VALUE(P_GUID) TYPE GUID_16
VALUE(P_PTYPE) TYPE C
VALUE(P_MODE) TYPE C.
*Passing values of the parameters in the work area of internal tabel
*I_ORDERADM_H.
WA_ORDERADM_H–HANDLE = P_HANDLE.
WA_ORDERADM_H–GUID = P_GUID.
WA_ORDERADM_H–PROCESS_TYPE = P_PTYPE.
WA_ORDERADM_H–MODE = P_MODE.
*Inserting values from work area to internal table.
INSERT WA_ORDERADM_H INTO TABLE I_ORDERADM_H.
CLEAR WA_ORDERADM_H.
*Calling Subroutine to fill the field names.
PERFORM F_FIELD_NAMES USING:
C_MODE ”,
C_PTYPE C_B.
*Calling Subroutine to fill Input fields table.
PERFORM F_INPUT_FIELDS USING C_HANDLE GV_GUID C_B C_ORDERADM_H ”.
ENDFORM. ” F_CREATE_ORDERADMH
*&———————————————————————*
*& Form F_CRM_ORDER_MAINTAIN
*&——————————————————————–*
* This subroutine is used to call function module to create
* standard order.
*———————————————————————-*
FORM F_CRM_ORDER_MAINTAIN .
*Calling Function module to create standard order.
CALL FUNCTION ‘CRM_ORDER_MAINTAIN’
EXPORTING
* IT_OPPORT_H =
* IT_LEAD_H =
* IT_ACTIVITY_H =
* IT_SALES = IT_SALES
* IT_PRICING = IT_PRICING
* IT_PRICING_I =
* IT_PRIDOC =
IT_ORGMAN = I_ORGMAN
* IT_SHIPPING = IT_SHIPPING
** IT_ACTIVITY_I =
* IT_PRODUCT_I = I_PRODUCT
IT_SCHEDLIN_I = IT_SCHEDLIN_U
IT_PARTNER = I_PARTNER
CHANGING
CT_ORDERADM_H = I_ORDERADM_H
CT_ORDERADM_I = IT_ORDERADM_u
CT_INPUT_FIELDS = I_INPUT_FIELDS
EXCEPTIONS
ERROR_OCCURRED = 1
DOCUMENT_LOCKED = 2
NO_CHANGE_ALLOWED = 3
NO_AUTHORITY = 4
OTHERS = 5
*If function module is not called successfully.
IF SY–SUBRC <> 0.
*Display message that order cannot be created successsfully.
MESSAGE ‘Sales Order Is Not Created’ TYPE ‘E’.
ENDIF.
ENDFORM. ” F_CRM_ORDER_MAINTAIN
*&———————————————————————*
*& Form F_FIELD_NAMES
*&———————————————————————*
* text
*———————————————————————*
* –>P_FIELD_NAME text
* –>P_CHANGEABLE text
*———————————————————————-*
FORM F_FIELD_NAMES USING VALUE(P_FIELD_NAME) TYPE C
VALUE(P_CHANGEABLE) TYPE C.
*Passing values in the work area of internal tabel I_FIELD_NAMES1.
WA_FIELD_NAMES–FIELDNAME = P_FIELD_NAME.
WA_FIELD_NAMES–CHANGEABLE = P_CHANGEABLE.
*Inserting values from work area to internal table.
INSERT WA_FIELD_NAMES INTO TABLE I_FIELD_NAMES.
CLEAR WA_FIELD_NAMES.
ENDFORM. ” F_FIELD_NAMES
*&———————————————————————*
*& Form F_INPUT_FIELDS
*&———————————————————————*
* text
*———————————————————————-*
* –>P_HANDLE text
* –>P_GUID text
* –>P_KIND text
* –>P_OBJECTNAME text
* –>P_LOGICAL_KEY text
*———————————————————————-*
FORM F_INPUT_FIELDS USING VALUE(P_HANDLE)
VALUE(P_GUID)
VALUE(P_KIND)
VALUE(P_OBJECTNAME)
VALUE(P_LOGICAL_KEY) .
*Passing values in the work area of INPUT_FIELDS1.
WA_INPUT_FIELDS–REF_HANDLE = P_HANDLE.
WA_INPUT_FIELDS–REF_GUID = P_GUID.
WA_INPUT_FIELDS–REF_KIND = P_KIND.
WA_INPUT_FIELDS–OBJECTNAME = P_OBJECTNAME.
WA_INPUT_FIELDS–LOGICAL_KEY = P_LOGICAL_KEY.
*Passing Field names in the work area of INPUT_FIELDS1.
WA_INPUT_FIELDS–FIELD_NAMES = I_FIELD_NAMES.
*Inserting values from work area to internal table.
INSERT WA_INPUT_FIELDS INTO TABLE I_INPUT_FIELDS.
CLEAR WA_INPUT_FIELDS.
* ENDLOOP.
* ENDIF.
ENDFORM. ” F_INPUT_FIELDS
*&———————————————————————*
*& Form F_CREATE_PARTNER
*&———————————————————————*
* text
*———————————————————————-*
* –>P_REF_GUID text
* –>P_HANDLE text
* –>P_REF_KIND text
* –>P_PART_HANDLE text
* –>P_KIND_OF_ENTRY text
* –>P_PART_FCT text
* –>P_PART_NO text
* –>P_DISP_TYPE text
* –>P_NO_TYPE text
*———————————————————————*
FORM F_CREATE_PARTNER USING VALUE(P_GUID) TYPE GUID_16
VALUE(P_HANDLE) TYPE N
VALUE(P_REF_KIND) TYPE C
VALUE(P_PART_HANDLE) TYPE N
VALUE(P_KIND_OF_ENTRY) TYPE C
VALUE(P_PART_FCT) TYPE N
VALUE(P_PART_NO) TYPE C
VALUE(P_DISP_TYPE) TYPE C
VALUE(P_NO_TYPE) TYPE C.
*Passing values of the parameters in the work area of internal tabel
*IT_PARTNER1.
WA_PARTNER–REF_GUID = P_GUID.
WA_PARTNER–REF_HANDLE = P_HANDLE.
WA_PARTNER–REF_KIND = P_REF_KIND.
WA_PARTNER–REF_PARTNER_HANDLE = P_PART_HANDLE.
WA_PARTNER–KIND_OF_ENTRY = P_KIND_OF_ENTRY.
WA_PARTNER–PARTNER_FCT = P_PART_FCT.
WA_PARTNER–PARTNER_NO = P_PART_NO.
WA_PARTNER–DISPLAY_TYPE = P_DISP_TYPE.
WA_PARTNER–NO_TYPE = P_NO_TYPE.
*Inserting values from work area to internal table.
INSERT WA_PARTNER INTO TABLE I_PARTNER.
CLEAR WA_PARTNER.
CLEAR I_FIELD_NAMES.
*Calling Subroutine to fill the field names.
PERFORM F_FIELD_NAMES USING:
C_DISP ”,
C_KIND ”,
C_NOTYPE ”,
C_PARTFCT ”,
C_PARTNO ”.
*Calling Subroutine to fill Input fields table.
PERFORM F_INPUT_FIELDS USING:
C_HANDLE1 GV_GUID C_A C_PARTNER
C_PART_HANDLE1.
ENDFORM. ” F_CREATE_PARTNER
*&———————————————————————*
*& Form F_ORDER_SAVE
*&———————————————————————*
* text
*———————————————————————*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM F_ORDER_SAVE .
*Passing value of GUID to work area of internal table I_OBJECT_SAVE.
WA_OBJECT_SAVE–GUID = GV_GUID.
* Inserting value from work area to internal table.
INSERT WA_OBJECT_SAVE INTO TABLE I_OBJECT_SAVE.
CLEAR WA_OBJECT_SAVE.
*Calling Function module to save standard order.
CALL FUNCTION ‘BAPI_BUSPROCESSND_SAVE’
TABLES
OBJECTS_TO_SAVE = I_OBJECT_SAVE
SAVED_OBJECTS = I_SAVED_OBJECTS
RETURN = IT_BAPIRET.
IF IT_BAPIRET[] IS INITIAL.
* MESSAGE ‘Sales Order Is Not Created’ TYPE ‘E’.
IF NOT I_SAVED_OBJECTS[] IS INITIAL.
LOOP AT I_SAVED_OBJECTS INTO WA_SAVED_OBJECTS.
WRITE: /1 ‘Transaction number’,
20 WA_SAVED_OBJECTS–OBJECT_ID,
30 ‘Is Saved’.
ENDLOOP.
ENDIF.
ENDIF.
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’.
ENDFORM. ” F_ORDER_SAVE
*&———————————————————————*
*& Form F_CREATE_SALES
*&———————————————————————*
* text
*———————————————————————*
* –>P_HANDLE1 text
* –>P_KIND_B text
*———————————————————————-*
FORM F_CREATE_SALES USING VALUE(P_HANDLE1)
VALUE(P_KIND_B).
WA_SALES–REF_HANDLE = P_HANDLE1.
WA_SALES–REF_KIND = P_KIND_B.
INSERT WA_SALES INTO TABLE IT_SALES.
CLEAR WA_SALES.
ENDFORM. ” F_CREATE_SALES
*&———————————————————————*
*& Form F_CREATE_PRICING
*&———————————————————————*
* text
*———————————————————————*
* –>P_HANDLE1 text
* –>P_KIND_B text
*———————————————————————-*
FORM F_CREATE_PRICING USING VALUE(P_HANDLE1)
VALUE(P_KIND_B).
WA_PRICING–REF_HANDLE = P_HANDLE1.
WA_PRICING–REF_KIND = P_KIND_B.
INSERT WA_PRICING INTO TABLE IT_PRICING.
CLEAR WA_PRICING.
ENDFORM. ” F_CREATE_PRICING
*&———————————————————————*
*& Form F_CREATE_SHIPPING
*&———————————————————————*
* text
*———————————————————————-*
* –>P_HANDLE1 text
* –>P_KIND_B text
*———————————————————————-*
FORM F_CREATE_SHIPPING USING VALUE(P_HANDLE1)
VALUE(P_KIND_B).
WA_SHIPPING–REF_HANDLE = P_HANDLE1.
WA_SHIPPING–REF_KIND = P_KIND_B.
INSERT WA_SHIPPING INTO TABLE IT_SHIPPING.
CLEAR WA_SHIPPING.
ENDFORM. ” F_CREATE_SHIPPING
*&———————————————————————*
*& Form F_CREATE_PRODUCT
*&———————————————————————*
* text
*———————————————————————-*
* –>P_HANDLE1 text
*———————————————————————-*
FORM F_CREATE_PRODUCT USING VALUE(P_HANDLE1).
WA_PRODUCT–REF_GUID = GV_GUID1.
* WA_PRODUCT-REF_HANDLE = P_HANDLE1.
INSERT WA_PRODUCT INTO TABLE I_PRODUCT.
CLEAR WA_PRODUCT.
ENDFORM. ” F_CREATE_PRODUCT
*&———————————————————————*
*& Form F_CREATE_SCHEDLIN_I
*&———————————————————————*
* text
*———————————————————————-*
* –>P_HANDLE1 text
*———————————————————————-*
FORM F_CREATE_SCHEDLIN_I USING VALUE(P_HANDLE1).
* WA_SCHEDLIN-GUID = GV_GUID1.
* WA_SCHEDLIN-LOGICAL_KEY = ‘0’.
WA_SCHEDLIN–QUANTITY = ‘10.00’.
INSERT WA_SCHEDLIN INTO TABLE I_SCHEDLIN.
CLEAR WA_SCHEDLIN.
WA_SCHEDLIN_I–REF_GUID = GV_GUID1.
* WA_SCHEDLIN_I-REF_HANDLE = P_HANDLE1.
WA_SCHEDLIN_I–SCHEDLINES = I_SCHEDLIN.
INSERT WA_SCHEDLIN_I INTO TABLE IT_SCHEDLIN_U.
CLEAR WA_SCHEDLIN_I.
CLEAR I_FIELD_NAMES.
PERFORM F_FIELD_NAMES USING:
‘LOGICAL KEY’ ”,
‘QUANTITY’ ”.
PERFORM F_INPUT_FIELDS USING ” GV_GUID1 C_B ‘SCHEDLIN’ ”.
CLEAR I_FIELD_NAMES.
PERFORM F_INPUT_FIELDS USING C_HANDLE GV_GUID1 C_B C_SCHEDLIN_I ”.
ENDFORM. ” F_CREATE_SCHEDLINES_I
*&———————————————————————*
*& Form F_CREATE_GUID
*&———————————————————————*
* text
*———————————————————————-*
* –>P_GUID text
*———————————————————————-*
FORM F_CREATE_GUID.
CALL FUNCTION ‘GUID_CREATE’
IMPORTING
EV_GUID_16 = GV_GUID.
ENDFORM. ” F_CREATE_GUID
*&———————————————————————*
*& Form F_CREATE_ORDERADM_I
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM F_CREATE_ORDERADM_I .
WA_ORDERADM_I–GUID = GV_GUID1.
WA_ORDERADM_I–HANDLE = C_HANDLE.
WA_ORDERADM_I–HEADER = GV_GUID.
* WA_ORDERADM_I-PRODUCT = ‘7B160839EF59C249’ . “GV_GUID_PROD.
WA_ORDERADM_I–ORDERED_PROD = ‘WINE’.
wa_orderadm_i–number_int = ’10’.
WA_ORDERADM_I–DESCRIPTION = ‘RED WINE’.
WA_ORDERADM_I–ITM_LANGUAGE = ‘EN’.
WA_ORDERADM_I–ITM_TYPE = ‘ZAGN’.
WA_ORDERADM_I–PRODUCT_KIND = ‘A’.
WA_ORDERADM_I–MODE = ‘A’.
* append wa_orderadm_i to IT_ORDERADM_u .
INSERT WA_ORDERADM_I INTO TABLE IT_ORDERADM_u.
CLEAR WA_ORDERADM_I.
CLEAR I_FIELD_NAMES.
PERFORM F_FIELD_NAMES USING: C_ORDERED_PROD ”,
‘DESCRIPTION’ ‘A’,
‘ITM_TYPE’ ”,
‘MODE’ ”.
PERFORM F_INPUT_FIELDS USING C_HANDLE GV_GUID1 C_B C_ORDERADM_I ”.
ENDFORM. ” F_CREATE_ORDERADM_I
*&——————————————————————*
*& Form F_CREATE_GUID1
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM F_CREATE_GUID1 .
CALL FUNCTION ‘GUID_CREATE’
IMPORTING
EV_GUID_16 = GV_GUID1.
ENDFORM. ” F_CREATE_GUID1
*&——————————————————————-*
*& Form F_CREATE_ORGMAN
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM F_CREATE_ORGMAN .
WA_ORGMAN–REF_HANDLE = ‘0000000000’.
WA_ORGMAN–REF_GUID = GV_GUID.
WA_ORGMAN–REF_KIND = ‘A’.
WA_ORGMAN–DIS_CHANNEL = ’01’.
WA_ORGMAN–DIS_CHANNEL_ORI = ‘C’.
wa_orgman–sales_orgr_ori = ‘C’.
wa_orgman–sales_org_ori = ‘C’.
WA_ORGMAN–SALES_ORG_RESP = ‘O 50000127’.
WA_ORGMAN–MODE = ‘A’.
wa_orgman–sales_org_resp_short = ‘SORG.BP01’.
wa_orgman–sales_org_short = ‘SORG.BP01’.
* wa_orgman-sales_org_resp = ‘S 50000207’.
INSERT WA_ORGMAN INTO TABLE I_ORGMAN.
CLEAR WA_ORGMAN.
CLEAR I_FIELD_NAMES.
PERFORM F_FIELD_NAMES USING: ‘DIS_CHANNEL’ ”,
‘DIS_CHANNEL_ORI’ ”,
‘NO_DETERMINATION’ ”,
‘SALES_ORG’ ”,
‘SALES_ORG_ORI’ ”,
‘SALES_ORG_RESP’ ”,
‘SALES_ORG_RESP_SHORT’ ”,
‘SERVICE_ORG_RESP’ ”.
PERFORM F_INPUT_FIELDS USING C_HANDLE1 GV_GUID ‘A’ ‘ORGMAN’ ”.
ENDFORM. ” F_CREATE_ORGMAN