首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态类和业务对象COM库

静态类和业务对象COM库
EN

Stack Overflow用户
提问于 2010-11-18 22:28:14
回答 2查看 320关注 0票数 0

下面的代码来自winforms应用程序,该应用程序在按钮事件上打开业务对象6.5的实例,刷新报表,然后将报表中的数据转储到csv文件中,然后退出业务对象实例。

我第一次运行代码时,它运行得很好,但是如果我再次运行它,我就会得到一个异常

代码语言:javascript
复制
boApp.LoginAs(userName, Password, false, null);

抛出的异常是“Invalid Object”。

我假设这是由于boApp没有被重新初始化的事实,我缺乏关于静态类的知识才是问题所在。

调用方法如下:

代码语言:javascript
复制
BO_Control.RefreshBusinessObjects(boReportsFolder, boExportsFolder, boReportName, exportFileName, startDate, endDate);

这是BO_Control类

代码语言:javascript
复制
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);
   }

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-18 22:58:33

我将BOApp的实例化移到了RefreshBusinessObjects方法中,似乎做到了这一点

票数 0
EN

Stack Overflow用户

发布于 2014-03-24 10:57:26

我也使用这个登录代码,它可以工作,但它需要单击BO登录诊断日志的OK按钮。有没有一些方法可以跳过这个点击按钮的步骤?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4215788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档