前面我們使用ECMCA script對象模型操作了Sharepoint 網站對象,這里我們來看看如何操作網站上的列表(List),操作列表List的方式與訪問網站對象類似,首先使用 ClientContext構造函數並傳遞 URL 或 URI 以返回特定的請求上下文。然后,可以使用 Web 類的 lists 屬性獲取網站中列表的集合。
一、創建一個List
var currentcontext = null ;
var currentweb = null ;
function CreateList() {
currentcontext = new SP.ClientContext.get_current();
currentweb = currentcontext.get_web();
var ListInfo = new SP.ListCreationInformation();
var ItemInfo = new SP.ListItemCreationInformation();
ListInfo.set_title( ' List Created From ECMA Script ' );
ListInfo.set_templateType(SP.ListTemplateType.genericList);
this .createdList = currentweb.get_lists().add(ListInfo);
currentcontext.load(createdList, ' Title ' , ' Id ' );
currentcontext.executeQueryAsync(Function.createDelegate( this , this .ExecuteOnSuccessCreateList),
Function.createDelegate( this , this .ExecuteOnFailureCreateList));
}
function ExecuteOnSuccessCreateList(sender, args) {
alert( ' list title: ' + createdList.get_title() + ' \n ID ' + createdList.get_id());
}
function ExecuteOnFailureCreateList(sender, args) {
alert( ' request failed ' + args.get_message() + ' \n ' + args.get_stackTrace());
}
</ script >

二、檢索網站中所有列表的全部屬性
若要返回網站的所有列表,可通過 load(clientObject) 方法加載列表集合,然后調用 executeQueryAsync(succeededCallback, failedCallback) 。以下示例顯示網站的 URL 以及創建列表的日期和時間。
var siteUrl = ' / ' ;
function retrieveAllListProperties() {
var clientContext = new SP.ClientContext(siteUrl);
var oWebsite = clientContext.get_web();
this .collList = oWebsite.get_lists();
clientContext.load(collList);
clientContext.executeQueryAsync(Function.createDelegate( this , this .onQuerySucceededretrieveAllListProperties),
Function.createDelegate( this , this .onQueryFailedretrieveAllListProperties));
}
function onQuerySucceededretrieveAllListProperties() {
var listInfo = '' ;
var listEnumerator = collList.getEnumerator();
while (listEnumerator.moveNext()) {
var oList = listEnumerator.get_current();
listInfo += ' Title: ' + oList.get_title() + ' Created: ' + oList.get_created().toString() + ' \n ' ;
}
alert(listInfo);
}
function onQueryFailedretrieveAllListProperties(sender, args) {
alert( ' Request failed. ' + args.get_message() + ' \n ' + args.get_stackTrace());
}
</ script >
三、檢索列表的指定屬性
上面的示例返回網站中列表的所有屬性。若要減少客戶端和服務器之間不必要的數據傳輸,可以使用 LINQ 查詢表達式指定要返回的屬性。在 JavaScript 中,可以指定 Include 作為傳遞給 load(clientObject) 方法的查詢字符串的一部分,以便指定要返回的屬性。下面的示例使用該方法只返回集合中每個列表的標題和 ID ,由於在Include中只指定了Title與ID,如果嘗試顯示諸如ParentWebUrl 等內容,您將會收到 PropertyOrFieldNotInitializedException異常。
var siteUrlretrieveSpecificListProperties = ' / ' ;
function retrieveSpecificListProperties() {
var clientContext = new SP.ClientContext(siteUrlretrieveSpecificListProperties);
var oWebsite = clientContext.get_web();
this .collList = oWebsite.get_lists();
clientContext.load(collList, ' Include(Title, Id) ' );
clientContext.executeQueryAsync(Function.createDelegate( this , this .onQuerySucceededretrieveSpecificListProperties),
Function.createDelegate( this , this .onQueryFailedretrieveSpecificListProperties));
}
function onQuerySucceededretrieveSpecificListProperties() {
var listInfo = '' ;
var listEnumerator = collList.getEnumerator();
while (listEnumerator.moveNext()) {
var oList = listEnumerator.get_current();
listInfo += ' Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString() + ' \n ' ;
}
alert(listInfo);
}
function onQueryFailedretrieveSpecificListProperties(sender, args) {
alert( ' Request failed. ' + args.get_message() + ' \n ' + args.get_stackTrace());
}
</ script >
四、在集合中存儲檢索到的列表
我們還可以使用 loadQuery(clientObjectCollection, exp)方法而不是像上面使用的load(clientObject)方法。loadQuery方法用來在另一集合中存儲返回值,而上面使用的Load方法則是將返回值存儲在 lists屬性中。但是LoadQuery方法不支持托管對象模型使用的 LINQ 方法和操作。
var siteUrlToCollection = ' / ' ;
function retrieveSpecificListPropertiesToCollection() {
var clientContext = new SP.ClientContext(siteUrlToCollection);
var oWebsite = clientContext.get_web();
var collList = oWebsite.get_lists();
this .listInfoCollection = clientContext.loadQuery(collList, ' Include(Title, Id) ' );
clientContext.executeQueryAsync(Function.createDelegate( this , this .onQuerySucceededretrieveSpecificListPropertiesToCollection), Function.createDelegate( this , this .onQueryFailedretrieveSpecificListPropertiesToCollection));
}
function onQuerySucceededretrieveSpecificListPropertiesToCollection() {
var listInfo = '' ;
for ( var i = 0 ; i < this .listInfoCollection.length; i ++ ) {
var oList = this .listInfoCollection[i];
listInfo += ' Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString();
}
alert(listInfo.toString());
}
function onQueryFailedretrieveSpecificListPropertiesToCollection(sender, args) {
alert( ' Request failed. ' + args.get_message() + ' \n ' + args.get_stackTrace());
}
</ script >
五、檢索網站中的列表字段
我們可以將 Include 語句嵌套在 JavaScript 查詢中,以返回列表及其字段的元數據。該示例返回網站中所有列表的所有字段,並顯示其內部名稱包含字符串“name”的所有字段的標題和內部名稱。
var siteUrlListsAllFields = ' / ' ;
function retrieveAllListsAllFields() {
var clientContext = new SP.ClientContext(siteUrlListsAllFields);
var oWebsite = clientContext.get_web();
var rootWebsite = clientContext.get_site().get_rootWeb();
var collList = oWebsite.get_lists();
this .listInfoArray = clientContext.loadQuery(collList,
' Include(Title,Fields.Include(Title,InternalName)) ' );
clientContext.executeQueryAsync(Function.createDelegate( this , this .onQuerySucceededretrieveAllListsAllFields),
Function.createDelegate( this , this ._onQueryFailedretrieveAllListsAllFields));
}
function onQuerySucceededretrieveAllListsAllFields() {
var listInfo = '' ;
alert( " OK " );
for ( var i = 0 ; i < this .listInfoArray.length; i ++ ) {
var oList = this .listInfoArray[i];
var collField = oList.get_fields();
var fieldEnumerator = collField.getEnumerator();
while (fieldEnumerator.moveNext()) {
var oField = fieldEnumerator.get_current();
var regEx = new RegExp( ' name ' , ' ig ' );
if (regEx.test(oField.get_internalName())) {
listInfo += ' \nList: ' + oList.get_title() +
' \n\tField Title: ' + oField.get_title() +
' \n\tField Name: ' + oField.get_internalName();
}
}
}
alert(listInfo);
}
function _onQueryFailedretrieveAllListsAllFields(sender, args) {
alert( ' Request failed. ' + args.get_message() + ' \n ' + args.get_stackTrace());
}
</ script >
五、檢索列表的ContentType
我們可以使用如下代碼來獲取列表List的ContentTypes
var contentTypeCollection;
var listCollection;
var list;
function getListContentTypes() {
var clientContext = new SP.ClientContext.get_current();
if (clientContext != undefined && clientContext != null) {
var web = clientContext.get_web();
this.listCollection = web.get_lists();
this.list = listCollection.getByTitle("MyTestList");
this.contentTypeCollection = list.get_contentTypes();
clientContext.load( this.contentTypeCollection);
clientContext.executeQueryAsync(Function.createDelegate( this, this.onQuerySucceededListContentTypes), Function.createDelegate( this, this.onQueryFailedListContentTypes));
}
}
function onQuerySucceededListContentTypes() {
var contentType = 'List Content Types:\n '
var contentTypeEnumerator = this.contentTypeCollection.getEnumerator();
while (contentTypeEnumerator.moveNext()) {
var content = contentTypeEnumerator.get_current();
contentType += content.get_name() + '\n';
}
alert(contentType);
}
function onQueryFailedListContentTypes(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
</script>