none
相关集的一些问题 RRS feed

  • 问题

  • 请教大家相关集的问题

    1. 初始化相关集除了在发送和接收形状处,还有什么方法?
    2. 如果在一个循环内,初始化相关集有什么办法?
    3. 相关集名字不同,但相关集类型相同可以初始化吗?如果可以,为什么不同初始化相同的相关集。
    2008年12月30日 12:45

答案

  • 现在完全明白你的意思了,你是想在orchestration中升级不是从消息本身获得的属性,并要用这个属性路由消息。
     
    1、网上搜索了一些相关文章,在发送端口初始化相关集的确会升级出站消息的相关属性。
    2、没有找到办法在orchestration 的表达式中升级这样的属性。在pipeline中的消息的上下文属性类IBaseMessageContext 倒是有Write 和 Promote方法,分别用来写入和升级消息的属性字段。但是在orchestration里的XLANGMessage 类,只有SetPropertyValue方式来设置消息属性,但是这个方法相当于IBaseMessageContext 的Write 方法,只是把属性写入到上下文,而不是升级。网上查了半天,没发现可以在表达式里用代码升级属性的方法,采用的方法都是你说的使用相关集。
    3、至于你提到的在loop中如何多次的初始化相关集,我想是不是可以在loop中增加一个scope,然后在这个scope中定义scope级别的相关集,每次发送端口都是初始化的运行时的那个scope的相关集。(没测试过,这么设想,你可以试试)
    2009年1月7日 13:37

全部回复

  • 相关集是与消息相关联的,因此往往只有在消息接收与发送的地方才可以考虑初始化相关集,相关集的初始化与沿用必须是对应的。。。初始化了A,才能沿用A。。。初始化了B才能沿用B,

     

    2009年1月1日 15:57
  • 版主的意思就是不能再其他地方初始化相关集了?

     

     

    但是初始化相关集可以可以升级消息属性,有些地方不能初始化相关集,但是要升级消息属性,有什么好办法?

    2009年1月1日 16:49
  •  hollisyb 写:

    版主的意思就是不能再其他地方初始化相关集了?

     

     

    但是初始化相关集可以可以升级消息属性,有些地方不能初始化相关集,但是要升级消息属性,有什么好办法?

     
    相关集不是用来升级属性的,也不能升级属性。
    相关集只是在初始化的时候,把消息中的相应属性的值保存在相关集中。
    2009年1月6日 2:25
  •  金剑忠 写:
     hollisyb 写:

    版主的意思就是不能再其他地方初始化相关集了?

     

     

    但是初始化相关集可以可以升级消息属性,有些地方不能初始化相关集,但是要升级消息属性,有什么好办法?

     
    相关集不是用来升级属性的,也不能升级属性。
    相关集只是在初始化的时候,把消息中的相应属性的值保存在相关集中。

     

    据我所知在发送形状初始化相关集也是升级属性的一个方法。

    下面是帮助中的说明。

    Correlation Sets initialized on a Send action

    Correlation sets initialized on a Send action are created from a correlation type based upon the corresponding values in a document and promote the correlation properties in the outbound document.

     

    在发送操作上初始化的相关集

    在发送操作上初始化的相关集基于文档中的相应值从某一相关类型创建,并且升级出站文档中的相关属性。

     

    我想升级上下文类型的属性,不能通过普通的架构的升级方法,请问还有什么好的方法。
    2009年1月6日 11:19
  • Correlation Sets initialized on a Send action

    Correlation sets initialized on a Send action are created from a correlation type based upon the corresponding values in a document and promote the correlation properties in the outbound document.

     

    不好意思,搜索了一下,这是biztalk 2006 R2帮助中的描述,果然是说可以升级属性,我前面的说法可能有问题。不知道还可以在初始化相关集时升级消息中的属性,也想不出来该怎么做。

     

    另外,“我想升级上下文类型的属性,不能通过普通的架构的升级方法”,能不能说的具体点?好看看是不是有别的办法实现你的目的

    2009年1月6日 12:34
  • 属性架构文件中的所有元素都有一个属性是:Property Schema Base

    其中第二可选的值是:
     

    MessageContextPropertyBase

    Use this value to specify that the value associated with the selected Field Element node may or may not originate from a promoted property within an associated document schema.

    Most built-in BizTalk Server context properties are of this type, as well as values that originate in the envelope portion of an incoming instance message.


    MessageContextPropertyBase
     使用此值指定与所选“字段元素”节点关联的值可能(或可能不)来源于相关文档架构的升级属性。

    大部分内置的 BizTalk Server 上下文属性都属于这种类型,其值来源于传入实例消息的信封部分。

     

    我就是想利用 MessageContextPropertyBase类型的属性,它的值可以通过表达式赋值,但是升级它我只会初始化相关集。

    因为相关集初始化有很多局限性,所以升级一个上下文的属性都有什么方法?

     

    2009年1月6日 13:04
  • 1、定义一个属性架构,里面包含一个MessageContextPropertyBase类型的属性,比如:
    TestPro的Property Schema Base属性设置为MessageContextPropertyBase
     
    2、然后表达式里可以给消息的这个属性赋值,比如:
    Message_Sen(BindingSpecifyLater.TestPro) = "属性已赋值";
    2009年1月7日 2:45
  •  金剑忠 写:
    1、定义一个属性架构,里面包含一个MessageContextPropertyBase类型的属性,比如:
    TestPro的Property Schema Base属性设置为MessageContextPropertyBase
     
    2、然后表达式里可以给消息的这个属性赋值,比如:
    Message_Sen(BindingSpecifyLater.TestPro) = "属性已赋值";

     

    Kent,以上两个步骤我都做了,但是还差一步升级,如果不升级消息上下文中的该属性是不可用的。

    我就想请教最后一步升级的方法,如何用表达式升级一个属性,而之前使用初始化相关集的方法局限性太多了(或者也可以帮我解决最初提出的问题)。

     

    Thank U.

    2009年1月7日 7:56
  • 现在完全明白你的意思了,你是想在orchestration中升级不是从消息本身获得的属性,并要用这个属性路由消息。
     
    1、网上搜索了一些相关文章,在发送端口初始化相关集的确会升级出站消息的相关属性。
    2、没有找到办法在orchestration 的表达式中升级这样的属性。在pipeline中的消息的上下文属性类IBaseMessageContext 倒是有Write 和 Promote方法,分别用来写入和升级消息的属性字段。但是在orchestration里的XLANGMessage 类,只有SetPropertyValue方式来设置消息属性,但是这个方法相当于IBaseMessageContext 的Write 方法,只是把属性写入到上下文,而不是升级。网上查了半天,没发现可以在表达式里用代码升级属性的方法,采用的方法都是你说的使用相关集。
    3、至于你提到的在loop中如何多次的初始化相关集,我想是不是可以在loop中增加一个scope,然后在这个scope中定义scope级别的相关集,每次发送端口都是初始化的运行时的那个scope的相关集。(没测试过,这么设想,你可以试试)
    2009年1月7日 13:37
  • 感谢Kent回复,

    既然没有什么好办法,我有空试试你说的方法。

    2009年1月7日 14:06