Date 在BizTalk映射中跨层次结构累积日期元素

Date 在BizTalk映射中跨层次结构累积日期元素,date,dictionary,biztalk,accumulate,Date,Dictionary,Biztalk,Accumulate,(在给我打分之前,请检查我在问题底部的弹出提示。谢谢!) BizTalk中存在一个问题,我只能通过多个步骤实现所需的映射,并且希望使用单个映射实现输出 我的输入XML示例如下所示:- <Books> <Book><Title>The BFG</Title><ISBN>0-224-02040-4</ISBN></Book> <Book><Title>The Hobbit<

(在给我打分之前,请检查我在问题底部的弹出提示。谢谢!)

BizTalk中存在一个问题,我只能通过多个步骤实现所需的映射,并且希望使用单个映射实现输出

我的输入XML示例如下所示:-

<Books>
    <Book><Title>The BFG</Title><ISBN>0-224-02040-4</ISBN></Book>
    <Book><Title>The Hobbit</Title><ISBN>978-0261102217</ISBN></Book>
    <Book><Title>BizTalk Server 2010 Unleashed</Title><ISBN>978-0-672-33118-7</ISBN></Book> 
</Books>
<Revisions>
    <Revision><ISBN>0-224-02040-4</ISBN><Version>1</Version><Published>1970-08-22T00:00:00</Published></Revision>
    <Revision><ISBN>0-224-02040-4</ISBN><Version>2</Version><Published>1975-09-25T00:00:00</Published></Revision>
    <Revision><ISBN>0-224-02040-4</ISBN><Version>3</Version><Published>1990-09-16T00:00:00</Published></Revision>
    <Revision><ISBN>978-0-672-33118-7</ISBN><Version>1</Version><Published>2010-03-28T00:00:00</Published></Revision>
    <Revision><ISBN>978-0261102217</ISBN><Version>1</Version><Published>1960-09-25T00:00:00</Published></Revision>
    <Revision><ISBN>978-0-672-33118-7</ISBN><Version>2</Version><Published>2011-09-16T00:00:00</Published></Revision>
<Revisions>

BFG0-224-02040-4
霍比特人978-0261102217
BizTalk Server 2010已发布978-0-672-33118-7
0-224-02040-411970-08-22T00:00:00
0-224-02040-421975-09-25T00:00:00
0-224-02040-4390-09-16T00:00:00
978-0-672-33118-712010-03-28:00:00
978-02611022171960-09-25T00:00:00
978-0-672-33118-722011-09-16T00:00:00
本例所需的输出XML为:-

<HistoricBooks>
    <FirstIssue><ISBN>0-224-02040-4</ISBN><Title>The BFG</Title><FirstPublished>1970-08-22T00:00:00</FirstPublished><FirstIssue>
    <FirstIssue><ISBN>978-0261102217</ISBN><Title>The Hobbit</Title><FirstPublished>1960-09-25T00:00:00</FirstPublished><FirstIssue>
    <FirstIssue><ISBN>978-0-672-33118-7</ISBN><Title>BizTalk Server 2010 Unleashed</Title><FirstPublished>2010-03-28T00:00:00</FirstPublished><FirstIssue>
</HistoricBooks>

0-224-02040-4 BFG1970-08-22T00:00:00
978-0261102217霍比特人1960-09-25T00:00:00
978-0-672-33118-7BizTalk服务器2010发布2010-03-28:00:00
我遇到的第一个问题是BizTalk Minimum和CumulativeMinimum functoid都需要数字输入,不能处理日期。因此,我问题的第一部分是

对BizTalk映射中的日期元素执行最小和最大函数的最佳方法是什么?

第二个问题是累积functoid理解作用域的方式。scope参数表示累积的深度(整个文档、父文档、祖父母等),但在这种情况下,不适合简单地在
的所有子文档中取最小值。我需要更具选择性。因此,我问题的第二部分是

我应该使用哪个functoid在我的XML层次结构中选择性地执行日期累加,以及如何实现它?

我知道这是一个双重问题。我也知道有很多方法可以得到答案,但很多方法都会导致代码复杂、不整洁和性能差。我希望避免这种情况。我还知道,通过修改源或目标架构或不使用BizTalk,可以轻松实现这一点。这些路线不对我开放。因此,这个问题要求举例说明该问题的简单、优雅的BizTalk解决方案。如果您不希望提供答案,请不要惩罚希望提高其知识和技能的人


作为参考,我已经围绕我的问题的两个部分进行了研究,但总体解决方案并不理想,我还不推荐这是一个好的答案

日期元素的累计最小值

您可以添加一个脚本functoid,该functoid使用内联C#返回日期元素和固定日期之间的间隔。以天为单位表示此时间间隔,您就有了一个数值,该数值可以通过管道传输到“累计最小”functoid中。然后只需使用另一个脚本functoid将最小间隔添加回您的固定日期

例如,如果我们选择2016-01-01的固定日期,并且我们的日期元素包含2016-01-03、2016-01-04和2016-01-05,则我们的间隔分别为2天、3天和4天。累计最小日期为2天,如果我们在2016-01-01的固定日期后再加上2天,那么我们的累计最小日期将为2016-01-03

跨层次结构执行累积功能

这是一个骗局,它不能完全回答问题,但我可以帮助其他读者

我非常笨拙的解决方法是使用一个临时消息模式,将
节点作为每个
节点的子节点

在步骤1中,我从源模式映射到临时模式,将
节点数据复制到每个
节点中(为了方便起见,我还将计算出的数值间隔存储在这里)

然后在步骤2中,我使用最小functoid和脚本functoid将中间模式映射到输出模式,以将时间间隔转换回日期


注意:这两个步骤的解决方案意味着我无法使用DateTime。今天是我的固定日期,因为这两个步骤可能在不同的日期执行

您的整体解决方案没有问题。有一件事我会做得不同

可以,使用“脚本”Functoid转换日期,但只需将DateTime的.Ticks属性作为累计最小值的输入,而不是差异。这是作为一个长字符串返回的。然后,您不依赖于任何日期,并且输出是确定的

重要的是,使用双映射解决方案绝对没有错。这是BizTalk开发中完全可以接受的模式

您可能可以在一个映射中完成,但这需要一些内联Xslt模板。这也没什么错。但是,双映射解决方案只允许使用内置functoid


不要担心“性能”,除非你能证明你需要这样做。一两张地图之间的性能差异几乎无法测量。

首先,这是一个完全合理的问题。第二,我认为你对某些事情想得太多了。请确认一件事,你所要做的就是用ISBN作为键合并标题和首次发布的数据?嗨,约翰,是的,这是完全正确的。而且很可能我想得太多了,或者遗漏了一些非常明显的东西,因为我的直觉告诉我这应该是BizTalk映射的“面包和黄油”。可能不重要,但您的拼写不一致。不同的外壳。