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

                      BizTalk 开发系列

1 课程简介

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

2 准备工作

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

3 演示

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

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

BizTalk动手实验(六)Orchestration开发

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

BizTalk动手实验(六)Orchestration开发

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

BizTalk动手实验(六)Orchestration开发

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

InMsg.total >100

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

BizTalk动手实验(六)Orchestration开发

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

3.2 异常补偿

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

BizTalk动手实验(六)Orchestration开发

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

BizTalk动手实验(六)Orchestration开发

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

 

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

BizTalk动手实验(六)Orchestration开发

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

BizTalk动手实验(六)Orchestration开发

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

BizTalk动手实验(六)Orchestration开发

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

BizTalk动手实验(六)Orchestration开发

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

 

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

BizTalk动手实验(六)Orchestration开发

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动手实验(六)Orchestration开发

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中通过新建变量或调用静态方法来执行命令。(静态方法在引用后可直接在下一步的表达式中调用不需要创建变量)

BizTalk动手实验(六)Orchestration开发

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

 BizTalk动手实验(六)Orchestration开发

 

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

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

BizTalk动手实验(六)Orchestration开发

 

BizTalk动手实验(六)Orchestration开发

 

 

 BizTalk动手实验(六)Orchestration开发

 

相关文章: