2012-03-27 9 views
3

SharePointのWebサービスは、以下のシグネチャを持つメソッドがあります:私は、例えば、唯一の「ID」と、私のリストの「タイトル」カラムを返したいのですがSharePoint Webサービスを使用しているときにリストの特定の列のみを返す方法?

public System.Xml.XmlNode GetListItems(string listName, string viewName, System.Xml.XmlNode query, System.Xml.XmlNode viewFields, string rowLimit, System.Xml.XmlNode queryOptions, string webID) { 
      object[] results = this.Invoke("GetListItems", new object[] { 
         listName, 
         viewName, 
         query, 
         viewFields, 
         rowLimit, 
         queryOptions, 
         webID}); 
      return ((System.Xml.XmlNode)(results[0])); 
     } 

をすべての列を返すのではなく、 "ProductNames"。

このWebメソッドを使用して特定の列のみを返す方法を教えてください。私はすべての列を返す以下の方法で使用しています

public XmlNode GetListItems(string listName, XmlElement camlQueryForFilteringRows, bool includeAllColumns, string[] columnNamesToInclude)   
{ 

} 

でそれを呼び出しますので

public XmlNode GetListItems(string listName, XmlElement camlQuery) 
     { 
      sp.Lists listService = this.getSPListService(); 

      XmlDocument xmlDoc = new XmlDocument(); 

      XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", ""); 

      XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions"); 

      XmlElement foldersEl = xmlDoc.CreateElement("Folder"); 

      if (camlQuery == null) // override default view filters 
      { 
       camlQuery = xmlDoc.CreateElement("Query"); 

       camlQuery.InnerXml = "<Where><Gt><FieldRef Name='ID'/><Value Type='Number'>0</Value></Gt></Where>"; 
      } 

      queryOptions.AppendChild(foldersEl); 

      return listService.GetListItems(listName, null, camlQuery, ndViewFields, int.MaxValue.ToString(), queryOptions, null); 
     } 

は、今私のような新しいメソッドを作成したいのですが

var listItems = GetListItems("ProductNames", null, new [] {"ID", "Title"}); 

以下の構造をViewFields変数に追加しようとしましたが、それでもすべての列を返します。

<ViewFields> 
    <FieldRef Name="ID" /> 
    <FieldRef Name="Title" /> 
</ViewFields> 

おかげで、

+0

私はそれがバグだと思います。ただし、まずViewFieldで指定したフィールドが表示されます。したがって、最初のX列のみを返す回避策を実行する可能性があります。ここで、Xは指定されたViewFieldの数です。 – Heliac

答えて

5

このような何か試してみてください:

XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", ""); 
XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions"); 
if (!includeAllColumns) 
{ 
    ndViewFields.InnerXml = 
     string.Join(string.Empty, 
      columnNamesToInclude 
      .Select(t1 => string.Format("<FieldRef Name=\"{0}\" />", t1)) 
      .ToArray()); 
    queryOptions.InnerXml = "<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>"; 
} 

ViewFieldsIncludeMandatoryColumnsの組み合わせは、過去に私のために働いています。

+0

これは1年前には本当だったかもしれませんが、今日は確かに動作しません。 IncludeMandatoryColumnsをFALSEに設定すると、システムフィールドが削除されず、ViewFieldsOnlyもTRUEに設定されません。これをバグと報告するウェブ上には数多くのフォーラムがあります。 – Heliac

+0

私はそれが最初にViewFieldsで指定したフィールドを持って来ていることに気付きました。したがって、最初のX列のみを返す回避策を実行する可能性があります。ここで、Xは指定されたViewFieldの数です。 – Heliac

1

queryoption ViewFieldsOnlyをTrueに設定してみてください。

関連する問題