西煞魄工厂

posts - 193, comments - 278, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2007年7月11日


使用SSIS整合SAP数据


1.准备



业务需求:将SAP中的公司代码表,同步到OA中的公司代码表。

技术方案:使用SSIS,实现数据整合。

技术准备:安装Microsoft .NET Data Provider for mySAP Businese Suite


2.实施

整体执行步骤




2.1 创建临时表








2.2 从SAP获取数据

整体效果图



2.2.1 创建连接SAP的数据源





2.2.2 查询SAP中公司代码表

配置说明

 



2.2.3 数据转换





2.2.4 目标公司代码表





2.3 清理数据格式

 

2.4 得到数据集



 


 

 

2.5 取每一条记录

主要是为了实现读取记录集中第一条数据,用对比的方式,与数据进行更新。


2.5.1 设置Foreach的属性


 


 

索引的概念,就想去读DataTable数据一样。

 

2.5.2 构建SQL语句


 



 

2.5.3 执行SQL语句


 

 

2.6 删除临时表


 

 

3 执行结果

 

4 总结

在一些需要与SAP进行字典同步的应用中,使用SSIS还是不错的选择。毕竟只是数据的传输而已。这样也能节省大量的开发时间。

当然,如果是一些比较复杂的业务数据的交换过程,建议还是用BizTalk。

总之,对于不同的业务需求,选择适合的工作,是很重要的。


 

posted @ 2008-07-18 18:25 西煞魄工人 阅读(650) | 评论 (4)编辑


运行在测试机上的BizTalk Administrator Tools经常出现下面的错误:




标题: BizTalk Server 2006 管理控制台
------------------------------

此操作无法访问至少一个 MessageBox 数据库。某些结果可能会忽略。

要获取帮助,请单击: http://go.microsoft.com/fwlink/?LinkId=47400&ProdName=Microsoft+BizTalk+Server+2006&ProdVer=3.5.1602.0&EvtSrc=Microsoft.BizTalk.Administration.SnapIn.Properties.Errors&EvtID=ErrorWhenAccessingMsgBox

------------------------------
其他信息:

Operation is not valid due to the current state of the object. (Microsoft.BizTalk.Administration.SnapIn)

------------------------------
按钮:

确定
------------------------------






找来找去,就是让重启动一下管理工具,自己就可以恢复。


BizTalk Server 2006 Administration Console

I just tried opening the administrative console and out of nowhere got an error "root element is missing (c:\Documents and Settings\user1\Local Settings\Application Data\Microsoft Corporation\Microsoft BizTalk Server 2006\Microsoft.BizTalk.Administration.Snapin.dll.config)".

 To resolve this issue, delete this file:

c:\Documents and Settings\user1\Local Settings\Application Data\Microsoft Corporation\Microsoft BizTalk Server 2006\Microsoft.BizTalk.Administration.Snapin.dll.config

The next time you start the BizTalk Server 2006 Administration Console, the Administration.Snapin.dll.config file will be auto created for you.


除了上面的介绍,实在没什么可以参考的资料了!



posted @ 2008-06-24 21:03 西煞魄工人 阅读(62) | 评论 (1)编辑


在没有安装"BizTalk Web Services 发布向导"工具的服务器上部署SOAP Port。


 

Event Type: Error
Event Source: BizTalk Server 2006
Event Category: BizTalk Server 2006
Event ID: 5734
Date:  2008-6-24
Time:  19:45:53
User:  N/A
Computer: GDEIAC-TEST09
Description:
消息引擎无法注册接收位置“/EIAC.EAI.ExpenseContract.WebService/WebService_EIAC_EAI_ExpenseContract_Orchestrations.asmx”的“SOAP”的适配器。请验证接收位置存在,且独立的适配器在可以访问 BizTalk 数据库的帐户下运行。




 

    最好按下面的部署顺序进行。

  1. 开发环境下
    1. 开发流程
    2. 部署流程
    3. 发布成WebService
    4. 测试
  2. 准生产or生产环境下
    1. IIS中创建App Pool,帐号用BizTalk Application Users中的用户。
    2. IIS中创建VisualDir,将1.3中的WebService拷备到些目录中。
    3. IIS中配置Read, Write , Script Running, 配置为2.2的AppPool。
    4. 试着访问WebService的URL,确认可以Open。
  3. BizTalk Admin Tools
    1. 部署BizTalk流程。
    2. 配置Receive Location。这里输入的WebService路径为2.4中,可以访问的URL(去掉http://servername)。

   ok, 问题解决。

posted @ 2008-06-24 19:58 西煞魄工人 阅读(71) | 评论 (0)编辑

    为了所有玩BizTalk的朋友聚在一起,隆重向大家介绍BizTalk Group (MSN群)。

    这里集聚了很多朋友,同时欢迎您的加入!

BizTalk MSN Group


如果您想显示出上图右边的功能区,请点击如下图所示的“发送闪屏”。


BizTalk MSN Group


在功能区里,您可以修改自己在群里的昵称。

BizTalk MSN Group

在我们的群里,请按下面的规则为自己起一个好记的昵称。

您所在的城市或国家您的昵称




当然,您也可以用一个比较方便的命令来实现修改昵称。
如下面所示,在消息输入区中,输入"/nn ......"
/nn 是用来修改昵称的命令。

BizTalk MSN Group

posted @ 2008-05-28 14:57 西煞魄工人 阅读(242) | 评论 (1)编辑


当前项目要求使用java调用.net webservice。

在网上search不到太多相关的资源,只能自己慢慢试了。

经过长达一周的联调,终于实现。

Java Client
import javax.xml.namespace.QName;   
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;    
import org.apache.axis.client.Service;  


System.out.println(
"测试SOAP开始");

Service service 
= new Service();
Call call 
= (Call)service.createCall();

String input
="Yes";

String endpoint
="http://11.11.11.11/CAIE.EAI/UploadExpenseToConstract.asmx";
call.setTargetEndpointAddress(
new java.net.URL(endpoint));
call.setOperationName(
new QName("http://CAIE.EAI.ExpenseConstract.WebServices","ReturnYourInput"));
call.addParameter(
"input", org.apache.axis.encoding.XMLType.XSD_STRING,ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
call.setUseSOAPAction(
true);
call.setSOAPActionURI(
"http://CAIE.EAI.ExpenseConstract.WebServices/ReturnYourInput");
String res 
= (String) call.invoke(new Object[] {input});
System.out.println(
"返回值="+res);
System.out.println(
"测试SOAP结束");   


.Net WebService

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Services.Description;
using System.ComponentModel;

namespace CAIE.EAI.ExpenseConstract.WebServices
{
    
/// <summary>
    
/// UploadExpenseToConstract 的摘要说明
    
/// </summary>
    [WebService(Namespace = "http://CAIE.EAI.ExpenseConstract.WebServices/")]
    [WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(
false)]
    
public class UploadExpenseToConstract : System.Web.Services.WebService
    {

        [WebMethod()]
        [SoapRpcMethod(Use 
= SoapBindingUse.Literal, RequestNamespace = "http://CAIE.EAI.ExpenseConstract.WebServices", ResponseNamespace = "http://CAIE.EAI.ExpenseConstract.WebServices")]
        
public string ReturnYourInput(string input)
        {
            
string a = input;
            System.IO.File.AppendAllText(
@"c:\temp.log""Input=" + input + "\r\n");
            
return a;
        }

    }
}

Java 调用 .net 主要是为了后序的 Java 启动 BizTalk流程做准备。

posted @ 2008-05-21 12:26 西煞魄工人 阅读(180) | 评论 (0)编辑


这个咋整呢?




错误说明:
OLE DB 错误: OLE DB 或 ODBC 错误 : 无法连接到数据源“[Microsoft][ODBC Excel Driver] 外部表不是预期的格式。;S1000”。。

错误源:
Microsoft OLE DB Provider for Analysis Services 2005



posted @ 2008-05-14 12:00 西煞魄工人 阅读(74) | 评论 (1)编辑


还有报障


事件类型: 错误
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 6913
日期:  2008-4-14
事件:  12:14:56
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
试图连接到服务器“GDEIAC-SQL01”上的“BizTalkMgmtDb”SQL Server 数据库失败。
 错误:“Login failed for user ''. The user is not associated with a trusted SQL Server connection.”


事件类型: 警告
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5410
日期:  2008-4-14
事件:  12:14:57
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
出现错误,需要终止 BizTalk 服务。最常见的原因如下:
 1) 内存意外不足。
 或
 2) 无法连接到其中一个 BizTalk 数据库或该连接丢失。
 该服务将在 1 分钟内关闭并自动重新启动。如果该出错数据库仍然无法使用,将重复此过程。
 
 错误消息: Login failed for user ''. The user is not associated with a trusted SQL Server connection.
 错误源: 
 
 BizTalk 主机名: BizTalkServerApplication
 Windows 服务名: BTSSvc$BizTalkServerApplication


posted @ 2008-04-14 17:26 西煞魄工人 阅读(98) | 评论 (2)编辑


接到系统管理员报障:


事件类型: 错误
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 6912
日期:  2008-4-9
事件:  19:16:58
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
以下存储过程调用失败:“ { call admsvr_ReceiveLocation_GetAllInApp( ?)}”。SQL Server 返回错误字符串:“[DBNETLIB][ConnectionRead (recv()).]一般性网络错误。请检查网络文档。”。



 

事件类型: 错误
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5641
日期:  2008-4-9
事件:  19:16:58
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
消息引擎无法从数据库检索配置。详细信息:“连接失败”。





 

事件类型: 警告
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5773
日期:  2008-4-9
事件:  19:16:58
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
所有接收位置被暂时禁用,因为 MessageBox 数据库或配置数据库不可用。当这些数据库可用时,接收位置将被自动启用。



 

事件类型: 警告
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5410
日期:  2008-4-9
事件:  19:16:58
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
出现错误,需要终止 BizTalk 服务。最常见的原因如下:
 1) 内存意外不足。
 或
 2) 无法连接到其中一个 BizTalk 数据库或该连接丢失。
 该服务将在 1 分钟内关闭并自动重新启动。如果该出错数据库仍然无法使用,将重复此过程。
 
 错误消息: [DBNETLIB][ConnectionRead (recv()).]一般性网络错误。请检查网络文档。
 错误源: 
 
 BizTalk 主机名: BizTalkServerApplication
 Windows 服务名: BTSSvc$BizTalkServerApplication




初步分析,是由于网络引起的!可能是数据库重启,或都网络闪断引起!
正在与管理员联系...

 

posted @ 2008-04-14 16:57 西煞魄工人 阅读(109) | 评论 (0)编辑


 又是奇怪的错误!

在生产环境下安装BTS组件,部署不使用VS2005进行部署,而是直接使用BizTalk Admin工具进行!





开始测试。

当接收到指定的消息后,BTS就报错!


事件类型: 错误
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5719
日期:  2008-3-31
事件:  11:46:29
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
执行接收管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“XML 拆装器”,接收端口:“R_OA_NS_MSG”,URI:“FORMATNAME:DIRECT=TCP:10.16.25.81\PRIVATE$\NS_MESSAGE”,原因: 无法从程序集 <EIAC.OA.NotificationSystem.Schemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=faf62f0e1206ebb8> 加载文档规范 <EIAC.OA.NotificationSystem.Schemas.NotificationData_XML>。请验证已部署此文档规范的架构并且该架构位于全局程序集缓存中。





 

事件类型: 错误
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5753
日期:  2008-3-31
事件:  11:46:29
用户:  N/A
计算机: GDEIAC-BIZ01
描述:
接收位置“R_OA_NS_MSMQ_Message”(URI 为“FORMATNAME:DIRECT=TCP:10.16.25.81\PRIVATE$\NS_MESSAGE”)上的适配器“MSMQ”接收的消息已挂起。
 错误详细信息: 执行接收管道时出错:“Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”,源:“XML 拆装器”,接收端口:“R_OA_NS_MSG”,URI:“FORMATNAME:DIRECT=TCP:10.16.25.81\PRIVATE$\NS_MESSAGE”,原因: 无法从程序集 <EIAC.OA.NotificationSystem.Schemas, Version=1.0.0.0, Culture=neutral, PublicKeyToken=faf62f0e1206ebb8> 加载文档规范 <EIAC.OA.NotificationSystem.Schemas.NotificationData_XML>。请验证已部署此文档规范的架构并且该架构位于全局程序集缓存中。  
 消息 ID:  {1403920C-8604-4B05-AFBA-7372E4B2220C}
 实例 ID: {E461A125-C380-497C-9152-CB60EC744B88}




查询GAC




检查Assembly目录




 都很正常呀!!!!奇怪了!!





解决:

重启了一下服务器,上现的现象就没有了!非常奇怪!找不到一个很好的解释。




自己的猜测:

由于我为这个流程单独创建了一个Host Instance,而Receive Adapter仍然用的是BizTalkApplicationHost,而这个默认的Host也需要Restart一下,才能加载到新注册的Dll 。





 

posted @ 2008-03-31 12:44 西煞魄工人 阅读(144) | 评论 (2)编辑



 这又是什么错?

事件类型: 警告
事件来源: BizTalk Server 2006
事件种类: BizTalk Server 2006
事件 ID: 5740
日期:  2008-3-4
事件:  13:46:51
用户:  N/A
计算机: EIAC-TEMP5
描述:
适配器“SQL”返回一条错误消息。详细信息为“HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Ambiguous update, unique identifier required  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: Ambiguous update, unique identifier required  Transaction aborted "?></Root>”。






事件类型: 错误
事件来源: XLANG/s
事件种类: 无
事件 ID: 10034
日期:  2008-3-4
事件:  13:46:52
用户:  N/A
计算机: EIAC-TEMP5
描述:
未捕获的异常(请参阅下面的“内部异常”)已经挂起服务“EIAC.OA.NotificationSystem.Orchestrations.Main(a44769cf-20b3-668b-e434-e1b03b6f84c2)”的一个实例。
在管理性地恢复或终止该服务实例前,它将保持挂起状态。
如果恢复了该服务实例,它将从上次持续的状态继续,这可能再次引发同样的异常。
实例 ID: d9c408b3-57ab-48dd-937c-80dd864c1580
形状名称:
形状 ID:
引发异常的位置: 段 -1,进程 -1
内部异常: 处理消息时出错,有关详细信息,请参阅详细资料部分
消息 ID: {2F367584-1D89-4551-A76A-1223E5BB2F4E}
实例 ID: {FA895E7E-1DBA-4293-A0F5-E6DFD753BB3A}
错误说明: HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Ambiguous update, unique identifier required  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: Ambiguous update, unique identifier required  Transaction aborted "?></Root>

 

       
异常类型: XlangSoapException
源: Microsoft.XLANGs.BizTalk.Engine
目标站点: Void VerifyTransport(Microsoft.XLANGs.Core.Envelope, Int32, Microsoft.XLANGs.Core.Context)
下面是一个堆栈跟踪,用于标识发生异常的位置

   在 Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.VerifyTransport(Envelope env, Int32 operationId, Context ctx)
   在 Microsoft.XLANGs.Core.Subscription.Receive(Segment s, Context ctx, Envelope& env, Boolean topOnly)
   在 Microsoft.XLANGs.Core.PortBase.GetMessageId(Subscription subscription, Segment currentSegment, Context cxt, Envelope& env, CachedObject location)
   在 EIAC.OA.NotificationSystem.Orchestrations.Main.segment17(StopConditions stopOn)
   在 Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)

    



这几次发现,5470, 5474, 10034 这样的错误,经常会同时出现。10034就不用去管它了。

5470,又是报sqladapter有问题,难道它这么脆弱吗?

测试现象,跟前面的流程一样,主要问题出在当流程有并发执行updategram的update操作时,就会报上面的错误。注意,是并发执行,当并发数>3时,就会引起错误。这是为什么呢?

总之,我还解释不了,但,与以往项目对比发现,主要区别就是定义的数据表ID字段没有设置成PK,改过来,问题就解决了!

 折磨了我一下午,问题就是一个PK。

posted @ 2008-03-04 13:58 西煞魄工人 阅读(149) | 评论 (2)编辑



使用BizTalk开发应用系统

 此文献给那些知道BizTalk,但还不知道它能做什么的朋友们!



    项目中要完成一个消息服务中心程序,主要完成接收各个系统发过来的消息,根据不同的消息内容,按特定的方式将提醒消息发送出去。发送方式主要有:email, 短信, 即时消息。
现有资源:SMTP服器,短信网管接口程序,OCS消息转发接口程序。

    看来,三个发送发式的代码都已经完成了。就差这个消息服务中心了!

    想一想,还是用BizTalk吧。开始画图了!!!!....



所做的工作:
在sqlserver上创建了几个表,为了记录消息日志,同时写了对应的几个Insert存储过程。
定义各系统可以传给我什么样的消息!schema. (xsd)
发EMail,直接用BizTalk的SMTP Adapter。
发OC即时消息,直接用MSMQ Adapter,将消息发到它的接收MSMQ中。
发短信,也用MSMQ Adapter,把消息发到短信服务程序的MSMQ中。
中间定义几个消息。
中间定义几个变量。
使用Sql Adapter生成调用使用的消息。
做几个Mapping。
写几行为了显示在Event日志中的C#代码及几个Helper文件。
按需求,画流程图吧!
最后,进行编译、部署、测试。

一切OK !



解决方案:



实际流程图:


运行时对流程执行的监控:




BizTalk代表的概念!


EAI:我用一个简单的流程图,把三个系统(三种消息发送方式)集成在一起了!
SOA:我有一个接收端口,我可以配置这个接收端口从File, FTP,SQL,.... 只要我能访问到的地方读取、监听数据。为你提供转发提醒消息的服务!
ESB:以后,我有更多的流程了,我可以把它们都串起来,完成一件更庞大的工程!



我们的学习团队!

BizTalk Group MSN群 (MSN:group33022@xiaoi.com )
欢迎加入BizTalk Group组织,我们一起提高并进步!

posted @ 2008-02-28 20:36 西煞魄工人 阅读(282) | 评论 (1)编辑




Event Type: Warning
Event Source: BizTalk Server 2006
Event Category: BizTalk Server 2006
Event ID: 5740
Date:  2/28/2008
Time:  6:33:04 PM
User:  N/A
Computer: LABS
Description:
The adapter "SQL" raised an error message. Details "HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Ambiguous update, unique identifier required  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: Ambiguous update, unique identifier required  Transaction aborted "?></Root>".

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

 


Event Type: Warning
Event Source: BizTalk Server 2006
Event Category: BizTalk Server 2006
Event ID: 5743
Date:  2/28/2008
Time:  6:33:04 PM
User:  N/A
Computer: LABS
Description:
The adapter failed to transmit message going to send port "UpdateSMGPLog" with URL "SQL://labs/NotificationSystem/". It will be retransmitted after the retry interval specified for this Send Port. Details:"HRESULT="0x80040e14" Description="SQLOLEDB Error Description: Ambiguous update, unique identifier required  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: Ambiguous update, unique identifier required  Transaction aborted "?></Root>".

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.


通过在流程中转出关键几个Message的Xml,发现, 于用Update的消息,数据不全。

<ns0:UpdateOCSLogRequest xmlns:ns0="http://EIAC.OA.NotificationSystem.UpdateOCSLog">
<ns0:sync>
<ns0:before><ns0:OCSMessageLog></ns0:OCSMessageLog></ns0:before>
<ns0:after><ns0:OCSMessageLog StateID="1"></ns0:OCSMessageLog></ns0:after>
</ns0:sync>
</ns0:UpdateOCSLogRequest>

没有Before条件,这就相当于你的sql语句少东西!
update table set StateID=1 where <??????> 人家不知道去更新谁!

找到错误原因后,把对应的流程代码再进行了一下整理。确定再测试时,这个before已经有数据了。


 


  问题又被解决了!

西煞魄工人

posted @ 2008-02-28 18:43 西煞魄工人 阅读(110) | 评论 (0)编辑


就差提交了,结果点错了,没存就关了!还得重写!!!!


    今日,流程继续开发,把原来的流程增加更多的日志、状态。方便以后查询消息处理结果。但,流程复杂了,问题也就多多了。




Event Type: Error
Event Source: XLANG/s
Event Category: None
Event ID: 10022
Date:  2/28/2008
Time:  5:03:26 PM
User:  N/A
Computer: LABS
Description:
Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'EIAC.OA.NotificationSystem.Orchestrations.Main(a44769cf-20b3-668b-e434-e1b03b6f84c2)'.
The service instance will remain suspended until administratively resumed or terminated.
If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
InstanceId: 7f7a5fc9-882c-41d4-abf1-4098dcf66126
Shape name: Construct msgUpdateOCSLog
ShapeId: 869f1e47-bfc2-46bf-b425-a85cbcc46b06
Exception thrown from: segment 6, progress 2
Inner exception: A failure occurred while evaluating the distinguished field sync.after.OCSMessageLog.StateID against the message part data. The message part data does not contain at least one of the nodes specified by the XPath expression (listed below) that corresponds to the distinguished field. The cause for this error may be that the message part data has not been initialized or that the message part data does not conform to the message part schema. Ensure that the message part data is initialized correctly. XPath expression: /*[local-name()='UpdateOCSLogRequest' and namespace-uri()='http://EIAC.OA.NotificationSystem.UpdateOCSLog']/*[local-name()='sync' and namespace-uri()='http://EIAC.OA.NotificationSystem.UpdateOCSLog']/*[local-name()='after' and namespace-uri()='http://EIAC.OA.NotificationSystem.UpdateOCSLog']/*[local-name()='OCSMessageLog' and namespace-uri()='http://EIAC.OA.NotificationSystem.UpdateOCSLog']/@*[local-name()='StateID' and namespace-uri()='']
       
Exception type: XPathUpdateException
Source: Microsoft.XLANGs.Engine
Target Site: Void SetDistinguishedField(System.String, System.Object)
The following is a stack trace that identifies the location where the exception occured

   at Microsoft.XLANGs.Core.XSDPart.SetDistinguishedField(String dottedPath, Object val)
   at EIAC.OA.NotificationSystem.Orchestrations.Main.segment6(StopConditions stopOn)
   at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)

       

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.





仔细检查一下错误中提到的消息,它的初始化如下



后面有一赋值操作

msgUpdateOCSLogRequest.parameters.sync.after.OCSMessageLog.StateID = m_strStateID;

通过ErrorLog,错误大至就是发生在这里。





    分析一下原因,大至是由于在Mapping中没有对StateID字段赋值,造成它在xml中是不存在的,所以,后面的赋值操作中,用属性去访问时会报错的。如同一个类的成员变量还没有赋值,就去调用这个成员变量的方法一样。



找一个最简单的方法:







    以后,在构造有属性的消息时,把这些性都赋上个初值,也为以后调用时创建便利。

posted @ 2008-02-28 17:56 西煞魄工人 阅读(169) | 评论 (0)编辑

今日写了一个流程



错误提示如下



Event Type: Error
Event Source: XLANG/s
Event Category: None
Event ID: 10008
Date:  2/21/2008
Time:  9:45:27 PM
User:  N/A
Computer: LABS
Description:
Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'EIAC.OA.NotificationSystem.Orchestrations.Main(a44769cf-20b3-668b-e434-e1b03b6f84c2)'.
The service instance will remain suspended until administratively resumed or terminated.
If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
InstanceId: ea3c1bab-8383-4bb5-993a-85a7bf05dc66
Shape name: RequestCreateEMailLog
ShapeId: d76938c8-3bb5-408a-9ac5-e0e762bb489b
Exception thrown from: segment 1, progress 37
Inner exception: Exception occurred when persisting state to the database.
       
Exception type: PersistenceException
Source: Microsoft.XLANGs.BizTalk.Engine
Target Site: Void Commit()
The following is a stack trace that identifies the location where the exception occured

   at Microsoft.BizTalk.XLANGs.BTXEngine.BTXXlangStore.Commit()
   at Microsoft.XLANGs.Core.Service.Persist(Boolean dehydrate, Context ctx, Boolean idleRequired, Boolean finalPersist, Boolean bypassCommit, Boolean terminate)
   at Microsoft.XLANGs.Core.ServiceContext.PendingCommit(Boolean ignore, XMessage msg)
   at Microsoft.XLANGs.Core.ExceptionHandlingContext.PendingCommit(Boolean ignoreCommit, XMessage msg)
   at Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.SendMessage(Int32 iOperation, XLANGMessage msg, Correlation[] initCorrelations, Correlation[] followCorrelations, SubscriptionWrapper& subscriptionWrapper, Context cxt, Segment seg, ActivityFlags flags)
   at Microsoft.XLANGs.Core.PortBase.SendMessage(Int32 iOperation, XLANGMessage msg, Correlation[] initCorrelations, Correlation[] followCorrelations, SubscriptionWrapper& subscriptionWrapper, Context cxt, Segment seg)
   at EIAC.OA.NotificationSystem.Orchestrations.Main.segment1(StopConditions stopOn)
   at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)
Additional error information:

        A batch item failed persistence Item-ID 7a083b87-980c-4888-8cbc-35b14cef2bc8 OperationType MAIO_CommitBatch Status -1061151998 ErrorInfo The published message could not be routed because no subscribers were found. .
       
Exception type: PersistenceItemException
Additional error information:

        Failed to publish (send) a message in the batch. This is usually because there is no one expecting to receive this message.  The error was The published message could not be routed because no subscribers were found.  with status -1061151998.
       
Exception type: PublishMessageException

       

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.



正在研究它出错的原因





问题找到了,从上面的错误信息中可以看到,是由于没有消息的订阅者,这是为什么呢。原来,开发中错误的使用了Direct方式配置流程中的SendPort

我真是太大意了,这也能搞错。(当时看也没看就这么选上了,配置部署时,也没发现少了一个绑定端口)

Direct绑定是Orchestration之间,通过这种把流程中的send / receive进行直接绑定,实现消息在Orchestration中的传递。

把端口重新绑定了一下,问题解决了。



自勉:吃一堑,长一智不。

posted @ 2008-02-21 22:41 西煞魄工人 阅读(198) | 评论 (0)编辑


[BTS]WSS+InfoPath+BizTalk 案例


一.目的

      通过本文的学习,将带你进入BizTalk与WSS进行整合,完成一次简单的工作流程开发过程。了解BizTalk流程开发的基本过程,了解WSS+InfoPath的应用,了解InfoPath的使用方法,熟悉BizTalk WSS Adapter的使用方法。

二.背景

1.名词解释

WSS
    Windows SharePoint Services 是一个用来创建能够实现信息共享和文档协作的Web站点的引擎,从而有助于提高个人和团队的生产力。它是Microsoft Windows Server™ 2003中所提供的信息工作者体系结构的重要组成部分, 为Microsoft Office System和其他的桌面应用程序提供了附加的功能,并能够作为应用程序开发的平台。

InfoPath

    InfoPath 2003—Office System 中的新产品—是一个功能强大的程序,它使团队和公司能够通过丰富、动态的表单,高效地收集他们所需的信息。因为 InfoPath 支持使用任何客户定义架构的行业标准的可扩展标记语言 (XML),所以可以在整个企业内和在业务进程之间轻松重用收集到的信息。XML 支持使 InfoPath 用户可以在公司间和业务进程间共享信息,以获得更大的业务影响。

BizTalk
    Schema, Pipeline, Adapter, Orchestration, Mapping, Rule, BAM

2.运行环境

Server :
    windows 2003 server sp2 , sql server 2005, BizTalk 2006 , IIS , WSS2.0, Office 2003

Client :
    Windows XP , Office 2003

三.需求分析

1.处理流程

      如果非常详细的写,可以写一份《软件需求说明书》了,这里只把最关键的流程图放在这里。



2.数据定义

采购订单:订单号,填写人,采购产品名称,采购数量,单价,备注,时间
查看生产计划:订单号,产品名称,数量,备注
完成的订单:订单号,填写人,采购产品名称,采购数量,单价,总价,备注
取货表单:订单号,填写人,采购产品名称,采购数量,单价,备注,填写时间,完成时间

3.规则定义

如果订单中产品数量大于50件时,需要通知生产厂家进行生产后,将生产后的产品直接发给销售代理。

4.要求

全部数据保存在WSS的文档库中即可。

四.程序开发

很多BizTalk初学者与我当初一样,不知如何下手,其实,biztalk开发与一般的程序开发基本一样,只是使用的工具不同而已。

与程序开发一样,首先要明确用户需求,从用户需求中找到可以流程化的东西。然后确认用户现有系统中可以提供的接口有哪些,这也是为EAI做准备,缺的接口就找人或自己开发好。biztalk是基于消息的,所以,要根据需求中确定的数据定义来定义流程中要使用到的消息体(schema),以及明确消息之间的关系(map)。根据与各接口对接的方式,选择不同的adapter进行连接。根据业务流程的定义,就可以很快的把Orchestration画好。最后几步当然是部署、测试。

1.消息定义

注意:如果为了后面用到数据有效果验证,以及InfoPath自动生成控件,请为每一个Field设置正确的数据类型。

客户订单

生产计划(用state标记生产结束)

取货单

2. 升级属性

目的:.................................

创建Order的属性定义

属性定义(取关键性字段)

升级消息中对应的字段

 

 

其他几个消息也按同样规则定义好相应的属性。

3. 在WSS上建好对应的文档库

 

 

 

 

4. 使用InfoPath定制表单

 

 

点击保存后,选择发布

 

 

 

 

 

 

最完点击完成。

重复上面的步骤,完成其它两个Form表单的设计及发部。

5. 开发流程

根据前面的需求,定制Orchestration。
 

注意,这里用到了相关性概念(会在以后介绍),先按1,2,3顺序操作。

6. 部署、配置

RcvOrderPort 配置

SndProducePort 配置

RcvProduceResponsePort 配置
 

SndGoodsPort 配置
 

 

五. 测试

新建一个订单

 

理论上可以按原流程设计走通。

但当前进行测试时发现流程中有逻辑上的问题;

1. 发送到Produce_Form中后,又有一接收端口从这里取数据,这个地方有点问题,觉得应该再增加一个Form用来存ProduceResponse,然后从这个FormList中取数据。

2. 由于定义的Produce_XML的FinishTime类型是xs:datetime,所以生成的InfoPath表单无法打开从SndProducePort发过来的xml,因为这时FinishTime无值。InfoPath会发出警告。

所以整合流程只走通了count < 50 的那部分。

 

 

六. 总结

      本次实验虽然没有完全成功,但主要是为了介绍一下biztalk + infopath + sps 的一个开发方法,希望能从这个案例中明确使用biztalk进行开发的整体步骤。
      下一回会重点研究一下BAM在本流程中的应用,以及InfoPath的相关开技术。

posted @ 2008-01-29 18:11 西煞魄工人 阅读(1838) | 评论 (3)编辑

BizTalk Group Day

2007年12月20日,北京

BizTalk Group Day 北京站! 今天成功举行.

报名人数:10人
实际参加人数:8人

非常感谢大家的参与! 希望我们继续发扬BizTalk精神.

地点:
 

成员:
由左向右顺序依次为
北京Apenni, 沈阳魔幻天空, 北京ESB, 上海G.L, 上海upzone, 北京YK, 北京deformity




 

总结:

    只有一台DC(Dopod D600),效果太差! 下回要再专业一点!

posted @ 2007-12-20 22:51 西煞魄工人 阅读(227) | 评论 (15)编辑

使用UpdateGram更新表中的数据

目录
  • 开发环境
  • 开发目的
  • 开发过程
  • 总结
  • 问题

开发环境

  • Windows2003 SP2
  • SqlServer 2005
  • BizTalik2006
  • VisualStudio2005

开发目的

  • 学习在SqlAdapter的UpdateGram中,使用Update用法
  • 验证Update中特殊字符的赋值的方法

开发过程

  1. 新建项目后,点击"Add Generated Items",启动生成向导。
    BizTalk SqlAdapter UpdateGram

  2. 选中"Add Adapter Metadata"的"Add Adapter Metadata"后,点击确定
    BizTalk SqlAdapter UpdateGram

  3. 选择已经注册了的Adapter,我这里只有Sql。然后配置要连接的数据库。
    BizTalk SqlAdapter UpdateGram

  4. 接下来要求您设置数据库连接字符串。
    BizTalk SqlAdapter UpdateGram

  5. 在弹出的数据库配置对话框中,配置数据连接方式。
    BizTalk SqlAdapter UpdateGram

  6. 配置好后,进行下一步。
    BizTalk SqlAdapter UpdateGram

  7. 配置生成的Schema的Namespace,端口类型,根节点。
    Namespace:自己输入喜欢的名称
    Port Type:我要用UpdateGram,所以用SendPort
    Root Element Name:请求、响应的根节点
    BizTalk SqlAdapter UpdateGram

  8. 选择我期待已久的UpdateGram
    BizTalk SqlAdapter UpdateGram

  9. 选择我要实现的Update功能,要操作的表及字段(这些字段可以在后面的Schema中修改)
    BizTalk SqlAdapter UpdateGram

  10. Finish了!
    BizTalk SqlAdapter UpdateGram

  11. 向导开始自动生成代码了
    BizTalk SqlAdapter UpdateGram

  12. 生成后,在项目中会多出下面两个文件(不用解译了吧)
    BizTalk SqlAdapter UpdateGram

  13. 打开流程文件,开始添加一个端口
    BizTalk SqlAdapter UpdateGram

  14. 启动了端口配置向导
    BizTalk SqlAdapter UpdateGram

  15. 输入端口名称
    BizTalk SqlAdapter UpdateGram

  16. 选择由向导自动生成的端口
    BizTalk SqlAdapter UpdateGram

  17. 配置端口的绑定信息
    BizTalk SqlAdapter UpdateGram

  18. 又Finish了
    BizTalk SqlAdapter UpdateGram

  19. 配置结束后的效果
    BizTalk SqlAdapter UpdateGram

  20. 直接在流程中添加接收、发送,然后与端口进行连接
    添加后会自动生成对应要使用到的消息Message_1,Message_2(先不要改名,后面会用到)
    BizTalk SqlAdapter UpdateGram

  21. 当然,还要有一个流程的接收端口
    配置一个接收端口(如果配置不用多讲了吧)
    添加一个接收,然后与刚刚添加的接收端口做连接
    把接收的Active属性设置为Tree(启用状态)
    接收的消息为了简单,直接用20步时,自动生成的Message_1
    BizTalk SqlAdapter UpdateGram

  22. 添加物理发送端口
    在BizTalk Explore中,添加一个发送端口
    BizTalk SqlAdapter UpdateGram

  23. 端口类型设置为发送请求并接收响应
    BizTalk SqlAdapter UpdateGram

  24. 设置发送端口名称
    BizTalk SqlAdapter UpdateGram

  25. 配置发送端口的地址
    ConectionString:可以用配置向导自动生成
    Namespace:在7中设置的Namespace
    Response Root:在7中设置的Response Root Name
    BizTalk SqlAdapter UpdateGram

  26. 配置完成后的效果
    BizTalk SqlAdapter UpdateGram

  27. 另忘了还要设置发送端口的Pipeline,全部用Xml***的
    BizTalk SqlAdapter UpdateGram

  28. 打开项目中的Schema
    BizTalk SqlAdapter UpdateGram

  29. 这里发现,ID的位置有问题,不应该在After中,把ID移到了Before中
    BizTalk SqlAdapter UpdateGram

    至此,完成上面所有的操作后,启动BizTalk部署,并完成流程的绑定、启动过程(具体步骤略)。

  30. 生成一个Schema的实例,并做了一个Sample(XmlSpy的显示效果)如下
    BizTalk SqlAdapter UpdateGram

  31. 在目的表中,添加下面的数据
    注意第一条,与30中的Before相对应
    BizTalk SqlAdapter UpdateGram

  32. 将30中的xml,发到流程的接收位置处
    注:接收位置我配置了一个文件接收端口,这是为了测试方便。配置方法略。
    观察表中的数据表发,发现数据已经按照要求,被更新了。
    BizTalk SqlAdapter UpdateGram

  33. 如果输入的Xml中,Before数据与表中数据对应不上,会报下面的错误
    BizTalk SqlAdapter UpdateGram

    事件类型: 警告
    事件来源: 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>".

  34. 错误2
    BizTalk SqlAdapter UpdateGram

    事件类型: 警告
    事件来源: 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在技术上的支持!

转载请注明作者及出处

posted @ 2007-11-06 10:24 西煞魄工人 阅读(1286) | 评论 (1)编辑

         昨天听了一天的UML培训,重新学习了一下UML,虽然只有一天的培训时间,但由于一直都在关注UML,并在工作中用到过,所以听起来还是比较轻松的!

         UML的资料满www都有,这里就不细写了,没什么意义。

          把我听课时的一些体会与大家分享一下!有不对的地方请指正。

讲师用的ROSE
我用的UModel

我的UML学习笔记
我的UML学习笔记
我的UML学习笔记
我的UML学习笔记
我的UML学习笔记
我的UML学习笔记
我的UML学习笔记

posted @ 2007-08-03 12:12 西煞魄工人 阅读(419) | 评论 (0)编辑

什么是Groove

Office Groove 2007 是一个协作软件程序,适合用于处理从简单的文档协作到与业务过程集成的自定义解决方案的各种项目活动。 Office Groove 2007 的以下十大方式可帮助您和您的团队更高效地协作并提高交付产品的质量。

为什么用Groove

1.资源共享,使用它可以很轻松地实现资源共享!
2.消息提醒,新增的文件、未阅读过的资料马上就可以知道!
3.脱机浏览,当您不能上网时,Groove中的资料照样能看!
4.文件同步,可以把多台PC上的文件进行自动同步!

BizTalk Workspace内容介绍

1.共享

在这里,共享了我们多年来收集的各种文档、代码以及自己的一些小项目,只有靠大家的努力,才能不断的丰富!



2.灌水区


在这里,可以进行一些非技术性问题的讨论
 




3.问题区


有关BizTalk方面的问题,都发表在这里,最后都进行一下分类,为以后进行查询提供便利条件。




4.文章区


网络的资源是丰富的,只有不断的收集、整理,才能在以后的工作中用到。
 


第一次使用时

先创建一个用户,基本步骤如下:








完成这些步骤后,您就拥有了一个Groove帐号,同一个email可以注册很多个(但不推荐这么用)。

后面,您就可以创建自己的Workspace或Share directory了。


有关Groove的一料资料


Microsoft Office Groove 2007 十大优点
Office 2007 家族的新成员 Groove 2007
Microsoft Office 2007 简体中文企业版+专业版--正式版



邀请您加入


如果您想加入我们的BizTalk Workspace,请将您注册用email留下,或者直接发邮件给我(xu.zhong#hotmail.com)也行。

之后,您将收到一封加入到BizTalk workspace 的申请信,附件中有一个 grv文件,双击打开后选择"接受"即可。

欢迎广大BizTalk Funs加入。

posted @ 2007-07-11 21:05 西煞魄工人 阅读(1339) | 评论 (37)编辑

BizTalk Mapping中Xslt的应用

什么是XSLT

在计算机科学中, XSLT是扩展样式表转换语言(Extensible Stylesheet Language Transformations)的简称,这是一种对XML文档进行转化的语言,XSLT中的T代表英语中的“转换”(transformation)。它是XSL(Extensible stylesheet language)规范的一部分。XSL规范的另外一部分是XSLF(F代表代表格式化对象Formatting Objects),又称XSL-FO或XSLFO。

为什么要用XSLT

我们已经知道,XML是一种电脑程序间交换原始数据的简单而标准的方法。它的成功并不在于它容易被人们书写和阅读,更重要的是,它从根本上解决了应用系统间的信息交换。因为XML满足了两个基本的需求:

(1).将数据和表达形式分离。就象天气预报的信息可以显示在不同的设备上,电视,手机或者其它。
(2).在不同的应用之间传输数据。电子商务数据交换的与日俱增使得这种需求越来越紧迫。
   
为了使数据便于人们的阅读理解,我们需要将信息显示出来或者打印出来,例如将数据变成一个HTML文件,一个PDF文件,甚至是一段声音;同样,为了使数据适合不同的应用程序,我们必须有能够将一种数据格式转换为另一种数据格式,比如需求格式可能是一个文本文件,一个SQL语句,一个HTTP信息,一定顺序的数据调用等。而XSLT就是我们用来实现这种转换功能的语言。将XML转换为HTML,是目前XSLT最主要的功能。

在BizTalk中有Mapping,其实,它也是一种被编译了的Xslt,在Mapping中还可以使用更高级的一些功能。但有是,可能您的业务数据已经定义好了,并在先前已经定义好了xslt文件,来对数据进行转换,这时,就没有必须再去一点一点的去画线了,直接引用定义好的xslt就可以了。

并且,对于Xslt很熟悉的开发人员来说,比使用Mapping更方便,更个性(自定义)化。

XSLT开发工具 MapForce

开发Xslt的工具很简单,记事本、XmlSpy、VS、etc。但我向大家强烈推荐使用Altova出品的MapForce,功能根相当强大。
主要功能,界面化的定义Xslt。另外,它可以完成下面几种应用场景:
1.XML - XML
2.XML - TEXT
3.DB - XML
4.DB - TEXT
5.TEXT - TEXT
它还集成了EDI、X12的数据定义。

EDI的定义
BizTalk Xslt Mapping


XML->TEXT的定义
BizTalk Xslt Mapping



Mapping中使用XSLT

下面举一个非常简单的例子


1. 定义输入消息

BizTalk Xslt Mapping

2. 定义输出消息

BizTalk Xslt Mapping


3. 使用MapForce完成一个Mapping功能

BizTalk Xslt Mapping


4. 得到Xslt数据

BizTalk Xslt Mapping


5. 保存成Xslt文件,在BizTalk Mapping中会用到。

BizTalk Xslt Mapping


6. 定义Mapping,在Custom Xsl Path中输入前面定义的xslt文件。

BizTalk Xslt Mapping

7. 保存,测试,可以得到2中的输出消息。


提示: 如果在Mapping中使用了xslt,那么,之前在Map中定义所有映射关系将不起作用了。


posted @ 2007-07-11 21:03 西煞魄工人 阅读(808) | 评论 (2)编辑