2012-10-09 41 views
0

我想更新部门列表中包含'finance'的列表中的名称字段。我编写了下面的代码,但它更新了名称列中的每个项目,无论它是否包含'finance'。CAML查询从SPList中获取项目

我在做什么错了?

SPListItemCollection Items = RiskAssesment.GetItems(new SPQuery() 
{ 
    Query = @"<where> 
        <Eq> 
         <FiledRef Name 'Department'/> 
         <Value Type='Text'>Finance </Value> 
        </Eq> 
       </Where>" 
}); 

foreach (SPListItem item in Items) 
{ 
    item["Name"] = "abcdef"; 
    item.Update(); 
}  
+0

在你的代码中你没有在查询或错字? FiledRef应该是FieldRef – Mark

回答

3

FiledRef应该FieldRef。你忘了等号,它应该是这样的:

<FieldRef Name='Department' />

小编辑: 我不知道,如果CAML是区分大小写的,但如果它是:改变opening-在哪里<Where>

+2

我爱CAML的方式只是返回整个结果集,如果你陷入困境查询了一点: -/ – Rawling

+0

大声笑,I'va也有我的奋斗与CAML查询,即使是简单的... – Abbas

+0

只是为了请确保,如果查询不起作用,请尝试使用标签对其进行包装。 – Alex

1
SPListItemCollection Items = RiskAssesment.GetItems(new SPQuery() 
{ 
    Query = @"<Where> 
    <Eq> 
     <FieldRef Name='Department'/> 
     <Value Type='Text'>Finance </Value></Eq></Where>" 
}); 

    foreach (SPListItem item in Items) 
    { 
     item["Name"]="abcdef"; 
     item.Update(); 
    } 
1

下面的函数获取的文件夹名称和项目存储 文件夹= item.folder子文件夹的ID。

最初它将是空的。

static string GetParentFolder(SPListItem itemToFind, SPFolder folder) 
     { 
      SPQuery query = new SPQuery(); 
      // query.Query = "<OrderBy><FieldRef Name='Title'/></OrderBy>"; 
      query.Query = "<Where><Eq><FieldRef Name=\"ID\"/><Value Type=\"Integer\">"+ itemToFind.ID +"</Value></Eq></Where>"; 
      query.Folder = folder; 
      query.ViewAttributes = "Scope=\"Recursive\""; 
      SPListItemCollection items = itemToFind.ParentList.GetItems(query); 
      int intpartentFolderID=0 ; 
      if (items.Count > 0) 
      { 
      foreach (SPListItem item in items) 
      { 

       SPFile f = item.Web.GetFile(item.Url); 

       string test11 = f.ParentFolder.Name; 
       intpartentFolderID = f.ParentFolder.Item.ID; 

       //string test1 = item.File.ParentFolder.Name; 

       return (intpartentFolderID.ToString()); 

      } 
      } 
      return (intpartentFolderID.ToString());  
     } 
0

下面的函数获取的文件夹名称和项目存储 文件夹= item.folder子文件夹的ID。 最初它将是空的。

static string GetParentFolder(SPListItem itemToFind, SPFolder folder) 
     { 
      SPQuery query = new SPQuery(); 
      // query.Query = "<OrderBy><FieldRef Name='Title'/></OrderBy>"; 
      query.Query = "<Where><Eq><FieldRef Name=\"ID\"/><Value Type=\"Integer\">"+ itemToFind.ID +"</Value></Eq></Where>"; 
      query.Folder = folder; 
      query.ViewAttributes = "Scope=\"Recursive\""; 
      SPListItemCollection items = itemToFind.ParentList.GetItems(query); 
      int intpartentFolderID=0 ; 
      if (items.Count > 0) 
      { 
      foreach (SPListItem item in items) 
      { 
       SPFile f = item.Web.GetFile(item.Url); 

       string test11 = f.ParentFolder.Name; 
       intpartentFolderID = f.ParentFolder.Item.ID; 

       //string test1 = item.File.ParentFolder.Name; 

       return (intpartentFolderID.ToString()); 

      } 
      } 
      return (intpartentFolderID.ToString());  
     } 

感谢 Deva- Cheraideva

0

所以我只是碰到这种较早的帖子来了,我没有足够的声誉所选择的答案发表评论。

但我知道,使用CAML时肯定是区分在SharePoint 2013的敏感

就意味着开口<where>应该<Where>

希望你解决了你的问题!