在同一条链里,根据条件判断下一步到底执行不执行。那就得用到下面这个条件判断的process。这个就负责条件分支执行,在处理链运行时按逻辑结果来把处理链分成不同的分支执行。
很简单,先把它拖到处理链里。 然后就可以来定义条件。条件的定义决定分支的执行,这个条件可以是你定义的公式,或一段ABAP代码,也可以是全局变量的值(比如说从变量表TVARVC读的,或者从你的自建表读的)等。你定义号了条件描述,点formula进去会看到公式定义界面,这个条件的返回结果值是boolean类型,要么是true,要么是false。 等有了条件的判断值执行IF...ELSE...ELSE IF...
举个例子,你这个处理链只需要在当月的前10天运行,过了这个日子就不执行。那我们一般是设置让它daily跑,在start下面第一步就加上这个条件判断的process。 判断当前日期是不是10号之前。IF 满足条件,则会执行option1下面的链,如果不满足就执行Option2(可以是啥都不干)那就达成了不满足条件不执行这条链的目的。
点新建formula进去。新建条件。
公式就是按找它给的变量来建,比如你要这条链在早上10点前跑,那公式就是:
或者按第1个工作日跑,也可以:
当然你expert mode自己写也行:让周一到周五跑。
上面都是比较简单的按照固定的日期时间来做条件判定的。如果我想让这个判定是基于上一步的一个参数。那怎么办呢?
按分类筛选Process Chains类型的function,可以看见还有这几个选项。其中这个预定义的PROCESS_VALUE_EXISTS一看就可能是来检查是不是存在一个参数值的。这就可能实现我们想要的,根据这个处理链运行时的参数来进行条件判定。有这个参数,就继续往下执行,没有,就不执行。
因为我也不知道这几个function到底是干什么的,所以还得去读。
1. PREDECESSOR_PARAMETER
前一步的参数。从前置流程填充参数。返回某个指定的field的低值或者高值。
PREDECESSOR_PARAMETER (<I_FIELDNAME>, <I_LOW_OR_HIGH>, <I_NUMBER_OF_VALUE>)
PREDECESSOR_PARAMETER( 'RECORDS_RECEIVED', 'LOW', ' 0' ) > 5 意思是上一步load的条目超过5条。。。
。。。。。算了 不懂 跳过
2. PREDECESSOR_PARAMETER
。。。。也跳过
3. PREDECESSOR_PARAMETER
PROCESS_VALUE_EXISTS( 'LOADING', '0PAK_AJNB8KVPYNEMN61O7QCSJ315D', 'DTA_CUBE', 'ZMYCUBE' )
is a condition that checks whether the InfoCube ZMYCUBE was loaded with the InfoPackage 0PAK_AJNB8KVPYNEMN61O7QCSJ315D.
直接来写吧:
好像不行哦,这个constant只有两个选项啊。 哦到下一步发现了,它这个只能找当前处理链里已经有的TYPE,但是没有ABAP Program这个类型。。。如果上一步是DTP或者是ADSO Delete还行,但是我需要的是从ABAP 程序读取参数。。。
我试了一下,在ABAP program里添加全局参数是没办法从这里读到的,好像压根识别不了。那看起来只能用BADI了。
回到BADI上,它提供了一个BADI。
哎,麻烦,又得去绕一大圈。到它的Get 方法下写逻辑。具体的实现还得是从另一个类里的方法来,诸多要求。
先把类和方法名写上,待会去创建。
去建这个类和静态方法。
都整完了以后,把所有的类都激活,这个BADI的implementation也激活:
然后去找user-defined function下面就能找到它了。
接下来完成处理链
不满足条件的话,让它什么都不要干。