BizTalk动手实验(六)Orchestration开发

 更多内容请查看:BizTalk动手实验系列目录

                      BizTalk 开发系列

1 课程简介

通过本课程熟悉Orchestration的相关开发与测试技术

2 准备工作

  1. 熟悉XML、XML Schema、XSLT等相关XML开发技术
  2. 熟悉.NET相关开发技术
  3. 新建BizTalk空项目

3 演示

3.1 使用可分辨字段及分支流程

    1. 打开InputPO Schema,右键选择Promote

clip_image001

    1. 将total添加到可分辨字段中

clip_image003

    1. 新建Orchestration -> InMsg,消息类型指向InputPO
    2. 按如下图所示连接好流程结构,将流程的第一个Receive形状Active属性置为true

clip_image004

    1. 点击Rule_1,在条件表达式中添加条件判断表达式

InMsg.total >100

    1. 生成并部署程序
    2. 配置Orchestration,将逻辑端口部署到物理商端口,接收端口的Pipeline选择XMLReceive

clip_image006

  1. 启动应用程序,基于InputPO生成的XML消息,复制两个不同的消息,一个消息的total字段小于100,另一个大于100,查看消息是否输出到不同的目录。

3.2 异常补偿

    1. 修改原有Orchestration,将Scope形状添加到流程中,将Expession及已有的Decide形状拖入Scope,如下图所示

clip_image007

    1. 在Orchestration View中创建一个int类型的变量

clip_image008

    1. 将如下代码添加到Expression_1的表达或。
result = System.Convert.ToInt32(1/InMsg.total);
System.Diagnostics.EventLog.WriteEntry("OrchestrationDevDemo","result: "+ result.ToString());

 

    1. 右击Scope_1选择新创异常处理

clip_image009

    1. 将Expession表达式拖入异常管理形状中

clip_image010

    1. 点击Scope_1的叹号处选择事务类型为Long Running

clip_image011

    1. 点击CatchException_1在属性窗口中,配置异常对像名称及类型(mscorlib->System->Exception)

clip_image012

    1. 将以下代码添加到Expession_2中
System.Diagnostics.EventLog.WriteEntry("OrchestrationDevDemo","Exception: "+exp.Message);

 

    1. 部署应用程序并重启BizTalk实例
    2. 使用模拟的数据进行测试。在系统日志中有相应的日志信息

clip_image013

3.3 调用(启动)子流程

  1. 创建一个子流程,只有一个发送形状和发送端口。
  2. 在子流程里,新添加一个Message类型的消息参数。
  3. 添加一个分支条件,使用Call或Start Orchestration形状。并配置相应的子流程及输入消息
  4. 先把BizTalk应用程序全部停止再部署应用(因为Orchestration有依赖关系)
  5. 测试新的条件是否被应用,及消息是否有输

 

3.4 使用外部DLL类库

1. 新建Class Library
2. 添加 Class Library 签名和Post Event命令

BizTalk 2016

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\Bin\NETFX 4.6 Tools\gacutil.exe" /i "$(TargetPath)" /F

  


3. 将如下代码添加到类文件中(参考代码)

namespace ConsoleApplication1

{

    [Serializable]

   public class Utilities

    {

        public XmlDocument GenerateFaultMsg(XmlDocument req, XmlDocument resp, System.Exception exp)

        {

            XmlDocument result = resp;

            //XmlNode reqNode = req.SelectSingleNode("/");

            //resp.AppendChild(reqNode);

 

            string strResult = "<ns0:ADD_JOB_HISTORYResponse xmlns:ns0=\"http://Microsoft.LobServices.OracleDB/2007/03/HR/Procedure\">"

            + req.InnerXml.Replace("<?xml version=\"1.0\"?>","")

            + "<RESULT xmlns=\"\">F</RESULT>"

            + "<MESSAGE xmlns=\"\"><![CDATA[" + exp.Message + "]]></MESSAGE>"

            + "</ns0:ADD_JOB_HISTORYResponse>" ;

 

            result.LoadXml(strResult);

 

            return result;

        }

    }

}

  


4. 在Orchestration中通过新建变量或调用静态方法来执行命令。(静态方法在引用后可直接在下一步的表达式中调用不需要创建变量)

 5. 在Orchestration表达式中可以直接调用该方法

 

 

 6. 如果修改了外部DLL的方法,需要重启Visual Studio的方式使用Orchestration调用新的方法。同时在部署的时候需要注意先编译外部DLL库。

 7. 注意部署前需要提前将外部DLL通过添加资源的方式加入到BizTalk的应用程序,这样在导出MSI安装包时可自动部署外部DLL到目标服务器

 

 

 

 

 

posted on 2011-12-19 11:27  Gary Zhang  阅读(1601)  评论(0编辑  收藏

导航