最近在做EWM系统的手持开发,在一个屏幕跳转问题上卡了很久,经过群里网友的指导终于实现了想要的结果。
需求大致是这样的:步骤A,B,C,D,E,分别对应屏幕1,2,3,4,5,顺序处理流程是从A-B-C-D-E,假设E作为最后一个步骤,在这个屏幕有一个保存按钮,要求保存之后
根据变量的值决定是跳转到A,还是B亦或是D,为了实现能够跳转到多个屏幕的可能性,就为步骤E设置了三个FCODE用来实现跳转,这三个FCODE都没有具体的功能代码,分别指向步骤A,步骤B,步骤D,截图如下,SAVE的下一步骤指向本身,处理模式设置为后台(设置为执行过程中已定义的效果一样),三个空步骤都设置为后台,BACGRFCODE设置为INIT,代表进入到下一步骤的INIT功能码
那么问题来了,当跳转到步骤A或者B,D,如果在对应的屏幕上使用标准BACK(F7),则发现会跳转到步骤E对应的屏幕,因为标准的BACK实际上和dynpro中的LEAVE TO SCREEN 0.于是就回到了屏幕E,假设当前跳转到屏幕B了,实际上按F7应该跳转到A,那么就必须使用BACKF,并且编写对应的功能代码。截图如下,步骤B设置下一步骤为A
在功能代码中使用一下两条语句即可,c_fcode_update_back是带更新的返回,返回后变量得以更新,这个功能代码可以通用,也就是步骤A,或者D都可用同一个function
/scwm/cl_rf_bll_srvc=>set_prmod(
/scwm/cl_rf_bll_srvc=>c_prmod_foreground ).
/scwm/cl_rf_bll_srvc=>set_fcode( /scwm/cl_rf_bll_srvc=>c_fcode_update_back ).
那么另一个问题又来了,假设回到了步骤A也就是整个逻辑事物的初始步骤,该如何设置返回呢,请看下图,将下一步骤设置为本身,处理模式后台,backgrfcode设置为LEAVE,这个LEAVE代表返回到菜单。