返回列表 发帖

[KB功能解说] 如何设置有筛选条件的变量?

适用产品版本
Sage X3 V7


模块
管理


问题概要
Classe TCAWRKHISSUI:避免使用硬编码的工作流程名称[F:AWS]CODEVT='POCSIG'


详细信息
解决方法

如何设置有筛选条件的变量?

这个例子解释了如何在使用变量的查询上创建筛选条件。

示例如下:

让我们设想一下,我们想要创建一个显示工作流事件历史的表示法,我们想要根据工作流事件代码筛选它们,而工作流事件代码又是在对象POC的事件类型对象上触发的。

所以筛选条件不能是类似如下的内容:
[F:AWS]CODEVT="POCSIG"

如果对应的事件始终是“POCSIG”,那么就可以用这个条件。但由于顾问可以重命名这样的事件,所以几乎不可能做到这一点。

也不可能将可以返回代码的某个功能的结果用作筛选条件,例如:

[F:AWS]CODEVT=func PURWRK.CODE("POC")

或者甚至

[F:AWS]CODEVT=GACTX.APARAM.AGETVALCHAR([V]CST_ALEVFOLD,"","POCSIG")

事实上,在使用筛选条件时是禁止使用公式的。唯一可行的解决方案就是使用上下文变量。

所以我们需要在上下文中的某个地方使用对应的代码。让我们设想一下,我们在上下文中创建了一个变量POHSIG,这个变量不仅包含了工作流事件的实际代码,而且是在PUR组中的(一个要在其他表No.96中创建的代码)。

那么,筛选条件就会变成:
[F:AWS]CODEVT=GACTX.PUR.POCSIG

这样就是可行的。

所以你需要在我们的上下文字典,在PUR组(其他表No.96)中创建一个变量POHSIG。这个变量可以有一个初始化公式,例如我们想要使用的第一个公式:
[F:AWS]CODEVT=func PURWRK.CODE("POC")

当然,我们需要将CODE功能写入PURWRK脚本。可能是这样的:

Funprog CODE(EVENT)
Value Char EVENT()

Local Integer IF_FOUND
Local File AWRKPAR [AWA]

# Only the first active workflow on object EVENT will be returned
Filter [AWA] Where ENAFLG=2 and TYPEVT=2 and CODEVT=EVENT
For [AWA]
IF_FOUND=1 : Break
Next

# Return empty string if not found
If IF_FOUND=0 : End "" : Endif

End [AWA]CODE

返回列表