单点登录
*&---------------------------------------------------------------------* *& REPORT ZCWZT_SAP *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ZCWZT_SAP. *调用接口相关参数定义 DATA:LO_PROXY TYPE REF TO ZZTCO_LOGIN1, INPUT TYPE ZZTSELECT_USER1, LS_IN TYPE ZSELECT_USER, LT_IN TYPE TABLE OF ZSELECT_USER, LS_INPUT TYPE ZZTSELECT_USER1, OUTPUT TYPE ZZTSELECT_USER_RESPONSE1. DATA: JSONSTR TYPE STRING. DATA GT_OUT TYPE TABLE OF ZZT_OUT_L. DATA:GT_ZZTT_ID_XF LIKE TABLE OF ZZTT_ID_XF WITH HEADER LINE. DATA E_DATA TYPE TABLE OF ZZT_OUT . DATA ES_DATA TYPE ZZT_OUT. DATA: ERROR_FLAG TYPE CHAR1, ERROR_MESSAGE TYPE STRING, ERROR_FLAG_JSON TYPE STRING. * *&---------------------------------------------------------------------* REFRESH:LT_IN[],E_DATA,GT_ZZTT_ID_XF[] . *&---------------------------------------------------------------------* LS_IN-USERFLAG = SY-UNAME. LS_IN-SYSTEMFLAG = 'SAP'. APPEND LS_IN TO LT_IN. LS_INPUT-PARAMETERS-USERFLAG = SY-UNAME. LS_INPUT-PARAMETERS-SYSTEMFLAG = 'SAP'. INPUT-PARAMETERS = LS_INPUT-PARAMETERS. *调用代理类 下发数据 TRY. CREATE OBJECT LO_PROXY TYPE ZZTCO_LOGIN1 . CALL METHOD LO_PROXY->SELECT_USER EXPORTING INPUT = INPUT IMPORTING OUTPUT = OUTPUT. CATCH CX_AI_SYSTEM_FAULT INTO DATA(LO_SYS_EXCEPTION). CATCH CX_AI_APPLICATION_FAULT INTO DATA(LO_APP_EXCEPTION). DATA(LV_MSG1) = LO_SYS_EXCEPTION->IF_MESSAGE~GET_TEXT( ). DATA(LV_MSG2) = LO_APP_EXCEPTION->IF_MESSAGE~GET_TEXT( ). ENDTRY. IF OUTPUT-PARAMETERS-RETURN IS NOT INITIAL . JSONSTR = OUTPUT-PARAMETERS-RETURN . ENDIF. *&---------------------------------------------------------------------* * ***JSON->内表 CALL FUNCTION 'ZZT_JSON_TO_ABAP' EXPORTING I_JSON = JSONSTR IMPORTING E_DATA = E_DATA E_FLAG = ERROR_FLAG. IF ERROR_FLAG EQ 'E'. MESSAGE 'JSON 解析失败,请联系IT管理员!!!' TYPE 'E' DISPLAY LIKE 'E'. EXIT. ENDIF. select SINGLE ZIP INTO @data(l_ip) FROM zsapzt . DATA(LV_1) = 'http://' && l_ip && ':9007/#/user/logins?'. READ TABLE E_DATA INTO DATA(LS_EDATA) INDEX 1. IF SY-SUBRC = 0.. GT_OUT[] = LS_EDATA-DATA[]. GT_ZZTT_ID_XF-USERFLAG = SY-UNAME. GT_ZZTT_ID_XF-ZTIME = SY-UZEIT. GT_ZZTT_ID_XF-ZDATE = SY-DATUM. GT_ZZTT_ID_XF-MSG = LS_EDATA-MSG. GT_ZZTT_ID_XF-SUCESS = LS_EDATA-SUCESS. APPEND GT_ZZTT_ID_XF.CLEAR GT_ZZTT_ID_XF. ENDIF. DATA :lv_end TYPE string. LOOP AT GT_OUT INTO DATA(LS_OUT_DATA). CONDENSE LS_OUT_DATA-PASSWORD NO-GAPS. CONDENSE LS_OUT_DATA-TENLANDID NO-GAPS. CONDENSE LS_OUT_DATA-USERNAME NO-GAPS. LV_END = |{ LV_1 }{ 'password=' }{ LS_OUT_DATA-PASSWORD }{ '&'}{ 'tenantId=' }{ LS_OUT_DATA-TENLANDID }{ '&'}{ 'username=' }{ LS_OUT_DATA-USERNAME }{ '&type=account&grant_type=password&scope=all' }|. "区分大小写 ENDLOOP. IF sy-subrc NE 0. LV_END = |{ LV_1 }{ 'password=''&'}{ 'tenantId=''&'}{ 'username=' }{ '&type=account&grant_type=password&scope=all' }|. "区分大小写 ENDIF. MODIFY ZZTT_ID_XF FROM TABLE GT_ZZTT_ID_XF. *&---------------------------------------------------------------------* *登陆 *CALL METHOD CL_GUI_FRONTEND_SERVICES=>EXECUTE * EXPORTING * DOCUMENT = LV_END * EXCEPTIONS * OTHERS = 1. cl_gui_frontend_services=>execute( EXPORTING application = 'chrome.exe' parameter = LV_END EXCEPTIONS OTHERS = 1 ).