ALV_VIEW Action Function:程序实例
METHOD ONACTIONPRINT .
DATA lo_api_controller TYPE REF TO if_wd_controller.
DATA lo_message_manager TYPE REF TO if_wd_message_manager.
DATA: LT_EKPO TYPE STANDARD TABLE OF ZEKPO_asn,
LS_EKPO TYPE ZEKPO_asn,
LT_EKPO_SUM TYPE STANDARD TABLE OF ZEKPO_asn,
LS_EKPO_SUM TYPE ZEKPO_asn,
LT_EKPO_SUM_TMP TYPE STANDARD TABLE OF ZEKPO_asn,
LS_EKPO_SUM_TMP TYPE ZEKPO_asn.
DATA lo_lips TYPE REF TO if_wd_context_node.
data: lt_lips TYPE TABLE OF ZSLIPSASN,
ls_lips TYPE ZSLIPSASN,
lt_lips_tmp TYPE TABLE OF ZSLIPSASN,
ls_lips_tmp TYPE ZSLIPSASN.
data: l_index TYPE sy-tabix,
l_name1 TYPE name1,
l_werks TYPE werks_d,
l_lines TYPE I,
l_bpqnum TYPE I,
l_result TYPE flag.
data: lv_pdf_xstring TYPE XSTRING.
data: lo_nd_zvendor TYPE REF TO if_wd_context_node,
lo_el_zvendor TYPE REF TO if_wd_context_element,
lo_nd_zwerks TYPE REF TO if_wd_context_node,
lo_el_zwerks TYPE REF TO if_wd_context_element.
data: l_dnnum TYPE char10,
l_lifnr TYPE lifnr.
data: l_boxqty TYPE char10,
l_bpq TYPE char10,
l_boxtail TYPE char10.
DATA: l_name TYPE string,
l_elifn TYPE elifn.
" 将Context内容传入到 ALV内表中 "
lo_lips = wd_context->get_child_node( name = wd_this->wdctx_zalv_lips ).
lo_lips->get_static_attributes_table(
IMPORTING
table = lt_lips ).
" 获取消息管理器 "
lo_api_controller ?= wd_this->wd_get_api( ).
CALL METHOD lo_api_controller->get_message_manager
RECEIVING
message_manager = lo_message_manager.
* 获取上下文节点中的单属性值
lo_nd_zwerks = wd_context->get_child_node( name = wd_this->wdctx_zwerks ).
lo_el_zwerks = lo_nd_zwerks->get_element( ).
lo_el_zwerks->get_attribute(
EXPORTING
name = `WERKS`
IMPORTING
value = l_werks ).
lt_lips_tmp[] = lt_lips[].
SORT lt_lips_tmp by vbeln.
DELETE lt_lips_tmp WHERE zsele = ''.
DELETE ADJACENT DUPLICATES FROM lt_lips_tmp COMPARING vbeln.
DESCRIBE TABLE lt_lips_tmp LINES l_lines.
IF l_lines = 1.
READ TABLE lt_lips_tmp INTO ls_lips_tmp INDEX 1.
if sy-subrc = 0.
l_dnnum = ls_lips_tmp-vbeln.
ENDIF.
ELSEIF l_lines = 0.
CALL METHOD lo_message_manager->report_error_message
EXPORTING
message_text = 'Select at least one line to print'.
return.
ENDIF.
lt_lips_tmp[] = lt_lips[].
DATA: FNAME TYPE RS38L_FNAM,
PDF_TAB TYPE TABLE OF TLINE,
LV_BIN_FILESIZE TYPE I,
LV_CONTROL_PARAMETERS TYPE SSFCTRLOP,
L_X TYPE C VALUE 'X',
LV_OUTPUT_OPTIONS TYPE SSFCOMPOP,
TAB_OTF_DATA TYPE SSFCRESCL,
LT_OTFDATA_tmp TYPE TABLE OF ITCOO,
LT_OTFDATA TYPE TABLE OF ITCOO.
" Smart form "
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZSF_ASN'
* VARIANT = ‘ ‘
* DIRECT_CALL = ‘ ‘
IMPORTING
FM_NAME = FNAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
delete lt_lips WHERE zsele = ''.
SORT lt_lips by vbeln.
delete ADJACENT DUPLICATES FROM lt_lips COMPARING vbeln.
loop at lt_lips INTO ls_lips.
l_dnnum = ls_lips-vbeln.
CLEAR:lt_ekpo[],ls_ekpo,LS_EKPO_SUM,LT_EKPO_SUM[],LT_EKPO_SUM_TMP[].
CLEAR: l_lines.
LOOP AT lt_lips_tmp INTO ls_lips_tmp WHERE vbeln = l_dnnum AND zsele = 'X'.
l_lines = l_lines + 1.
LS_EKPO-NLINE = l_lines .
LS_EKPO-EBELN = ls_lips_tmp-vgbel.
LS_EKPO-EBELP = ls_lips_tmp-vgpos.
LS_EKPO-MEINS = ls_lips_tmp-meins.
LS_EKPO-MENGE = ls_lips_tmp-lfimg.
LS_EKPO-MATNR = ls_lips_tmp-matnr.
LS_EKPO-TXZ01 = ls_lips_tmp-ARKTX.
APPEND LS_EKPO TO LT_EKPO.
LS_EKPO_SUM-MATNR = ls_lips_tmp-matnr.
LS_EKPO_SUM-TXZ01 = ls_lips_tmp-ARKTX.
LS_EKPO_SUM-MEINS = ls_lips_tmp-meins.
LS_EKPO_SUM-MENGE = ls_lips_tmp-lfimg.
COLLECT LS_EKPO_SUM INTO LT_EKPO_SUM.
CLEAR: LS_EKPO_SUM.
ENDLOOP.
APPEND LINES OF LT_EKPO_SUM TO LT_EKPO_SUM_TMP.
LT_EKPO_SUM[] = LT_EKPO_SUM_TMP[].
l_name = wdr_task=>client_window->get_parameter( 'USERID' ).
l_elifn = l_name.
DATA: L_DEVTYPE TYPE RSPOPTYPE.
CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
EXPORTING
I_LANGUAGE = SY-LANGU
IMPORTING
E_DEVTYPE = L_DEVTYPE.
LV_CONTROL_PARAMETERS-GETOTF = L_X. "OTF output"
LV_CONTROL_PARAMETERS-NO_DIALOG = SPACE. "No print dialog"
LV_CONTROL_PARAMETERS-PREVIEW = L_X. "SPACE.No preview"
*lv_output_options-tdprinter = 'LP01'.
LV_OUTPUT_OPTIONS-TDPRINTER = L_DEVTYPE.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = l_dnnum
IMPORTING
OUTPUT = l_dnnum.
CALL FUNCTION FNAME
EXPORTING
CONTROL_PARAMETERS = LV_CONTROL_PARAMETERS
OUTPUT_OPTIONS = LV_OUTPUT_OPTIONS
USER_SETTINGS = 'X'
LIFNR = l_elifn
NAME1 = l_NAME1
VBELN = l_dnnum
werks = l_werks
IMPORTING
JOB_OUTPUT_INFO = TAB_OTF_DATA
TABLES
IT_EKPO = LT_EKPO
IT_EKPO_SUM = LT_EKPO_SUM.
LT_OTFDATA_TMP[] = TAB_OTF_DATA-OTFDATA[].
APPEND LINES OF LT_OTFDATA_TMP to LT_OTFDATA.
ENDLOOP.
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 132
IMPORTING
BIN_FILESIZE = LV_BIN_FILESIZE
BIN_FILE = LV_PDF_XSTRING
TABLES
OTF = LT_OTFDATA
LINES = PDF_TAB
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
* FORMSTRING = LV_PDF_XSTRING.
CHECK lv_pdf_xstring IS NOT INITIAL.
* Open the PDF
data: l_filename TYPE STRING.
CONCATENATE 'Page_' l_dnnum '.pdf' INTO l_filename.
cl_wd_runtime_services=>attach_file_to_response(
i_filename = l_filename
i_content = lv_pdf_xstring
i_mime_type = 'PDF' "application/pdf"
I_IN_NEW_WINDOW = ABAP_TRUE ).
* wd_this->fire_OUT_ALV_TO_ASN_view_plg( ).
ENDMETHOD.