Donnerstag, 21. Oktober 2010

Custom Field Type -> User : <Field Name="ParentType">User</Field>

Wenn man ein Custom Field Type des ParentTypes User erstellen will, dann geht man vor wie bisher, nur an zwei Stellen müsste man etwas ändern.

1. fldtypes_[your name].xml
Dort muss man den folgenden ParentType definieren:
<Field Name="ParentType">User</Field>

2. FieldControl verlangt beim get der überschriebenen Methode Value ein gewisses Format [Sharepoint UserId];#[Sharepoint UserName] als String.
public override object Value
{
get
{
return "1;#Mein Name";
}
}


Sharepoint UserId bzw. UserName erhält man wie folgt:
Aktueller User:
SPSite oSiteCollection = SPContext.Current.Site;
using (SPWeb oWebsite = oSiteCollection.RootWeb)
{
SPUser oUser = oWebsite.CurrentUser;
oUser.Name; //Der Sharepoint UserName
oUser.ID; //Die Sharepoint UserId
}


Ein User aus einer Gruppe:
using (SPSite spSite = new SPSite("[URL zu meiner Sharepointinstanz]"))
{
using (SPWeb spWeb = spSite.RootWeb)
{
foreach (SPUser user in spWeb.SiteGroups["[Mein Gruppenname]"].Users)
{
user.Name;
user.ID;
}
}
}


3. Ihre Field Klasse erbt bei normalen Custom Field Types von der Basisklasse SPField. In diesem Fall muss es SPFieldUser sein. Der restliche Code bleibt gleich. Wenn man einen Defaultwert setzen will, kann man die dazugehörige Eigenschaft überschreiben.
public class [Ihr Name]Field : SPFieldUser
{ ...

HINWEIS: Wenn Sie SPField als Basisklasse benutzen, dann bleibt der Wert in der Liste leer.


If you want to create a custom-field-type of parent-type User, then you just create your custom-field-type like any other and make changes at two spots.

1. fldtypes_[your name].xml
There you have to define the following ParentType:
<Field Name="ParentType">User</Field>

2. FieldControl requires a special format in the get function of the overridden method Value. [Sharepoint UserId];#[Sharepoint UserName] as string.
public override object Value
{
get
{
return "1;#My name";
}
}


You can get the values of Sharepoint UserId or UserName like this:
Current user:
SPSite oSiteCollection = SPContext.Current.Site;
using (SPWeb oWebsite = oSiteCollection.RootWeb)
{
SPUser oUser = oWebsite.CurrentUser;
oUser.Name; //The Sharepoint UserName
oUser.ID; //The Sharepoint UserId
}


User from a specified group:
using (SPSite spSite = new SPSite("[URL of my Sharepoint-instance]"))
{
using (SPWeb spWeb = spSite.RootWeb)
{
foreach (SPUser user in spWeb.SiteGroups["[My group-name]"].Users)
{
user.Name; //The Sharepoint UserName
user.ID; //The Sharepoint UserId
}
}
}


3. Usual custom-field-types inherit from the base-class SPField. In this case your class needs to inherit from SPFieldUser. The rest of the code remains the same. If you want to set a default-value, then you need to override the property DefaultValue.
public class [Your name]Field : SPFieldUser
{ ...

HINT: If you do use SPField as the base class, then the value in the list will remain empty.

Keine Kommentare:

Kommentar veröffentlichen