单点登录

*&---------------------------------------------------------------------*
*& Report ZCWZT_SAP
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zcwzt_sap.

*调用接口相关参数定义
DATA:lo_proxy TYPE REF TO zco_login1,
     input    TYPE zselect_user1,
     ls_in    TYPE zselect_user,
     lt_in    TYPE TABLE OF zselect_user,
     ls_input TYPE zselect_user1,
     output   TYPE zselect_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 zco_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.

DATA(lv_1) = 'http://47.94.4.162: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.


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.
  DATA(lv_end) = |{ lv_1 }{ 'password=' }{ ls_out_data-password }{ '&'}{ 'tenantId=' }{ ls_out_data-tenlandid }{ '&'}{ 'username=' }{ ls_out_data-username } |. "区分大小写
ENDLOOP.

MODIFY zztt_id_xf FROM TABLE gt_zztt_id_xf.

*&---------------------------------------------------------------------*
*登陆
CALL METHOD cl_gui_frontend_services=>execute
  EXPORTING
    document = lv_end
  EXCEPTIONS
    OTHERS   = 1.
原文地址:https://www.cnblogs.com/ckstock/p/15293239.html