Sharepoint 2010 SharePoint 2010“;foreach“;
我有两个SharePoint列表,我必须将所有项目从列表1复制到列表2 在列表1上有一个布尔字段(默认为“否”)、一个文本字段和一个相关的工作流,该工作流会在修改时触发 WokFlow简化了: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 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)以了解有关工作流限制的信息。当您需要完成从一个列表复制项目到另一个列表这样简单的任务时,请忘记工作流。你误用了一种不应该取代“普通旧自行车”的机制。不管错误的来源是什么。