开发者

Is there a list of defined C# functions for userCSharp in XSLT?

I'm trying to debug a BizTalk map that has some custom XSLT in it that makes use of C#. I've found:

  • userCSharp:MathSubtract
  • userCSharp:MathAdd
  • userCSharp:StringSiz开发者_开发问答e
  • userCSharp:StringSubstring

and a few others but I'm finding it difficult to find some resources online defining all of the available predefined c# functions and their documentation.

The reason I ask is because it has a I have a "userCSharp:StringFind" which blows up saying StringFind() is an unknown XSLT function.


The xslt functions MathSubtract, MathAdd etc correspond to the predefined Functoids that your map uses (in the xmlns 'userCSharp').

Most of the functoids are just inline XSLT C# functions - BizTalk adds the C# script for the functoid at the bottom of the xslt when the map gets compiled. (I think some of the simple functoids can use xslt primitives as well). Your own script functoids will also be added to this block.

You can see what BizTalk is doing by compiling your assembly containing the maps, and then using the "Show all Files" command to look at the corresponding .btm.cs file to see what has been added.

BizBert site gives quite a good reference on the implementation of each of the functoids.

(The double "" escaping is because the XSLT is kept in a string constant)

private const string _strMap = @"<?xml version=""1.0"" encoding=""UTF-16""?>

<xsl:stylesheet xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"" xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" 
...
xmlns:userCSharp=""http://schemas.microsoft.com/BizTalk/2003/userCSharp"">

and then a script CDATA block at the bottom

  <msxsl:script language=""C#"" implements-prefix=""userCSharp""><![CDATA[

public bool IsNumeric(string val)
{
    if (val == null)
    {
        return false;
    }
    double d = 0;
    return Double.TryParse(val, System.Globalization.NumberStyles.AllowThousands | System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out d);
}

public string MathAdd(string param0, string param1)
{
    System.Collections.ArrayList listValues = new System.Collections.ArrayList();

... etc

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜