最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Programmatically access files in Document set in sharepoint using Javascript - Stack Overflow

programmeradmin1浏览0评论

I want to access files in a particular document set in a document library .

So far i was able to get the particular document set name and ID using JSOM as below . How to read all the files inside the document set

<script type="text/javascript" src="//ajax.aspnetcdn/ajax/4.0/1/MicrosoftAjax.js"></script>
<script type="text/javascript" src="_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="_layouts/15/sp.js"></script>
 
<script type="text/javascript">
   ExecuteOrDelayUntilScriptLoaded(MainFunction, "sp.js");
 
    function MainFunction() {
        var clientContext = new SP.ClientContext.get_current();
        var oList = clientContext.get_web().get_lists().getByTitle('Planner Session');
 
        var camlQuery = new SP.CamlQuery(); //initiate the query object
 
        camlQuery.set_viewXml('<View><Query><Where><Lt><FieldRef Name="ID" /><Value Type="Counter">3</Value></Lt></Where><OrderBy><FieldRef Name="ID" Ascending="FALSE"/></OrderBy></Query><RowLimit>1</RowLimit></View>');
 
        this.collListItem = oList.getItems(camlQuery);
 
        clientContext.load(collListItem);
        clientContext.executeQueryAsync(
            Function.createDelegate(this, this.onQuerySucceeded),
            Function.createDelegate(this, this.onQueryFailed)
        );
    }
 
    function onQuerySucceeded(sender, args) {
        var DocSet = "";
        var listItemEnum = collListItem.getEnumerator();
 
        while (listItemEnum.moveNext()) {
            var oListItem = listItemEnum.get_current();
            DocSet += '\n\nID: ' + oListItem.get_id() + '\nName: ' + oListItem.get_item('FileLeafRef');
        }
 // Here i would like to get the file inside the documentSet 
        alert(DocSet.toString());
    }
 
    function onQueryFailed(sender, args) {
        alert('Request failed. ' + args.get_message() +
            '\n' + args.get_stackTrace());
    }
</script>​
 
<input type="button" value="Get Products" onclick="MainFunction()"/>

I want to access files in a particular document set in a document library .

So far i was able to get the particular document set name and ID using JSOM as below . How to read all the files inside the document set

<script type="text/javascript" src="//ajax.aspnetcdn./ajax/4.0/1/MicrosoftAjax.js"></script>
<script type="text/javascript" src="_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="_layouts/15/sp.js"></script>
 
<script type="text/javascript">
   ExecuteOrDelayUntilScriptLoaded(MainFunction, "sp.js");
 
    function MainFunction() {
        var clientContext = new SP.ClientContext.get_current();
        var oList = clientContext.get_web().get_lists().getByTitle('Planner Session');
 
        var camlQuery = new SP.CamlQuery(); //initiate the query object
 
        camlQuery.set_viewXml('<View><Query><Where><Lt><FieldRef Name="ID" /><Value Type="Counter">3</Value></Lt></Where><OrderBy><FieldRef Name="ID" Ascending="FALSE"/></OrderBy></Query><RowLimit>1</RowLimit></View>');
 
        this.collListItem = oList.getItems(camlQuery);
 
        clientContext.load(collListItem);
        clientContext.executeQueryAsync(
            Function.createDelegate(this, this.onQuerySucceeded),
            Function.createDelegate(this, this.onQueryFailed)
        );
    }
 
    function onQuerySucceeded(sender, args) {
        var DocSet = "";
        var listItemEnum = collListItem.getEnumerator();
 
        while (listItemEnum.moveNext()) {
            var oListItem = listItemEnum.get_current();
            DocSet += '\n\nID: ' + oListItem.get_id() + '\nName: ' + oListItem.get_item('FileLeafRef');
        }
 // Here i would like to get the file inside the documentSet 
        alert(DocSet.toString());
    }
 
    function onQueryFailed(sender, args) {
        alert('Request failed. ' + args.get_message() +
            '\n' + args.get_stackTrace());
    }
</script>​
 
<input type="button" value="Get Products" onclick="MainFunction()"/>

Share Improve this question asked Apr 5, 2015 at 20:57 user3476088user3476088 751 gold badge3 silver badges14 bronze badges 1
  • Please find the plete code which does the following 1. Gets the required docset based on my conditions 2. gets all the files in the document set by checking the value in the custom column – user3476088 Commented Apr 7, 2015 at 5:40
Add a ment  | 

2 Answers 2

Reset to default 2

How to get files of Document Set via SharePoint CSOM

Assume the following structure:

Documents (library)
    |
    2013 (Document set)

Query based approach

The following example demonstrates how to return Files located in Document Set using CAML query:

function getListItems(listTitle,folderUrl,success,error)
{
   var ctx = SP.ClientContext.get_current();
   var web = ctx.get_web();
   var list = web.get_lists().getByTitle(listTitle);
   var qry = SP.CamlQuery.createAllItemsQuery();
   qry.set_folderServerRelativeUrl(folderUrl);
   var items = list.getItems(qry);
   ctx.load(items,'Include(File)');
   ctx.executeQueryAsync(
      function() {
          success(items); 
      },
      error);
}

Key points:

  • SP.CamlQuery.folderServerRelativeUrl property is used to return only files located under specific url

Usage

var listTitle = 'Documents';
var docSetUrl = '/Documents/2013';  
getListItems(listTitle,docSetUrl, 
     function(items){
        for(var i = 0; i < items.get_count();i++) {
            var file = items.get_item(i).get_file();
            console.log(file.get_title());
        }
     },
     function logError(sender,args) 
     {
        console.log(args.get_message());
     });

Using SP.Web.getFolderByServerRelativeUrl method

Use SP.Web.getFolderByServerRelativeUrl Method to get Document Set object located at the specified server-relative URL and then SP.Folder.files property to gets the collection of all files contained in the Document Set

Complete example:

function getFiles(folderUrl,success,error)
{
    var ctx = SP.ClientContext.get_current();
    var files = ctx.get_web().getFolderByServerRelativeUrl(folderUrl).get_files();
    ctx.load(files);
    ctx.executeQueryAsync(
      function() {
          success(files); 
      },
      error);
}

Usage

var docSetUrl = '/Documents/2013';  //<-- '2013'
getFiles(docSetUrl, 
     function(files){
        for(var i = 0; i < files.get_count();i++) {
            var file = files.get_item(i);
            console.log(file.get_title());
        }
     },
     function logError(sender,args) 
     {
        console.log(args.get_message());
     });

Please find the plete code which does the following 1. Gets the required docset based on my conditions 2. gets all the files in that particular document set by checking the value in the custom column

<script type="text/javascript" src="//ajax.aspnetcdn./ajax/4.0/1/MicrosoftAjax.js"></script>
<script type="text/javascript" src="_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="_layouts/15/sp.js"></script>
 
<script type="text/javascript">
   ExecuteOrDelayUntilScriptLoaded(MainFunction, "sp.js");
 
    function MainFunction() {
	var currentListID = getQueryStringValue("List");
	
        var clientContext = new SP.ClientContext.get_current();

	this.ListId = "{" + currentListID + "}";
	var oList = clientContext.get_web().get_lists().getById(ListId);
 
        var camlQuery = new SP.CamlQuery(); //initiate the query object
		var currentDocSetID = getQueryStringValue("ID");
        camlQuery.set_viewXml('<View><Query><Where><Lt><FieldRef Name="ID" /><Value Type="Counter">' + currentDocSetID + '</Value></Lt></Where><OrderBy><FieldRef Name="ID" Ascending="FALSE"/></OrderBy></Query><RowLimit>1</RowLimit></View>');
 
        this.collListItem = oList.getItems(camlQuery);
 
        clientContext.load(collListItem);
        clientContext.executeQueryAsync(
            Function.createDelegate(this, this.onQuerySucceeded),
            Function.createDelegate(this, this.onQueryFailed)
        );
    }
 
    function onQuerySucceeded(sender, args) {
        var DocSet = "";
        var listItemEnum = collListItem.getEnumerator();
 
        while (listItemEnum.moveNext()) {
            var oListItem = listItemEnum.get_current();
            DocSet += oListItem.get_item('FileLeafRef');
        }
		// Here i would like to get the file inside the documentSet 
       // alert(DocSet.toString());

		var fsoType = oListItem.get_fileSystemObjectType(); 
        
        if(oListItem.FileSystemObjectType == SP.FileSystemObjectType.Folder)
		{
           
		//var folderUrl =  "/" + listName + "/" + DocSet.toString();

		var RawFolderUrl = getQueryStringValue("RootFolder");

		var pos = RawFolderUrl.lastIndexOf('/');

		var folderUrl = RawFolderUrl.substring(0,pos) + "/" + DocSet.toString();

		GetFilesFromFolder(folderUrl);

		}
		
    }
	
	
    var allItems;
    function GetFilesFromFolder(folderUrl)
    {
        var context = new SP.ClientContext.get_current();
        var web = context.get_web();
        var list = web.get_lists().getById(ListId);
        // Use createAllItemsQuery to get items inside subfolders as well. Otherwise use new SP.CamlQuery() to get items from a single folder only
        var query = SP.CamlQuery.createAllItemsQuery();
        query.set_folderServerRelativeUrl(folderUrl);
        allItems = list.getItems(query);
          context.load(allItems, 'Include(File, FileSystemObjectType,Document_x0020_Type,Title)');
        context.executeQueryAsync(Function.createDelegate(this, this.OnSuccess), Function.createDelegate(this, this.OnFailure));
    }
    function OnSuccess()
    {                                              
        var listItemEnumerator = allItems.getEnumerator();
        while(listItemEnumerator.moveNext())
        {
            var currentItem = listItemEnumerator.get_current();                                                                                                                     
            if(currentItem.get_fileSystemObjectType() == "0")
            {
                var file = currentItem.get_file();
                if(file != null && currentItem.get_item("Document_x0020_Type") == "03. Minutes")
                {
                   // alert('File Name: ' + file.get_name() + '\n' + 'File Url: ' + file.get_serverRelativeUrl());  
 		   // alert(currentItem.get_item("Title"));   
 		    var link = document.getElementById("prvMinutes");
  	            link.href= file.get_serverRelativeUrl();  
                   // link.innerHTML = currentItem.get_item("Title");                                                     
		     link.innerHTML = file.get_name();
                }
		
            }
        }                                              
    }


    function OnFailure(sender, args) {
        alert("Failed. Message:" + args.get_message());
    }
 
    function onQueryFailed(sender, args) {
        alert('Request failed. ' + args.get_message() +
            '\n' + args.get_stackTrace());
    }

	function getQueryStringValue (key) {  
  return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace

(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));  
}
</script>
<a id="prvMinutes" href="#" target="_blank"> </a> 

发布评论

评论列表(0)

  1. 暂无评论