Статические классы и бизнес-объекты COM библиотека

StackOverflow https://stackoverflow.com/questions/4215788

Вопрос

Следующий код ниже приложения WinForms, который на пуговике кнопки открывается экземпляр бизнес-объектов 6.5, обновляет отчет, а затем сбрасывает данные в отчет в файл CSV, а затем выходит из экземпляра бизнеса.

В первый раз, когда я запускаю код, он отлично работает, однако, если я бегу снова, я получаю исключение на линии

boApp.LoginAs(userName, Password, false, null);

Образованный исключением является «неверный объект».

Я предполагаю, что это до того, что BOAPP не был повторно инициализирован, и это мое отсутствие знаний относительно статических классов, это проблема.

Метод вызова это:

BO_Control.RefreshBusinessObjects(boReportsFolder, boExportsFolder, boReportName, exportFileName, startDate, endDate);

И это класс BO_Control

static class BO_Control
{

    static busobj.Application boApp = new busobj.Application();
    static busobj.Document testDoc;


   public static void RefreshBusinessObjects(string reportFolder, string exportFolder ,string boReportName, string exportFileName, string startDate, string endDate)      
   {


        DateTime BoStart = DateTime.Now;

        boApp.LoginAs(userName, Password, false, null);

        boApp.Interactive = false;
        boApp.Visible = false;

        GetData(reportFolder, boReportName, startDate, endDate);
        ExportData(exportFolder, exportFileName);

        Console.WriteLine("BO_Export took {0} seconds.", DateTime.Now.Subtract(BoStart));

        boApp.Quit();          
   }

   static busobj.Document GetData(string reportFolder, string reportName, string startDate, string endDate)
   {
       Console.WriteLine(reportFolder + reportName);
       testDoc = (busobj.Document)boApp.Documents.Open(reportFolder + reportName, true, false, null, null);

       //Report Start Date
       testDoc.Variables[1].Value = startDate;
       //Report End Date
       testDoc.Variables[2].Value = endDate;
       //Area. Needs to be a semi-colon delimited string
       testDoc.Variables[3].Value = "L;B;H;";

       testDoc.Refresh();

       return testDoc;

   }

   static void ExportData(string exportFolder, string exportFileName)
   {
       testDoc.Reports.get_Item(1).ExportAsText(exportFolder + exportFileName);
       //2 = DoNotSaveChanges
       testDoc.Close(2);
   }

}
Это было полезно?

Решение

Я переместил мнение BOAPP в метод освеженияобъектовОбъектов, и это, казалось, делал трюк

Другие советы

Я также использую этот входной код, оно работает, но он должен нажать кнопку ОК Bo входа диаглуга. Есть ли некоторые методы могут пропустить эту кнопку кнопки?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top