Outlook Banter

Outlook Banter (http://www.outlookbanter.com/)
-   Add-ins for Outlook (http://www.outlookbanter.com/add-ins-outlook/)
-   -   Can't create new user property? (http://www.outlookbanter.com/add-ins-outlook/97304-cant-create-new-user-property.html)

Mark B[_2_] November 23rd 09 04:02 AM

Can't create new user property?
 
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user property:\n" +
e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}


Dmitry Streblechenko November 23rd 09 09:59 PM

Can't create new user property?
 
I think this is as self-explanatory as it gets: you already have a property
with the same name but a different property type.
Once you used a particular type for any given name, you are stuck with that
type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user property:\n"
+ e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}




Mark B[_2_] November 23rd 09 10:38 PM

Can't create new user property?
 
The thing is I always get the error message:

'mail.UserProperties[propertyName]' is null

if I try to set its value though. Here's some immediate window results:

?mail.UserProperties[propertyName] == null
true
mail.UserProperties.Add(propertyName, propType, true, Type.Missing)
'mail.UserProperties.Add(propertyName, propType, true, Type.Missing)' threw
an exception of type 'System.Runtime.InteropServices.COMException'
base {System.Runtime.InteropServices.ExternalException} : {"A custom
field with this name but a different data type already exists. Enter a
different name."}
mail.UserProperties[propertyName].Value = value;
'mail.UserProperties[propertyName]' is null
?mail.UserProperties[propertyName].GetType()
'((object)(mail.UserProperties[propertyName]))' is null
?mail.UserProperties[propertyName].IsUserProperty
'mail.UserProperties[propertyName]' is null
mail.UserProperties[propertyName].Value = 0;
'mail.UserProperties[propertyName]' is null




"Dmitry Streblechenko" wrote in message
...
I think this is as self-explanatory as it gets: you already have a property
with the same name but a different property type.
Once you used a particular type for any given name, you are stuck with
that type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user property:\n"
+ e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}





Dmitry Streblechenko November 23rd 09 11:09 PM

Can't create new user property?
 
It ios not just on a particular message - themapping is on thestore level,
plus you added the user property to teh folder props (thrird parameter =
true).

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
The thing is I always get the error message:

'mail.UserProperties[propertyName]' is null

if I try to set its value though. Here's some immediate window results:

?mail.UserProperties[propertyName] == null
true
mail.UserProperties.Add(propertyName, propType, true, Type.Missing)
'mail.UserProperties.Add(propertyName, propType, true, Type.Missing)'
threw an exception of type 'System.Runtime.InteropServices.COMException'
base {System.Runtime.InteropServices.ExternalException} : {"A custom
field with this name but a different data type already exists. Enter a
different name."}
mail.UserProperties[propertyName].Value = value;
'mail.UserProperties[propertyName]' is null
?mail.UserProperties[propertyName].GetType()
'((object)(mail.UserProperties[propertyName]))' is null
?mail.UserProperties[propertyName].IsUserProperty
'mail.UserProperties[propertyName]' is null
mail.UserProperties[propertyName].Value = 0;
'mail.UserProperties[propertyName]' is null




"Dmitry Streblechenko" wrote in message
...
I think this is as self-explanatory as it gets: you already have a
property with the same name but a different property type.
Once you used a particular type for any given name, you are stuck with
that type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user
property:\n" + e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}







Mark B[_2_] November 23rd 09 11:36 PM

Can't create new user property?
 
My senior programmer whose work I am trying to debug decided that whenever
he wanted to add user property to a mail item, he would include the third
parameter as True. That is, adding the user-defined field to the folder as
well.

Using the Outlook GUI just now I have seen a few user fields that have
Yes/No type in the "User-Defined Fields in Inbox" but for the particular
item, the field type is Date/Time. So there is inconsistency there.

I'm am guessing to remedy the whole thing I'll go through and delete all
user defined fields in all folders -- Inbox, Sent Items etc.

Then I am thinking to amend his code below labeled "//Create user property
if does not exist", making the third parameter False instead of True.

Is there any downside to not having the user-defined fields mirrored in the
Folders?

Our code in other places does things like Advanced Search based on
user-defined field values.

I'd be interested to know best practice here -- it's for an Outlook 2007
VSTO C# Add-in for various different external clients.


"Dmitry Streblechenko" wrote in message
...
It ios not just on a particular message - themapping is on thestore level,
plus you added the user property to teh folder props (thrird parameter =
true).

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
The thing is I always get the error message:

'mail.UserProperties[propertyName]' is null

if I try to set its value though. Here's some immediate window results:

?mail.UserProperties[propertyName] == null
true
mail.UserProperties.Add(propertyName, propType, true, Type.Missing)
'mail.UserProperties.Add(propertyName, propType, true, Type.Missing)'
threw an exception of type 'System.Runtime.InteropServices.COMException'
base {System.Runtime.InteropServices.ExternalException} : {"A custom
field with this name but a different data type already exists. Enter a
different name."}
mail.UserProperties[propertyName].Value = value;
'mail.UserProperties[propertyName]' is null
?mail.UserProperties[propertyName].GetType()
'((object)(mail.UserProperties[propertyName]))' is null
?mail.UserProperties[propertyName].IsUserProperty
'mail.UserProperties[propertyName]' is null
mail.UserProperties[propertyName].Value = 0;
'mail.UserProperties[propertyName]' is null




"Dmitry Streblechenko" wrote in message
...
I think this is as self-explanatory as it gets: you already have a
property with the same name but a different property type.
Once you used a particular type for any given name, you are stuck with
that type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user
property:\n" + e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}







Dmitry Streblechenko November 23rd 09 11:41 PM

Can't create new user property?
 
I doubt that will help, not least if you are using Exchange: on the low
level, user proeprties are stored as named MAPI properties. To get a
property tag, Outlook calls IMessage::GetIDsFromNames passing the GUID
(PS_PUBLIC_STRING for the user properties) and id (the property name in your
case, can also be an integer).
Once a particular combination of GUID/id is mapped to a tag (4 bytes int),
it will always be used for that store (mailbox). The very first time that
tag is used when setting a property, the store will remember the property
type (PT_BOOLEAN, PT_SYSTIME, etc).
You cannot make the store forget about a particular property, once it is
used, the type cannot be changed.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
My senior programmer whose work I am trying to debug decided that whenever
he wanted to add user property to a mail item, he would include the third
parameter as True. That is, adding the user-defined field to the folder as
well.

Using the Outlook GUI just now I have seen a few user fields that have
Yes/No type in the "User-Defined Fields in Inbox" but for the particular
item, the field type is Date/Time. So there is inconsistency there.

I'm am guessing to remedy the whole thing I'll go through and delete all
user defined fields in all folders -- Inbox, Sent Items etc.

Then I am thinking to amend his code below labeled "//Create user
property if does not exist", making the third parameter False instead of
True.

Is there any downside to not having the user-defined fields mirrored in
the Folders?

Our code in other places does things like Advanced Search based on
user-defined field values.

I'd be interested to know best practice here -- it's for an Outlook 2007
VSTO C# Add-in for various different external clients.


"Dmitry Streblechenko" wrote in message
...
It ios not just on a particular message - themapping is on thestore
level,
plus you added the user property to teh folder props (thrird parameter =
true).

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
The thing is I always get the error message:

'mail.UserProperties[propertyName]' is null

if I try to set its value though. Here's some immediate window results:

?mail.UserProperties[propertyName] == null
true
mail.UserProperties.Add(propertyName, propType, true, Type.Missing)
'mail.UserProperties.Add(propertyName, propType, true, Type.Missing)'
threw an exception of type 'System.Runtime.InteropServices.COMException'
base {System.Runtime.InteropServices.ExternalException} : {"A custom
field with this name but a different data type already exists. Enter a
different name."}
mail.UserProperties[propertyName].Value = value;
'mail.UserProperties[propertyName]' is null
?mail.UserProperties[propertyName].GetType()
'((object)(mail.UserProperties[propertyName]))' is null
?mail.UserProperties[propertyName].IsUserProperty
'mail.UserProperties[propertyName]' is null
mail.UserProperties[propertyName].Value = 0;
'mail.UserProperties[propertyName]' is null




"Dmitry Streblechenko" wrote in message
...
I think this is as self-explanatory as it gets: you already have a
property with the same name but a different property type.
Once you used a particular type for any given name, you are stuck with
that type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the
code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already
exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user
property:\n" + e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}









Mark B[_2_] November 24th 09 05:25 AM

Can't create new user property?
 
Thanks very much for all your help.

I went ahead and manually deleted the user defined fields from the Inbox and
SentItems folders and the errors stopped.

I think I'll amend the code so that if he programmatically creates new user
fields, the 3rd parameter is false so the folders don't store the fields
too.

I can't see any downside to this. Please feel free to correct this view if
you think I would need folder-based user-defined fields.


"Dmitry Streblechenko" wrote in message
...
I doubt that will help, not least if you are using Exchange: on the low
level, user proeprties are stored as named MAPI properties. To get a
property tag, Outlook calls IMessage::GetIDsFromNames passing the GUID
(PS_PUBLIC_STRING for the user properties) and id (the property name in
your case, can also be an integer).
Once a particular combination of GUID/id is mapped to a tag (4 bytes int),
it will always be used for that store (mailbox). The very first time that
tag is used when setting a property, the store will remember the property
type (PT_BOOLEAN, PT_SYSTIME, etc).
You cannot make the store forget about a particular property, once it is
used, the type cannot be changed.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
My senior programmer whose work I am trying to debug decided that
whenever he wanted to add user property to a mail item, he would include
the third
parameter as True. That is, adding the user-defined field to the folder
as well.

Using the Outlook GUI just now I have seen a few user fields that have
Yes/No type in the "User-Defined Fields in Inbox" but for the particular
item, the field type is Date/Time. So there is inconsistency there.

I'm am guessing to remedy the whole thing I'll go through and delete all
user defined fields in all folders -- Inbox, Sent Items etc.

Then I am thinking to amend his code below labeled "//Create user
property if does not exist", making the third parameter False instead of
True.

Is there any downside to not having the user-defined fields mirrored in
the Folders?

Our code in other places does things like Advanced Search based on
user-defined field values.

I'd be interested to know best practice here -- it's for an Outlook 2007
VSTO C# Add-in for various different external clients.


"Dmitry Streblechenko" wrote in message
...
It ios not just on a particular message - themapping is on thestore
level,
plus you added the user property to teh folder props (thrird parameter =
true).

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
The thing is I always get the error message:

'mail.UserProperties[propertyName]' is null

if I try to set its value though. Here's some immediate window results:

?mail.UserProperties[propertyName] == null
true
mail.UserProperties.Add(propertyName, propType, true, Type.Missing)
'mail.UserProperties.Add(propertyName, propType, true, Type.Missing)'
threw an exception of type
'System.Runtime.InteropServices.COMException'
base {System.Runtime.InteropServices.ExternalException} : {"A custom
field with this name but a different data type already exists. Enter a
different name."}
mail.UserProperties[propertyName].Value = value;
'mail.UserProperties[propertyName]' is null
?mail.UserProperties[propertyName].GetType()
'((object)(mail.UserProperties[propertyName]))' is null
?mail.UserProperties[propertyName].IsUserProperty
'mail.UserProperties[propertyName]' is null
mail.UserProperties[propertyName].Value = 0;
'mail.UserProperties[propertyName]' is null




"Dmitry Streblechenko" wrote in message
...
I think this is as self-explanatory as it gets: you already have a
property with the same name but a different property type.
Once you used a particular type for any given name, you are stuck with
that type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the
code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already
exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user
property:\n" + e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}










Dmitry Streblechenko November 24th 09 09:53 PM

Can't create new user property?
 
Do you have a predefined set of user proeprties or do you create them
dynamically based on some criteria/
Keep in mind that tehre is a 65,000 limit on the number of named proeprty
mappings per store.
Once you reach that limit, no new named proeprty can be created, no matter
whether you add it to the folder fields or not.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
Thanks very much for all your help.

I went ahead and manually deleted the user defined fields from the Inbox
and SentItems folders and the errors stopped.

I think I'll amend the code so that if he programmatically creates new
user fields, the 3rd parameter is false so the folders don't store the
fields too.

I can't see any downside to this. Please feel free to correct this view if
you think I would need folder-based user-defined fields.


"Dmitry Streblechenko" wrote in message
...
I doubt that will help, not least if you are using Exchange: on the low
level, user proeprties are stored as named MAPI properties. To get a
property tag, Outlook calls IMessage::GetIDsFromNames passing the GUID
(PS_PUBLIC_STRING for the user properties) and id (the property name in
your case, can also be an integer).
Once a particular combination of GUID/id is mapped to a tag (4 bytes
int), it will always be used for that store (mailbox). The very first
time that tag is used when setting a property, the store will remember
the property type (PT_BOOLEAN, PT_SYSTIME, etc).
You cannot make the store forget about a particular property, once it is
used, the type cannot be changed.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
My senior programmer whose work I am trying to debug decided that
whenever he wanted to add user property to a mail item, he would include
the third
parameter as True. That is, adding the user-defined field to the folder
as well.

Using the Outlook GUI just now I have seen a few user fields that have
Yes/No type in the "User-Defined Fields in Inbox" but for the particular
item, the field type is Date/Time. So there is inconsistency there.

I'm am guessing to remedy the whole thing I'll go through and delete all
user defined fields in all folders -- Inbox, Sent Items etc.

Then I am thinking to amend his code below labeled "//Create user
property if does not exist", making the third parameter False instead of
True.

Is there any downside to not having the user-defined fields mirrored in
the Folders?

Our code in other places does things like Advanced Search based on
user-defined field values.

I'd be interested to know best practice here -- it's for an Outlook 2007
VSTO C# Add-in for various different external clients.


"Dmitry Streblechenko" wrote in message
...
It ios not just on a particular message - themapping is on thestore
level,
plus you added the user property to teh folder props (thrird parameter
=
true).

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
The thing is I always get the error message:

'mail.UserProperties[propertyName]' is null

if I try to set its value though. Here's some immediate window
results:

?mail.UserProperties[propertyName] == null
true
mail.UserProperties.Add(propertyName, propType, true, Type.Missing)
'mail.UserProperties.Add(propertyName, propType, true, Type.Missing)'
threw an exception of type
'System.Runtime.InteropServices.COMException'
base {System.Runtime.InteropServices.ExternalException} : {"A custom
field with this name but a different data type already exists. Enter a
different name."}
mail.UserProperties[propertyName].Value = value;
'mail.UserProperties[propertyName]' is null
?mail.UserProperties[propertyName].GetType()
'((object)(mail.UserProperties[propertyName]))' is null
?mail.UserProperties[propertyName].IsUserProperty
'mail.UserProperties[propertyName]' is null
mail.UserProperties[propertyName].Value = 0;
'mail.UserProperties[propertyName]' is null




"Dmitry Streblechenko" wrote in message
...
I think this is as self-explanatory as it gets: you already have a
property with the same name but a different property type.
Once you used a particular type for any given name, you are stuck
with
that type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the
code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already
exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user
property:\n" + e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}












Mark B[_2_] November 25th 09 02:21 AM

Can't create new user property?
 
Thanks. We have a predefined number of 30.

The issue was that as the application was being developed, the head
developer changed the type of a few from Yes/No to Date/Time. Theoretically
it should all now be stable.

The app hasn't been released as yet so the issue was only on the development
machines.


"Dmitry Streblechenko" wrote in message
...
Do you have a predefined set of user proeprties or do you create them
dynamically based on some criteria/
Keep in mind that tehre is a 65,000 limit on the number of named proeprty
mappings per store.
Once you reach that limit, no new named proeprty can be created, no matter
whether you add it to the folder fields or not.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
Thanks very much for all your help.

I went ahead and manually deleted the user defined fields from the Inbox
and SentItems folders and the errors stopped.

I think I'll amend the code so that if he programmatically creates new
user fields, the 3rd parameter is false so the folders don't store the
fields too.

I can't see any downside to this. Please feel free to correct this view
if you think I would need folder-based user-defined fields.


"Dmitry Streblechenko" wrote in message
...
I doubt that will help, not least if you are using Exchange: on the low
level, user proeprties are stored as named MAPI properties. To get a
property tag, Outlook calls IMessage::GetIDsFromNames passing the GUID
(PS_PUBLIC_STRING for the user properties) and id (the property name in
your case, can also be an integer).
Once a particular combination of GUID/id is mapped to a tag (4 bytes
int), it will always be used for that store (mailbox). The very first
time that tag is used when setting a property, the store will remember
the property type (PT_BOOLEAN, PT_SYSTIME, etc).
You cannot make the store forget about a particular property, once it is
used, the type cannot be changed.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
My senior programmer whose work I am trying to debug decided that
whenever he wanted to add user property to a mail item, he would
include the third
parameter as True. That is, adding the user-defined field to the folder
as well.

Using the Outlook GUI just now I have seen a few user fields that have
Yes/No type in the "User-Defined Fields in Inbox" but for the
particular item, the field type is Date/Time. So there is inconsistency
there.

I'm am guessing to remedy the whole thing I'll go through and delete
all user defined fields in all folders -- Inbox, Sent Items etc.

Then I am thinking to amend his code below labeled "//Create user
property if does not exist", making the third parameter False instead
of True.

Is there any downside to not having the user-defined fields mirrored in
the Folders?

Our code in other places does things like Advanced Search based on
user-defined field values.

I'd be interested to know best practice here -- it's for an Outlook
2007 VSTO C# Add-in for various different external clients.


"Dmitry Streblechenko" wrote in message
...
It ios not just on a particular message - themapping is on thestore
level,
plus you added the user property to teh folder props (thrird parameter
=
true).

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
The thing is I always get the error message:

'mail.UserProperties[propertyName]' is null

if I try to set its value though. Here's some immediate window
results:

?mail.UserProperties[propertyName] == null
true
mail.UserProperties.Add(propertyName, propType, true, Type.Missing)
'mail.UserProperties.Add(propertyName, propType, true, Type.Missing)'
threw an exception of type
'System.Runtime.InteropServices.COMException'
base {System.Runtime.InteropServices.ExternalException} : {"A
custom
field with this name but a different data type already exists. Enter
a
different name."}
mail.UserProperties[propertyName].Value = value;
'mail.UserProperties[propertyName]' is null
?mail.UserProperties[propertyName].GetType()
'((object)(mail.UserProperties[propertyName]))' is null
?mail.UserProperties[propertyName].IsUserProperty
'mail.UserProperties[propertyName]' is null
mail.UserProperties[propertyName].Value = 0;
'mail.UserProperties[propertyName]' is null




"Dmitry Streblechenko" wrote in message
...
I think this is as self-explanatory as it gets: you already have a
property with the same name but a different property type.
Once you used a particular type for any given name, you are stuck
with
that type.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-
"Mark B" wrote in message
...
VSTO C# Outlook 2007.

Does anyone know why I am getting the following exception from the
code
below and what the solution is?

"Exception while setting up user property:
A custom field with this name but a different data type already
exists.
Enter a different name.
Prop name = x-MYAPP-MyDate1
Value=21/11/2009 3:01:30 a.m.
Type = olDateTime"


private void SetProperty(string propertyName, object value,
Outlook.OlUserPropertyType propType)
{
try
{
//Create user property if does not exist
if (mail.UserProperties[propertyName] == null)
{
mail.UserProperties.Add(propertyName, propType,
true, Type.Missing);
}

//Set property value
if (value != null)
{
mail.UserProperties[propertyName].Value = value;
}
//Delete the property if value was null
else
{
mail.UserProperties[propertyName].Delete();
}
}
catch (Exception e)
{
string msg = "Exception while setting up user
property:\n" + e.Message + "\n"
+ "Prop name = " + propertyName + "\nValue=" +
value.ToString() + "\nType = " + propType;

MYAPP.LogMessage(msg);

}
}













Coffee guy January 4th 10 09:33 PM

Can't create new user property?
 
Hi Dmitry,

Can you point me to the specs where the 64k limit is explained. I'm in a
similar situation with user properties and need to understand better how that
works. If I create 15 properties on the folder (3rd parameter is true), does
that mean there are 15 mappings per AppointmentItem limit of approx. 4333
items? What if I set the 3rd param to false?

"Dmitry Streblechenko" wrote:

Do you have a predefined set of user proeprties or do you create them
dynamically based on some criteria/
Keep in mind that tehre is a 65,000 limit on the number of named proeprty
mappings per store.
Once you reach that limit, no new named proeprty can be created, no matter
whether you add it to the folder fields or not.

--
Dmitry Streblechenko (MVP)
http://www.dimastr.com/
OutlookSpy - Outlook, CDO
and MAPI Developer Tool
-




All times are GMT +1. The time now is 12:31 PM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2006 OutlookBanter.com