2013-12-17 9 views
0

Я задал этот вопрос 2 года назад (Problem with BizTalk multi-input map), но тогда проект был отложен, и я никогда не проводил никаких дальнейших испытаний. Мне нужно снова удалить пыль, с некоторыми подробностями и скриншотами.BizTalk HIPAA EDI multi-input map не генерирует узел

У меня есть решение BizTalk HIPAA, которое должно объединить схему претензии 837 с некоторыми данными нашей системы. Мы делаем это с картой, которая имеет два входных схемы, как показано здесь:

enter image description here

(я значительно упростила схемы для целей тестирования). Принятый ответ на мой исходный пост (с использованием одинаковых функтоидов и указателей значений) отлично работает с простой схемой, как я изначально показывал, но не справляется с реальной схемой ЭОД.

В первом сообщении ввода, если IsRepriced = 1, я хочу использовать наши значения для HCP_01, HCP_02 и HCP_03. Если это 0, используйте значения во втором сообщении (исходное требование 837). Показанные функтоиды работают нормально до тех пор, пока исходный запрос 837 фактически содержит узел (сегмент) HCP, но если он отсутствует, я не могу сгенерировать его из наших данных.

Замена этих элементов на скриптовый функтоид с использованием некоторого кода C# if-then-else имеет тот же эффект.

Итак, есть ли способ сделать это с помощью functoids, или мне нужно прибегнуть к XSLT? К сожалению, я почти ничего не знаю о XSLT, так что это будет сложно ...

Спасибо!

Edit: Я бы вверх с помощью шаблона Инлайн XSLT вызовов, с этим кодом:

<xsl:template name="Repricing_2000B_HCP"> 
<xsl:param name="IsRepriced" /> 
<xsl:choose> 
    <xsl:when test="$IsRepriced='1'"> 
<xsl:for-each select="//InputMessagePart_1/ns0:X12_00401_837_I/ns0:TS837Q3_2000A_Loop/ns0:TS837Q3_2000B_Loop/ns0:TS837Q3_2300_Loop/ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300"> 
<xsl:element name="ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300"> 
    <xsl:copy-of select="./@*" /> 
    <xsl:copy-of select="./*" /> 
</xsl:element> 
</xsl:for-each> 
    </xsl:when> 
    <xsl:otherwise> 
<xsl:for-each select="//InputMessagePart_0/ns0:X12_00401_837_I/ns0:TS837Q3_2000A_Loop/ns0:TS837Q3_2000B_Loop/ns0:TS837Q3_2300_Loop/ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300"> 
<xsl:element name="ns0:HCP_ClaimPricingRepricingInformation_TS837Q3_2300"> 
    <xsl:copy-of select="./@*" /> 
    <xsl:copy-of select="./*" /> 
</xsl:element> 
    </xsl:for-each> 
</xsl:otherwise> 
</xsl:choose> 
</xsl:template> 

ответ

2

Я часто врезался в кирпичную стену с, если не хватает-то еще paradign в карте. Иногда Looping Functioids делают трюк, иногда нет. Иногда тщательно размещен Логическое Существование -> Не работает, иногда нет.

Это главным образом потому, что если один из записей источника - minOccurs = 0, Mapper будет обертывать все в каждом. Поскольку элемент не существует, код никогда не будет выполнен.

Я бы сказал, что 50%, я прибегаю к встроенному Xslt, потому что в какой-то момент он становится чище, чем страница в основном дублирующих групп Functoid.

Однако я бы поспорил, что Xslt не окажется таким сложным предложением, как вы думаете. Mapper может выполнить большую часть работы для вас. Вы можете построить основную часть Карты с помощью Functoids, а затем просто скопировать полученный Xslt. Вам нужно будет изменить некоторые вещи, например пространства имен.

(тот же ответ)

+0

Yup, завершающий маршрут xslt ... –

 Смежные вопросы

  • Нет связанных вопросов^_^