创建简单 SAP ADOBE 表单并在 Web Dynpro ABAP 应用程序中调用它的步骤

作者简介: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。选择单选按钮"接口",为您的接口命名,然后单击创建按钮。

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

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

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

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

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

ini 复制代码
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",为表单命名,然后单击创建按钮。

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

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

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

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

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

保存并激活您的表单。

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

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

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

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

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

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

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

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

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

ABAP 复制代码
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 应用程序。为您的应用程序提供名称和描述。

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

最终输出

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

结束语:

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

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

相关推荐
CodeSheep4 分钟前
中国四大软件外包公司
前端·后端·程序员
千寻技术帮6 分钟前
10370_基于Springboot的校园志愿者管理系统
java·spring boot·后端·毕业设计
风象南6 分钟前
Spring Boot 中统一同步与异步执行模型
后端
聆风吟º7 分钟前
【Spring Boot 报错已解决】彻底解决 “Main method not found in class com.xxx.Application” 报错
java·spring boot·后端
乐茵lin16 分钟前
golang中 Context的四大用法
开发语言·后端·学习·golang·编程·大学生·context
步步为营DotNet43 分钟前
深度探索ASP.NET Core中间件的错误处理机制:保障应用程序稳健运行
后端·中间件·asp.net
bybitq1 小时前
Go中的闭包函数Closure
开发语言·后端·golang
吴佳浩8 小时前
Python入门指南(六) - 搭建你的第一个YOLO检测API
人工智能·后端·python
踏浪无痕9 小时前
JobFlow已开源:面向业务中台的轻量级分布式调度引擎 — 支持动态分片与延时队列
后端·架构·开源
Pitayafruit9 小时前
Spring AI 进阶之路05:集成 MCP 协议实现工具调用
spring boot·后端·llm