Gelegentlich werden in Spalten von ListItems auch Benutzerinformationen gespeichert - als Beispiel sollen hier “erstellt von” und “geändert von” dienen. Die zugehörigen Felder des Items beinhalten meist Zeichenketten im Format <BenutzerID>;#<Benutzername>.
Bevor man sich nun in String-Operationen versucht - z.B. durch Split an der Stelle “;#” und Erzeugung der Objekte über die extrahierte ID - sollte man sich mit den Klassen SPFieldUser bzw. SPFieldUserValue auseinandersetzen, die hier viel Arbeit und Fehleranfälligkeit abnehmen können, da hier sehr einfach Objekte vom Typ SPUser bzw. SPGroup zurückgegeben werden können.
Im Folgenden 2 beispielhafte Methoden, die den Zugriff verdeutlichen sollen:
private SPUser GetSPUser(SPListItem item, Guid fieldid)
{
SPUser retval = null;
#region check params
if (item == null)
{
throw new ArgumentNullException("item");
}
if (fieldid == Guid.Empty)
{
throw new ArgumentException("Empty Guid is not allowed.", "fieldid");
}
#endregion
try
{
SPFieldUser field = item.Fields[fieldid] as SPFieldUser;
if (field != null)
{
SPFieldUserValue fieldValue = field.GetFieldValue(item[fieldid].ToString()) as SPFieldUserValue;
if (fieldValue != null)
{
retval = fieldValue.User;
}
}
}
catch (Exception ex)
{
throw ex;
}
return retval;
}
private SPGroup GetSPGroup(SPListItem item, Guid fieldid)
{
SPGroup retval = null;
#region check params
if (item == null)
{
throw new ArgumentNullException("item");
}
if (fieldid == Guid.Empty)
{
throw new ArgumentException("Empty Guid is not allowed.", "fieldid");
}
#endregion
try
{
SPFieldUser field = item.Fields[fieldid] as SPFieldUser;
if (field != null)
{
SPFieldUserValue fieldValue = field.GetFieldValue(item[fieldid].ToString()) as SPFieldUserValue;
if (fieldValue != null)
{
string groupName = fieldValue.LookupValue;
retval = item.Web.SiteGroups[groupName];
}
}
}
catch (Exception ex)
{
throw ex;
}
return retval;
}
Der Aufruf ist nun recht trivial:
SPUser modifiedbyuser = GetSPUser(tasklistitem, SPBuiltInFieldId.Editor); DateTime modifiedat = Convert.ToDateTime(tasklistitem[SPBuiltInFieldId.Modified]); SPUser assignedto = GetSPUser(tasklistitem, SPBuiltInFieldId.AssignedTo);

