Изменение порядка полей списка в SharePoint 2010 - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь изменить порядок полей списка с помощью функции ниже.Но по какой-то причине после выполнения этой функции, когда я проверяю порядок полей в List Settings, он, похоже, не изменился.

В результате * 1004 я получаю следующее*:

<Result ID="0,REORDERFIELDS" Code="-2130575323">
    <ErrorText>
        Fields have been added or removed since you began this editing session. Please refresh your view and try again
    </ErrorText>
</Result>

Что мне здесь не хватает?

/// <summary>
/// Reorders the share point list fields.
/// </summary>
/// <param name="spWeb">The sp web.</param>
/// <param name="spList">The sp list.</param>
/// <param name="orderedFields">The ordered fields.</param>
private static void ReorderSharePointListFields(SPWeb spWeb, SPList spList, IEnumerable<string> orderedFields)
{
    var stringBuilder = new StringBuilder();
    using (var xmlTextWriter = new XmlTextWriter(new StringWriter(stringBuilder)))
    {
        xmlTextWriter.Formatting = Formatting.Indented;

        xmlTextWriter.WriteStartElement("Fields");

        foreach (string orderedField in orderedFields)
        {
            xmlTextWriter.WriteStartElement("Field");
            xmlTextWriter.WriteAttributeString("Name", orderedField);
            xmlTextWriter.WriteEndElement();
        }

        xmlTextWriter.WriteEndElement();
        xmlTextWriter.Flush();

        const string rpcMethod =
            @"<?xml version=""1.0"" encoding=""UTF-8""?>  
                            <Method ID=""0,REORDERFIELDS"">  
                            <SetList Scope=""Request"">{0}</SetList>  
                            <SetVar Name=""Cmd"">REORDERFIELDS</SetVar>  
                            <SetVar Name=""ReorderedFields"">{1}</SetVar>  
                            <SetVar Name=""owshiddenversion"">{2}</SetVar>  
                            </Method>";

        SPList list = spWeb.Lists[spList.ID];

        string rpcCall = string.Format(rpcMethod, list.ID, SPHttpUtility.HtmlEncode(stringBuilder.ToString()),
                                       list.Version);
        spWeb.ProcessBatchData(rpcCall);
    }
}

1 Ответ

2 голосов
/ 21 сентября 2011

На основе других примеров я могу найти:

Единственное различие, которое я увидел с вашим кодом, заключалось в том, что перед вашимProcessBatchData вызов, у вас не было:

spWeb.AllowUnsafeUpdates = true;

Если добавление не поможет, я бы предложил захватить строку вывода из ProcessBatchData, чтобы выяснить, что именно пошло не так.

...