2017-02-21 76 views
1

我將表中的模式轉儲到包的標記註釋中。BIML註釋標記不匹配

 <Annotation AnnotationType="Tag" Tag="PackageSchema"> 
      <#=Table.Schema#> 
     </Annotation> 

在BIML用於創建主包裹我創建用於每個模式的序列容器和把包在相應的容器。至少這就是我要求它做的。

<Package Name="01-Master" ConstraintMode="Linear"> 
    <Tasks> 
     <# foreach (var SchemaNode in RootNode.Schemas) { #> 
      <Container Name="SEQC <#=SchemaNode.Name#>" ConstraintMode = "Parallel"> 
       <Tasks> 
        <# foreach (var Pckg in RootNode.Packages.Where(pkgschema => pkgschema.GetTag("PackageSchema")==SchemaNode.Name)) { #> 
         <ExecutePackage Name="EP <#=Pckg.Name#>" DelayValidation="true"> 
          <ExternalProjectPackage Package="<#=Pckg.Name#>.dtsx"> 
          </ExternalProjectPackage> 
         </ExecutePackage> 
        <# } #> 
       </Tasks> 
      </Container> 
     <# } #> 
    </Tasks> 

當它運行時,我得到一個空白序列容器的主包。我從軟件包foreach中取出了它,然後生成,但將所有軟件包放入每個容器中。我把GetTag放在包的名字上,以確保它正確地拾取它。

<# foreach (var Pckg in RootNode.Packages) { #> 
    <ExecutePackage Name="EP <#=Pckg.Name#>" DelayValidation="true"> 
     <ExternalProjectPackage Package="<#=Pckg.Name#>.dtsx--<#=Pckg.GetTag("PackageSchema")#>--<#=SchemaNode.Name#>"> 

該標籤被放入包名中,但它周圍有很多空間填充。

<ExecutePackage Name="EP Application_TransactionTypes" DelayValidation="true"> 
    <ExternalProjectPackage Package="Application_TransactionTypes.dtsx--     Application    --Application" /> 
</ExecutePackage> 
<ExecutePackage Name="EP Purchasing_PurchaseOrderLines" DelayValidation="true"> 
    <ExternalProjectPackage Package="Purchasing_PurchaseOrderLines.dtsx--     Purchasing    --Application" /> 
</ExecutePackage> 

所以我猜的填充值是爲什麼RootNode.Packages.Where不匹配到架構名稱。我無法弄清楚如何修剪空間。我嘗試在不同的地方放置trim(),但是BIML引擎對此抱怨。我能夠通過在BIML中的實際註釋之前取出選項卡來擺脫領先空間,但它仍然填補了結尾。

任何想法,爲什麼標籤得到填充,或者我完全偏離這裏的基地,它不是標籤周圍的空間。

回答

1

這是醜陋的地方BIML/XML格式化咬你在背面

<Annotation AnnotationType="Tag" Tag="PackageSchema"> 
     <#=Table.Schema#> 
    </Annotation> 

如果更改定義爲以下之一,做一切「神奇」的工作?

<Annotation AnnotationType="Tag" Tag="PackageSchema"><#=Table.Schema#></Annotation> 

我想是因爲我遇到了與包參數類似的問題...

+0

感謝您的幫助比爾! – CoBikeJunkie

2

這是那些「搖滾和硬地」的情況之一。在更早的版本中,我們實際上會自動修剪註記標記值以去除前導和尾隨空白。這在用戶確實需要空白的情況下引起了問題。

有幾個變通辦法此:

  1. 正如比爾指出,只要刪除空格在BimlScript。
  2. 如果您確實需要BimlScript中的空白以提高可讀性,請將該值包裝在CDATA塊中,以便忽略CDATA塊之外的換行符。其語法是:
<Annotation AnnotationType="Tag" Tag="PackageSchema"> 
    <![CDATA[<#=table.Schema#>]]> 
</Annotation> 
  • 或者,如果你想保持對可讀性的空白和不喜歡CDATA,你可以修剪在使用點註釋值的空白。其語法是:
  • <#= Pckg.GetTag( 「PackageSchema」)TRIM()#>