Задача сценария служб SSIS - интерфейс не поддерживается - PullRequest
0 голосов
/ 18 сентября 2018

Цель : у меня есть решение служб SSIS с различными пакетами, один набор этих пакетов в настоящее время создается с пакетом на таблицу из-за их различной структуры.Цель состоит в том, чтобы создать пакет шаблона (выполнено), обновить переменные / имена таблиц (выполнено), повторно инициализировать и переназначить столбцы, выполнить пакет для каждой таблицы.

Проблема : Итак,как вы можете сказать, я дошел до того, что мне нужно повторно инициализировать, но я не могу добраться до задачи потока данных и продолжаю получать эту ошибку:

No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))

КогдаЯ запускаю этот код:

    //// Get Data Flow task 
    TaskHost tHost = pkgOut.Executables[0] as TaskHost;
    MainPipe dataFlowTask = (MainPipe)tHost.InnerObject;

Код, который я использую, приведен ниже:

    public void Main()
    {
        // Set Project Variables
        List<string> pkgVars = new List<string>
        {
            @"pPR_SSIS_Catalog_Server",
            @"pPR_SSIS_Catalog_Project",
            @"pPR_SSIS_Catalog_Folder"
        };

        // Get Package
        String pkgLocation = @"C:\PATH\TO\TEMPLATE\PACKAGE\a_Load_SAP_Template.dtsx";
        Application app = new Application();
        Package pkgIn = app.LoadPackage(pkgLocation, null);
        String pkgName = "DynamicPackage";

        // Add Connections (cos they're project connections and aren't stored in package)
        ConnectionEnumerator allConns = Dts.Connections.GetEnumerator();
        while ((allConns.MoveNext()) && (allConns.Current != null))
            pkgIn.Connections.Join(allConns.Current);

        // Convert new package to XML so we can cheat and just do a find and replace
        XmlDocument pkgXML = new XmlDocument();
        pkgIn.SaveToXML(ref pkgXML, null, null);

        // Replace strings
            // Set SAP table
            String pkgStr = pkgXML.OuterXml.ToString();
            pkgStr = pkgStr.Replace("#SAP_SRC_TABLE#", "MyF-ingSAPTables"); // Replace SAP Table Name

            // Set Project Variables references == values  -- REMEMBER TO CHECK FOR INT PARAMS zzz
            foreach (string var in pkgVars)
                pkgStr = pkgStr.Replace(@"@[$Project::" + var + @"]", @"""" + Convert.ToString(Dts.Variables[var].Value) + @"""");

        // Convert back to XML
        XmlDocument newXML = new XmlDocument();
        newXML.LoadXml(pkgStr);
        Package pkgOut = new Package();
        pkgOut.LoadFromXML(newXML, null);

        //// Get Data Flow task 
        TaskHost tHost = pkgOut.Executables[0] as TaskHost;
        MainPipe dataFlowTask = (MainPipe)tHost.InnerObject; // THIS IS WHERE THE CODE ERRORS

        new Application().SaveToXml(String.Format(@"D:\PATH\TO\SAVE\LOCATION\{0}.dtsx", pkgName), pkgOut, null);

        Dts.TaskResult = (int)ScriptResults.Success;

    }

Я пробовал:

  • Удаление всего, кроме данныхпоток
  • воссоздал пустой поток данных
  • пересоздал пакет
  • сделал пакет в скрипте и создал поток данных (это работает, но когда я открываю пакет, данныепоток не отображается ... возможно, он был добавлен неправильно, но он может видеть это, когда я запускаю раздел TaskHost)

Я не уверен, что еще я могу попробовать, я видел информацию, которую я могнужно перерегистрировать некоторые .dll, но у меня нет доступа администратора, и я бы предпочел не проходить черезхлопоты за что-то, где я не знаю, будет ли это работать.

Любая помощь будет оценена.

Спасибо,

1 Ответ

0 голосов
/ 21 сентября 2018

Исправлено, из-за разницы версий в .DLL, который загружался. Загрузил старую версию и все прошло нормально.

...