Я создал пользовательский компонент для своего пакета SSIS и хотел бы, чтобы он попытался автоматически связать некоторые переменные. В настоящее время я вручную связываю их через Свойства пользовательского интерфейса-> Разное-> Выражения-> (выбирая имя свойства и выражение для ссылки на него), как показано ниже:
В настоящее время я борюсь со следующим кодом:
public override void InitializeTask(Connections connections, VariableDispenser variableDispenser, IDTSInfoEvents events, IDTSLogging log, EventInfos eventInfos, LogEntryInfos logEntryInfos, ObjectReferenceTracker refTracker)
{
base.InitializeTask(connections, variableDispenser, events, log, eventInfos, logEntryInfos, refTracker);
using (Package pkg = ... /*not sure how to get 'this' package*/)
{
// Iterate through executables to try to find this TaskHost.
foreach (Executable pExec in pkg.Executables)
{
TaskHost aTaskHost = (TaskHost)pExec;
if (aTaskHost.InnerObject.GetType() == this.GetType())
{
// Iterate over variables, to try to match some task's properties.
foreach (Variable myVar in pkg.Variables)
{
if (aTaskHost.Properties.Contains("PackageName") &&
Regex.IsMatch(myVar.QualifiedName, "PackageName", RegexOptions.IgnoreCase))
{
aTaskHost.SetExpression("PackageName", myVar.Expression);
}
}
break;
}
}
}
}
Я пытаюсь пройти весь путь вниз, чтобы установить уровень экспрессии; некоторые из моих других переменных могут измениться, поэтому вместо связывания .Value я хочу перейти к .Expression.
Однако я не уверен, как получить текущий пакет или, даже если я его получу, все будет правильно скомпоновано. Итак, мне интересно, программно ли кто-нибудь связал системную переменную с выражением свойства пользовательского компонента при его инициализации.