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" <dmitry@dimastr.com> wrote in message
news:uI63KEVbKHA.4780@TK2MSFTNGP04.phx.gbl...
> 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)
>
>
>
> -
> "Mark B" <none123@none.com> wrote in message
> news:uTwnBaMbKHA.5156@TK2MSFTNGP05.phx.gbl...
> > 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" <dmitry@dimastr.com> wrote in message
> > news:u2KLBcJbKHA.5156@TK2MSFTNGP05.phx.gbl...
> >>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)
> >>
> >>
> >>
> >> -
> >> "Mark B" <none123@none.com> wrote in message
> >> news:uIBS8WJbKHA.2188@TK2MSFTNGP04.phx.gbl...
> >>> 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" <dmitry@dimastr.com> wrote in message
> >>> news:OZUhNKJbKHA.1640@TK2MSFTNGP06.phx.gbl...
> >>>> 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)
> >>>>
> >>>>
> >>>>
> >>>> -
> >>>> "Mark B" <none123@none.com> wrote in message
> >>>> news:%23fMKu2IbKHA.5544@TK2MSFTNGP02.phx.gbl...
> >>>>> 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" <dmitry@dimastr.com> wrote in message
> >>>>> news:O0HiUjIbKHA.5796@TK2MSFTNGP06.phx.gbl...
> >>>>>>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)
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -
> >>>>>> "Mark B" <none123@none.com> wrote in message
> >>>>>> news:%23yPgaH$aKHA.5156@TK2MSFTNGP05.phx.gbl...
> >>>>>>> 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);
> >>>>>>
>>>>>>>> }
> >>>>>>> }
> >>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>>
> >
>