これは異常です。AllowMultipleValuesでSPFieldUserから値を取得するのは、タイマージョブでのみ失敗します
私はこのコードは、簡単なConsoleApplicationで実行したときに完璧に動作しますが、SharePoint 2010の中にタイマージョブのコンテキストで実行したときに... 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];
}
}
...
をこのコードを実行していますそれは私がSPFieldUserから値を盗んために多くのバリエーションを試してみた
users = new SPFieldUserValueCollection(item.ParentList.ParentWeb, item[userField.Id].ToString());
ラインでArgumentExceptionがする...スローが、すべてはタイマージョブが実行されている場合にのみ失敗し、フィールドがAllowMultipleValuesプロパティがTRUEに設定されています。
私はリフレクターでデバッグを試みたが、例外がここSPListItemで投げているようだ...
public object this[Guid fieldId]
{
get
{
SPField fld = this.Fields[fieldId];
if (fld == null)
{
throw new ArgumentException();
}
return this.GetValue(fld, -1, false);
}
...
そして、これは、ここでは例外スタックトレースだろう...
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 ...どんな考えですか?
Hey @Alexey、返信ありがとうございますが、この投稿から1年以上経ちましたが、私はもはやこのプロジェクトの一部ではありません。私はこれを確認したいが、私はできないのではないかと恐れている。 –