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

Assigning a Project Level Parameter to a variable in BIMLScript

我正在尝试读取 bimlscript 中的 project.params 参数。我已经尝试过,据我所知是正确的语法 <# var env = @[$Project::Environment]#> 但我一直收到错误 "Keyword, identifier, or string expected after verbatim specifier: @"

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

给定

的样本包 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>

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

另一件需要注意的事情是,我们必须在此处使用分层,因为访问创建包的同一层中的 RootNode 将不起作用。对于极富技术头脑的人来说,这里不需要显式层,因为上面的示例是静态 Biml,它始终是第 0 层,而动态 Biml aka BimlScript 将默认为第 1 层。但我倾向于在我的意图中明确

<#@ 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 是从我们的元数据存储库中初始化的,所以在我看来,它会更干净回到存储库并从那里访问值。

除非这是为了识别、记录和返工现有产品,否则很明显您将无法访问原始元存储。