Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

Benutzerinformationen elegant aus ListItems extrahieren

Gelegentlich wer­den in Spalten von ListItems auch Benutzerinformationen gespei­chert – als Beispiel sol­len hier "erstellt von" und "geän­dert von" die­nen. Die zuge­hö­ri­gen Felder des Items beinhal­ten meist Zeichenketten im Format <BenutzerID>;#<Benutzername>.

Bevor man sich nun in String-Operationen ver­sucht – z.B. durch Split an der Stelle ";#" und Erzeugung der Objekte über die extra­hierte ID – sollte man sich mit den Klassen SPFieldUser bzw. SPFieldUserValue aus­ein­an­der­set­zen, die hier viel Arbeit und Fehleranfälligkeit abneh­men kön­nen, da hier sehr ein­fach Objekte vom Typ SPUser bzw. SPGroup zurück­ge­ge­ben wer­den können.

Im Folgenden 2 bei­spiel­hafte Methoden, die den Zugriff ver­deut­li­chen 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);

Related Posts

Leider funk­tio­niert der Teil:

"SPFieldUserValue fieldValue = field.GetFieldValue(item[fieldid].ToString()) as SPFieldUserValue;"

nicht. Kann mir jemand sagen, warum nicht. Bei mir gibt es immer ein Exeption: Außerhalb des Wertebereiches.
Neuer Bug? Oder lief das schon mal ohne SP1?

Ohne Garantie – aber es sollte auch ohne SP1 funk­tio­nie­ren. Wichtig ist, dass das Feld mit der Guid ange­spro­chen wird und natür­lich, dass der Item, den du abfragst auch ein Feld mit die­ser Guid hat. Die OutOfRangeException, die du bekommst weist dar­auf hin, dass es ein Feld mit der Guid die du als Parameter über­gibst nicht gibt.

Comments are closed.

Pin It on Pinterest