Sharepoint學習筆記—ECMAScript對象模型系列-- 5、使用ECMA操作列表對象(list)


   前面我們使用ECMCA script對象模型操作了Sharepoint 網站對象,這里我們來看看如何操作網站上的列表(List),操作列表List的方式與訪問網站對象類似,首先使用 ClientContext構造函數並傳遞 URL 或 URI 以返回特定的請求上下文。然后,可以使用 Web  類的 lists  屬性獲取網站中列表的集合。

一、創建一個List 

< script  type ="text/javascript" >
    
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 以及創建列表的日期和時間。

< script  type ="text/javascript" >

    
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異常。

< script  type ="text/javascript" >
    
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 方法和操作。

< script  type ="text/javascript" >
    
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”的所有字段的標題和內部名稱。 

< script  type ="text/javascript" >

    
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

<script language="ecmascript" type="text/ecmascript">
         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( thisthis.onQuerySucceededListContentTypes), Function.createDelegate( thisthis.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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM