| Home | Forums | Reviews | Articles | Register |
![]() |
| Thread Tools |
Rating:
|
|
|
|
| |
|
Dmitry Streblechenko
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:%23yPgaH$(E-Mail Removed)... > 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
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)... >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" <(E-Mail Removed)> wrote in message > news:%23yPgaH$(E-Mail Removed)... >> 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
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:%(E-Mail Removed)... > 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" <(E-Mail Removed)> wrote in message > news:(E-Mail Removed)... >>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" <(E-Mail Removed)> wrote in message >> news:%23yPgaH$(E-Mail Removed)... >>> 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
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)... > 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" <(E-Mail Removed)> wrote in message > news:%(E-Mail Removed)... >> 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" <(E-Mail Removed)> wrote in message >> news:(E-Mail Removed)... >>>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" <(E-Mail Removed)> wrote in message >>> news:%23yPgaH$(E-Mail Removed)... >>>> 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
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)... > 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" <(E-Mail Removed)> wrote in message > news:(E-Mail Removed)... >> 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" <(E-Mail Removed)> wrote in message >> news:%(E-Mail Removed)... >>> 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" <(E-Mail Removed)> wrote in message >>> news:(E-Mail Removed)... >>>>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" <(E-Mail Removed)> wrote in message >>>> news:%23yPgaH$(E-Mail Removed)... >>>>> 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
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)... >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" <(E-Mail Removed)> wrote in message > news:(E-Mail Removed)... >> 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" <(E-Mail Removed)> wrote in message >> news:(E-Mail Removed)... >>> 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" <(E-Mail Removed)> wrote in message >>> news:%(E-Mail Removed)... >>>> 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" <(E-Mail Removed)> wrote in message >>>> news:(E-Mail Removed)... >>>>>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" <(E-Mail Removed)> wrote in message >>>>> news:%23yPgaH$(E-Mail Removed)... >>>>>> 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
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)... > 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" <(E-Mail Removed)> wrote in message > news:(E-Mail Removed)... >>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" <(E-Mail Removed)> wrote in message >> news:(E-Mail Removed)... >>> 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" <(E-Mail Removed)> wrote in message >>> news:(E-Mail Removed)... >>>> 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" <(E-Mail Removed)> wrote in message >>>> news:%(E-Mail Removed)... >>>>> 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" <(E-Mail Removed)> wrote in message >>>>> news:(E-Mail Removed)... >>>>>>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" <(E-Mail Removed)> wrote in message >>>>>> news:%23yPgaH$(E-Mail Removed)... >>>>>>> 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
Guest
Posts: n/a
|
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" <(E-Mail Removed)> wrote in message news:(E-Mail Removed)... > 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" <(E-Mail Removed)> wrote in message > news:(E-Mail Removed)... >> 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" <(E-Mail Removed)> wrote in message >> news:(E-Mail Removed)... >>>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" <(E-Mail Removed)> wrote in message >>> news:(E-Mail Removed)... >>>> 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" <(E-Mail Removed)> wrote in message >>>> news:(E-Mail Removed)... >>>>> 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" <(E-Mail Removed)> wrote in message >>>>> news:%(E-Mail Removed)... >>>>>> 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" <(E-Mail Removed)> wrote in message >>>>>> news:(E-Mail Removed)... >>>>>>>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" <(E-Mail Removed)> wrote in message >>>>>>> news:%23yPgaH$(E-Mail Removed)... >>>>>>>> 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
Guest
Posts: n/a
|
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 > - |
|
||
|
||||
|
|
|
| |
![]() |
| Thread Tools | |
| Rate This Thread | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Create/Read User Defined Jet Property | =?Utf-8?B?TXIgQg==?= | Microsoft Access Database Table Design | 2 | 11th Dec 2006 04:09 AM |
| Create Property on the fly | Marc Robitaille | Microsoft VB .NET | 6 | 30th Nov 2006 02:48 PM |
| How does one create a delete property of a user defined class? | Abraham.Olson@gmail.com | Microsoft Excel Programming | 6 | 28th Jun 2006 08:12 PM |
| How to Create an User Defined Property for a Combo Box User Contro | =?Utf-8?B?UHJhYmh1ZGhhcyBQZXRlcg==?= | Microsoft VB .NET | 2 | 24th Jan 2005 03:41 PM |
| How to Create a user control with a event property? | skytouch_zyt | Microsoft ASP .NET | 0 | 27th Jun 2003 06:02 PM |
Powered by vBulletin®. Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2010, Crawlability, Inc. |





