четверг, 22 апреля 2010 г.

SharePoint: Select field from item by name. InternalName vs Title.

Часто при работе с SharePoint встречаются конструкции вида:
SPListItem item = List.Items[0];
item["FieldName"] = "Some Value";
И лично мне всегда было непонятно, какое из имен поля можно использовать, т.к. у каждого поля есть аж 3 названия - Title,InternalName и StaticName

Сегодня в рефлекторе наткнулся на кусок кода, который дает ответ на этот вопрос:
internal SPField GetField(string strName, bool bThrowException)
{
    this.EnsureFieldsSafeArray(false);
    SPField fieldByInternalName = this.GetFieldByInternalName(strName, false);
    if (fieldByInternalName == null)
    {
        fieldByInternalName = this.GetFieldByDisplayName(strName, false);
    }
    if (((fieldByInternalName == null) && (SPContext.Current != null)) && SPContext.Current.IsDesignTime)
    {
        fieldByInternalName = SPContext.Current.ContentType.Fields.GetFieldByInternalName(strName, false);
        if (fieldByInternalName == null)
        {
            fieldByInternalName = SPContext.Current.ContentType.Fields.GetFieldByDisplayName(strName, false);
        }
    }
    if ((fieldByInternalName == null) && bThrowException)
    {
        throw new ArgumentException();
    }
    return fieldByInternalName;
}
Т.е. сначала поле ищется по InternalName, потом по DisplayName, потом внутри контентного типа так же по InternalName ,потом по DisplayName.

Комментариев нет: