Property Class

Represents the definition for a user profile property.

Inheritance Hierarchy

System.Object
  Microsoft.Office.Server.UserProfiles.Property

Namespace:  Microsoft.Office.Server.UserProfiles
Assembly:  Microsoft.Office.Server (in Microsoft.Office.Server.dll)

Syntax

'Declaration
<SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel := True)> _
<SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel := True)> _
Public Class Property _
    Implements IPrivacyPolicyItem
'Usage
Dim instance As [Property]
[SharePointPermissionAttribute(SecurityAction.InheritanceDemand, ObjectModel = true)]
[SharePointPermissionAttribute(SecurityAction.LinkDemand, ObjectModel = true)]
public class Property : IPrivacyPolicyItem

Remarks

There are two types of user profile properties:

  • Regular.Defines the property data type and the corresponding user profile flags.

  • Section.Property that serves as a separator for user interface grouping purposes.

Because of the nature of the Section object, the following properties are not applicable: Type, DisplayName, IsUserEditable, IsAdminEditable, Length, IsPrivate, IsAlias, IsVisibleOnViewer. If you try to set a value, an UPUpdateReadOnlyFieldException is thrown.

For regular properties, the Name property can only be set at creation time. No further update is allowed. If there is an attempt to update, an UPUpdateReadOnlyFieldException is thrown. The Name property is used to compose the URI of the property. Therefore the name must be a valid URI schema name, otherwise an UPInvalidValueException is thrown.

Examples

The following code example shows the use of the Property class.

[Visual Basic]

      'sample uses the following classes: UserProfileConfigManager,

      'PropertyDataTypeCollection, PropertyDataType,
      'PropertyCollection, Property, PropertyConstants
      'PropertyMapCollection, PropertyMap
      Public Sub PropertyTypeAndMappingSample()
         'get portal site context from topology
         Dim strUrl As String = "http://SampleName"
         Dim tm As New TopologyManager()
         Dim ps As PortalSite = tm.PortalSites(New Uri(strUrl))
         Dim pc As PortalContext = PortalApplication.GetContext(ps)

         'initialize user profile config manager object
         Dim upcm As New UserProfileConfigManager(pc)

         'sample to get a property type "URL"
         Dim pdtc As PropertyDataTypeCollection = upcm.GetPropertyDataTypes()
         Dim ptype As PropertyDataType = Nothing
         Dim enumType As IEnumerator = pdtc.GetEnumerator()
         While enumType.MoveNext()
            ptype = CType(enumType.Current, PropertyDataType)
            If ptype.Name.Equals("string") Then
               Exit While
            End If
         End While
         'sample to create a new custom property of type URL
         Dim pcol As PropertyCollection = upcm.GetProperties()
         Dim prop As [Property] = pcol.Create(False)
         prop.Name = "division"
         prop.DisplayName = "my custom division"
         prop.Type = ptype.Name
         prop.Length = ptype.MaxCharCount
         prop.IsPrivate = False
         prop.IsUserEditable = True
         prop.IsVisibleOnEditor = True
         prop.IsVisibleOnViewer = True
         prop.IsAlias = False
         pcol.Add(prop)
         pcol.SetDisplayOrderByPropertyName(prop.Name, 1)
         pcol.CommitDisplayOrder()

         'edit property sample
         Dim ptitle As [Property] = pcol.GetPropertyByName(PropertyConstants.Title)
         ' or get property by URI
         ptitle = pcol.GetPropertyByURI([Property].URI_Title)
         ptitle.DisplayName = "Designation"
         ptitle.Commit()

         'property map sample
         Dim ds As DataSource = upcm.GetDataSource()
         Dim pmc As PropertyMapCollection = ds.PropertyMapping
         pmc.Add(prop.Name, "division")
         'get arraylist of invalid mappings
         Dim invmap As ArrayList = pmc.VerifyMapping(False)
         'remove current mapping if invalid
         Dim pm As PropertyMap
         For Each pm In  invmap
            If pm.PropName = prop.Name Then
               pmc.Remove(pm.PropName)
            End If
         Next pm

         'remove property sample
         pcol.RemovePropertyByName("division")
      End Sub 'PropertyTypeAndMappingSample
//sample uses the following classes: UserProfileConfigManager,

//PropertyDataTypeCollection, PropertyDataType,
//PropertyCollection, Property, PropertyConstants
//PropertyMapCollection, PropertyMap
public void PropertyTypeAndMappingSample()
{
//get portal site context from topology
string strUrl = "http://SampleName";
TopologyManager tm = new TopologyManager();
PortalSite ps = tm.PortalSites[new Uri(strUrl)];
PortalContext pc = PortalApplication.GetContext(ps);

//initialize user profile config manager object
UserProfileConfigManager upcm = new UserProfileConfigManager(pc);

//sample to get a property type "URL"
PropertyDataTypeCollection pdtc = upcm.GetPropertyDataTypes();
PropertyDataType ptype = null;
IEnumerator enumType = pdtc.GetEnumerator();
while (enumType.MoveNext())
{
ptype = (PropertyDataType)enumType.Current;
if (ptype.Name.Equals("string")) break;
}

//sample to create a new custom property of type URL
PropertyCollection pcol = upcm.GetProperties();
Property prop = pcol.Create(false);
prop.Name = "division";
prop.DisplayName = "my custom division";
prop.Type = ptype.Name;
prop.Length = ptype.MaxCharCount;
prop.IsPrivate = false;
prop.IsUserEditable = true;
prop.IsVisibleOnEditor = true;
prop.IsVisibleOnViewer = true;
prop.IsAlias = false;
pcol.Add(prop);
pcol.SetDisplayOrderByPropertyName(prop.Name, 1);
pcol.CommitDisplayOrder();

//edit property sample
Property ptitle = pcol.GetPropertyByName(PropertyConstants.Title);
// or get property by URI
ptitle = pcol.GetPropertyByURI(Property.URI_Title);
ptitle.DisplayName = "Designation";
ptitle.Commit();

//property map sample
DataSource ds = upcm.GetDataSource();
PropertyMapCollection pmc = ds.PropertyMapping;
pmc.Add(prop.Name, "division");
//get arraylist of invalid mappings
ArrayList invmap = pmc.VerifyMapping(false);
//remove current mapping if invalid
foreach(PropertyMap pm in invmap)
{
if (pm.PropName == prop.Name)
{
pmc.Remove(pm.PropName);
}
}

//remove property sample
pcol.RemovePropertyByName("division");
}

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

See Also

Reference

Property Members

Microsoft.Office.Server.UserProfiles Namespace