掘金 后端 ( ) • 2024-03-20 14:52

highlight: kimbie.dark theme: serene-rose

作者简介:Pete 从事 SAP 技术工作已超过 10 年。他最初是一名 ABAP 顾问,然后转到 BW,在那里他与涵盖各个行业的许多不同客户合作过。 “我喜欢向新客户介绍 SAP 技术(尤其是 BI),并向他们展示如何在超快的时间内从零到业务英雄”。

原文标题:Steps To Create A Simple SAP ADOBE Form And Calling It In A Web Dynpro ABAP Application

在本分步指南中,我们将创建一个简单的 SAP Adobe 表单,显示员工地址,然后在我们的 Web Dynpro ABAP 应用程序中调用此表单。要开发 SAP Adobe 表单,您需要在系统中安装 Adobe Life Cycle Designer,并在服务器上安装和配置 Adobe Document Services (ADS)。

步骤1: 创建表单界面 Interface

转至事务代码 SFP。选择单选按钮“接口”,为您的接口命名,然后单击创建按钮。

image.png

在“创建界面”弹出窗口中提供描述,然后单击“保存”按钮。

image.png

接着,提供运输包和运输请求详细信息。

双击表单界面的导入参数,创建一个类型为 PERNR-PERNR 的新导入参数 PERNR

image.png

同样,双击全局定义中的全局数据并创建一个 PA0006 类型的新变量 PA0006

现在,双击初始化中的“代码初始化(Code Initialization)”,指定 PERNR 作为导入参数,指定 PA0006 作为输出参数,然后复制并粘贴以下代码行以从信息类型 0006 读取员工的永久地址。

image.png

DATA : lt_p0006   TYPE TABLE OF pa0006.

REFRESH  lt_p0006.

CALL FUNCTION 'HR_READ_INFOTYPE'
    EXPORTING
        tclas           = 'A'
        pernr           = pernr
        infty           = '0002'
        begda           = '18000101'
        endda           = '99991231'
     TABLES
       infty_tab       = lt_p0006
     EXCEPTIONS
       infty_not_found = 1
       OTHERS          = 2.
IF sy-subrc <> 0.
*      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
*              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

READ TABLE lt_p0006 INTO pa0006 WITH KEY subty = '2' .

保存并激活您的表单界面。

步骤 2: 创建和设计表单 Form

返回交易 SFP 的主屏幕,选择单选按钮“表单 Form”,为表单命名,然后单击创建按钮。

image.png

在“创建表单”弹出框中输入描述和在步骤 1 中创建的接口名称,然后单击“保存”按钮。

image.png

接着,提供运输包 Pakcge 和传输请求详细信息。

现在将全局数据的结构“PA0006”从左侧的界面拖放到右侧的上下文窗口。

image.png

单击“布局”选项卡转至“表单生成器”。

将所有必填字段从数据视图拖放到正文页面,然后根据您的要求设置字段属性。

image.png

保存并激活您的表单。

步骤 3、创建 Web Dynpro 应用程序

转到事务 SE80,在对象列表中选择 Web-Dynpro-Comp./Intf 并提供新名称 (Y_WDA_ADOBE_FORM),然后按 Enter 键。

image.png

在创建对象弹出窗口中,单击“是”按钮创建新的 Web Dynpro 应用程序。输入描述并选择“类型”单选按钮作为 Web Dynpro 组件。

image.png

接着,提供传输包和传输请求详细信息。

双击 MAIN 视图并选择 Context 选项卡,然后创建一个名为 PERNR 的新上下文属性,类型为 PERNR-PERNR

image.png

现在转到“布局”选项卡,并在 ROOTELEMENTCONTAINER 中插入新的 Label UI、输入字段 UI 和 Button UI 元素。

image.png

将输入字段 UI 元素的 value 属性与上下文属性 PERNR 绑定。

image.png

创建一个新的 Action SHOW_FORM,并将其分配给按钮 UI 元素的 OnAction 属性。

image.png

将下面的代码复制并粘贴到事件处理程序 ON ACTION – SHOW_FORM

METHOD ONACTIONSHOW_FORM .

    DATA  :
        lv_pernr TYPE persno,
        formoutput TYPE fpformoutput,
        lo_el_context TYPE REF TO if_wd_context_element,
        ls_context TYPE wd_this->element_context,
        lv_w_cx_root TYPE REF TO cx_root,
        gv_fmname  TYPE rs38l_fnam, " function module name
        lv_mesg TYPE string,
        gs_fpoutparams TYPE sfpoutputparams.
     
    * get element via lead selection
    lo_el_context = wd_context->get_element( ).
    
    * get single attribute
    lo_el_context->get_attribute(
        EXPORTING
            name =  `PERNR`
        IMPORTING
            value = lv_PERNR ).
    
    gs_fpoutparams-nodialog = 'X'. " suppress printer dialog popup
    gs_fpoutparams-getpdf = 'X'.
*  gs_fpoutparams-getxml = 'X'.
    CALL FUNCTION 'FP_JOB_OPEN'
         CHANGING
             ie_outputparams = gs_fpoutparams
         EXCEPTIONS
             cancel          = 1
             usage_error     = 2
             system_error    = 3
             internal_error  = 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.
     
     
     TRY.
         CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
             EXPORTING
                 i_name     = 'Y_FORM'
             IMPORTING
                 e_funcname = gv_fmname.
         CATCH cx_root INTO lv_w_cx_root.
                 lv_mesg = lv_w_cx_root->get_text( ).
 *      MESSAGE e201(hrpadin01) WITH lv_formname3 lv_mesg.
     ENDTRY.
     
     CALL FUNCTION gv_fmname
         EXPORTING
             pernr              = lv_pernr
         IMPORTING
             /1bcdwb/formoutput = formoutput.
     IF sy-subrc <> 0.
 *   MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
 *             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
     ENDIF.
 
     CALL FUNCTION 'FP_JOB_CLOSE'
 *       IMPORTING
 *           E_RESULT             =
         EXCEPTIONS
             usage_error          = 1
             system_error         = 2
             internal_error       = 3
             OTHERS               = 4.
    
    cl_wd_runtime_services=>attach_file_to_response( 
        i_filename  = 'SAP_ADOBE_FORM.pdf'
        i_content   = formoutput-pdf
        i_mime_type = 'application/pdf' ).
ENDMETHOD.

通过右键单击 Web Dynpro 组件来创建 Web Dynpro 应用程序。为您的应用程序提供名称和描述。

image.png

image.png

保存并激活您的 Web Dynpro 应用程序。

最终输出

右键单击 Web Dynpro 应用程序,然后单击“测试”以在 Web 浏览器中测试您的应用程序。

image.png

image.png

image.png

image.png

结束语:

您还可以使用 UI 元素 Interactive-Form 在 Web Dynpro 应用程序中调用 Adobe 表单。但是,最好在事务代码 SPF 中单独设计 ADOBE 表单,如本教程所示。这样您也可以在报告和其他应用程序中调用相同的表单。

另外,我们没有在网络浏览器中打开 Adobe 表单,而是使用 cl_wd_runtime_services 类的方法 Attach_file_to_response( ) 通过下载弹出窗口打开 ADOBE 表单,这也是一个好方法,因为很多时候用户在使用时会遇到性能问题。在网络浏览器中显示表单。