Here is the code that I am using for creating an opportunity using CRM_ORDER_MAINTAIN.
DATA: IT_HEADER TYPE CRMT_OBJECT_GUID_TAB,
IT_ORDERADM_H TYPE CRMT_ORDERADM_H_COMT,
IT_ORDERADM_I TYPE CRMT_ORDERADM_I_COMT,
IT_INPUT_FIELD TYPE CRMT_INPUT_FIELD_TAB,
IT_PARTNER TYPE CRMT_PARTNER_COMT,
IT_ORGMAN TYPE CRMT_ORGMAN_COMT,
IT_DOC_FLOW TYPE CRMT_DOC_FLOW_COMT,
IT_OPPORT_H TYPE CRMT_OPPORT_H_COMT,
IT_RETURN TYPE TABLE OF BAPIRET2.
DATA: IS_HEADER LIKE LINE OF IT_HEADER,
IS_ORDERADM_H LIKE LINE OF IT_ORDERADM_H,
IS_ORDERADM_I LIKE LINE OF IT_ORDERADM_I,
IS_INPUT_FIELD LIKE LINE OF IT_INPUT_FIELD,
IS_PARTNER LIKE LINE OF IT_PARTNER,
IS_ORGMAN LIKE LINE OF IT_ORGMAN,
IS_DOC_FLOW LIKE LINE OF IT_DOC_FLOW,
IS_OPPORT_H LIKE LINE OF IT_OPPORT_H.
* IS_INPUT_FIELD_NAMES TYPE CRMT_INPUT_FIELD_NAMES.
DATA: IT_NAMETAB TYPE CRMT_INPUT_FIELD_NAMES_TAB,
IS_NAMETAB TYPE CRMT_INPUT_FIELD_NAMES.
DATA: GT_SAVED_OBJECTS TYPE CRMT_RETURN_OBJECTS,
GT_OBJ_GUIDS TYPE CRMT_OBJECT_GUID_TAB,
GT_OBJ_GUIDS1 TYPE CRMT_OBJECT_GUID_TAB,
GV_LOG_HANDLE TYPE BALLOGHNDL.
DATA: LV_DESCR TYPE CRMT_PROCESS_DESCRIPTION,
LV_NAME TYPE BUT000-NAME_ORG1.
DATA: LV_PARTNER TYPE BUT000-PARTNER,
LV_LOGICAL_KEY TYPE CRMT_LOGICAL_KEY,
* ls_logical_key type CRM_LOGICAL_KEY,
PARTNER_GUID TYPE BUT000-PARTNER_GUID,
LV_HANDLE TYPE CRMT_HANDLE.
DATA: LV_GUID TYPE CRMT_OBJECT_GUID.
DATA: IT_EXCEPTION TYPE CRMT_EXCEPTION_T,
IT_OBJECTS TYPE CRMT_OBJECT_GUID_TAB.
CALL FUNCTION 'CRM_GUID_CREATE'
IMPORTING
EV_GUID = LV_GUID.
REFRESH: IT_HEADER,
IT_ORDERADM_H,
IT_ORDERADM_I,
IT_OPPORT_H,
IT_ORGMAN,
IT_PARTNER,
IT_INPUT_FIELD,
IT_DOC_FLOW,
IT_INPUT_FIELD,
IT_RETURN.
CLEAR: IS_INPUT_FIELD.
CALL FUNCTION 'CRM_INTLAY_GET_HANDLE'
IMPORTING
EV_HANDLE = LV_HANDLE.
* is_orderadm_h-guid = lv_guid.
IS_ORDERADM_H-HANDLE = LV_HANDLE.
IS_ORDERADM_H-PROCESS_TYPE = 'ZOPT'.
IS_ORDERADM_H-POSTING_DATE = SY-DATUM.
IS_ORDERADM_H-DESCRIPTION = 'My Opportunity'.
IS_ORDERADM_H-DESCR_LANGUAGE = 'E'.
IS_ORDERADM_H-CREATED_BY = SY-UNAME.
IS_ORDERADM_H-MODE = 'A'.
APPEND IS_ORDERADM_H TO IT_ORDERADM_H.
CLEAR: IS_ORDERADM_H.
IS_NAMETAB = 'CREATED_BY'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'DESCRIPTION'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'DESCR_LANGUAGE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'MODE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'POSTING_DATE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'PROCESS_TYPE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
* is_input_field-ref_guid = lv_guid.
IS_INPUT_FIELD-REF_KIND = 'A'.
IS_INPUT_FIELD-REF_HANDLE = LV_HANDLE.
IS_INPUT_FIELD-OBJECTNAME = 'ORDERADM_H'.
IS_INPUT_FIELD-FIELD_NAMES[] = IT_NAMETAB[].
INSERT IS_INPUT_FIELD INTO TABLE IT_INPUT_FIELD.
REFRESH IT_NAMETAB[].
IS_OPPORT_H-REF_HANDLE = LV_HANDLE.
IS_OPPORT_H-DESCRIPTION_OPP = 'My Opportunity'.
IS_OPPORT_H-STARTDATE = '20141003'.
IS_OPPORT_H-EXPECT_END = '20141005'.
IS_OPPORT_H-MODE = 'A'.
IS_OPPORT_H-SOURCE = 'Z03'.
IS_OPPORT_H-TYPE = 'Z03'.
IS_OPPORT_H-ZZFLD00000Z = 'ANDHERI'.
IS_OPPORT_H-ZZFLD000010 = '1 RK'.
IS_OPPORT_H-ZZFLD000011 = 'Upto25L'.
IS_OPPORT_H-ZZFLD000013 = 'Ready'.
IS_OPPORT_H-ZZFLD000014 = 'OwnUse'.
IS_OPPORT_H-ZZFLD00002U = 'S1'.
IS_OPPORT_H-ZZFLD00002V = 'C1'.
IS_OPPORT_H-ZZFLD00002W = 'P1'.
IS_OPPORT_H-ZZFLD00002X = 'H1'.
IS_OPPORT_H-ZZFLD00002Z = 'RM1991'.
APPEND IS_OPPORT_H TO IT_OPPORT_H.
CLEAR: IS_OPPORT_H.
IS_NAMETAB = 'DESCRIPTION_OPP'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'EXPECT_END'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
* IS_NAMETAB = 'MODE'.
* APPEND IS_NAMETAB TO IT_NAMETAB.
* CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SOURCE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'STARTDATE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'TYPE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD00000Z'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD000010'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD000011'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD000013'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD000014'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD00002U'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD00002V'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD00002W'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD00002X'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'ZZFLD00002Z'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
* is_input_field-ref_guid = lv_guid.
IS_INPUT_FIELD-REF_KIND = 'A'.
IS_INPUT_FIELD-REF_HANDLE = LV_HANDLE.
IS_INPUT_FIELD-OBJECTNAME = 'OPPORT_H'.
IS_INPUT_FIELD-FIELD_NAMES[] = IT_NAMETAB[].
INSERT IS_INPUT_FIELD INTO TABLE IT_INPUT_FIELD.
* CLEAR: IS_INPUT_FIELD.
REFRESH : IT_NAMETAB[].
* IS_ORGMAN-REF_GUID = LV_GUID.
IS_ORGMAN-REF_HANDLE = LV_HANDLE.
IS_ORGMAN-REF_KIND = 'A'.
IS_ORGMAN-DIS_CHANNEL = '10'.
IS_ORGMAN-DIVISION = '10'.
IS_ORGMAN-SALES_ORG_ORI = 'C'.
IS_ORGMAN-DIS_CHANNEL_ORI = 'C'.
IS_ORGMAN-SALES_OFF_ORI = 'C'.
IS_ORGMAN-SALES_GROUP_ORI = 'C'.
IS_ORGMAN-SALES_ORGR_ORI = 'C'.
IS_ORGMAN-DIVISION_ORI = 'C'.
IS_ORGMAN-SALES_ORG = 'O 50000608'.
IS_ORGMAN-SALES_OFFICE = 'O 50000679'.
IS_ORGMAN-SALES_ORG_SHORT = 'KRPL'.
IS_ORGMAN-SALES_OFFICE_SHORT = '1010'.
IS_ORGMAN-SALES_ORG_RESP_SHORT = '1010'.
IS_ORGMAN-SALES_ORG_RESP = 'O 50000679'.
IS_ORGMAN-MODE = 'A'.
INSERT IS_ORGMAN INTO TABLE IT_ORGMAN.
CLEAR: IS_ORGMAN.
IS_NAMETAB = 'DIS_CHANNEL'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'DIS_CHANNEL_ORI'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'DIVISION'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'DIVISION_ORI'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'MODE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_GROUP_ORI'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_OFFICE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_OFFICE_SHORT'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_OFF_ORI'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_ORG'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_ORG_ORI'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_ORG_RESP'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_ORG_RESP_SHORT'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_ORG_SHORT'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'SALES_ORGR_ORI'.
INSERT IS_NAMETAB INTO TABLE IT_NAMETAB.
CLEAR: IS_NAMETAB.
* is_input_field-ref_guid = lv_guid.
IS_INPUT_FIELD-REF_KIND = 'A'.
IS_INPUT_FIELD-REF_HANDLE = LV_HANDLE.
IS_INPUT_FIELD-OBJECTNAME = 'ORGMAN'.
IS_INPUT_FIELD-FIELD_NAMES[] = IT_NAMETAB[].
INSERT IS_INPUT_FIELD INTO TABLE IT_INPUT_FIELD.
* CLEAR: IS_INPUT_FIELD.
REFRESH IT_NAMETAB[].
* IS_PARTNER-REF_GUID = LV_GUID.
IS_PARTNER-REF_HANDLE = LV_HANDLE. " EMPLOYEE RESPONSIBLE
IS_PARTNER-PARTNER_FCT = 'ZBRK_OPP'.
IS_PARTNER-PARTNER_NO = '0000200011'.
IS_PARTNER-REF_KIND = 'A'.
IS_PARTNER-DISPLAY_TYPE = 'BP'.
IS_PARTNER-NO_TYPE = 'BP'.
SELECT SINGLE PARTNER_GUID FROM BUT000 INTO PARTNER_GUID WHERE PARTNER = '0000200011'. "LS_FINAL-PARTNER.
IS_PARTNER-PARTNER_GUID = PARTNER_GUID.
INSERT IS_PARTNER INTO TABLE IT_PARTNER.
* is_partner-ref_guid = lv_guid.
IS_PARTNER-REF_HANDLE = LV_HANDLE. " EMPLOYEE RESPONSIBLE
IS_PARTNER-PARTNER_FCT = 'ZCREATBY'.
IS_PARTNER-PARTNER_NO = '0000000220'.
IS_PARTNER-REF_KIND = 'A'.
IS_PARTNER-DISPLAY_TYPE = 'BP'.
IS_PARTNER-NO_TYPE = 'BP'.
SELECT SINGLE PARTNER_GUID FROM BUT000 INTO PARTNER_GUID WHERE PARTNER = '0000000220'. "LS_FINAL-PARTNER.
IS_PARTNER-PARTNER_GUID = PARTNER_GUID.
INSERT IS_PARTNER INTO TABLE IT_PARTNER.
* IS_PARTNER-ref_guid = lv_guid.
IS_PARTNER-REF_HANDLE = LV_HANDLE. " EMPLOYEE RESPONSIBLE
IS_PARTNER-PARTNER_FCT = 'ZFOLLALO'.
IS_PARTNER-PARTNER_NO = '0000175001'.
IS_PARTNER-REF_KIND = 'A'.
IS_PARTNER-DISPLAY_TYPE = 'BP'.
IS_PARTNER-NO_TYPE = 'BP'.
SELECT SINGLE PARTNER_GUID FROM BUT000 INTO PARTNER_GUID WHERE PARTNER = '0000175001'. "LS_FINAL-PARTNER.
IS_PARTNER-PARTNER_GUID = PARTNER_GUID.
INSERT IS_PARTNER INTO TABLE IT_PARTNER.
* is_partner-ref_guid = lv_guid.
IS_PARTNER-REF_HANDLE = LV_HANDLE. " EMPLOYEE RESPONSIBLE
IS_PARTNER-PARTNER_FCT = 'ZSALESEX'.
IS_PARTNER-PARTNER_NO = '0000000220'.
IS_PARTNER-REF_KIND = 'A'.
IS_PARTNER-DISPLAY_TYPE = 'BP'.
IS_PARTNER-NO_TYPE = 'BP'.
SELECT SINGLE PARTNER_GUID FROM BUT000 INTO PARTNER_GUID WHERE PARTNER = '0000000220'. "LS_FINAL-PARTNER.
IS_PARTNER-PARTNER_GUID = PARTNER_GUID.
INSERT IS_PARTNER INTO TABLE IT_PARTNER.
* is_partner-ref_guid = lv_guid.
IS_PARTNER-REF_HANDLE = LV_HANDLE. " EMPLOYEE RESPONSIBLE
IS_PARTNER-PARTNER_FCT = '00000021'.
IS_PARTNER-PARTNER_NO = '0000401197'.
IS_PARTNER-REF_KIND = 'A'.
IS_PARTNER-DISPLAY_TYPE = 'BP'.
IS_PARTNER-NO_TYPE = 'BP'.
SELECT SINGLE PARTNER_GUID FROM BUT000 INTO PARTNER_GUID WHERE PARTNER = '0000401197'. "LS_FINAL-PARTNER.
IS_PARTNER-PARTNER_GUID = PARTNER_GUID.
INSERT IS_PARTNER INTO TABLE IT_PARTNER.
IS_NAMETAB = 'DISPLAY_TYPE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'KIND_OF_ENTRY'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'NO_TYPE'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'PARTNER_FCT'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
IS_NAMETAB = 'PARTNER_NO'.
APPEND IS_NAMETAB TO IT_NAMETAB.
CLEAR: IS_NAMETAB.
LV_LOGICAL_KEY = IS_PARTNER-REF_PARTNER_HANDLE.
LV_LOGICAL_KEY+4 = IS_PARTNER-REF_PARTNER_FCT.
LV_LOGICAL_KEY+12 = IS_PARTNER-REF_PARTNER_NO.
LV_LOGICAL_KEY+28 = IS_PARTNER-REF_DISPLAY_TYPE.
LV_LOGICAL_KEY+30 = IS_PARTNER-REF_NO_TYPE.
* is_input_field-ref_guid = lv_guid.
IS_INPUT_FIELD-LOGICAL_KEY = LV_LOGICAL_KEY.
IS_INPUT_FIELD-REF_KIND = 'A'.
IS_INPUT_FIELD-REF_HANDLE = LV_HANDLE.
IS_INPUT_FIELD-OBJECTNAME = 'PARTNER'.
IS_INPUT_FIELD-FIELD_NAMES[] = IT_NAMETAB[].
INSERT IS_INPUT_FIELD INTO TABLE IT_INPUT_FIELD.
* CLEAR: IS_INPUT_FIELD,LV_LOGICAL_KEY.
REFRESH IT_NAMETAB[].
IF IT_PARTNER IS NOT INITIAL AND
IT_ORDERADM_H IS NOT INITIAL AND
IT_OPPORT_H IS NOT INITIAL AND
IT_INPUT_FIELD IS NOT INITIAL.
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
IT_OPPORT_H = IT_OPPORT_H
IT_PARTNER = IT_PARTNER
IT_ORGMAN = IT_ORGMAN
CHANGING
CT_ORDERADM_H = IT_ORDERADM_H
CT_INPUT_FIELDS = IT_INPUT_FIELD
CV_LOG_HANDLE = GV_LOG_HANDLE
EXCEPTIONS
ERROR_OCCURRED = 1
DOCUMENT_LOCKED = 2
NO_CHANGE_ALLOWED = 3
NO_AUTHORITY = 4
OTHERS = 5.
REFRESH GT_OBJ_GUIDS.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* GET GUIDS
LOOP AT IT_ORDERADM_H INTO IS_ORDERADM_H.
INSERT IS_ORDERADM_H-GUID INTO TABLE GT_OBJ_GUIDS.
ENDLOOP.
DATA : GS_DISPLAY_PROFILE TYPE BAL_S_PROF.
DATA : IT_MSG_HANDLE TYPE BAL_T_MSGH,
WA_MSG_HANDLE TYPE BALMSGHNDL.
DATA : W_MSG_TYP TYPE SYMSGTY.
DATA : LS_MSG TYPE BAL_S_MSG,
IT_MSG TYPE TABLE OF BAL_S_MSG.
CALL FUNCTION 'CRM_MESSAGES_MAKE_DSP_PROFILE'
EXPORTING
IV_IN_TRANSACTION = 'X'
IMPORTING
ES_PROF = GS_DISPLAY_PROFILE.
CALL FUNCTION 'CRM_MESSAGES_DISPLAY'
EXPORTING
* IV_LEVEL = ' '
* IV_SHOW_ALL_LOGS = FALSE
* IV_LOG_HANDLE =
IV_DOCUMENT_NUMBER = IS_ORDERADM_H-GUID
IS_PROF = GS_DISPLAY_PROFILE
IV_SURPRESS_OUTPUT = 'X'
IV_AMODAL = ' '
IV_SUBSCREEN_SET_DATA = ' '
IV_IN_TRANSACTION = 'X'
IV_AMODAL_CONTROL = 'X'
IV_AMODAL_CONTROL_REFRESH = 'X'
* IV_INITIALIZE = FALSE
* IV_REPID =
* IV_DYNNR =
* IT_MSGH =
* IT_LOGH =
IMPORTING
ET_MSG_HANDLE = IT_MSG_HANDLE
* ES_PROF =
EV_HIGHEST_TYPE = W_MSG_TYP
* EV_MSG_COUNT =
* EV_CONTAINER =
* EXCEPTIONS
* NOT_FOUND = 1
* DISPLAY_ERROR = 2
* INVALID_LEVEL = 3
* OTHERS = 4
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT IT_MSG_HANDLE INTO WA_MSG_HANDLE.
CALL FUNCTION 'BAL_LOG_MSG_READ'
EXPORTING
I_S_MSG_HANDLE = WA_MSG_HANDLE
IMPORTING
E_S_MSG = LS_MSG
EXCEPTIONS
LOG_NOT_FOUND = 1
MSG_NOT_FOUND = 2
OTHERS = 3.
* IF LS_MSG-MSGTY = 'E'.
APPEND LS_MSG TO IT_MSG.
* ENDIF.
ENDLOOP.
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
IT_OBJECTS_TO_SAVE = GT_OBJ_GUIDS
IMPORTING
ET_SAVED_OBJECTS = GT_SAVED_OBJECTS
ET_EXCEPTION = IT_EXCEPTION
ET_OBJECTS_NOT_SAVED = IT_OBJECTS
EXCEPTIONS
DOCUMENT_NOT_SAVED = 1
OTHERS = 2.
IF SY-SUBRC = 0.
COMMIT WORK AND WAIT.
ENDIF.