workflow中如何读取外部的规则集

workflow中定义的规则集会以单独的文件保存,以.rules为后缀,名称与工作流名称一致。

假设有个名为SellItemWorkflow的workflow,并且在里面定义了一个名为CalculateItemTotals的规则集。

 

在其他工作流调用该规则集(SellItemWorkflow.rules):

 

 Stream stream = typeof(SellItemWorkflow).Module.Assembly.GetManifestResourceStream(typeof(SellItemWorkflow), "SellItemWorkflow.rules"); //获取规则集
            using (XmlReader xmlReader = XmlReader.Create(new StreamReader(stream)))
            {
                WorkflowMarkupSerializer mark = new WorkflowMarkupSerializer();
                RuleDefinitions ruleDefinitions = mark.Deserialize(xmlReader) as RuleDefinitions; //反序列化
                if (ruleDefinitions != null)  //返回规则集的集合
                {
                    if (ruleDefinitions.RuleSets.Contains("CalculateItemTotals"))  //要找的规则集
                    {
                        RuleSet rs = ruleDefinitions.RuleSets["CalculateItemTotals"];
                        RuleValidation validation = new RuleValidation(typeof(Workflow1), null); //验证规则集对某种特定的对象类型是否有效
                        if (rs.Validate(validation)) //验证通过
                        {
                            RuleExecution execution = new RuleExecution(validation, this); //执行包装器
                            rs.Execute(execution); //对目标工作流执行该规则集
                        }
                        else
                        {
                            foreach (ValidationError error in validation.Errors)
                            {
                                Console.WriteLine(error.ErrorText);
                            }
                        }
                    }
                }
            }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值