showing contact by StoreID / EntryID from favourite folders

  • Thread starter Johannes Franke
  • Start date
J

Johannes Franke

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
 
S

Sue Mosher [MVP-Outlook]

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

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
 
J

Johannes Franke

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

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers


Johannes Franke said:
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
 
S

Sue Mosher [MVP-Outlook]

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.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers


Johannes Franke said:
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.

Johannes Franke said:
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
 
J

Johannes Franke

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

Sue Mosher said:
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.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers


Johannes Franke said:
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.

Johannes Franke said:
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
 
S

Sue Mosher [MVP-Outlook]

Have you actually checked the ID values for some of these items? Maybe you didn't make the fields long enough in Access?

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers


Johannes Franke said:
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

Sue Mosher said:
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.

Johannes Franke said:
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.

Johannes Franke said:
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
 
K

Ken Slovak - [MVP - Outlook]

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.




Have you actually checked the ID values for some of these items? Maybe you
didn't make the fields long enough in Access?

--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

and Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top