为内容关联定义XPath查询

时间:2013-01-15 16:41:15

标签: workflow-foundation-4

似乎网上还有其他帖子提出同样的问题,但要么他们没有完全解决问题,要么我遗漏了某些内容(很可能是后者)。

为XAMLX服务定义内容关联的XPath查询时,我对命名空间前缀的来源感到困惑。例如,在查询“sm:body()/ xg0:Id”中,“sm”和“xg0”来自何处。我假设这些是在某处指定的,但我不知道在哪里。如果我理解正确,生成查询与消息合同一起使用时不起作用。在某种程度上,我同意这一点。如果我将“xg0”的前缀更改为“tempuri”,我可以在基本情况下使用它,但不是在所有情况下都可以。是否有文档可以准确解释此查询的工作原理?

1 个答案:

答案 0 :(得分:3)

名称空间前缀存储在XAMLX文件中。不幸的是,没有显示那些值的UI,你必须开始挖掘XAMLX源代码。请参阅下面的XPathMessageQuery.Namespaces部分,xgSc定义为http://tempuri.org/

<Receive x:Name="__ReferenceID0" CanCreateInstance="True" DisplayName="ReceiveRequest" sap:VirtualizedContainerService.HintSize="255,86" OperationName="GetData" ServiceContractName="p:IService">
  <Receive.CorrelationInitializers>
    <RequestReplyCorrelationInitializer CorrelationHandle="[handle]" />
    <QueryCorrelationInitializer>
      <XPathMessageQuery x:Key="key1">
        <XPathMessageQuery.Namespaces>
          <ssx:XPathMessageContextMarkup>
            <x:String x:Key="xgSc">http://tempuri.org/</x:String>
          </ssx:XPathMessageContextMarkup>
        </XPathMessageQuery.Namespaces>sm:body()/xgSc:GetData/xgSc:orderId</XPathMessageQuery>
    </QueryCorrelationInitializer>
  </Receive.CorrelationInitializers>
  <ReceiveParametersContent>
    <p1:OutArgument x:TypeArguments="x:String" x:Key="orderId" />
  </ReceiveParametersContent>
</Receive>