目录
- 开发环境
- 开发目的
- 开发过程
- 总结
- 问题
- Windows2003 SP2
- SqlServer 2005
- BizTalik2006
- VisualStudio2005
- 学习在SqlAdapter的UpdateGram中,使用Update用法
- 验证Update中特殊字符的赋值的方法
- 新建项目后,点击"Add Generated Items",启动生成向导。
- 选中"Add Adapter Metadata"的"Add Adapter Metadata"后,点击确定
- 选择已经注册了的Adapter,我这里只有Sql。然后配置要连接的数据库。
- 接下来要求您设置数据库连接字符串。
- 在弹出的数据库配置对话框中,配置数据连接方式。
- 配置好后,进行下一步。
- 配置生成的Schema的Namespace,端口类型,根节点。
Namespace:自己输入喜欢的名称
Port Type:我要用UpdateGram,所以用SendPort
Root Element Name:请求、响应的根节点
- 选择我期待已久的UpdateGram
- 选择我要实现的Update功能,要操作的表及字段(这些字段可以在后面的Schema中修改)
- Finish了!
- 向导开始自动生成代码了
- 生成后,在项目中会多出下面两个文件(不用解译了吧)
- 打开流程文件,开始添加一个端口
- 启动了端口配置向导
- 输入端口名称
- 选择由向导自动生成的端口
- 配置端口的绑定信息
- 又Finish了
- 配置结束后的效果
- 直接在流程中添加接收、发送,然后与端口进行连接
添加后会自动生成对应要使用到的消息Message_1,Message_2(先不要改名,后面会用到)
- 当然,还要有一个流程的接收端口
配置一个接收端口(如果配置不用多讲了吧)
添加一个接收,然后与刚刚添加的接收端口做连接
把接收的Active属性设置为Tree(启用状态)
接收的消息为了简单,直接用20步时,自动生成的Message_1
- 添加物理发送端口
在BizTalk Explore中,添加一个发送端口
- 端口类型设置为发送请求并接收响应
- 设置发送端口名称
- 配置发送端口的地址
ConectionString:可以用配置向导自动生成
Namespace:在7中设置的Namespace
Response Root:在7中设置的Response Root Name
- 配置完成后的效果
- 另忘了还要设置发送端口的Pipeline,全部用Xml***的
- 打开项目中的Schema
- 这里发现,ID的位置有问题,不应该在After中,把ID移到了Before中
至此,完成上面所有的操作后,启动BizTalk部署,并完成流程的绑定、启动过程(具体步骤略)。
- 生成一个Schema的实例,并做了一个Sample(XmlSpy的显示效果)如下
- 在目的表中,添加下面的数据
注意第一条,与30中的Before相对应
- 将30中的xml,发到流程的接收位置处
注:接收位置我配置了一个文件接收端口,这是为了测试方便。配置方法略。
观察表中的数据表发,发现数据已经按照要求,被更新了。
- 如果输入的Xml中,Before数据与表中数据对应不上,会报下面的错误
事件类型: 警告
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5740
日期: 2007-11-5
事件: 16:39:26
用户: N/A
计算机: BIZTALK001
描述:
The adapter "SQL" raised an error message. Details "HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted " <Root xmlns:ns00="urn:schemas-microsoft-com:xml-updategram"><?MSSQLError HResult="0x80040e14" Source="Microsoft OLE DB Provider for SQL Server" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted "?></Root>".
- 错误2
事件类型: 警告
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5743
日期: 2007-11-5
事件: 16:39:26
用户: N/A
计算机: BIZTALK001
描述:
The adapter failed to transmit message going to send port "UpdateGram_Out" with URL "SQL://BIZTALK001/Test01/". It will be retransmitted after the retry interval specified for this Send Port. Details:"HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted " <Root xmlns:ns00="urn:schemas-microsoft-com:xml-updategram"><?MSSQLError HResult="0x80040e14" Source="Microsoft OLE DB Provider for SQL Server" Description="SQLOLEDB Error Description: Empty update, no updatable rows found Transaction aborted "?></Root>".
- 如果对BizTalk已经比较熟悉,全部过程不会超过30分钟
- 更新数据中包含的特殊字符,请用XML的转意字符串表求(如:"'&><)
- 字段中的换行都被替换掉了(还需要继续研究)
- 如果没有After的定义,那么此操作将把该记录删除(实现Delete操作)
- 如果没有Before,只有After,就实现了Insert操作
- Before中的字段不用全部显示出来(比如只有一个ID也可以)
- Before中的字段如果要求为Null,那么也同样不用标记出来
- 此操作就象"update table set f1=v1, f2=v2, f3=v3,... where f1=v01 and f2=v02 and ..."
- 换行如何解决?
- 出现的两个错误,如何解决?
- 如何批量Update?
特此感谢Kent在技术上的支持!
转载请注明作者及出处