2010-11-18 19 views
0

Aşağıdaki kod, bir düğme olayında bir iş nesnesi 6.5'in açıldığı, raporu yenilediği ve rapordaki verileri bir csv dosyasına dökülen bir winforms uygulamasından alınmıştır. ve sonra iş nesneleri örneğini çıkarır. i yeniden çalıştırıldığındaStatik sınıflar ve İş Nesneleri COM Kitaplığı

ben mükemmel çalışıyor kod çalıştırmasına ilk kez ancak ben çizgi

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

atılan istisna 'Geçersiz nesne' dir üzerinde bir istisna olsun.

Bunun, boApp'ın yeniden başlatılmadığı gerçeğine bağlı olduğunu ve sorunun statik sınıflarla ilgili bilgi eksikliğimin olduğunu varsayıyorum.

çağıran yöntem şudur:

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

ve bu RefreshBusinessObjects Yöntemi içine BOApp örneğinin taşındı BO_Control sınıf

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); 
    } 

} 

cevap

0

olduğunu ve hile yapmak gibiydi

0

Ayrıca bu giriş kodunu kullanın, çalışır, ancak BO giriş diaglog Tamam düğmesini tıklamanız gerekir. Bu tıklama butonu adımını atlayabilecek bazı yöntemler var mı?

+0

Blimey, bu geçmişten bir patlama. Tüm İş nesneleri etkileşimlerini kapatan bu satır ayarlanmalıdır boApp.Interactive = false; Kullanıcı adı ve şifrenin boApp.LoginAs'da (userName, Password, false, null) doğru olduğundan emin misiniz? Yöntem? – MrBliz

+0

Ben kullanıcı adımı ve pwd haklı olduğunu düşünüyorum, pls aşağıdaki link üzerinden kodu görmek ve BO giriş diaglog ok düğmesini tıklarsanız, bo uygulaması her zamanki gibi çalışacaktır [kod için buraya tıklayın] (http: // www.forumtopics.com/busobj/viewtopic.php?t=219784&sid=027f230af85e9b74e8fccff138288724) – user1994358

+0

Keşke size daha fazla yardımcı olabilseydim ama artık test etmek için İşletme nesnelerine 6.5 erişemiyorum. – MrBliz