单点登录

*&---------------------------------------------------------------------*
*& 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 ).

 

posted @ 2021-09-16 14:10  蜡哲图  阅读(49)  评论(0编辑  收藏  举报
目录内容