Sharepoint 2010 SharePoint 2010“;foreach“;

Sharepoint 2010 SharePoint 2010“;foreach“;,sharepoint-2010,sharepoint-workflow,Sharepoint 2010,Sharepoint Workflow,我有两个SharePoint列表,我必须将所有项目从列表1复制到列表2 在列表1上有一个布尔字段(默认为“否”)、一个文本字段和一个相关的工作流,该工作流会在修改时触发 WokFlow简化了: 将当前项复制到列表2 将我的boolen字段设置为“是” 搜索boolen字段为“否”的项目,将其文本字段设置为“复制” 我首先修改列表1中的一个项目,然后它将自己复制到列表2,修改另一个项目,依此类推。。。直到有任何项目的boolen字段设置为“否” 这对10个项目非常有效,但随后失败了。项目10将项目

我有两个SharePoint列表,我必须将所有项目从列表1复制到列表2

在列表1上有一个布尔字段(默认为“否”)、一个文本字段和一个相关的工作流,该工作流会在修改时触发

WokFlow简化了:

  • 将当前项复制到列表2
  • 将我的boolen字段设置为“是”
  • 搜索boolen字段为“否”的项目,将其文本字段设置为“复制”
  • 我首先修改列表1中的一个项目,然后它将自己复制到列表2,修改另一个项目,依此类推。。。直到有任何项目的boolen字段设置为“否”

    这对10个项目非常有效,但随后失败了。项目10将项目11的文本字段修改为“复制”,但项目11的工作流未启动。我已经试过好几次了,每次复制10次后都会停下来

    我已经在谷歌上搜索过了。我找到的最佳解决方案是在工作流中暂停1分钟。但我有成千上万的物品

    有人有什么建议吗?我甚至找不到SharePoint 2010服务器中默认为10的任何限制


    谢谢大家!

    由于工作流的速度,您正在SharePoint 2010中触发硬编码资源节流阀。它的存在是为了防止系统在工作流操作期间变得不响应。应用程序页面或计时器作业中的代码将绕过此限制,但不建议进行贪婪操作,以免导致系统对用户无响应。

    您可以使用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
            }
    
        }
    
    void UpdateList()
    {
    StringBuilder methodBuilder=新的StringBuilder();
    字符串批处理=string.Empty;
    字符串newValue=“mmmm”;
    字符串updateColumn=“SampleColumn”;
    尝试
    {
    string batchFormat=“”+
    "{0}";
    string methodFormat=“”+
    "{1}" +
    “保存”+
    "{2}" +
    "{4}" +
    "";
    使用(SPSite siteCol=新SPSite(“SampleSite”))
    {
    使用(SPWeb=siteCol.OpenWeb())
    {
    //获取包含要更新的项的列表
    SPList list=web.Lists[“SampleList”];
    字符串listGuid=list.ID.ToString();
    SPListItemCollection allItems=list.GetItems();
    //生成CAML更新命令。
    for(int i=0;i
    您可以为创建、删除和更新列表和文档库中的项目创建批处理方法

    参考文献:


    如果要更改工作流并发执行限制

    有关检查限制:

     Get-SPFarmConfig | Select WorkflowPostponeThreshold 
    
    换换口味

     Set-SPFarmConfig -WorkflowPostponeThreshold 50 
    
    批量大小上的计时器服务流程项(工作流延续)

     Get-SPFarmConfig | Select WorkflowBatchSize 
    
     Set-SPFarmConfig -WorkflowBatchSize 150 
    

    确实很奇怪-我也不知道10左右有什么限制。与分页有关吗?但是工作流通常不关心分页。我认为有一个并发工作流限制,默认情况下是8或15。我现在这里没有SP2010,但我认为它位于“中央管理”>“Web应用程序管理”>“选择您的Web应用程序”>“资源/节流/限制/无论它叫什么”中。更多信息请参见此:-不是100%确定它是否适用,但不知何故,我认为节流正在打击你。另外,请检查ULS日志文件(14\LOGS)以了解有关工作流限制的信息。当您需要完成从一个列表复制项目到另一个列表这样简单的任务时,请忘记工作流。你误用了一种不应该取代“普通旧自行车”的机制。不管错误的来源是什么。