问题
Can someone help me with this? I have a biztalk mapping. In the source scheme there are two address records with address elements. Address record 1 always exists in the source scheme, but if address record 2 exists in the source I would like to map that to the destination instead of address record 1. Is that possible to do?
回答1:
These are the steps I would take to achieve this - it'll have to be a high level description of a solution as you haven't included any schema definition or Xml sample.
You can use XSLT or The Mapping Designer to do this. I describe the latter;
1) Use the Logical Existence
Functoid to Check if the Address 2 node exists. It return True if Address 2 is present in your source schema.
2) Connect the Logical Existence
functoid to a Value Mapping
functoid (as the first input) and drag the Address 2 value to the same (as your second input).
3) Connect the Value Mapping
Functoid to the Address Destination node.
4) Next, you need to cater for non-existent Address 2's. So, add a Logical Not functoid to your mapper surface.
5) Connect the Logical Not
to you Logical Existence
. This reads "Not Exists".
6) Connect your Logical Not
to Another Value Mapping
Functoid as the First input.
7) Connect your Address 1 value to the Value Mapping
functoid as your second input.
8) Connect the Second Value Mapping
to the Address Destination.
So, you should have two connections to the destination node but only one path with be true, resulting in one mapping.
Hope this gives you a guide on how to approach this. Shout if you need more help!
EDIT: Heres an illustration to help!
TJ
来源:https://stackoverflow.com/questions/18397351/if-record-exists-then-map-if-not-map-another-biztalk-mapping