Outlookzugriff mit dem BCB



  • Hi,

    ersteinmal schönen Dank.

    Ich habe das ganze mal bei mir eingebaut.

    contactFolder = nameSpace.OleFunction ("GetDefaultFolder", olFolderContacts); 
    folder = contactFolder.OlePropertyGet ("Folders"); 
    nFolders = folder.OlePropertyGet ("Count");
    

    Bei nFolders kommt bei mir IMMER "0" zurück, obwohl ich Elemente in den jeweiligen Outlook-Ordnern stehen habe.

    Ich benutze BCB6 und OfficeXP.
    Danke für eure Hilfe



  • wie dumm von mir,

    ich habe natürlich nur im Root was stehen und das läßt das Programm bei der Abfrage aus!

    Habe das Skript für mich angepaßt!!!

    DAAAAAAAAAAAAAAAAAAAAAAANKE nochmal für jede Hilfe!

    MG



  • Hallo,

    wie schaffe ich es, dass auch die Kontakte im Root Verzeichnis gelesen werden.
    Momentan kann ich nur die Unterordner auslesen.

    Vielleicht kann mir jemand helfen.

    Danke



  • Hallo,

    hier mein Ansatz zum Auslesen des "ROOT"-Verzeichnisses:
    Dieser Funktion gibst du den Feldnamen und den Suchbegriff mit und du bekommst die Position des gefundenen Kontakts wieder, auf die du dann wunderbar zugreifen kannst.
    Ich hab die Funktion genutzt, um eine eigene Outlook-Syncronisation zu realisieren. ist zwar ein bissel langsam, aber es funktioniert!

    int __fastcall TForm1::ContactsCheck(TObject *Sender, String field, String matchcode)
    {
    
        Variant            contactFolder;
        Variant            folder; 
        Variant            items; 
        Variant            contact; 
        int                i,k; 
        int                nContact;
        int                nFolders; 
        int                contactClass;
        int                return_pos = -1;
    
        try 
            { 
            contactFolder = nameSpace.OleFunction ("GetDefaultFolder", olFolderContacts);
            items = contactFolder.OlePropertyGet ("Items");
            nContact = items.OlePropertyGet ("Count");
    
                for (i = 1; i <= nContact; i++)
                { 
                    contact = items.OleFunction ("Item", i);
                    contactClass = olContact; 
                    // --- Office 97 don't have property contactItem.Class 
                    try 
                    { 
                    contactClass = contact.OlePropertyGet("Class"); 
                    } catch (...) {  } 
    
                    if (contactClass == olContact) 
                    { 
    
                        try 
                        { 
                            if (matchcode == contact.OlePropertyGet(field.c_str()))
                                    {
                                    return_pos = i;
                                    break;
                                    }
                        } 
                        catch (EOleSysError &E) 
                        { 
                            // falls bei Zugriffserlaubnisfrage mit nein geantwortet wird... 
                            if (E.ErrorCode == (int)0x80004004) throw; 
                        } 
    
                    } 
            } 
        } 
        catch (...) 
        { 
            // bereinigen, falls es was gibt... 
            throw; 
        }
        return return_pos;
    
    }
    //---------------------------------------------------------------------------
    

    zuvor mußt du natürlich mit

    outlook = CreateOleObject("Outlook.Application");
    nameSpace = outlook.OleFunction("GetNameSpace", "MAPI");
    

    die "Outlook-Session" öffnen

    Viel Spaß beim Ausprobieren

    Marco



  • Vielen Dank!

    Hat funktioniert.



  • VergissEs schrieb:

    Hi,

    schau mal auf http://community.borland.com/article/0,1410,26053,00.html
    ist zwar für die EMails gedacht aber mit ein wenig umschreiben müsste es auch mit den Kontakten funktionieren.
    Downloaden kannst Du das Beispiel bei
    http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=16437

    mfg
    VergissEs

    Hallo ich habe den obigen Quelltext runtergeladen und wollte das ganze dann starten. Leider bekomme ich folgende Fehlermeldung:

    [C++ Fehler] Unit3.cpp(53): E2034 Konvertierung von 'bool' nach 'tagVARIANT' nicht möglich
    [C++ Fehler] Unit3.cpp(53): E2342 Keine Übereinstimmung des Typs beim Parameter 'Descending' ('tagVARIANT' erwartet, 'bool' erhalten)

    wenn ich mir dann den Quelltext in der outlook_2k.h ansehe steht da:

    virtual HRESULT STDMETHODCALLTYPE Sort(BSTR Property/*[in]*/, 
                                             VARIANT Descending/*[in,opt]*/= TNoParam()) = 0; // [97]
    

    die Zeile, die den Fehler auslöst lautet:

    pItems->Sort(WideString("[ReceivedTime]"), true )
    

    es gibt noch ähnliche Fehler, einmal mit int kann nicht konvertiert werden und einmal mit char.

    Kann mir eine helfen?



  • Hallo zusammen,

    wie kann ich auf selbstdefinierte (selbst angelegte) Felder zugreiffen?
    Man muss wohl irgendwie über UserProperties dran kommen aber wie?



  • VergissEs schrieb:

    http://community.borland.com/article/0,1410,26053,00.html

    Hallo,

    wenn ich den Code im oben gennanten Artikel compliere, dann bekomme ich in der Zeile

    _NameSpacePtr ns;
    

    folgende Fehlermeldung:

    Typname erwartet

    Welche Header-Datei muß hier includiert werden?

    Danke



  • *schieb*



  • Lies doch den Beitrag mal ganz.... die includes sind mit angegeben...


Anmelden zum Antworten