0

私はDTSSSISパッケージに取り組んでおり、Teamcityビルドサーバー(Ruby / rake経由)の使用を目指しています...基本的に、異なる接続文字列を使用して環境(Dev、UAT、Prod)ごとにカスタマイズしたいと思います。

たとえば、TestではSQL2008Testをポイントし、DevSQL2008Devではポイントします。つまり、それぞれのディレクトリにデプロイする前に、dtsパッケージを操作する必要があります。

誰かがREXMLで良い経験をしました-ルビー?

これは私のルビーコードです(rakefile付き)

config = {}
File.open(File.join(BUILD_SSIS_DIR, IRS_DSS_USER_PACKAGE)) do |config_file|
    config = REXML::Document.new(config_file)
ConfigTasks.set_dts_constring_irs config, 'ConnectionString', 
"Data Source=SQL2008DEV;Initial Catalog=IRSDEV;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;Application Name=SSIS-IRS DSS User Data Package-{3CC00FAB-7009-402D-AE03-2426AFC6B7ED}SQL2008 IRS Multiple Connection;"
end

そしてそれは呼び出す

def self.set_dts_constring_irs(config_file, name, connection_string)
    conn_string_element = config_file.root.elements['DTS:ConnectionManager/DTS:Property'];
    conn_string_element['DTS:Name="ConnectionString"'] = connection_string
end

これは私が操作する必要がある私のDTSxmlです

  <DTS:ConnectionManager>
    <DTS:Property DTS:Name="DelayValidation">0</DTS:Property>
    <DTS:Property DTS:Name="ObjectName">SQL2008 IRS Multiple Connection</DTS:Property>
    <DTS:Property DTS:Name="DTSID">{3CC00FAB-7009-402D-AE03-2426AFC6B7ED}</DTS:Property>
    <DTS:Property DTS:Name="Description"></DTS:Property>
    <DTS:Property DTS:Name="CreationName">OLEDB</DTS:Property><DTS:ObjectData><DTS:ConnectionManager>
    <DTS:Property DTS:Name="Retain">0</DTS:Property>
    <DTS:Property DTS:Name="ConnectionString">Data Source=SQL2008DEV;Initial Catalog=IRSDEV;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;Application Name=SSIS-IRS DSS User Data Package-{3CC00FAB-7009-402D-AE03-2426AFC6B7ED}SQL2008 IRS Multiple Connection;</DTS:Property>
</DTS:ConnectionManager></DTS:ObjectData>
</DTS:ConnectionManager>

誰かが私の仕事について考えましたか?たとえば、REXMLを使用して必要なconnectionstringの要素/属性をドリルダウンする方法は??

4

1 に答える 1

1

REXMLを使用してXMLファイル内の接続文字列を検索し、それを独自の接続文字列に置き換えたいと想定しています。REXMLを使用すると、XPathを使用して要素を検索し、その値を設定できます。

require 'rexml/document'

# assuming:
xml = '<DTS xmlns:DTS="www.microsoft.com/SqlServer/Dts">
         <DTS:ConnectionManager>
           <DTS:Property DTS:Name="DelayValidation">0</DTS:Property>
           <DTS:Property DTS:Name="ObjectName">SQL2008 IRS Multiple Connection</DTS:Property>
           <DTS:Property DTS:Name="DTSID">{3CC00FAB-7009-402D-AE03-2426AFC6B7ED</DTS:Property>
           <DTS:Property DTS:Name="Description"></DTS:Property>
           <DTS:Property DTS:Name="CreationName">OLEDB</DTS:Property>
           <DTS:ObjectData>
             <DTS:ConnectionManager>
               <DTS:Property DTS:Name="Retain">0</DTS:Property>
               <DTS:Property DTS:Name="ConnectionString">Data Source=SQL2008DEV;Initial Catalog=IRSDEV;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;Application Name=SSIS-IRS DSS User Data Package-{3CC00FAB-7009-402D-AE03-2426AFC6B7ED}SQL2008 IRS Multiple Connection;</DTS:Property>
            </DTS:ConnectionManager>
           </DTS:ObjectData>
         </DTS:ConnectionManager>
       </DTS>'

# find the connection string with XPath
connection_string_xpath = '/DTS/DTS:ConnectionManager/DTS:ObjectData/DTS:ConnectionManager/DTS:Property[@DTS:Name="ConnectionString"]'
new_connection_string = 'your new connection string here'

begin
  doc = REXML::Document.new(xml)
  root = doc.root
  # check that you can find the path you are looking for
  unless root.elements[connection_string_xpath].nil?
    # set the .text of the element to your connection string:
    root.elements[connection_string_xpath].text = new_connection_string
    # test:
    puts doc
  end
rescue REXML::ParseException => rexml_exception
  puts 'Invalid XML', rexml_exception
end

これは出力します(一部のXMLは削除されました...):

...
<DTS:Property DTS:Name='ConnectionString'>your new connection string here</DTS:Property>
...
于 2012-08-14T10:46:13.670 に答える