将项目级别参数分配给BIMLScript中的变量

时间:2019-12-17 13:52:30

标签: ssis biml

我正在尝试读取bimlscript中的project.params参数。我已经尽力告诉我正确的语法<# var env = @[$Project::Environment]#>,但是我不断收到错误消息“逐字指定符后应输入关键字,标识符或字符串:@”

有人可以启发我正确的方法吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

给出Biml的示例软件包

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Packages>
        <Package Name="so_59375738" >
            <Parameters>
                <Parameter Name="Environment" DataType="Int32">1</Parameter>
            </Parameters>
        </Package>
    </Packages>
</Biml>

我们需要做的是访问包的Parameters集合以获取我们的Parameter,然后可以从其中使用.Value属性来获取初始化值。

要注意的另一件事是,我们必须在此处使用分层,因为在创建包的同一层中访问RootNode无效。对于技术娴熟的人来说,这里不需要显式层,因为上面的示例是静态Biml,它始终是Tier 0,而动态Biml又名BimlScript将默认为Tier1。但是,我倾向于我的意图是明确的

<#@ template tier="999" #>
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<#
foreach(AstPackageNode p in this.RootNode.Packages)
{
    foreach(var pm in p.Parameters)
    {
        WriteLine(string.Format("<!-- {0}:{1}->{2} -->", p.Name, pm.Name, pm.Value));
    }
}

// Explicit approach
WriteLine(string.Format("<!-- {0}:{1}->{2} -->", this.RootNode.Packages["so_59375738"], this.RootNode.Packages["so_59375738"].Parameters["Environment"].Name, this.RootNode.Packages["so_59375738"].Parameters["Environment"].Value));

#>
</Biml>

大概,当构建包(so_59375738)时,我们知道参数Environment是从元数据存储库中初始化的,因此在我看来,回到存储库并进行访问会更清洁从那里的价值。

除非这是要识别,记录和返工现有产品的工作,否则,显然,您将无权访问原始元存储。