SAP ABAP Service Org Determination Example
SAP ABAP Service Org Determination Example
*"
*"*"LocalInterface:
*"IMPORTING
*"VALUE(SCENARIO)TYPEOM_ATTRSCNOPTIONAL
*"TABLES
*"AC_CONTAINERSTRUCTURESWCONTOPTIONAL
*"ACTOR_TABSTRUCTURESWHACTOROPTIONAL
*"EXCEPTIONS
*"NO_SCENARIO
*"NOTHING_FOUND
*"
DATA:ls_actorTYPEswhactor,
lv_orgunitTYPErealo,
lt_hrobjectsTYPEhrobjectOCCURS0,
ls_hrobjectTYPEhrobject,
ls_containerTYPEswcont,
lv_partner_guidTYPEbu_partner_guid,
lv_partnerTYPEbu_partner,
lv_usernameTYPEsyuname,
lt_active_objTYPEhrtb_objkey,
lv_attribTYPEstring.
CALLFUNCTION'ZCRM_ORGMAN_ORGOBJECTS_FIND_6'
TABLES
ac_container=ac_container
actor_tab=actor_tab
EXCEPTIONS
no_scenario=1
nothing_found=2
OTHERS=3.
IFsysubrc<>0.
*Implementsuitableerrorhandlinghere
ENDIF.
READTABLEactor_tabWITHKEYotype='O'.
lv_orgunit=actor_tabobjid.
CLEARactor_tab.
REFRESHactor_tab.
WHILElv_attribISINITIAL.
*readorganizationalunit
CALLFUNCTION'CRM_ORGMAN_DIR_ASSIGNMENTS_GET'
EXPORTING
iv_keydate=sydatum
iv_otype='O'
iv_realo=lv_orgunit
iv_direction='U'
TABLES
dir_rel_orgunits=lt_hrobjects
EXCEPTIONS
no_active_plvar=1
nothing_found=2
OTHERS=3.
DATA:lt_attributesTYPETABLEOFpt1222,
lv_objidTYPErealo,
lv_tabixLIKEsytabix.
IFlt_hrobjectsISNOTINITIAL.
READTABLElt_hrobjectsINTOls_hrobjectINDEX1.
lv_objid=ls_hrobjectobjid.
ENDIF.
*Exitifnoobjectsassignedtotheuser
CHECKNOTlt_hrobjectsISINITIAL.
LOOPATlt_hrobjectsINTOls_hrobject
WHEREotype=gc_orgman_otypeorgunit.
CALLFUNCTION'RH_STRU_AUTHORITY_CHECK'
EXPORTING
fcode='DISP'
plvar=ls_hrobjectplvar
otype=ls_hrobjectotype
objid=ls_hrobjectobjid
with_base_ac=space
EXCEPTIONS
no_stru_authority=1
no_stru_authority_hyper=2
no_stru_authority_at_all=3
no_base_authority=4
OTHERS=5.
IFsysubrc<>0.
CONTINUE.
ENDIF.
CALLFUNCTION'RH_OM_ATTRIBUTES_READ'
EXPORTING
otype='O'
objid=lv_objid
TABLES
attrib=lt_attributes
EXCEPTIONS
no_active_plvar=1
no_attributes=2
no_values=3
object_not_found=4
OTHERS=5.
READTABLElt_attributesWITHKEYattrib='ZSERESPORG'low='X'TRANSPORTING
NOFIELDS.
IFsysubrc=0.
lv_attrib='X'.
MOVECORRESPONDINGls_hrobjectTOls_actor.
INSERTls_actorINTOTABLEactor_tab.
ELSE.
lv_orgunit=ls_hrobjectobjid.
ENDIF.
ENDLOOP.
ENDWHILE.
ENDFUNCTION.
FUNCTIONzcrm_orgman_orgobjects_find_6.
*"
*"*"LocalInterface:
*"TABLES
*"AC_CONTAINERSTRUCTURESWCONTOPTIONAL
*"ACTOR_TABSTRUCTURESWHACTOROPTIONAL
*"EXCEPTIONS
*"NO_SCENARIO
*"NOTHING_FOUND
*"
CLASScl_crm_orgman_servicesDEFINITIONLOAD.
DATA:ls_actorTYPEswhactor,
lv_service_tgrpTYPEcrmt_service_tgrp_org,
lv_tabixLIKEsytabix.
IFac_container[]ISNOTINITIAL.
READTABLEac_containerWITHKEYelement='IS_SE_TGRP'TRANSPORTINGNO
FIELDS.
IFsysubrcEQ0.
lv_tabix=sytabix.
ac_containervalue='X'.
MODIFYac_containerINDEXlv_tabixFROMac_containerTRANSPORTINGvalue.
ENDIF.
ENDIF.
CLEARlv_tabix.
TRY.
DATA:data_accessTYPEREFTOcl_ic_cad_data_process,
lt_cad_listTYPEcrmt_ic_cad_tab,
ls_cad_listTYPEcrmt_ic_cad,
lv_stringTYPEstring.
DATA:lr_bdcTYPEREFTOif_crm_ui_data_context,
lr_entityTYPEREFTOif_bol_bo_property_access,
lv_emailTYPEstring.
IFNOTdata_accessISBOUND.
CALLMETHODcl_ic_cad_data_process=>get_instance
RECEIVING
rv_instance=data_access.
ENDIF.
CALLMETHODdata_access>get_cms_data
IMPORTING
et_cms_data=lt_cad_list.
READTABLElt_cad_listWITHKEYitem_name='Z_CC_QUEUE_ID'INTOls_cad_list.
lv_string=ls_cad_listitem_value.
IFac_container[]ISNOTINITIAL.
READTABLEac_containerWITHKEYelement='ZBCMQUEUE'TRANSPORTINGNO
FIELDS.
IFsysubrcEQ0.
lv_tabix=sytabix.
ac_containervalue=lv_string.
MODIFYac_containerINDEXlv_tabixFROMac_containerTRANSPORTINGvalue.
IFsysubrcEQ0.
ENDIF.
ENDIF.
ENDIF.
CLEARls_cad_list.
CLEARlv_string.
CLEARlv_tabix.
READTABLElt_cad_listWITHKEYitem_name='Z_TO_ADDRESS'INTOls_cad_list.
lv_string=ls_cad_listitem_value.
IFac_container[]ISNOTINITIAL.
"emailpushscenario
READTABLEac_containerWITHKEYelement='ZBCMEMAIL'TRANSPORTINGNO
FIELDS.
IFsysubrcEQ0.
lv_tabix=sytabix.
ac_containervalue=lv_string.
MODIFYac_containerINDEXlv_tabixFROMac_containerTRANSPORTINGvalue.
ENDIF.
ENDIF.
IFlv_stringISINITIAL.
lr_bdc=cl_crm_ui_data_context_srv=>get_instance().
IFlr_bdcISBOUND.
lr_entity?=lr_bdc>get_entity('CURRENTCOMMUNICATIONITEM')."#ECNOTEXT
IFlr_entityISBOUND.
lv_email=lr_entity>get_property_as_string('SOF_RCP_ADDR').
ENDIF.
ENDIF.
IFac_container[]ISNOTINITIAL.
"emailpullscenario
READTABLEac_containerWITHKEYelement='ZINBOXEMAI'TRANSPORTINGNO
FIELDS.
IFsysubrcEQ0.
lv_tabix=sytabix.
ac_containervalue=lv_email.
MODIFYac_containerINDEXlv_tabixFROMac_containerTRANSPORTINGvalue.
ENDIF.
ENDIF.
CLEARlv_tabix.
ENDIF.
CATCHcx_crm_smf_service_failed.
CATCHcx_crm_smf_stop_rule_eval.
ENDTRY.
*findorgobjects
CALLFUNCTION'CRM_ORGMAN_ORGOBJECTS_FIND_1'
EXPORTING
scenario=gc_orgman_scenarioservice
buffer_refresh=false
TABLES
ac_container=ac_container
actor_tab=actor_tab
EXCEPTIONS
nothing_found=1
OTHERS=2.
IFsysubrc<>0.
*MESSAGEIDSYMSGIDTYPESYMSGTYNUMBERSYMSGNO
*WITHSYMSGV1SYMSGV2SYMSGV3SYMSGV4.
ENDIF.
*onlyorgunits
DELETEactor_tabWHEREotypeNEgc_orgman_otypeorgunit.
*onlyexecutingserviceorganisation
LOOPATactor_tabINTOls_actor.
lv_tabix=sytabix.
MOVEls_actorTOlv_service_tgrp.
IF(cl_crm_orgman_services=>is_service_tgrp(lv_service_tgrp)
=false).
*CALLFUNCTION'CRM_ORGMAN_SERVICE_TGRP_CHECK'
*EXPORTING
*iv_service_tgrp=lv_service_tgrp
*EXCEPTIONS
*service_tgrp_not_found=1
*OTHERS=2.
*
*IFNOTsysubrcISINITIAL.
DELETEactor_tabINDEXlv_tabix.
ENDIF.
ENDLOOP.
ENDFUNCTION.