我有一个名为 DocLibrary 的文档库。在里面,我创建了几个文件夹。每个文件夹有3个其他文件夹。在里面,我存储了特定的文件。 示例:DocLibrary> NF1>通讯,其中DocLibrary是文档库,NF1是DocLibrary中的文件夹,Communications是NF1中的文件夹。
现在,我想将下载链接提供给Communications文件夹中按修改日期排序的特定文件。我面临着如何转到Communications文件夹然后选择文件名的问题。
我正在使用java脚本。
现在我正在使用以下代码。但我对此完全陌生,对如何接近的想法有限。请帮助。
function test1()
{
var context = new SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle('DocLibrary');
var query = SP.CamlQuery.createAllItemsQuery();
query.set_folderServerRelativeUrl('/DocLibrary/NF1/Communications/');
allItems = list.getItems(query);
alert('hi');
context.load(allItems);
context.executeQueryAsync(Function.createDelegate(this, this.success), Function.createDelegate(this, this.failed));
}
function success()
{
var fileUrls = '';
var ListEnumerator = this.allItems.getEnumerator();
while(ListEnumerator.moveNext())
{
var currentItem = ListEnumerator.get_current();
var _contentType = currentItem.get_contentType();
if(_contentType.get_name() != 'Folder')
{
var File = currentItem.get_file();
if(File != null)
{
fileUrls += File.get_serverRelativeUrl() + '\n';
}
}
}
alert(fileUrls);
}
function failed(sender, args) {
alert('failed. Message:' + args.get_message());
}
答案 0 :(得分:0)
由于您使用的是JavaScript,我建议您向SharePoint REST API发出GET
个请求,以获取所需的信息。
您只需向
发出请求即可访问您的文档库及其文件夹 http://siteUrl/_api/web/getfolderbyserverrelativeurl('Documents/NF1/Communications')/files?$orderby=TimeLastModified%20desc
如果您在浏览器中导航到上述网址,将siteUrl
替换为您的网站真实网址,您将获得XML格式的回复。
从JavaScript请求
请注意,此方法需要使用jQuery,否则您必须向服务器发送XMLHttpRequest
。
要从JavaScript发出请求,$.ajax()
非常简单。
$.ajax({
url: _spPageContextInfo.siteAbsoluteUrl + "_api/web/getfolderbyserverrelativeurl('Documents/NF1/Communications')/files?$orderby=TimeLastModified%20desc",
type: "GET",
headers: {
"accept": "application/json;odata=verbose",
},
success: function (result) {
//Do something with the result here!
$.each(result.d.results, function(i, item){
console.log("The URL to the file is: " + item.__metadata.uri);
});
},
error: function (error) {
//Ouch, an error occured with the request
//Don't forget to handle the error in some way!
}
});
这将返回文件夹中所有文件的数组,按字段TimeLastModified
排序,其中顶部索引上具有最新修改时间的文件。可以通过阵列中每个对象的__metadata.uri
属性访问每个文件的URL。
在上面的代码示例中,我使用jQuery $.each()
函数遍历所有文件,并将文件的URL打印到控制台。根据您要对网址执行的操作,您必须在那里编写自定义代码。
如果您想进一步探索REST API,可以参考MSDN - Files and folders REST API reference。
答案 1 :(得分:0)
一些建议
1)您可以构造仅返回文件并按修改日期排序的查询:
<View>
<Query>
<Where>
<Eq><FieldRef Name="FSObjType" /><Value Type="Integer">0</Value></Eq>
</Where>
<OrderBy>
<FieldRef Name="Modified" Ascending="FALSE" />
</OrderBy>
</Query>
</View>
2)从性能角度来看,由于您对文件属性感兴趣,您可以明确指定要检索的属性,例如:
context.load(items,'Include(File.ServerRelativeUrl)'); // retrieve File.ServerRelativeUrl
修改后的示例
function getFiles(listTitle,folderUrl,success,failed)
{
var context = SP.ClientContext.get_current();
var web = context.get_web();
var list = web.get_lists().getByTitle(listTitle);
var createItemsQuery = function(folderUrl){
var qry = new SP.CamlQuery();
qry.set_viewXml('<View><Query><Where><Eq><FieldRef Name="FSObjType" /><Value Type="Integer">0</Value></Eq></Where><OrderBy><FieldRef Name="Modified" Ascending="FALSE" /></OrderBy></Query></View>');
qry.set_folderServerRelativeUrl(folderUrl);
return qry;
};
var items = list.getItems(createItemsQuery(folderUrl));
context.load(items,'Include(File.ServerRelativeUrl)');
context.executeQueryAsync(
function(){
success(items)
},
failed);
}
用法
var listTitle = 'DocLibrary';
var folderUrl = '/DocLibrary/NF1/Communications'; //format: /[site]/[library]/[folder]
getFiles(listTitle,folderUrl,
function(items)
{
var fileUrls = [];
items.get_data().forEach(function(item){
var file = item.get_file();
fileUrls.push(file.get_serverRelativeUrl());
});
var result = fileUrls.join(',');
console.log(result);
},
function(sender, args) {
console.log('Message:' + args.get_message());
});