on 08-28-2013 10:55 AM
Hello,
I'm trying to set up a loyalty management sceneario on SAP CRM Ehp2. Practically we have to create member activities which will then be processed and will update the membership points.
Based on SAP documentation the MA can be processed:
What I'm trying to do is create MA using FM CRM_LOY_MA_CREATE_API, but I'm not able to set the status to "Ready for Batch" (System Status = I8122 and User Status = E0004). I've checked the settings for the status profile and everything is correct. I'm able to create MA only in status "Created", but these are not processed by RLOY_ENGINE_SCHEDULE.
Is there a way to create MA in status "Ready for Batch" or am I missing some configuration?
Thanks,
Best,
Olgen
Hello Olgen,
There is template to create member activities using LSMW. You can check in SAP Note 1331292 - Upload of Loyalty Member Activities via LSMW.
Here is a sample program using the status you have mentioned before:
Find for *******STATUS*********************
REPORT zXXX_XXX_XXXX_XX.
**********************************************************************
* TIPOS (ty_...) *
**********************************************************************
TYPES: BEGIN OF ty_programa,
program_id TYPE crm_mktpl_external_id,
guid TYPE crm_mktpl_ib_mktproject_guid,
END OF ty_programa.
TYPES: BEGIN OF ty_tvarv,
program_id TYPE crm_mktpl_external_id,
END OF ty_tvarv.
TYPES: BEGIN OF ty_prog,
key TYPE char1,
value TYPE char20,
END OF ty_prog.
**********************************************************************
* TABELAS INTERNAS (it_...) *
**********************************************************************
DATA: it_prog TYPE TABLE OF ty_prog,
it_values_a TYPE TABLE OF dd07v,
it_files TYPE TABLE OF eps2fili,
it_values TYPE TABLE OF string,
it_zcrmt021 TYPE TABLE OF zcrmt021,
it_programa TYPE TABLE OF ty_programa,
it_tvarv TYPE TABLE OF ty_tvarv,
it_gen TYPE crmt_loy_ma_gen_attr,
it_spe TYPE crmt_loy_ma_specific_attr.
**********************************************************************
* WORK AREAS (wa_...) *
**********************************************************************
DATA: wa_files TYPE eps2fili,
wa_zcrmt021 TYPE zcrmt021,
wa_programa TYPE ty_programa.
**********************************************************************
* Variaveis (lv_...) *
**********************************************************************
DATA: lv_file TYPE string,
lv_path TYPE string,
lv_path_processed TYPE string,
lv_content TYPE string,
lv_count TYPE n LENGTH 13,
lv_result TYPE boolean,
lv_path_pro_stva TYPE epsf-epsdirnam,
lv_path_stva TYPE eps2filnam.
START-OF-SELECTION.
PERFORM: load_tvarv,
load_ztable,
read_directory,
get_programs,
process_all_files.
*&---------------------------------------------------------------------*
*& Form PROCESS_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_file USING lv_count.
DATA lv_values TYPE char13.
DATA lv_values_aux TYPE char13.
DATA lv_final TYPE sy-tabix.
DATA lv_next TYPE sy-tabix.
DATA lv_tabix TYPE sy-tabix.
DATA lv_partner TYPE bu_partner.
DATA wa_gen TYPE crms_loy_ma_gen_attr.
DATA wa_prog LIKE LINE OF it_prog.
DATA wa_spe TYPE crms_loy_ma_specific_attr.
DATA lv_amt TYPE crm_loy_ma_amount.
DATA wa_mens TYPE loyd_msh_mems.
lv_final = lv_count - 1.
LOOP AT it_values INTO lv_values.
lv_tabix = sy-tabix.
lv_next = sy-tabix + 1.
READ TABLE it_values INTO lv_values_aux INDEX lv_next.
lv_partner = lv_values.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_partner
IMPORTING
output = lv_partner.
SELECT SINGLE partner_guid
INTO wa_gen-member_guid
FROM but000
WHERE partner = lv_partner.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
READ TABLE it_prog INTO wa_prog WITH KEY key = wa_zcrmt021-programa.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
READ TABLE it_programa INTO wa_programa WITH KEY program_id = wa_prog-value.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
wa_gen-program_guid = wa_programa-guid.
SELECT guid
UP TO 1 ROWS
INTO wa_gen-membership_guid
FROM loyd_msh_mems
WHERE memb_guid = wa_gen-member_guid
AND loy_prog_guid = wa_gen-program_guid.
ENDSELECT.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
IF wa_zcrmt021-tipo EQ 'R'.
wa_spe-point_qual = 'QUALIFYING'.
ELSEIF wa_zcrmt021-tipo EQ 'Q'.
wa_spe-point_qual = 'QUALIFYING_ONLY'.
ENDIF.
wa_gen-guid = wa_gen-membership_guid.
wa_gen-category = 'GPA'."'ACCRUAL'.
IF wa_zcrmt021-programa EQ 'P'.
wa_gen-process_type = 'ACML_PAMAIS'."'ZPRODUCT'.
ELSEIF wa_zcrmt021-programa EQ 'E'.
wa_gen-process_type = 'ACML_CLEX'.
ENDIF.
wa_gen-process_mode = 'N'.
wa_gen-parship_ext_des = wa_zcrmt021-descr.
*******STATUS*********************
wa_gen-estat = 'E0004'.
*******STATUS*********************
INSERT wa_gen INTO TABLE it_gen.
wa_spe-guid = wa_gen-membership_guid.
lv_amt = lv_values_aux.
wa_spe-amount = lv_amt.
wa_spe-currency = 'BRL'.
wa_spe-points = lv_amt.
wa_spe-process_mode = 'N'.
INSERT wa_spe INTO TABLE it_spe.
IF lv_tabix = lv_final.
EXIT.
ENDIF.
ENDLOOP.
ENDFORM. " PROCESS_FILE
*&---------------------------------------------------------------------*
*& Form MOVE_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_PATH text
* -->P_LV_PATH_PROCESSED text
*----------------------------------------------------------------------*
FORM move_file_and_commit USING p_lv_path
p_lv_path_processed.
* DATA: teste TYPE sapb-sappfad, "Alterado por limitação de tamanho
* teste2 TYPE sapb-sappfad.
*
* teste = p_lv_path.
* teste2 = p_lv_path_processed.
CALL FUNCTION 'ZZARCHIVFILE_SERVER_TO_SERVER'
EXPORTING
sourcepath = p_lv_path
targetpath = p_lv_path_processed
EXCEPTIONS
error_file = 1
no_authorization = 2
OTHERS = 3.
IF sy-subrc = 0.
DELETE DATASET p_lv_path.
IF sy-subrc <> 0.
wa_zcrmt021-status = 'Error'.
wa_zcrmt021-data_fim = sy-datum.
UPDATE zcrmt021 FROM wa_zcrmt021.
ELSE.
wa_zcrmt021-status = 'Processado'.
wa_zcrmt021-data_fim = sy-datum.
UPDATE zcrmt021 FROM wa_zcrmt021.
COMMIT WORK.
ENDIF.
ENDIF.
ENDFORM. " MOVE_FILE
*&---------------------------------------------------------------------*
*& Form ERROR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM error .
wa_zcrmt021-status = 'Error'.
wa_zcrmt021-data_fim = sy-datum.
UPDATE zcrmt021 FROM wa_zcrmt021.
COMMIT WORK.
ENDFORM. " ERROR
*&---------------------------------------------------------------------*
*& Form GET_PROGRAMS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_programs .
DATA: lo_core TYPE REF TO cl_crm_bol_core,
lo_result TYPE REF TO if_bol_bo_col,
lo_entity TYPE REF TO cl_crm_bol_entity,
lo_query TYPE REF TO cl_crm_bol_dquery_service.
DATA: it_values_n TYPE TABLE OF dd07v.
DATA: it_tipo TYPE TABLE OF ty_prog.
DATA: wa_tipo TYPE ty_prog.
DATA: wa_prog TYPE ty_prog.
DATA: wa_values TYPE dd07v.
lo_core = cl_crm_bol_core=>get_instance( ).
lo_core->start_up( iv_appl_name = 'LOY' ).
lo_query = cl_crm_bol_dquery_service=>get_instance( 'LOYProgramAdvSearch' ).
lo_result = lo_query->get_query_result( ).
CHECK lo_result IS BOUND.
lo_entity ?= lo_result->get_first( ).
WHILE lo_entity IS BOUND.
wa_programa-program_id = lo_entity->get_property_as_string( iv_attr_name = 'EXTERNAL_ID' ).
TRANSLATE wa_programa-program_id TO UPPER CASE.
READ TABLE it_tvarv WITH KEY program_id = wa_programa-program_id TRANSPORTING NO FIELDS.
IF sy-subrc EQ 0.
wa_programa-guid = lo_entity->get_property_as_string( iv_attr_name = 'GUID' ).
wa_programa-program_id = lo_entity->get_property_as_string( iv_attr_name = 'EXTERNAL_ID' ).
APPEND wa_programa TO it_programa.
ENDIF.
lo_entity ?= lo_result->get_next( ).
ENDWHILE.
CALL FUNCTION 'DD_DOMA_GET'
EXPORTING
domain_name = 'ZCRM_LOY_PROGRAMA'
TABLES
dd07v_tab_a = it_values_a
dd07v_tab_n = it_values_n
EXCEPTIONS
illegal_value = 1
op_failure = 2
OTHERS = 3.
LOOP AT it_values_a INTO wa_values.
wa_prog-value = wa_values-ddtext.
wa_prog-key = wa_values-domvalue_l.
APPEND wa_prog TO it_prog.
ENDLOOP.
ENDFORM. " GET_PROGRAMS
*&---------------------------------------------------------------------*
*& Form LOAD_TVARV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_tvarv .
SELECT low
INTO TABLE it_tvarv
FROM tvarvc
WHERE name = 'LOY_CRED_MASS-PROGRAMAS'.
SELECT SINGLE low
INTO lv_path_stva
FROM tvarvc
WHERE name = 'LOY_CRED_MASS-DIR_TO_PROCESS'
AND type = 'P'
AND numb = 0.
SELECT SINGLE low
INTO lv_path_pro_stva
FROM tvarvc
WHERE name = 'LOY_CRED_MASS-DIR_PROCESSED'
AND type = 'P'
AND numb = 0.
ENDFORM. " LOAD_TVARV
*&---------------------------------------------------------------------*
*& Form LOAD_ZTABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_ztable .
SELECT *
INTO TABLE it_zcrmt021
FROM zcrmt021
WHERE status <> 'Processado'.
IF sy-subrc EQ 0.
SORT it_zcrmt021 BY nome_file.
ENDIF.
ENDFORM. " LOAD_ZTABLE
*&---------------------------------------------------------------------*
*& Form READ_DIRECTORY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM read_directory .
CALL FUNCTION 'EPS2_GET_DIRECTORY_LISTING'
EXPORTING
iv_dir_name = lv_path_stva
TABLES
dir_list = it_files
EXCEPTIONS
invalid_eps_subdir = 1
sapgparam_failed = 2
build_directory_failed = 3
no_authorization = 4
read_directory_failed = 5
too_many_read_errors = 6
empty_directory_list = 7
OTHERS = 8.
IF sy-subrc <> 0.
MESSAGE e003(crm_action).
ENDIF.
ENDFORM. " READ_DIRECTORY
*&---------------------------------------------------------------------*
*& Form PROCESS_ALL_FILES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_all_files .
DATA: it_guid TYPE CRMT_LOY_COM_GUIDS.
DATA: wa_gen LIKE LINE OF it_gen.
LOOP AT it_files INTO wa_files.
CLEAR: lv_file, lv_path, lv_path_processed, it_gen ,it_spe.
lv_file = wa_files-name.
READ TABLE it_zcrmt021 INTO wa_zcrmt021 WITH KEY nome_file = lv_file BINARY SEARCH.
IF sy-subrc <> 0.
CONTINUE.
ENDIF.
CONCATENATE: lv_path_stva lv_file INTO lv_path,
lv_path_pro_stva lv_file INTO lv_path_processed.
OPEN DATASET lv_path FOR INPUT IN TEXT MODE ENCODING DEFAULT WITH SMART LINEFEED.
IF sy-subrc EQ 0.
DO.
READ DATASET lv_path INTO lv_content.
IF sy-subrc EQ 0.
SPLIT lv_content AT ';' INTO TABLE it_values.
DESCRIBE TABLE it_values LINES lv_count.
IF lv_count >= 2.
PERFORM process_file USING lv_count.
ENDIF.
ELSE.
PERFORM error.
EXIT.
ENDIF.
ENDDO.
CLOSE DATASET lv_path.
READ TABLE it_zcrmt021 INTO wa_zcrmt021 WITH KEY nome_file = lv_file BINARY SEARCH.
IF sy-subrc EQ 0.
IF NOT it_gen IS INITIAL.
CALL FUNCTION 'CRM_LOY_MA_CREATE_API'
EXPORTING
iv_commit = 'X'
IMPORTING
ev_success = lv_result
CHANGING
ct_data_genattr = it_gen
ct_data_specattr = it_spe.
IF lv_result EQ abap_true.
LOOP AT it_gen INTO wa_gen.
APPEND wa_gen-guid TO it_guid.
ENDLOOP.
CLEAR lv_result.
CALL FUNCTION 'CRM_LOY_MA_PROCESS'
EXPORTING
it_ma_guids = it_guid
IMPORTING
EV_SUCCESS = lv_result
ET_DATA_GENATTR = it_gen.
IF lv_result EQ abap_true.
PERFORM move_file_and_commit USING lv_path lv_path_processed.
ELSE.
PERFORM error.
ENDIF.
ELSE.
PERFORM error.
ENDIF.
ENDIF.
ENDIF.
ELSE.
PERFORM error.
ENDIF.
ENDLOOP.
ENDFORM. " PROCESS_ALL_FILES
Beside this, in the program RLOY_ENGINE_SCHEDULE you select the status of the member activity. So you can also process member activities with "Created" status and in background.
Hope this helps!
With my best regards,
Caíque
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
3 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.