SharePointにJavaScriptでTickerを実装する - WebService の呼び出し(1)
SOAPメソッドの確認
http://
POST /_vti_bin/Lists.asmx HTTP/1.1
Host:
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://schemas.microsoft.com/sharepoint/soap/GetListItems"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>string</listName>
<viewName>string</viewName>
<query>
<xsd:schema>schema</xsd:schema>xml</query>
<viewFields>
<xsd:schema>schema</xsd:schema>xml</viewFields>
<rowLimit>string</rowLimit>
<queryOptions>
<xsd:schema>schema</xsd:schema>xml</queryOptions>
<webID>string</webID>
</GetListItems>
</soap:Body>
</soap:Envelope>
これを元に、MSDNのLists.GetListItems を参考にしながら必要な値を埋めていけばいいみたい。
引数
詳細はMSDNのヘルプを見るとして、簡単にまとめれば…
引数名 | 解説 | |
---|---|---|
listName | 必須 | 取得するリストの表示名か GUID |
viewName | 任意 | 指定しなければ既定のビューになる、GUID で指定 |
query | 任意 | リストに対する検索クエリ(SQL の Where 句のようなモノ) |
viewFields | 任意 | 取得したいフィールド指定 |
rowLimit | 任意 | 取得するレコード数、指定した場合は既定のビューの設定より優先される |
queryOptions | 任意 | いろいろオプション設定が可能 |
webID | 任意 | 親Webサイトの GUID、指定しなくてもいいらしい |
これに従えば最小のリクエストは
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}</listName>
</GetListItems>
</soap:Body>
</soap:Envelope>;
かな?
XHTMLRequest
素でXMLHttpRequestを呼ぶのはちょっと嫌なので jQuery を用いて上のデータをポスト。とりあえず下記のを実行するとうまくいったヽ(´ー`)ノ
次のステップはとりあえずで書いたソースの見直しと各種パラメータの検討とかかな
ソース(JavaScript)
var postData = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">' +
'<listName>{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}</listName></GetListItems></soap:Body></soap:Envelope>';
$.ajax({
type: 'POST',
url: '/_vti_bin/Lists.asmx',
contentType: 'text/xml; charset=utf-8',
dataType: 'xml',
processData: false,
data: postData,
complete: function( data ) {
document.body.innerText = data.responseText;
},
beforeSend: function(req) {
req.setRequestHeader('Content-Length', postData.length);
req.setRequestHeader('SOAPAction', 'http://schemas.microsoft.com/sharepoint/soap/GetListItems');
}
});
結果
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<GetListItemsResult>
<listitems xmlns:s='uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' xmlns:dt='uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'>
<rs:data ItemCount="69">
<z:row ows_Title='*********' (略) />
(略)
</rs:data>
</listitems>
</GetListItemsResult>
</GetListItemsResponse>
</soap:Body>
</soap:Envelope>