トップ回答者
FTPタスクのパスワードを動的に設定するために

質問
-
SSISのFTPタスクを利用しています。
2点ほど実装したい仕様のポイントがありまして、
- FTP接続のエラーとFTPでのファイル操作のエラーを別々に処理したい
- パスワードを含める接続用のプロパティを、パッケージ構成ファイルに外出しにしたい、
接続できたかどうかを検証するためには、ファイル操作しか機能がないFTPタスクではできないので、
スクリプトタスクの中で、FtpWebRequestオブジェクトなどを使って実現しようとしています。
これ自体はうまくいきました。
そこで、このスクリプト内で使用するFTPの接続情報を変数に出しておいて、
FTP接続マネージャのプロパティでも再利用しようと思い、
FTP接続マネージャの Expressions にそれぞれ変数から渡してみようと考えました。
ところがここで問題が発生しまして、
どうやらFTP接続マネージャのServerPassowrdプロパティは、Expressionsからは渡すことができず、
これは、直接パッケージ構成ファイルからの設定しか受け付けてくれないようなのです。
このため、今のところ上記の仕様を実現しようと思うと、
FTPのパスワードの設定を、パッケージ構成ファイルに対して、
変数用と、FTP接続マネージャのExpressions用の2つを用意しなければならないことになります。
この2つの仕様を満たし、かつ、パッケージ構成ファイルへのパスワードの指定を1つにする、
ということは可能でしょうか。
あるいは、この仕様が満たせれば、実装方法は問いません。
何か代替案がありましたらご教授願います。
また、ちょっと付属の質問になりますが、SSISではスクリプトタスク内から
直接各タスクのプロパティにアクセスする方法は用意されてないのでしょうか。
(最初は上記の仕様をこれで試みようとしていました)
以上、ご回答ご教授の程よろしくお願いいたします。
環境:
SQL Server 2005 SP2(または SPなし)
Windows Server 2003
回答
-
Microsoft.SqlServer.Dts.Tasks.ScriptTask の ScriptObjectModel クラスhttp://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.tasks.scripttask.scriptobjectmodel_members.aspxDts オブジェクトに、既存の"タスク"にアクセスできるプロパティのが無いので("接続"や"変数"はある)、スクリプトタスクの中からは無理だと思われます。変数に入れて Expressions の機能を利用することになるのではないでしょうか。
- 回答としてマーク soony1st 2009年7月11日 4:41
すべての返信
-
早速のご回答ありがとうございます。
仰る方法で、うまく動きました。
おかげさまで、仕様を満たす実装ができました。
ありがとうございました。
ところで、ちょっと本題からは外れたついでの質問になるのですが、
接続マネージャ系のオブジェクトには、Dts.Connections が使えることは分かりました。
そこで、他のタスクにも同じように窓口的なプロパティが用意されているのではないかと思ったのですが、
それを見つけることができませんでした。
たとえば、FTPタスクそのものにもいろいろプロパティがありますが、LocalPath や、Disable などといった、
タスク系についているプロパティにアクセスするための仕組みも、何か用意されているのでしょうか。
ご教授の程よろしくお願いいたします。 -
Microsoft.SqlServer.Dts.Tasks.ScriptTask の ScriptObjectModel クラスhttp://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.tasks.scripttask.scriptobjectmodel_members.aspxDts オブジェクトに、既存の"タスク"にアクセスできるプロパティのが無いので("接続"や"変数"はある)、スクリプトタスクの中からは無理だと思われます。変数に入れて Expressions の機能を利用することになるのではないでしょうか。
- 回答としてマーク soony1st 2009年7月11日 4:41
-
-
すいません書きそびれてしまいましたが一応ご参考までに。Integration Services クラスライブラリhttp://technet.microsoft.com/ja-jp/library/cc194728(SQL.90).aspx例えば Microsoft.SqlServer.Dts.Tasks.FtpTask の Operation プロパティhttp://msdn.microsoft.com/ja-jp/library/microsoft.sqlserver.dts.tasks.ftptask.ftptask.operation.aspxにあるように、microsoft.sqlserver.ftptask.dll を参照すれば、例えば VB.NET でDim pkg As Package = New Package()Dim exec1 As Executable = pkg.Executables.Add("STOCK:FTPTask")Dim th As TaskHost = exec1 as TaskHostth.Properties["Operation"].SetValue(th, DTSFTPOp.Receive);(このコードは2番目のURLから引用)というようなことが可能なはずです。「SSIS で処理を行う中でプロパティ設定をコードで行う」のではなく「プログラムにて SSIS の機能を利用する」形式になりますが。