SharePoint 2010 "foreach" - PullRequest
       0

SharePoint 2010 "foreach"

3 голосов
/ 06 октября 2011

У меня есть 2 списка SharePoint, и мне нужно скопировать все элементы из List1 в List2.

В List1 есть логическое поле (по умолчанию «нет»), текстовое поле и связанный WorkFlow, которыйзапускает изменения.

WokFlow упрощен:

  1. Скопируйте текущий элемент в List2
  2. Установите для моего поля boolen значение 'yes'
  3. Найтиэлемент с логическим полем «нет», установите для его текстового поля значение «копировать»

Я запускаю процесс, изменяя элемент в List1, затем он копирует себя в List2, изменяет другой элемент,и так далее ... до тех пор, пока не будет найден какой-либо предмет с булевым полем, установленным на "нет".

Это отлично работает для 10 предметов, но затем не получается.Item 10 изменил текстовое поле элемента 11 на «copy», но WorkFlow элемента 11 не запускается.Я пробовал это серваль раз и всегда останавливался после 10 копий.

Я гуглил и MSDN.Лучшее решение, которое я нашел, это сделать паузу на 1 минуту в WorkFlow.Но у меня есть тысячи вещей ...

Кто-нибудь советует?Я даже не могу найти никаких ограничений на сервере SharePoint 2010, который по умолчанию равен 10.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 03 января 2015

Вы можете использовать пакетные методы CAML.

что-то вроде этого:

    void UpdateList()
    {
        StringBuilder methodBuilder = new StringBuilder();
        string batch = string.Empty;
        string newValue="mmmm";
        string updateColumn = "SampleColumn";


        try
        {
            string batchFormat =    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
                                    "<ows:Batch OnError=\"Continue\">{0}</ows:Batch>";
            string methodFormat = "<Method ID='{0}' >" +
                                    "<SetList>{1}</SetList>" +
                                    "<SetVar Name='Cmd'>Save</SetVar>" +
                                    "<SetVar Name='ID'>{2}</SetVar>" +
                                    "<SetVar Name='urn:schemas-microsoft-com:office:office#{3}'>{4}</SetVar>" +
                                    "</Method>";

            using (SPSite siteCol = new SPSite("SampleSite"))
            {
                using (SPWeb web = siteCol.OpenWeb())
                {

                    // Get the list containing the items to update
                    SPList list = web.Lists["SampleList"];
                    string listGuid = list.ID.ToString();
                    SPListItemCollection allItems = list.GetItems();

                    // Build the CAML update commands.
                    for (int i = 0; i < allItems.Count; i++)
                    {
                        int itemID = allItems[i].ID;
                        methodBuilder.AppendFormat(methodFormat, itemID, listGuid, itemID, updatedColumn, newValue);
                    }
                    web.AllowUnsafeUpdates = true;

                    // Generate the CAML
                    batch = string.Format(batchFormat, methodBuilder.ToString());

                    // Process the batch 
                    string batchReturn = web.ProcessBatchData(batch);

                }
                //done
            }

        }
        catch (Exception ex)
        {
    //show the error
        }

    }

Вы можете создавать пакетные методы для создания, удаления и обновления элементов в списках и библиотеках документов.

Refs:

http://msdn.microsoft.com/en-us/library/office/ms437562%28v=office.15%29.aspx

http://msdn.microsoft.com/en-us/library/office/ms459050(v=office.15).aspx

0 голосов
/ 03 января 2015

, если вы хотите изменить пределы одновременного выполнения рабочего процесса ....

Для проверки пределов:

 Get-SPFarmConfig | Select WorkflowPostponeThreshold 

Для изменения

 Set-SPFarmConfig -WorkflowPostponeThreshold 50 

Элементы процесса обслуживания таймера (продолжения рабочих процессов) для размеров партии

 Get-SPFarmConfig | Select WorkflowBatchSize 

 Set-SPFarmConfig -WorkflowBatchSize 150 
0 голосов
/ 19 ноября 2011

Вы запускаете жестко заданное ограничение ресурсов в SharePoint 2010 из-за скорости рабочего процесса. Это сделано для того, чтобы система перестала отвечать на запросы во время операций рабочего процесса. Код на странице приложения или задание таймера обойдут этот предел, но не рекомендуется выполнять жадную операцию, которая приводит к тому, что система перестает отвечать на запросы пользователей.

...