首页 > 解决方案 > BIML 类块错误:“AstTableNode”不包含“GetTag”的定义,并且没有可访问的扩展方法“GetTag”

问题描述

我创建了一个 HelperFunctions.cs 文件,其中包含以下内容:

using Varigence.Languages.Biml.Table;
public static class HelperFunctions
{
  public static string GetDisplayTableName(AstTableNode table) 
  {
    return table.GetTag("DatabaseName").ToUpper() + "_" + table.Schema.Name.ToUpper() + "_" + table.Name.ToUpper();

  }

}

但是它不识别 GetTag() 并抛出错误:

“AstTableNode”不包含“GetTag”的定义,并且找不到接受“AstTableNode”类型的第一个参数的可访问扩展方法“GetTag”(您是否缺少 using 指令或程序集引用?)。我需要添加什么才能完成这项工作?谢谢乔恩

标签: ssisbiml

解决方案


静态方法需要以参数为前缀this

SO_63828312.cs

using System.Collections.Generic;
using System.Linq;
using System.Text;
using Varigence.Biml.Extensions;
using Varigence.Languages.Biml.Table;
public static class HelperFunctions
{
    public static string GetDisplayTableName(this AstTableNode table)
    {
        return table.GetTag("DatabaseName").ToUpper() + "_" + table.Schema.Name.ToUpper() + "_" + table.Name.ToUpper();

    }

}

我的静态 Biml 定义了一个表,它需要一个模式,它需要一个数据库,它需要一个连接。所有这些都是为了让我们找到一个 AnnotationType 为 Tag 且值为 AW 的表。

SO_63828312.T0.biml

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <OleDbConnection ConnectionString="Data Source=localhost\dev2017;Initial Catalog=tempdb;Provider=SQLNCLI11.1;Integrated Security=SSPI;Auto Translate=False;Packet Size=32767;" Name="AdventureWorks" />
    </Connections>
    <Databases>
        <Database Name="AW" ConnectionName="AdventureWorks" />
    </Databases>
    <Schemas>
        <Schema DatabaseName="AW" Name="dbo" />
    </Schemas>
    <Tables>
        <Table Name="foo" SchemaName="AW.dbo">
            <Annotations>
                <Annotation Tag="DatabaseName" AnnotationType="Tag">AW</Annotation>
            </Annotations>
            <Columns>
                <Column Name="Col1" DataType="Int32"></Column>
            </Columns>
        </Table>
    </Tables>
</Biml>

第 1 层执行。这开始了我们的动态分层。由于只有一个,我没有明确给出一个,但如果你有多个层,你会想要提供一个指令。

在这里,我枚举了我的 Tables 集合(在前面的层中定义)并且对于我找到的每个表,我写了表名和标签值

SO_63828312.T1.biml

<#@ code file="SO_63828312.cs" #>


<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<#
string template =  "<!-- {0}|{1} -->";
foreach(var t in this.RootNode.Tables)
{
    WriteLine(string.Format(template, t.Name, t.GetDisplayTableName()));
}
#>
</Biml>

发射 Biml


推荐阅读