0% found this document useful (0 votes)
257 views

SAP ABAP Service Org Determination Example

This document contains code for two ABAP functions: 1) zorg_unit_find_1 searches organizational units assigned to the user and finds those marked as responsible organizations to return as actors. 2) zcrm_orgman_orgobjects_find_6 calls an external function to find organizational objects, then filters the results to only include service organizations. It also retrieves additional context data and stores it in shared structures.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
257 views

SAP ABAP Service Org Determination Example

This document contains code for two ABAP functions: 1) zorg_unit_find_1 searches organizational units assigned to the user and finds those marked as responsible organizations to return as actors. 2) zcrm_orgman_orgobjects_find_6 calls an external function to find organizational objects, then filters the results to only include service organizations. It also retrieves additional context data and stores it in shared structures.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 7

FUNCTIONzorg_unit_find_1.

*"
*"*"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.

You might also like