Преобразуйте XML в приложениях логики Azure, загрузите файл сборки C # (.DLL) в учетную запись интеграции Azure и используйте его внутри XSLT (карта) - PullRequest
2 голосов
/ 04 ноября 2019

В приложениях журнала у меня есть файл Source.xml, который необходимо преобразовать в другой файл destination.xml с помощью XSLT. В XSLT мне нужно реализовать некоторую пользовательскую логику с использованием кода C #, который будет загружен в учетную запись Azure Integration "Раздел сборок"

Я создал один файл сборки C # с StrongName, но мне нужно понять, как методы сборки C #можно вызвать из XSLT.

Буду признателен, если кто-нибудь сможет поделиться рабочим примером кода с очень простым примером.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2019

Я нашел пример для вашей справки:

Код c # показан ниже:

using System;
namespace ExtAssembly
{
 public static class CalcFunctions
 {
 public static Int64 Add(Int64 a, Int64 b)
 {
 return a + b;
 }
 public static Int64 Subtract(Int64 a, Int64 b)
 {
 return a - b;
 }
 public static Int64 Multiply(Int64 a, Int64 b)
 {
 return a * b;
 }
 public static Double Divide(Int64 a, Int64 b)
 {
 return a / b;
 }
 }
}

И мы можем использовать код c # в xslt, как показано ниже:

<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform Jump " xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl userCSharp" version="1.0" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp Jump ">
 <xsl:output omit-xml-declaration="yes" media-type="application/text" method="text" version="1.0" />
 <xsl:param name="MethodName" />
 <xsl:param name="Parameters" />
 <xsl:template match="/">
 <xsl:value-of select ="userCSharp:Invoke($MethodName, substring-before(substring-after($Parameters, '('), ')'))" />
 </xsl:template>
 <msxsl:script language="C#" implements-prefix="userCSharp"> 
 <msxsl:assembly name="ExtAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx" />
 <msxsl:using namespace="System.Reflection" />
 <msxsl:using namespace="System.Text.RegularExpressions" />
 <msxsl:using namespace="ExtAssembly" />
 <![CDATA[
 public object Invoke(string methodName, string methodParameters)
 {
 MatchCollection matches = new Regex("((?<=\")[^\"]*(?=\"(,|$)+)|(?<=,|^)[^,\"]*(?=,|$))").Matches(methodParameters); 
 ParameterInfo[] pars = typeof(CalcFunctions).GetMethod(methodName).GetParameters();
 object[] methodPars = new object[pars.Length]; 
 for (int i = 0; i < pars.Length; i++)
 {
 methodPars[i] = Convert.ChangeType(matches[i].Value, pars[i].ParameterType);
 }
 return typeof(CalcFunctions).GetMethod(methodName).Invoke(null, methodPars);
 }
 ]]>
</msxsl:script>
</xsl:stylesheet>

После этого мы можем вызвать его в нашем приложении логики (укажите его с помощью «MethodName» и «Parameters» в действии «Transform xml»).

Для получения дополнительной информации вы можете обратиться к этому пример .

Надеюсь, это поможет вашей проблеме.

0 голосов
/ 04 ноября 2019

Вопрос в том, как использовать сборку c # с XSLT. И XSLT, и C # помещаются в учетную запись интеграции Azure, т. Е. В разделах артефактов Maps и Assembly соответственно

...