To call A smartform in Web dynpro View, Make an Interactive UI element on Layout
Create A node name PDF with an attribute SOURCE type string in context tab of view.
Bind the Interactive UI element with Source attribute . And write the below code in WDDOINIT method to call Smartform ZG2_SMARTFORM_TEST.
method WDDOINIT.
* Reading Node for display
DATA LO_ND_NODE_FOR_DISPLAY TYPE REF TO IF_WD_CONTEXT_NODE.
DATA LO_EL_NODE_FOR_DISPLAY TYPE REF TO IF_WD_CONTEXT_ELEMENT.
DATA LS_NODE_FOR_DISPLAY TYPE WD_THIS->ELEMENT_NODE_FOR_DISPLAY.
* navigate from <CONTEXT> to <NODE_FOR_DISPLAY> via lead selection
LO_ND_NODE_FOR_DISPLAY = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_NODE_FOR_DISPLAY ).
* get element via lead selection
LO_EL_NODE_FOR_DISPLAY = LO_ND_NODE_FOR_DISPLAY->GET_ELEMENT( ).
* get all declared attributes
LO_EL_NODE_FOR_DISPLAY->GET_STATIC_ATTRIBUTES(
IMPORTING
STATIC_ATTRIBUTES = LS_NODE_FOR_DISPLAY ).
* Calling Smartform
DATA LV_SMARTFORM TYPE RS38L_FNAM.
DATA LS_SSFCTRLOP TYPE SSFCTRLOP.
DATA LS_OUTPUT_OPTIONS TYPE SSFCOMPOP.
DATA LS_JOB_OUTPUT_INFO TYPE SSFCRESCL.
DATA LT_LINES TYPE STANDARD TABLE OF TLINE.
DATA LV_BIN_FILESIZE TYPE I.
DATA LV_PDF_XSTRING TYPE XSTRING.
data LT_OTFDATA TYPE TABLE OF ITCOO.
* -- Get the name of the smartform function module
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZG2_SMARTFORM_TEST'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
FM_NAME = LV_SMARTFORM
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
BREAK-POINT.
* Implement suitable error handling here
ENDIF.
* -- Call the smartform
LS_SSFCTRLOP-NO_DIALOG = SPACE.
LS_SSFCTRLOP-GETOTF = ABAP_TRUE.
LS_SSFCTRLOP-NO_DIALOG = 'X'.
LS_SSFCTRLOP-PREVIEW = 'X'.
LS_SSFCTRLOP-GETOTF = 'X'.
LS_SSFCTRLOP-LANGU = 'EN'.
LS_SSFCTRLOP-DEVICE = 'PRINTER'. "LOCAL_PRINTER2 'LOCAL_PRINTER1'.
LS_OUTPUT_OPTIONS-TDPRINTER = 'PDF'. "'PDF1'.
LS_OUTPUT_OPTIONS-TDDEST = 'LP01'.
LS_OUTPUT_OPTIONS-TDIMMED = 'X'.
Ls_OUTPUT_OPTIONS-TDDELETE = 'X'.
Ls_OUTPUT_OPTIONS-TDLIFETIME = 'X'.
Ls_OUTPUT_OPTIONS-TDDEST = 'LOCL'.
CALL FUNCTION LV_SMARTFORM
EXPORTING
CONTROL_PARAMETERS = LS_SSFCTRLOP
OUTPUT_OPTIONS = LS_OUTPUT_OPTIONS
USER_SETTINGS = 'X'
GS_NODE_FOR_DISPLAY = LS_NODE_FOR_DISPLAY
* custom_input = ls_your_custom_smartform_input
IMPORTING
JOB_OUTPUT_INFO = LS_JOB_OUTPUT_INFO
EXCEPTIONS
OTHERS = 0.
REFRESH LT_OTFDATA.
LT_OTFDATA[] = LS_JOB_OUTPUT_INFO-OTFDATA[].
CALL FUNCTION 'SSFCOMP_PDF_PREVIEW'
EXPORTING
I_OTF = LT_OTFDATA
EXCEPTIONS
CONVERT_OTF_TO_PDF_ERROR = 1
CNTL_ERROR = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* -- Convert the OTF data to xstring
CALL FUNCTION 'CONVERT_OTF'
EXPORTING
FORMAT = 'PDF'
MAX_LINEWIDTH = 255
IMPORTING
BIN_FILESIZE = LV_BIN_FILESIZE
BIN_FILE = LV_PDF_XSTRING
TABLES
OTF = LT_OTFDATA[]
LINES = LT_LINES
EXCEPTIONS
ERR_MAX_LINEWIDTH = 1
ERR_FORMAT = 2
ERR_CONV_NOT_POSSIBLE = 3
ERR_BAD_OTF = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CHECK LV_PDF_XSTRING IS NOT INITIAL.
DATA LO_ND_PDF TYPE REF TO IF_WD_CONTEXT_NODE.
DATA LO_EL_PDF TYPE REF TO IF_WD_CONTEXT_ELEMENT.
DATA LS_PDF TYPE WD_THIS->ELEMENT_PDF.
DATA LV_SOURCE TYPE WD_THIS->ELEMENT_PDF-SOURCE.
* navigate from <CONTEXT> to <PDF> via lead selection
LO_ND_PDF = WD_CONTEXT->GET_CHILD_NODE( NAME = WD_THIS->WDCTX_PDF ).
* get element via lead selection
LO_EL_PDF = LO_ND_PDF->GET_ELEMENT( ).
* @TODO handle not set lead selection
IF LO_EL_PDF IS INITIAL.
ENDIF.
* set single attribute
LO_EL_PDF->SET_ATTRIBUTE(
NAME = `SOURCE`
VALUE = LV_PDF_XSTRING ).
endmethod.