delete property

G

Guest

Hi,

Im using VSTO '05 SE with Visual studio '05 on C# to create an add-in for
Outlook '07. I'm trying to delete a property of a mail item using the
PropertyAccessor but I get the following exception:

[System.UnauthorizedAccessException] = {"The property
\"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85420003\" does not support this operation."}

Is there a way of deleting this property?

PS. I apologise for posting this question a 2nd time, it was posted on the
wrong section the 1st time.
 
S

Sue Mosher [MVP-Outlook]

MAPI properties intrinsic to Outlook can't be deleted with PropertyAccessor. Consider using Redemption instead.

Still the wrong section, BTW. The program_addins and program_vba newsgroups are more appropriate for this type of coding question.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

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

Guest

Hi Sue, thanks for your response. I'll continue this post here since you got
my attention and is quite urgent to us.

Here is my code trying to delete the property using Redemption:

Type type = Type.GetTypeFromProgID("zetadocsCdo.SafeMailItem");
Redemption.SafeMailItem safeMailItem =
(Redemption.SafeMailItem)Activator.CreateInstance(type);
safeMailItem.AuthKey = "MYKEY";
safeMailItem.Item = mailItem; //the selected item
safeMailItem.set_Fields((Int32)0x80F30003/*85420003*/, 0);
mailItem.Save();

This particular mail item created in Outlook '03 and we want to get rid of
this property (along with others) in order to be able to open it with a form
region in Outlook '07. The strange thing is that if that property doesnt
exist on the mail item then its value is set to 0. If it does exist then its
value does not change.

Also:
long val = (long)safeMailItem.get_Fields(85420003); //fails with exception:
object reference not set to an instance of an object

and:
long val = (long)safeMailItem.get_Fields((Int32)0x80F30003); //does not
compile. Invalid cast




Sue Mosher said:
MAPI properties intrinsic to Outlook can't be deleted with PropertyAccessor. Consider using Redemption instead.

Still the wrong section, BTW. The program_addins and program_vba newsgroups are more appropriate for this type of coding question.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

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


Nikolas said:
Hi,

Im using VSTO '05 SE with Visual studio '05 on C# to create an add-in for
Outlook '07. I'm trying to delete a property of a mail item using the
PropertyAccessor but I get the following exception:

[System.UnauthorizedAccessException] = {"The property
\"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85420003\" does not support this operation."}

Is there a way of deleting this property?

PS. I apologise for posting this question a 2nd time, it was posted on the
wrong section the 1st time.
 
G

Guest

Correction:
long val = (long)safeMailItem.get_Fields((Int32)0x80F30003); //it does
compile. But runtime error: Specified cast is not valid


Nikolas said:
Hi Sue, thanks for your response. I'll continue this post here since you got
my attention and is quite urgent to us.

Here is my code trying to delete the property using Redemption:

Type type = Type.GetTypeFromProgID("zetadocsCdo.SafeMailItem");
Redemption.SafeMailItem safeMailItem =
(Redemption.SafeMailItem)Activator.CreateInstance(type);
safeMailItem.AuthKey = "MYKEY";
safeMailItem.Item = mailItem; //the selected item
safeMailItem.set_Fields((Int32)0x80F30003/*85420003*/, 0);
mailItem.Save();

This particular mail item created in Outlook '03 and we want to get rid of
this property (along with others) in order to be able to open it with a form
region in Outlook '07. The strange thing is that if that property doesnt
exist on the mail item then its value is set to 0. If it does exist then its
value does not change.

Also:
long val = (long)safeMailItem.get_Fields(85420003); //fails with exception:
object reference not set to an instance of an object

and:
long val = (long)safeMailItem.get_Fields((Int32)0x80F30003); //does not
compile. Invalid cast




Sue Mosher said:
MAPI properties intrinsic to Outlook can't be deleted with PropertyAccessor. Consider using Redemption instead.

Still the wrong section, BTW. The program_addins and program_vba newsgroups are more appropriate for this type of coding question.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

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


Nikolas said:
Hi,

Im using VSTO '05 SE with Visual studio '05 on C# to create an add-in for
Outlook '07. I'm trying to delete a property of a mail item using the
PropertyAccessor but I get the following exception:

[System.UnauthorizedAccessException] = {"The property
\"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85420003\" does not support this operation."}

Is there a way of deleting this property?

PS. I apologise for posting this question a 2nd time, it was posted on the
wrong section the 1st time.
 
S

Sue Mosher [MVP-Outlook]

Sorry, but I have no expertise in writing C#, only VB/VBA and VBScript.

Why do you need to get rid of the property? I don't see how that would affect the use of a form region.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

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


Nikolas said:
Hi Sue, thanks for your response. I'll continue this post here since you got
my attention and is quite urgent to us.

Here is my code trying to delete the property using Redemption:

Type type = Type.GetTypeFromProgID("zetadocsCdo.SafeMailItem");
Redemption.SafeMailItem safeMailItem =
(Redemption.SafeMailItem)Activator.CreateInstance(type);
safeMailItem.AuthKey = "MYKEY";
safeMailItem.Item = mailItem; //the selected item
safeMailItem.set_Fields((Int32)0x80F30003/*85420003*/, 0);
mailItem.Save();

This particular mail item created in Outlook '03 and we want to get rid of
this property (along with others) in order to be able to open it with a form
region in Outlook '07. The strange thing is that if that property doesnt
exist on the mail item then its value is set to 0. If it does exist then its
value does not change.

Also:
long val = (long)safeMailItem.get_Fields(85420003); //fails with exception:
object reference not set to an instance of an object

and:
long val = (long)safeMailItem.get_Fields((Int32)0x80F30003); //does not
compile. Invalid cast

Sue Mosher said:
MAPI properties intrinsic to Outlook can't be deleted with PropertyAccessor. Consider using Redemption instead.

Still the wrong section, BTW. The program_addins and program_vba newsgroups are more appropriate for this type of coding question.
Nikolas said:
Hi,

Im using VSTO '05 SE with Visual studio '05 on C# to create an add-in for
Outlook '07. I'm trying to delete a property of a mail item using the
PropertyAccessor but I get the following exception:

[System.UnauthorizedAccessException] = {"The property
\"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85420003\" does not support this operation."}

Is there a way of deleting this property?

PS. I apologise for posting this question a 2nd time, it was posted on the
wrong section the 1st time.
 
G

Guest

I need to delete the one-off properties from the message that was sent from
Outlook 2003. These properties dont let Outlook 2007 use a form region to
open the message.

Is there a reason why I could not possibly delete a property even with
Redemption? Is there a concept of read only properties?

Sue Mosher said:
Sorry, but I have no expertise in writing C#, only VB/VBA and VBScript.

Why do you need to get rid of the property? I don't see how that would affect the use of a form region.
--
Sue Mosher, Outlook MVP
Author of Configuring Microsoft Outlook 2003

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


Nikolas said:
Hi Sue, thanks for your response. I'll continue this post here since you got
my attention and is quite urgent to us.

Here is my code trying to delete the property using Redemption:

Type type = Type.GetTypeFromProgID("zetadocsCdo.SafeMailItem");
Redemption.SafeMailItem safeMailItem =
(Redemption.SafeMailItem)Activator.CreateInstance(type);
safeMailItem.AuthKey = "MYKEY";
safeMailItem.Item = mailItem; //the selected item
safeMailItem.set_Fields((Int32)0x80F30003/*85420003*/, 0);
mailItem.Save();

This particular mail item created in Outlook '03 and we want to get rid of
this property (along with others) in order to be able to open it with a form
region in Outlook '07. The strange thing is that if that property doesnt
exist on the mail item then its value is set to 0. If it does exist then its
value does not change.

Also:
long val = (long)safeMailItem.get_Fields(85420003); //fails with exception:
object reference not set to an instance of an object

and:
long val = (long)safeMailItem.get_Fields((Int32)0x80F30003); //does not
compile. Invalid cast

Sue Mosher said:
MAPI properties intrinsic to Outlook can't be deleted with PropertyAccessor. Consider using Redemption instead.

Still the wrong section, BTW. The program_addins and program_vba newsgroups are more appropriate for this type of coding question.
Hi,

Im using VSTO '05 SE with Visual studio '05 on C# to create an add-in for
Outlook '07. I'm trying to delete a property of a mail item using the
PropertyAccessor but I get the following exception:

[System.UnauthorizedAccessException] = {"The property
\"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85420003\" does not support this operation."}

Is there a way of deleting this property?

PS. I apologise for posting this question a 2nd time, it was posted on the
wrong section the 1st time.
 
S

Sue Mosher [MVP-Outlook]

The MAPI properties that make an item an one-off form instance certainly should be removable with Redemption.

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

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


Nikolas said:
I need to delete the one-off properties from the message that was sent from
Outlook 2003. These properties dont let Outlook 2007 use a form region to
open the message.

Is there a reason why I could not possibly delete a property even with
Redemption? Is there a concept of read only properties?

Sue Mosher said:
Sorry, but I have no expertise in writing C#, only VB/VBA and VBScript.

Why do you need to get rid of the property? I don't see how that would affect the use of a form region.

Nikolas said:
Hi Sue, thanks for your response. I'll continue this post here since you got
my attention and is quite urgent to us.

Here is my code trying to delete the property using Redemption:

Type type = Type.GetTypeFromProgID("zetadocsCdo.SafeMailItem");
Redemption.SafeMailItem safeMailItem =
(Redemption.SafeMailItem)Activator.CreateInstance(type);
safeMailItem.AuthKey = "MYKEY";
safeMailItem.Item = mailItem; //the selected item
safeMailItem.set_Fields((Int32)0x80F30003/*85420003*/, 0);
mailItem.Save();

This particular mail item created in Outlook '03 and we want to get rid of
this property (along with others) in order to be able to open it with a form
region in Outlook '07. The strange thing is that if that property doesnt
exist on the mail item then its value is set to 0. If it does exist then its
value does not change.

Also:
long val = (long)safeMailItem.get_Fields(85420003); //fails with exception:
object reference not set to an instance of an object

and:
long val = (long)safeMailItem.get_Fields((Int32)0x80F30003); //does not
compile. Invalid cast

:

MAPI properties intrinsic to Outlook can't be deleted with PropertyAccessor. Consider using Redemption instead.

Still the wrong section, BTW. The program_addins and program_vba newsgroups are more appropriate for this type of coding question.
Hi,

Im using VSTO '05 SE with Visual studio '05 on C# to create an add-in for
Outlook '07. I'm trying to delete a property of a mail item using the
PropertyAccessor but I get the following exception:

[System.UnauthorizedAccessException] = {"The property
\"http://schemas.microsoft.com/mapi/id/{00062008-0000-0000-C000-000000000046}/85420003\" does not support this operation."}

Is there a way of deleting this property?

PS. I apologise for posting this question a 2nd time, it was posted on the
wrong section the 1st time.
 
K

Ken Slovak - [MVP - Outlook]

Since Sue isn't a C# programmer, pardon me for jumping in here.

Never just use a property tag in the 0x80000000 range, it can vary from mail
store to mail store and from store provider to store provider. That
reference you are using to Fields(0x80F30003) is not correct.

For a PT_LONG property like the one you are trying to access in that
namespace you should get the property tag on the fly by using the
SafeMailItem.GetIDsFromNames() method. That returns a 32-bit int and you
then OR that result with the value for PT_LONG (0x0003).

In this case the retrieval of a valid property tag for that property would
look like this:

const int PT_LONG = 0x0003;
int tag =
safeMailItem.GetNamesFromIDs("{00062008-0000-0000-C000-000000000046}",
0x8542) | PT_LONG;

You can then retrieve that property.

If you want to remove it set it to empty.
 
G

Guest

Thanks Ken for your response.

I did what you suggested but Im a bit confused in whats "empty" in C#. I
tried with null and with the value 0 but this didn't delete the property :-/
..

Note that the return int value that I get from
SafeMailItem.GetIDsFromNames() is negative (-2130640896).
 
K

Ken Slovak - [MVP - Outlook]

A negative value is to be expected. A value of (-2130640896) decimal
translates into a hex value of 0x81010000. That puts that property tag in
the correct range, but it does not have the expected PT_LONG ending of
0x0003. Are you Or'ing the result from GetIdsFromNames() with PT_LONG?

For a PT_LONG (32-bit) I'd expect a property tag of 0x81010003.

If null and 0 don't work does System.Type.Missing work? Or how about
System.Reflection.Missing.Value?
 
G

Guest

grr... Ive spend hours on this. Ok here is my code again:

Type type = Type.GetTypeFromProgID("zetadocsCdo.SafeMailItem");
Redemption.SafeMailItem safeMailItem =
(Redemption.SafeMailItem)Activator.CreateInstance(type);
safeMailItem.AuthKey = "MYKEY";
safeMailItem.Item = mailItem;

const int PT_LONG = 0x0003;

int id =
safeMailItem.GetIDsFromNames("{00062008-0000-0000-C000-000000000046}",
0x8542) | PT_LONG; //id here is: 0x80f30003

safeMailItem.set_Fields(id, System.Reflection.Missing.Value); //tried 0,
null, System.Type.Missing as well.

mailItem.Save(); //do I need that?

I view the properties of the message with OutlookSpy and I see no change. I
can however change the property value with OutlookSpy.
 
K

Ken Slovak - [MVP - Outlook]

OK, that looks all right.

Can you set that long property to a value of 0? Or any other integer value?
Let's leave aside deleting it for the moment, first make sure you can
actually set it to something.

If you are going to save the underlying MailItem, recommended, first try
something like:

mailItem.Subject = mailItem.Subject;

That will fake Outlook into thinking something has changed so it will update
everything.
 
G

Guest

Yes that did the trick. I was looking how to set the mailItem to "dirty" but
there isnt such a function and I assumed that it sets it automatically.
Setting the subject fixed it.

Thanks for your help.
 
K

Ken Slovak - [MVP - Outlook]

Changes you make to an item using MAPI (or Redemption) will not be visible
right away in Outlook unless you tell Outlook that something has changed.
That little trick with item.Subject does just that. Outlook isn't aware on
its own of changes you make to opened items using MAPI unless you use a
trick like that.
 

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