Dieser ist seltsam.Wert von SPFieldUser mit AllowMultipleValues erhalten, schlägt nur in einem Timer-Job fehl
ich diesen Code in einem Timer Job bin Ausführung in Sharepoint 2010 ...
...
// Get the field by it's internal name
SPField field = item.Fields.GetFieldByInternalName(fieldInternalName);
if (field != null)
{
SPFieldUser userField = (SPFieldUser)field;
object value = null;
if (userField.AllowMultipleValues)
{
// Bug when getting field value in a timer job? Throws an ArgumentException
users = new SPFieldUserValueCollection(item.ParentList.ParentWeb, item[userField.Id].ToString());
}
else
{
// Get the value from the field, no exception
value = item[userField.Id];
}
}
...
Dieser Code funktioniert perfekt, wenn in einem einfachen Consoleapplication laufen, aber wenn sie im Rahmen eines Timer Jobs in Sharepoint 2010 lief es wirft ein Argument in der Linie ...
users = new SPFieldUserValueCollection(item.ParentList.ParentWeb, item[userField.Id].ToString());
ich viele Variationen versucht habe, einen Wert aus einer SPFieldUser retreive aber alle nicht nur, wenn ein Timer Job es ausgeführt wird und das Feld hat AllowMultipleValues Eigenschaft auf TRUE gesetzt .
ich das Debuggen mit Reflektor versucht haben, und es scheint, dass die Ausnahme in SPListItem hier geworfen wird ...
public object this[Guid fieldId]
{
get
{
SPField fld = this.Fields[fieldId];
if (fld == null)
{
throw new ArgumentException();
}
return this.GetValue(fld, -1, false);
}
...
Und das hier würde die Ausnahme-Stack-Trace sein ...
System.ArgumentException was caught
Message=Value does not fall within the expected range.
Source=Microsoft.SharePoint
StackTrace:
at Microsoft.SharePoint.SPFieldMap.GetColumnNumber(String strFieldName, Boolean bThrow)
at Microsoft.SharePoint.SPListItemCollection.GetColumnNumber(String groupName, Boolean bThrowException)
at Microsoft.SharePoint.SPListItemCollection.GetRawValue(String fieldname, Int32 iIndex, Boolean bThrow)
at Microsoft.SharePoint.SPListItem.GetValue(SPField fld, Int32 columnNumber, Boolean bRaw, Boolean bThrowException)
at Microsoft.SharePoint.SPListItem.get_Item(Guid fieldId)
at FOCAL.Point.Applications.Audits.AuditUtility.GetPeopleFromField(SPListItem item, String fieldInternalName)
Sighh ... irgendwelche Gedanken?
Hey @Alexey, danke für die Antwort, aber es ist nun seit über einem Jahr seit diesem Post und ich bin nicht mehr ein Teil dieses Projekts. Ich würde das gerne bestätigen, aber ich fürchte, ich kann das nicht. –