Hi all,
Sorry this is a long post - hard to explain this stuff! I tried to attach
an
image to help but it is too large to attach.
We have migrated our 2002 maps to 2006. The inbound schemas are EDI and
therefore are heavy on looping, which we flatten out.
As per the BTS 2006 do***entation
(ms-help://MS.BTS.2006/BTS06Developing/html/fc5b3ac9-28c6-41df-b779-15a8c3188528.htm):
"When you migrate a map from previous versions of BizTalk Server to
BizTalk
Server 2006, any functoids included in the map are also migrated. If the
functoids you migrate do not include Scripting functoids, no additional
migration tasks are required."
Therefore, we migrated our maps and converted embedded VBScript to C#.
From
the above, this is the only task required for map migration. However.
As per
ms-help://MS.BTS.2006/BTS06DevReference/html/e03c96d0-9215-496b-ab53-a385f1cdcae0.htm
"The Looping and Value Mapping (Flattening) functoids should not be used
together. If both are used together, it results in a compiled map that
assumed there is no source looping dependency for the target nodes that
are
below the Looping functoid."
Our issue is that we were using these 2 functoids together frequently in
2002 without concern. However, I can't find any 2002 do***entation
indicating they shouldn't have been used together, as is the case with
2006.
Now we have several maps which post migration perform incorrect logic
regarding flattening. When we remove the looping functoid, it solves the
issue in some simple cases, but introduces issues in more complex
scenarios.
Specifically, we have a "DOCLoop" which repeats. We are then flattening
each
inbound DOCLoop to a
SINGLE output DOCLoop. The looping functoid we are using tells the mapper
which output node we are trying to flatten into.
This is required due to the source DOCLoop actually being a child of a
repeating NADLoop, which we are wanting to map to the output but NOT
flatten
it. Therefore we have a situation where both inbound records repeat, but
only the child should be flattened. If in BTS 2006 you cannot use these 2
functoids together, how on earth do you tell the mapper you want the
NADLoop
to loop (without using a looping functoid) while at the same time flatten
the DOCLoop which is a child of the NADLoop?
Input data:
<DOCLoop>
<DOC>
<C002_1>
<e1001_1>706</e1001_1>
</C002_1>
<C503>
<e1373>26</e1373>
</C503>
<e1220>3</e1220>
</DOC>
</DOCLoop>
<DOCLoop>
<DOC>
<C002_1>
<e1001_1>707</e1001_1>
</C002_1>
<C503>
<e1373>26</e1373>
</C503>
<e1220>6</e1220>
</DOC>
</DOCLoop>
Expected output data (currently output from BTS2002):
<DOCLoop>
<DOC>
<DocCodeE1001>705</DocCodeE1001>
<DocStatusE1373>26</DocStatusE1373>
<NoOfCopiesE1220>6</NoOfCopiesE1220>
<NoOfOriginalsE1218>3</NoOfOriginalsE1218>
</DOC>
</DOCLoop>
Once this map is migrated, the output DOC within the DOCLoop is only being
populated with data from the FIRST input DOCLoop record. I.e. the
subsequent
ones are NOT being flattened in.
Result (BTS2006):
<DOCLoop>
<DOC>
<DocCodeE1001>705</DocCodeE1001>
<NoOfOriginalsE1218>3</NoOfOriginalsE1218>
</DOC>
</DOCLoop>
This is, from my experimentation with other maps, due to the Looping
functoid and the Value Mapping Functoid being used together (NO LONGER
ALLOWED). However, when the looping functoid from DOCLoop to DOC is
removed, the mapper now outputs the data into two DOC nodes:
<DOCLoop>
<DOC>
<DocCodeE1001>705</DocCodeE1001>
<DocStatusE1373>26</DocStatusE1373>
<NoOfOriginalsE1218>3</NoOfOriginalsE1218>
</DOC>
<DOC>
<NoOfCopiesE1220>6</NoOfCopiesE1220>
</DOC>
</DOCLoop>
Anyone have any ideas how to get the BTS2006 mapper to output with the
same
structure as 2002 in this scenario?
Has anyone else had trouble migrating maps due to flattening loops?
This is just one example of the issues it is causing. We are having
others
(possibly more complex).
Sorry if too much or not enough detail this is a very hard situation to
try
and explain.
Cheers,
Bardo


|