Der folgende folgende Code stammt aus einer Winforms-Anwendung, die bei einem Schaltflächenereignis eine Instanz von Geschäftsobjekten 6.5 öffnet, den Bericht aktualisiert und die Daten im Bericht anschließend in eine CSV-Datei ablegt. und beendet dann die Geschäftsobjektinstanz.Statische Klassen und die COM-Bibliothek von Business Objects
Das erste Mal, dass ich den Code es funktioniert perfekt laufen, aber wenn ich es laufen wieder erhalte ich eine Ausnahme auf der Linie
boApp.LoginAs(userName, Password, false, null);
Die Ausnahme ‚Ungültige Objekt‘ geworfen ist.
Ich gehe davon aus, dass dies auf die Tatsache zurückzuführen ist, dass boApp nicht neu initialisiert wurde, und dass es mein Mangel an Wissen in Bezug auf statische Klassen ist, dass das Problem ist.
Der Aufruf der Methode ist folgende:
BO_Control.RefreshBusinessObjects(boReportsFolder, boExportsFolder, boReportName, exportFileName, startDate, endDate);
und dies ist die BO_Control Klasse
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);
}
}
Blimey, das ist eine Explosion aus der Vergangenheit. Diese Zeile sollte gesetzt werden, wodurch alle Interaktionen der Business-Objekte abgeschaltet werden boApp.Interactive = false; Stellen Sie auch sicher, dass der Benutzername und das Passwort in der boApp.LoginAs (userName, Password, false, null) korrekt sind; Methode? – MrBliz
Ich denke, dass mein Benutzername & Pwd Recht haben, pls sehe meinen Code über den untenstehenden Link, und wenn ich den OK-Button von BO Login Diaglog, wird die BO-App wie gewohnt [klicken Sie hier für Code] (http: // www.forumtopics.com/busobj/viewtopic.php?t=219784&sid=027f230af85e9b74e8fccff138288724) – user1994358
Ich wünschte, ich könnte Ihnen weiter helfen, aber ich habe nicht mehr Zugriff auf Business-Objekte 6.5, um es zu testen. – MrBliz