MS Office Forum / Outlook / Contacts / June 2006
showing contact by StoreID / EntryID from favourite folders
|
|
Thread rating:  |
Johannes Franke - 08 Jun 2006 10:51 GMT Hello all,
I'm desperately looking for a solution on how to show contacts (not AddressEntries) via CDO session. I have the EntryID and StoreID of the contacts in a database. When trying to open the contacts with
Application.GetNameSpace("MAPI").GetItemFromID(EntryID, StoreID).Display
Outlook just returns that "the client operation has failed", giving me different error codes every time, such as
DCD4010F, E514010F, ED54010F on trying to get items by StoreID + EntryID E0F4010F, E934010F, F174010F on trying to get items with EntryID only
Getting the IDs from the contacts I can see in the folder is working though. Using these IDs later for displaying as descibed above fails.
The alternative way I have implemented uses CDO and the MAPI.Session.GetMessage function. Unfortunately, this also fails.
Error code 8004010F and Err.Description "MAPI - [MAPI_E_NOT_FOUND(8004010F)]" is returned when using StoreID + EntryID The same error code but Err.Description "the client operation has failed. [Microsoft Exchange Server Information Store - [MAPI_E_NOT_FOUND(8004010F)]" is returned when using EntryID only
Even if it didn't fail, I would still miss the function to display the message object (a Details function is only implemented for MAPI.AddressEntry as far as I know, but the contacts are just messages, right?) Maybe the approach is all wrong. If Outlook fails to display the contact item although it is in one of the user's Favourites folders, and Exchange Cache Mode is active, something else may be out of order.
Thanks for any help!
Best regards, Joe
Sue Mosher [MVP-Outlook] - 08 Jun 2006 12:30 GMT You should always test whether you have a valid object before you execute any methods on it. Also, the code you cited is Outlook object model code, not CDO. Is Outlook running when you run this code? If not, you'll need to get the Namespace object and use the Logon method.
FYI, there is a newsgroup specifically for general Outlook programming issues "down the hall" at microsoft.public.outlook.program_vba or, via web interface, at http://www.microsoft.com/office/community/en-us/default.mspx?dg=microsoft.public .outlook.program_vba
 Signature Sue Mosher, Outlook MVP Author of Configuring Microsoft Outlook 2003 http://www.turtleflock.com/olconfig/index.htm and Microsoft Outlook Programming - Jumpstart for Administrators, Power Users, and Developers http://www.outlookcode.com/jumpstart.aspx
> Hello all, > [quoted text clipped - 33 lines] > Best regards, > Joe Johannes Franke - 08 Jun 2006 15:19 GMT Dear Sue,
thanks for your reply. Well, actually my problem is to get the object which I'd like to display. The object I use to do that is the MAPI NameSpace object from Outlook in the first attempt, and the CDO MAPI.Session object in the second. My idea was to get hold of the object with CDO Session if I cannot get a reference to it by using the Outlook object model. Unfortunately, even if this worked perfectly, I had the problem of displaying the contact as CDO returns a MAPI.Message object to me which does not support displaying. Another possibility is that the customer's system is corrupted in some way, causing Outlook to fail accessing objects inside the user's favourite contacts folder. I am sure that this is an Outlook Client related issue because Exchange Cache Mode is used, and favourite folders are used to make sure that no additional network traffic is generated when trying to access one of the contacts in the favourites. One idea I read about was timeout errors on accessing the Exchange system because it is fragmented. This definitely does not apply for my customer. Opening contacts in the Outlook front-end by double clicking is a matter of milliseconds, and the cache mode should prevent unneeded Exchange access, too. Unfortunately, the error "the client operation has failed" is thrown in multiple situations, and I cannot find information on the error codes that were returned by Outlook. Knowing more about them might help me find out what I need to change, or what the customer has done wrong.
Regards, Joe
You should always test whether you have a valid object before you execute any methods on it. Also, the code you cited is Outlook object model code, not CDO. Is Outlook running when you run this code? If not, you'll need to get the Namespace object and use the Logon method.
FYI, there is a newsgroup specifically for general Outlook programming issues "down the hall" at microsoft.public.outlook.program_vba or, via web interface, at http://www.microsoft.com/office/community/en-us/default.mspx?dg=microsoft.public .outlook.program_vba
 Signature Sue Mosher, Outlook MVP Author of Configuring Microsoft Outlook 2003 http://www.turtleflock.com/olconfig/index.htm and Microsoft Outlook Programming - Jumpstart for Administrators, Power Users, and Developers http://www.outlookcode.com/jumpstart.aspx
> Hello all, > [quoted text clipped - 37 lines] > Best regards, > Joe Sue Mosher [MVP-Outlook] - 08 Jun 2006 15:37 GMT > Well, actually my problem is to get the object which > I'd like to display. So, what are the details? Where do the EntryID and StoreID come from? Have you checked their values?
> My idea was to get hold of the object with CDO Session if I > cannot get a reference to it by using the Outlook object model. Why? If Outlook can't get it, CDO isn't going to have much luck either.
 Signature Sue Mosher, Outlook MVP Author of Configuring Microsoft Outlook 2003 http://www.turtleflock.com/olconfig/index.htm and Microsoft Outlook Programming - Jumpstart for Administrators, Power Users, and Developers http://www.outlookcode.com/jumpstart.aspx
> Dear Sue, > [quoted text clipped - 70 lines] >> Best regards, >> Joe Johannes Franke - 08 Jun 2006 16:27 GMT Sue,
the EntryID and StoreID are scanned in a synchronization routine from all items in all folders as configured by the user, and put into an Access database along with all telephone numbers stored in each contact. My add-in is a tool which displays the contact matching an incoming phone number (from TAPI). If a matching contact is found in the database, Outlook is used to display the contact item. This is faster because I can index the Access tables which hold the telephone numbers. Scanning all items directly in Outlook would take too long. It works pretty well when using the user's personal folders but fails frequently when working on Exchange or with favourite folders... we can read all items and put their IDs and information to the database, but later attempts to recall such an item by EntryID and StoreID fail with errors as shown below...
Best regards, Joe
> Well, actually my problem is to get the object which > I'd like to display. So, what are the details? Where do the EntryID and StoreID come from? Have you checked their values?
> My idea was to get hold of the object with CDO Session if I > cannot get a reference to it by using the Outlook object model. Why? If Outlook can't get it, CDO isn't going to have much luck either.
 Signature Sue Mosher, Outlook MVP Author of Configuring Microsoft Outlook 2003 http://www.turtleflock.com/olconfig/index.htm and Microsoft Outlook Programming - Jumpstart for Administrators, Power Users, and Developers http://www.outlookcode.com/jumpstart.aspx
> Dear Sue, > [quoted text clipped - 80 lines] >> Best regards, >> Joe Sue Mosher [MVP-Outlook] - 08 Jun 2006 18:23 GMT Have you actually checked the ID values for some of these items? Maybe you didn't make the fields long enough in Access?
 Signature Sue Mosher, Outlook MVP Author of Configuring Microsoft Outlook 2003 http://www.turtleflock.com/olconfig/index.htm and Microsoft Outlook Programming - Jumpstart for Administrators, Power Users, and Developers http://www.outlookcode.com/jumpstart.aspx
> Sue, > [quoted text clipped - 109 lines] >>> Best regards, >>> Joe Ken Slovak - [MVP - Outlook] - 08 Jun 2006 21:07 GMT I've seen one 0 in the real folder become an 8 in the favorites folder in cached mode (or vice versa, I forget). It doesn't happen in non-cached mode. I hacked my code to replace the 0 with an 8 or vice versa if I detect cached mode and am going for a favorites folder.
 Signature Ken Slovak [MVP - Outlook] http://www.slovaktech.com Author: Absolute Beginner's Guide to Microsoft Office Outlook 2003 Reminder Manager, Extended Reminders, Attachment Options http://www.slovaktech.com/products.htm
Have you actually checked the ID values for some of these items? Maybe you didn't make the fields long enough in Access?
 Signature Sue Mosher, Outlook MVP Author of Configuring Microsoft Outlook 2003 http://www.turtleflock.com/olconfig/index.htm and Microsoft Outlook Programming - Jumpstart for Administrators, Power Users, and Developers http://www.outlookcode.com/jumpstart.aspx
Johannes Franke - 08 Jun 2006 15:22 GMT uhm... by the way, I do use the Session.Logon method, and Outlook is definitely running during the operation because all this is done by an Outlook add-in.
"Johannes Franke" <johannes_franke@arcor.de> schrieb im Newsbeitrag news:...
> Dear Sue, > [quoted text clipped - 77 lines] >> Best regards, >> Joe
|
|
|