METHOD /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM.
DATA: LT_STREAM TYPE ZCL_ZHR_SELFSERVICE_PR_MPC_EXT=>TT_ZHR_GET_STREAM,
LS_STREAM TYPE TY_S_MEDIA_RESOURCE.
DATA: LV_PERNR TYPE PERSNO.
DATA: LV_ZTYPE TYPE C.
DATA:LV_INSTID_A TYPE SIBFBORIID."兼容 BOR 的持久对象参考中的实例标识
DATA:LT_SRGBTBREL TYPE TABLE OF SRGBTBREL,
LS_SRGBTBREL TYPE SRGBTBREL.
DATA : OBJCONT TYPE TABLE OF SOLI,
LS_OBJCONT TYPE SOLI,
OBJHEAD TYPE TABLE OF SOLI,
PDFCONTENT TYPE FPCONTENT,
HEADER TYPE IHTTPNVP,
FOLDER_ID TYPE SOODK,
OBJECT_ID TYPE SOODK.
DATA: LV_FOLTP TYPE SO_OBJ_TP, "文件类别
LV_FOLYR TYPE SO_OBJ_YR, "文件夹年
LV_FOLNO TYPE SO_OBJ_NO. "文件夹号码
DATA:LV_OBJTP TYPE SO_OBJ_TP, "类别
LV_OBJYR TYPE SO_OBJ_YR, "对象年
LV_OBJNO TYPE SO_OBJ_NO. "对象号码
DATA:L_LEN TYPE I.
DATA:LS_P0001 TYPE PA0001.
DATA:LOIO_OBJECT TYPE SDOKOBJECT,
PHIO_OBJECT TYPE SDOKOBJECT.
DATA : CONTEXT TYPE TABLE OF SDOKPROPTY,
LS_CONTEXT TYPE SDOKPROPTY.
DATA:CONT_BIN TYPE TABLE OF SDOKCNTBIN,
LS_CONT_BIN TYPE SDOKCNTBIN.
DATA:FILE_ACCESS_INFO TYPE TABLE OF SDOKFILACI,
LS_FILE TYPE SDOKFILACI,
FILE_CONTENT_ASCII TYPE TABLE OF SDOKCNTASC.
CASE IV_ENTITY_SET_NAME.
WHEN 'ZHR_GET_STREAMSet'.
CALL METHOD READ_PARAM_VALUE
EXPORTING
IT_KEY_TAB = IT_KEY_TAB
I_PARAM = 'PERNR'
IMPORTING
E_VALUE = LV_PERNR.
CALL METHOD READ_PARAM_VALUE " (0是岗位,1是部门)
EXPORTING
IT_KEY_TAB = IT_KEY_TAB
I_PARAM = 'ZTYPE'
IMPORTING
E_VALUE = LV_ZTYPE.
SELECT * FROM PA0001 INTO TABLE @DATA(LT_PA0001) WHERE PERNR = @LV_PERNR.
IF SY-SUBRC = 0.
SORT LT_PA0001 BY BEGDA DESCENDING.
READ TABLE LT_PA0001 INTO LS_P0001 INDEX 1.
IF LV_ZTYPE = '0'. "岗位
LV_INSTID_A = '01' && LS_P0001-PLANS.
ELSE."部门
LV_INSTID_A = '01' && LS_P0001-ORGEH.
ENDIF.
ENDIF.
LV_INSTID_A = '0150010287'.
SELECT * INTO TABLE LT_SRGBTBREL FROM SRGBTBREL WHERE INSTID_A = LV_INSTID_A.
IF SY-SUBRC = 0.
SORT LT_SRGBTBREL BY INSTID_B DESCENDING.
READ TABLE LT_SRGBTBREL INTO LS_SRGBTBREL INDEX 1.
LV_FOLTP = LS_SRGBTBREL-INSTID_B(3)."文件类别
LV_FOLYR = LS_SRGBTBREL-INSTID_B+3(2)."文件夹年
LV_FOLNO = LS_SRGBTBREL-INSTID_B+5(12)."文件夹号码
LV_OBJTP = LS_SRGBTBREL-INSTID_B+17(3)."类别
LV_OBJYR = LS_SRGBTBREL-INSTID_B+20(2)."对象年
LV_OBJNO = LS_SRGBTBREL-INSTID_B+22(12)."对象年
FOLDER_ID-OBJTP = LV_FOLTP.
FOLDER_ID-OBJYR = LV_FOLYR.
FOLDER_ID-OBJNO = LV_FOLNO.
OBJECT_ID-OBJTP = LV_OBJTP.
OBJECT_ID-OBJYR = LV_OBJYR.
OBJECT_ID-OBJNO = LV_OBJNO.
CALL FUNCTION 'SO_OBJECT_READ'
EXPORTING
* FILTER =
FOLDER_ID = FOLDER_ID
* FORWARDER =
OBJECT_ID = OBJECT_ID
* OWNER =
* F_MAILER = ' '
* IMPORTING
* OBJECT_FL_DISPLAY =
* OBJECT_HD_DISPLAY =
* OBJECT_RC_DISPLAY =
TABLES
OBJCONT = OBJCONT
OBJHEAD = OBJHEAD
* OBJPARA =
* OBJPARB =
EXCEPTIONS
ACTIVE_USER_NOT_EXIST = 1
COMMUNICATION_FAILURE = 2
COMPONENT_NOT_AVAILABLE = 3
FOLDER_NOT_EXIST = 4
FOLDER_NO_AUTHORIZATION = 5
OBJECT_NOT_EXIST = 6
OBJECT_NO_AUTHORIZATION = 7
OPERATION_NO_AUTHORIZATION = 8
OWNER_NOT_EXIST = 9
PARAMETER_ERROR = 10
SUBSTITUTE_NOT_ACTIVE = 11
SUBSTITUTE_NOT_DEFINED = 12
SYSTEM_FAILURE = 13
X_ERROR = 14
OTHERS = 15.
IF SY-SUBRC <> 0.
EXIT.
ELSE.
CALL FUNCTION 'SO_KPRO_DATA_FROM_OBJCONT_GET'
IMPORTING
LOIO_OBJECT = LOIO_OBJECT
TABLES
OBJCONT = OBJCONT
CONTEXT = CONTEXT
EXCEPTIONS
MISSING_KPRO_DATA = 1.
IF SY-SUBRC = 0.
CALL FUNCTION 'SO_LOIO_PHIO_GET'
EXPORTING
LOIO_OBJECT = LOIO_OBJECT
IMPORTING
PHIO_OBJECT = PHIO_OBJECT
TABLES
CONTEXT = CONTEXT
EXCEPTIONS
KPRO_INCONSISTENCY = 1
X_ERROR = 2.
CALL FUNCTION 'SDOK_PHIO_LOAD_CONTENT'
EXPORTING
OBJECT_ID = PHIO_OBJECT
* CLIENT = SY-MANDT
* AS_IS_MODE =
* RAW_MODE =
TEXT_AS_STREAM = 'X'
TABLES
FILE_ACCESS_INFO = FILE_ACCESS_INFO
FILE_CONTENT_ASCII = FILE_CONTENT_ASCII
FILE_CONTENT_BINARY = CONT_BIN
EXCEPTIONS
NOT_EXISTING = 1
NOT_AUTHORIZED = 2
NO_CONTENT = 3
BAD_STORAGE_TYPE = 4.
ENDIF.
IF CONT_BIN IS NOT INITIAL .
LOOP AT CONT_BIN INTO LS_CONT_BIN.
L_LEN = L_LEN + XSTRLEN( LS_CONT_BIN-LINE ).
ENDLOOP.
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
EXPORTING
INPUT_LENGTH = L_LEN
* FIRST_LINE = 0
* LAST_LINE = 0
IMPORTING
BUFFER = PDFCONTENT
TABLES
BINARY_TAB = CONT_BIN "lt_clustd
EXCEPTIONS
FAILED = 1
OTHERS = 2.
LS_STREAM-VALUE = PDFCONTENT.
LS_STREAM-MIME_TYPE = 'application/pdf'.
READ TABLE FILE_ACCESS_INFO INTO LS_FILE INDEX 1.
HEADER-NAME = 'content-disposition'.
HEADER-VALUE = 'inline;filename=' && LS_FILE-FILE_NAME.
/IWBEP/IF_MGW_CONV_SRV_RUNTIME~SET_HEADER( EXPORTING IS_HEADER = HEADER ).
COPY_DATA_TO_REF( EXPORTING IS_DATA = LS_STREAM
CHANGING CR_DATA = ER_STREAM ).
ENDIF.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.