2010-11-22 15 views
5

sharePointサイトの特定のリストに対してすべての表示可能な列(非表示== false)を取得したいと考えていますが、SharePointWebService.Lists.GetList(listName)を調べようとしましたが、 List WebServiceで提供されているメソッドもチェックし、新しいものもチェックしていません。SharePointリストを表示するC#を使用してWebサービスから名前を取得

アドバイスをしてください。

答えて

5

あなたは、リストビューのスキーマを取得するリストWebサービスのGetListAndView方法を使用することができます。

viewNameパラメータを空のままにしておくと、ドキュメントから、デフォルトのビューが返されます。次に、ノードをフィールドのリストとして読み取ることができます。あなたが持っている必要がありますように

XmlNode result = webService.GetListAndView("My Pictures", string.Empty); 

XmlNamespaceManager nsmgr = new XmlNamespaceManager(result.OwnerDocument.NameTable); 
nsmgr.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/"); 

string xpathQuery = "sp:View/sp:ViewFields/sp:FieldRef"; 
XmlNodeList nodes = result.SelectNodes(xpathQuery, nsmgr); 

for (int i = 0; i < nodes.Count; i++) 
{ 
    Console.WriteLine(nodes[i].Attributes["Name"].Value); 
} 

はルックス:

*編集*

が返されたXMLを照会するXPathを使用してターンは、私が思ったより...ここに私が思い付いたものですタフでしたXmlNamespaceManagerそれ以外の場合、クエリは常に値を返しません。名前空間の指定に関する何か... a good referenceです。

+0

は面白そうだ、私はできるだけ早くそれを試してみるだろうと結果を投稿する –

+0

ViewFieldsフィールドの名前を返すので、名前を表示するためにフィールドごとに名前を再設定しなければならなかった。 そして2番目の問題はViewFieldsそのリストの共有ポイントのデフォルトビューに表示されているすべてのフィールドは表示されません(リストがピクチャリストの場合)。何か案は? –

+0

私はFields、System.Xml.XmlNode list = SPListWebService.GetListAndView(xmlnode.Attributes ["Title"]。Value、string.Empty)を取得しようとしました。 System.Xml.XmlNodeList visibleColumns = list.SelectNodes( "View/ViewFields/FieldRef"); ...どこが間違っていましたか? –

1

GetList()メソッドは、リストのフィールド(列)定義を含むCAMLフラグメントを返します。あなたはXPath expressionをしようとする場合があります:

XmlNode list = yourListService.GetList("yourListName"); 
XmlNodeList visibleColumns 
    = list.SelectNodes("Fields/Field[not(@Hidden) or @Hidden='FALSE']"); 
+0

代わりにコンテンツIDを取得するためにGetListContentTypesAsync()を使用して、特定のContentTypeGetListContentTypeAsync()を使用して取得し、それは、SharePointリスト内のすべての表示可能な列が含まれてXMLを返します。 Hidden = "TRUE"という属性がないことに気付きました:S私は質問を言い換えます。リストにあるユーザーに表示されるすべての列を、sharePointサイトを通じてリストを開くには、どうすれば読むことができますか? –

+0

@Rami Shareef:あなたはリストのデフォルトビューを意味しますか? –

+0

@Kit:正確には、sharePointサイトのデフォルトビュー。 –

1

私は上記のコードを使用しましたが、長い検索の後に、sharepointリストからすべてまたはカスタムの列を取得するソリューションが見つかりました。そのためのコードは、ソリューションは非常に簡単です。..

Custom Columns or ALL Columns

+1

孤独なリンクはそれ自体無意味であり、将来的にはターゲットリソースが生きているとは保証されていないので、[貧弱な答えとみなされます](http://stackoverflow.com/faq#deletion)です。 [こちらがこちらの回答の必須部分を含めることが望ましい](http://meta.stackexchange.com/q/8259)、参照のためのリンクを提供する。 – j0k

0

に共有されています。 GetList()または同様の機能を使用するのは間違った方法です。私は「リスト」InnerXmlプロパティと私を見てきた

var Contents = await soapListClient.GetListContentTypesAsync(list.Title, "0x01"); // 0x01 is kind of a root element for sharepoint. 
String ContentID = Contents.Body.GetListContentTypesResult.Descendants().FirstOrDefault().Attribute("ID").Value.ToString(); 
var ContentType = await soapListClient.GetListContentTypeAsync(list.Title, ContentID); 
XElement xmll = XElement.Parse(ContentType.Body.GetListContentTypeResult.ToString()); 
関連する問題