虽然biztalk server提供了众多的内置功能,然而在一些情况下可能还需要调用程序集中的函数。因为在.net程序集中,可以非常方便地调用web service、访问数据库;另一方面,有些函数是程序集中已经写好的,为了增加软件的复用,便于软件版本的管理,使用现有的程序集也在情理之中。
本文通过一个简单实例,介绍biztalk应用中调用程序集的方法。这个实例完成的功能,在调用web services一文中实现过,只不过实现的方式用所差别,一个是调用web service,一个是调用.net程序集。
首先,我们创建一个myfunction的项目,其中只包括一个的类文件class1,我们要在biztalk中调用该类的checkuserid静态方法。class1的源程序如下:
为程序集设置强名称和发布.net程序集到全局程序集缓存可参见将程序集安装到全局程序集缓存(gac)中一文。
然后,创建一个biztalk server工程callfunction,添加一个userinfo.xsd,其结点结构如下:
userinfo
userid
rolename
快速升级userid和rolename两个子字段元素,具体步骤可参见调用web services一文。
下面创建一个业务流程mainorch.odx,在业务流程视图中创建两个消息inmsg和outmsg,这两个消息均使用callfunction.userinfo消息类型。在业务流程中创建一个接收操作receiveinmsg、一个发送操作sendoutmsg,在二者之间创建一个消息赋值操作assignoutmsg,同时会产生一个构造消息操作,命名为constructoutmsg,构造的消息为outmsg。设置receiveinmsg激活为true。
为工程callfunction添加.net引用,找到myfunction.dll,添加到引用中。编写assignoutmsg的表达式如下:
outmsg = inmsg;
outmsg(callfunction.propertyschema.rolename)= myfunction.usermanager.checkuserid(inmsg(callfunction.propertyschema.userid));
创建一个接收端口inport用于连接接收操作、一个发端端口outport用于连接发送操作。两个端口均使用microsoft.biztalk.defaultpipelines.xmltransmit管道,接收地址为c:\in\*.xml,发送地址为c:\out\%sourcefilename%。
编译并布署biztalk server工程callfunction,启动callfunction.mainorch业务流程,进行测试:
测试文件fengfangfang.xml
<ns0:userinfo xmlns:ns0=”http://callfunction.userinfo”>
<userid>fengfangfang</userid>
<rolename></rolename>
</ns0:userinfo>
输出为
<ns0:userinfo xmlns:ns0=”http://callfunction.userinfo”>
<userid>fengfangfang</userid>
<rolename>administrator</rolename>
</ns0:userinfo>
测试文件fengff.xml
<ns0:userinfo xmlns:ns0=”http://callfunction.userinfo”>
<userid>fengff</userid>
<rolename></rolename>
</ns0:userinfo>
输出为
<ns0:userinfo xmlns:ns0=”http://callfunction.userinfo”>
<userid>fengff</userid>
<rolename>user</rolename>
</ns0:userinfo>