SharePointにJavaScriptでTickerを実装する - jQueryプラグイン化(MOSS Client) (1)
AJAX のために jQuery を使ったので、せっかくだから MOSS の WebService を処理する jQuery のプラグインとして作成してみた。
初めて作ってみたのでいろいろ恥ずかしいところがあるかもしれないけどそこはご愛敬。普段は JavaScript をいじらないのでちょっと楽しかった。現状では、ごく一部である下記のサービスに対応している。必要に応じていろいろ追加予定。もし利用される方がいれば各自の責任でご自由にどうぞ。それぞれの説明とかはまた明日以降〜。
Endpoint | Function |
---|---|
SiteData.asmx | GetWeb |
Lists.asxm | GetListItems GetListCollection |
Imaging.asmx | GetListItems ListPictureLibrary |
////////////////////////////////////////////////////////////////////////////////
// jQuery Plugin - MOSS Client (by Kz)
////////////////////////////////////////////////////////////////////////////////
// MOSS Clinet Common
var MOSS = MOSS || {
Imaging: {},
Lists: {},
SiteData: {}
};
jQuery.extend(MOSS, {
callSoapService: function(param) {
$.ajax({
type: 'POST',
url: param.url,
contentType: 'text/xml; charset=utf-8',
dataType: 'xml',
processData: false,
data: param.postData,
complete: function(data) {
if (param.callback) {
var fault = data.responseXml.selectSingleNode('/soap:Envelope/soap:Body/soap:Fault');
var error = null;
if (fault) {
error = {
code: fault.selectSingleNode('faultcode').text,
reason: fault.selectSingleNode('faultstring').text,
detail: fault.selectSingleNode('detail').text
};
}
param.callback(data, error);
}
},
beforeSend: function(req) {
req.setRequestHeader('Content-Length', param.postData.length);
req.setRequestHeader('SOAPAction', param.soapAction);
}
});
}
});
////////////////////////////////////////////////////////////////////////////////
// SiteData.asmx
jQuery.extend(MOSS.SiteData, {
servicePath: '/_vti_bin/SiteData.asmx',
getWeb: function(param) {
MOSS.callSoapService({
url: param.url ? param.url : this.servicePath,
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><GetWeb xmlns="http://schemas.microsoft.com/sharepoint/soap/" /></soap:Body></soap:Envelope>',
soapAction: 'http://schemas.microsoft.com/sharepoint/soap/GetWeb',
callback: function(data, error) {
if (!param.callback) {
return;
}
var xmlRes = data.responseXml.selectSingleNode('/soap:Envelope/soap:Body/GetWebResponse');
if (xmlRes) {
var xmlWM = xmlRes.selectSingleNode('sWebMetadata');
if (xmlWM) {
param.callback({
webMetadata: {
webID: xmlWM.selectSingleNode('WebID').text,
title: xmlWM.selectSingleNode('Title').text,
description: xmlWM.selectSingleNode('Description').text,
author: xmlWM.selectSingleNode('Author').text,
lastModified: xmlWM.selectSingleNode('LastModified').text
},
data: data,
error: error
});
return;
}
}
// Failed?
param.callback({ data: data, error: error });
}
});
}
});
////////////////////////////////////////////////////////////////////////////////
// Lists.asmx
jQuery.extend(MOSS.Lists, {
servicePath: '/_vti_bin/Lists.asmx',
getListCollection: function(param) {
MOSS.callSoapService({
url: param.url ? param.url : this.servicePath,
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><GetListCollection xmlns="http://schemas.microsoft.com/sharepoint/soap/" /></soap:Body></soap:Envelope>',
soapAction: 'http://schemas.microsoft.com/sharepoint/soap/GetListCollection',
callback: function(data, error) {
if (!param.callback) {
return;
}
var rows = data.responseXml.selectNodes('/soap:Envelope/soap:Body/GetListCollectionResponse/GetListCollectionResult/Lists/List');
var listArray = [];
for (var i = 0; i < rows.length; i++) {
listArray.push({
url: rows[i].getAttribute('DefaultViewUrl'),
id: rows[i].getAttribute('ID'),
title: rows[i].getAttribute('Title'),
descriptiopn: rows[i].getAttribute('Description')
});
}
param.callback({
lists: listArray,
rows: rows,
data: data,
error: error
});
}
});
},
getListItems: function(param) {
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>' + param.listName + '</listName>' +
(param.viewName ? ('<viewName>' + param.viewName + '</viewName>') : '') +
(param.query ? ('<query>' + param.query + '</query>') : '') +
(param.fields ? ('<viewFields>' + param.fields + '</viewFields>') : '') +
(param.rowLimit ? ('<rowLimit>' + param.rowLimit + '</rowLimit>') : '') +
(param.options ? ('<queryOptions>' + param.options + '</queryOptions>') : '') +
(param.webID ? ('<webID>' + param.webID + '</webID>') : '') +
'</GetListItems></soap:Body></soap:Envelope>';
MOSS.callSoapService({
url: param.url ? param.url : this.servicePath,
postData: postData,
soapAction: 'http://schemas.microsoft.com/sharepoint/soap/GetListItems',
callback: function(data, error) {
if (!param.callback) {
return;
}
param.callback({
rows: data.responseXml.selectNodes('/soap:Envelope/soap:Body/GetListItemsResponse/GetListItemsResult/listitems/rs:data/z:row'),
data: data,
error: error
});
}
});
}
});
////////////////////////////////////////////////////////////////////////////////
// Imaging.asmx
jQuery.extend(MOSS.Imaging, {
servicePath: '/_vti_bin/Imaging.asmx',
listPictureLibrary: function(param) {
MOSS.callSoapService({
url: param.url ? param.url : this.servicePath,
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><ListPictureLibrary xmlns="http://schemas.microsoft.com/sharepoint/soap/ois/" /></soap:Body></soap:Envelope>',
soapAction: 'http://schemas.microsoft.com/sharepoint/soap/ois/ListPictureLibrary',
callback: function(data, error) {
if (!param.callback) {
return;
}
var rows = data.responseXml.selectNodes('/soap:Envelope/soap:Body/ListPictureLibraryResponse/ListPictureLibraryResult/PictLib/Library');
var listArray = [];
for (var i = 0; i < rows.length; i++) {
listArray.push({
url: rows[i].getAttribute('url'),
id: rows[i].getAttribute('guid'),
title: rows[i].getAttribute('title'),
name: rows[i].getAttribute('name')
});
}
param.callback({
lists: listArray,
rows: rows,
data: data,
error: error
});
}
});
},
getListItems: function(param) {
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/ois/">' +
'<strListName>' + param.listName + '</strListName>' +
(param.folder ? ('<strFolder>' + param.folder + '</strFolder>') : '') +
'</GetListItems></soap:Body></soap:Envelope>';
MOSS.callSoapService({
url: param.url ? param.url : this.servicePath,
postData: postData,
soapAction: 'http://schemas.microsoft.com/sharepoint/soap/ois/GetListItems',
callback: function(data, error) {
if (!param.callback) {
return;
}
param.callback({
rows: data.responseXml.selectNodes('/soap:Envelope/soap:Body/GetListItemsResponse/GetListItemsResult/Library/z:row'),
data: data,
error: error
});
}
});
}
});