RF开发(转载)

张开发
2026/4/9 18:09:46 15 分钟阅读

分享文章

RF开发(转载)
文章转载处RF开发DEMODEMO包含两个屏幕具体功能是显示一个包含物料输入框 的界面在此界面点击回车按钮会获取并显示十条物料和描述。注意本文仅记录在已经在使用其他RF程序的情况下一个新的RF DMEO程序的实现不包括RF功能的基础配置如演示设备inernet服务SICF服务的配置一、RF程序是什么在 SAP EWMExtended Warehouse Management扩展仓库管理模块中RF 程序是专为仓库移动作业设计的射频Radio Frequency应用程序主要用于支持仓库操作人员通过手持终端如扫码枪、工业 PDA 等完成实时的仓库作业例如收货、上架、拣货、发货、库存盘点、库位调整等。简单来说用户在仓库中可以通过手持扫码枪等设备远程登录到EWM模块的RF程序通过扫描条形码二维码等标签或者通过识别RFID 标签的方式获取标签中记录的数据并传输到RF程序中在SAP端进行数据处理。SAP中使用/SCWM/RFUI事务码可以登录到RF环境下图所示的就是一个的RF程序的各个界面,点击主菜单中的标签跳转到程序界面点击不同的按钮会跳转到相关的功能界面二、创建PAI/PBO函数一个RF程序的实现主要包括以下三部分的工作自定义屏幕开发设计RF程序的界面布局和字段PAI/PBO功能模块开发用来实现自定义屏幕中的按钮响应数据初始化等SPRO事务码配置将RF程序配置到SAP的RF菜单中并定义RF程序各个界面的跳转逻PAI/PBO功能模块与自定义屏幕的关联关系等三、实现步骤1.创建一个函数组RF程序是以函数组为基础进行实现的通常情况下一个函数组对应一个RF程序需要在函数组中加入标准代码。如图所示我创建了一个函数组YDEMO_RF_LHY系统会自动生成相关的包含程序。在TOP后缀的包含程序LYDEMO_RF_LHYTOP中加入如下代码FUNCTION-POOL后面跟函数组的名称MESSAGE-ID后面是自定义消息类的名称用于后续程序中进行消息报错FUNCTION-POOL YDEMO_RF_LHY MESSAGE-ID zewm01.固定语句引入RF功能相关的系统包含程序,也可以选择不在这里插入直接插入到函数组主程序中include /SCWM/IRF_SSCR.注意:下面的部分为非必须项搜索显示这部分代码的功能是跳过一些RF自带的强制检查但具体作用我不确定对于一般的RF程序来说不插入这一段代码也没有影响在函数组的主程序中创建一个新的包含程序在其中插入如下代码MODULE zenter_comm INPUT. /scwm/cl_rf_bll_srvcset_navigation_check(). ENDMODULE.2.创建PBO/PAI函数模块如文章开头展示的一个RF程序会对应很多不同的功能这些功能会跳转到不同的屏幕实现。每一个屏幕都分别对应了一个PAI和一个PBO的函数模块它们成对出现。PBO程序用于实现屏幕的字段设置而PAI程序用于实现按钮响应等功能。我们的DEMO程序一共有两个屏幕所以要分别创建两组PAI/PBO函数模块与常规函数的创建方法一致区别在于所有的参数都要写在【正在更改】页签下而不是导入导出参数中如下图所示。参数的关联类型可以使用结构或表类型在每个屏幕只需要显示一行的数据用结构类型需要显示多行的数据使用表类型,如截图所示我这里H后缀的类型是结构I后缀的类型是表类型。设置参数时不同的函数模块如果有公用的参数名称和类型都要保持一致。2.1 在PBO函数模块中设置屏幕参数在PBO函数模块中插入设置屏幕元素的代码如下所示这里的 /scwm/cl_rf_bll_srvc是RF功能相关的一个共用类RF程序中的很多功能都需要调用这个类的方法来实现。自定义屏幕中需要使用哪个参数中的字段就在这里使用类方法进行声明对应的参数结构类型的参数需要使用set_screen_param方法表类型的参数需要使用set_scr_tabname方法/scwm/cl_rf_bll_srvcinit_screen_param().设置屏幕参数前固定需要调用此方法/scwm/cl_rf_bll_srvcset_screen_param(STEP1_H).设置结构类型的参数可以作为自定义屏幕中的元素/scwm/cl_rf_bll_srvcset_screen_param(STEP2_I). CALL METHOD /scwm/cl_rf_bll_srvcset_scr_tabname设置表类型的参数可以作为自定义屏幕中的元素EXPORTING iv_scr_tabnameSTEP2_I.* 存在表单时设置当前行项目 CALL METHOD /scwm/cl_rf_bll_srvcset_line EXPORTING iv_line1.2.2在PAI函数模块中设置按钮响应自定义屏幕中设置的按钮或者回车与ALV中类似也会有对应的fcode功能码。在PAI中可以添加逻辑来针对不同的功能码进行响应如下面的代码所示lv_field/scwm/cl_rf_bll_srvcget_cursor_field().获取当前光标在哪个屏幕字段上lv_fcode/scwm/cl_rf_bll_srvcget_fcode().获取当前响应的功能码CASE lv_fcode. WHENENTER.SELECT DISTINCT matnr, maktx FROM makt INTO TABLE DATA(lt_makt)UP TO10ROWS. step2_iCORRESPONDING#( lt_makt ).ENDCASE.3.创建自定义屏幕3.1 创建第一个屏幕根据RF程序的需求在函数组下创建对应数量的自定义屏幕。以本DMEO为例只有显示物料输入框和显示物料清单两个界面因此我们需要创建两个屏幕。创建屏幕时屏幕类型需要选择子屏幕屏幕的尺寸需要根据条码枪的尺寸进行调整如果不确定先设置成40即可。接下来根据需求从结构中选择字段放入自定义屏幕中注意这里选择元素的时候需要输入参数的类型而不是参数名例如我这里输入的是YDEMO_LHY_STEP1_H而不是STEP1_H。然后点击从字典中获取即可。然后在屏幕的流逻辑中插入如下通用代码,屏幕中所有元素都是结构或者单个字段时使用下面的代码。PROCESS BEFORE OUTPUT. * Common routine to controlscreenobjects * before the dynpro is displayed. * The module existsininclude /SCWM/LRF_SSCRO01 MODULE status_sscr. PROCESS AFTER INPUT. * Common routine to handle standardfunctioncodes * The module existsininclude /SCWM/LRF_SSCRI01 MODULE user_command_sscr.3.2 创建第二个屏幕与第一个屏幕的创建方法基本一致不同点在于第二个屏幕中包含表类型的多行数据在画屏幕时需要使用到步骤循环的功能多行数据通常设置为不可编辑。如下图所示在屏幕中插入物料和物料描述的字段后选中这两个字段点击【编辑】→【分组】→【步骤循环】→【定义】然后拖拽鼠标即可自动生成多行结构。如果要取消按照同样的方法选中然后使用【分解】即可。除此之外由于一行显示的条目数优先我们还需要用到翻页功能在合适的位置添加两个按钮分别设置名称为/SCWM/S_RF_SCRELM-PGDN和/SCWM/S_RF_SCRELM-PGUP并且勾选属性中的【从字典】。屏幕画完以后在流逻辑中插入下面的通用代码。因为屏幕包含多行的结构因此与第一个屏幕使用的代码不同.PROCESS BEFORE OUTPUT. * pass structures to thescreen*setscreenattributes MODULE status_sscr_loop. * pass table rows to the step-loop LOOP. MODULE loop_output. ENDLOOP. *set(disable/enable)PGUP/PGDN pushbuttons on thescreenMODULE loop_scrolling_set. * PROCESS AFTER INPUT. LOOP. * save data of the step-loop elements MODULE loop_input. ENDLOOP. * pass input to the application,returnfunctioncode * to the program MODULE user_command_sscr.4.用自定义屏幕创建模板我们创建的自定义屏幕的布局会影响在SAP的/SCWM/RFUI事务码中看到的界面不能直接影响扫码枪上的界面布局。如果想要在扫码枪等移动设备上使用需要将自定义屏幕发布为HTML模板因此还需要使用自定义的屏幕创建编辑器模板和HTML模板。4.1 创建编辑器模板如下图所示选中屏幕右键→附加功能→创建编辑器模板参照其他RF程序选择一个正在使用的Internet服务和主题修改保存时会提示以下编辑器模板已存在如果选择覆盖模板后续生成的模板的屏幕布局需要手动重新调整所以建议有比较大的调整时屏幕的布局和字段确认好后建议再选择覆盖模板通常情况下新增字段我们选择【将模板调整为Dynpro】。会跳转到编辑器模板设置界面首先需要设置模板的尺寸这个要根据扫码枪屏幕的实际尺寸调整我这里设置的是320*240。设置完尺寸后可以看到界面上字段的长度已经超出了屏幕的范围这时候就需要手动调整字段的长度和位置布局使其适应屏幕的尺寸这里显示的布局与扫码枪上的显示效果也不是完全一致的有可能在这里显示正常但是在扫码枪上的界面还是有文字覆盖的情况因此需要根据扫码枪上的实际显示显示情况逐步调整。可以直接在屏幕上拖拽鼠标或者在右侧输入参数进行调整调整后如下图所示所有的屏幕字段都没有超出显示范围调整后保存。4.2 创建HTML模板使用SE80事务码选择internet服务找到我们刚刚创建模板时选择的服务在编辑器模板中找到我们刚刚创建的模板,如图所示模板的名称一般是【SAPL】【函数组名称】【屏幕号】。选中编辑器模板右键选择【附加功能】→【从编辑器模板创建HTML模板】保存即可提示模板已存在时选择覆盖即可。然后点击【发布模板】按钮。5.SPRO配置这一步的主要目的是设定RF程序中各个屏幕和按钮的跳转关系并将创建好的自定义屏幕和函数模块关联起来。配置路径为SPRO事务码→SCM Extended Warehouse Management→移动数据条目→无线电频率(RF)框架→定义逻辑事务中的步骤。5.1 定义应用程序参数首先需要在【定义应用程序参数】菜单中将RF程序的函数中使用到的所有参数都添加进去如下图所示。如果不进行这一步后续RF程序运行时会因为参数未知而DUMP。5.2 定义逻辑事务和描述文本如下图所示给自己的RF程序定义一个逻辑事务码输入描述和初始步骤后保存。逻辑事务码可以自己指定步骤的可以自己定义也可以选择已有的步骤这两个参数的设置主要是用来标识RF程序具体执行的是哪个功能的哪一步。选中定义好的逻辑事务选择定义描述文本输入逻辑事务的描述文本如下图所示这个描述文本就是RF菜单中展示的描述。5.3 定义逻辑事务步骤流这一步的目的就是用来配置RF功能功中每一步操作对应的函数模块和每一步之间的跳转顺序。如图所示为每一个步骤中的操作定义步骤流必须指定下一步也可以设置功能模块等参数。其中INIT功能码是初始化每一个步骤都必须维护。而BACK和ENTER分别用来响应返回按钮和回车操作如果不需要这两个操作也可以不设置。NIT功能模块要设置为我们之前创建的PBO函数模块这样每一个步骤的屏幕显示之前会限制性对应的PBO函数中的逻辑。BACK一般不需要指定功能模块但是需要指定下一步即返回到哪个步骤ENTER或者其他按钮的功能码的功能模块要设置为我们之前创建的PAI函数模块这样每次执行相关操作的时候都会触发PAI函数模块中的逻辑与ALV中的user_command事件作用类似。valid.prof选项勾选以后处理对应的函数模块前会先执行屏幕字段的强制性检查和值域验证规则等一般不勾选。处理模式一般除了back以外涉及到屏幕跳转的功能码需要设置为后台否则会出现DUMP的情况其他的可以设置为前台。BckgrFcode这个DMEO的功能是在第一个屏幕输入enter会跳转到下一个屏幕,此时就需要把第一个步骤的ENTER功能代码的BckgrFcode设置为INIT否则回车时会DUMP无法正常跳转。5.4 定义内部事务流不知道有什么作用参照截图设置为相同事务即可。5.5 定义功能代码参数文件我们前面创建自定义屏幕的过程中除了翻页按钮意外并没有定义任何按钮如下图所示的功能按钮都是在这一步定义的。参照截图所示进行定义设置了按钮选项的功能码会在屏幕上以按钮的形式显示。5.6 映射逻辑事务步骤到子屏幕这一步的目的是把我们之前定义好的步骤跟自定义屏幕关联起来每一个步骤都需要指定一个屏幕。如截图所示步骤ZRTS01对应屏幕9001ZRTS02对应屏幕9002。6.配置RF菜单在SPRO的路径下面找到RF菜单管理器。输入我们前面步骤中选择的应用程序描述参数文件个性化参数文件后点击编辑把我们定义好的逻辑事务用鼠标拖拽到对应的菜单下即可。至此所有的配置就都完成了可以在/SCWM/RFUI事务码中进行查看在自定义的PBO和PAI函数中设置断点可以测试相关功能。

更多文章