我将使用ilog jrules验证多个对象,但是单独验证(一次一个)。
我目前的想法是包装所有项目需要在名为“itemToValidate”的输入参数中进行验证,如下所示
<xs:element name="itemToValidate">
<xs:complexType>
<xs:sequence>
<xs:element name="employer" type="tns:employer" minOccurs="0" />
<xs:element name="department" type="tns:department" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
然后在名为“init”的包中称为“init”的规则获取每个项目并设置为变量,例如“雇主” 然后对于“itemToValidate”中的每个项目(元素),对于与“雇主”相关的所有规则,都会有一个诸如“雇主”之类的包
我面临的问题是我需要在实际验证之前检查所有规则的空值。
有没有办法避免这种情况?或者我的实施有什么问题吗?
由于
答案 0 :(得分:0)
我不确定你理解你的问题。 “在实际验证之前检查所有规则的空值。”
为什么不在工作内存中设置对象,让JRules处理内存并使用本地规则变量而不是全局变量?
将“我的雇主”设置为雇主
如果“我的雇主”的名字是bob
则打印“你好”
我会创建一个函数,首先在工作内存中推送“ItemsToValidate”,然后像我一样编写规则。 通过执行此操作,如果没有雇主进行验证,则规则永远不会触发,因为内存中没有类型的雇主类型。
答案 1 :(得分:0)
可以实现您感兴趣的类的BOM-to-XOM映射的Tester部分,以检查您关注的字段是否存在。
例如,测试人员可以写成:
返回this.employer!= null
这意味着雇主为null的itemToValidate将不会在您编写的规则中进行评估。这将消除无效检查(对雇主而言)。
检查“使用IRL的类映射测试程序”主题下的知识中心
答案 2 :(得分:-1)
在我们的项目中,我们使用以下方法对此方法进行了单一的语言表达:
the value {VALUE} is defined
(返回布尔值)
希望这有帮助。