#ssis
#ssis
Вопрос:
Я пишу редактор пользовательского интерфейса для пользовательского компонента конвейера SSIS.
Когда BIDS вызывает редактор, он передает экземпляр IDTSComponentMetadata100 редактору. Как мне получить ссылку на мой (управляемый) Производный экземпляр конвейерного компонента?
Комментарии:
1. ManagedComponentHost. InnerObject вернет конвейерный компонент … кто-нибудь знает, как получить доступ к ManageComponentHost или чему-либо, что возвращает IDTSManagedComponent100?
Ответ №1:
Я полагаю, что вы хотите сделать что-то вроде этого:
void Initialize(
IDTSComponentMetaData100 dtsComponentMetadata,
IServiceProvider serviceProvider
){
IDtsPipelineEnvironmentService pipelineService = (IDtsPipelineEnvironmentService)serviceProvider.GetService(typeof(IDtsPipelineEnvironmentService));
IDTSPipeline100 mainPipe = pipelineService.Pipeline;
// access mainPipe.PathCollection etc
TaskHost pipelineTaskHost = pipelineService.PipelineTaskHost;
MainPipe mainPipe2 = pipelineTaskHost.InnerObject as MainPipe;
// that is less direct but should work too
}
Вы можете делать другие интересные вещи с ServiceProvider, например, проверять соединения или переменные пакета, передавая другой тип в GetService. Подробности см. в SQL2008R2 BOL.
Ответ №2:
Попробовал маршрут через службу конвейера, но моих пользовательских компонентов потока данных (разработанных на C #) не было в IDTSPipeline100.PathCollection — были стандартные компоненты Microsoft.
Копнув немного глубже, я попытался получить mainPipe.GetObjectByID(componentID), который работает, но возвращает COM-объект, а не C # / управляемый объект. Попытка приведения выдает исключение «вы не можете выполнить приведение из COM в C #Managed».
Я не могу подтвердить, но сильно подозреваю, что мои C # / Управляемые пользовательские компоненты не отображаются в PathCollection, поскольку они являются C # / управляемым компонентом по сравнению с COM.