从 CSOM 中的 SP.User 获取显示名称或登录名称

问题描述 投票:0回答:1

当我从文档库查询文件列表时,我试图获取 SP2010 中用户的显示名称或登录名(如果不可用)。 (我知道这个函数目前没有返回任何内容。)

getEvidenceDocuments = function (relativePath) {
    var clientContext = new SP.ClientContext("/documents");
    var oList = clientContext.get_web().get_lists().getByTitle('Documents');
    var query = SP.CamlQuery.createAllItemsQuery();
    query.set_folderServerRelativeUrl(relativePath);
    var allItems = oList.getItems(query);
    clientContext.load(allItems, 'Include(Title, ContentType, File, Author, Editor)');
    clientContext.executeQueryAsync(Function.createDelegate(this, function () {
        var ListEnumerator = allItems.getEnumerator();
        var fileCollection = [];
        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) {
                    var obj = {
                        title: File.get_title(),
                        name: File.get_name(),
                        author: clientContext.load(File.get_author(), "Title"),
                        modifiedBy: File.get_modifiedBy(),
                        modified: File.get_timeLastModified()
                    };

                    fileCollection.push(obj);
                }
            }
        }
        console.log(fileCollection);
    }), Function.createDelegate(this, function () { console.log("ohoh"); }));
};

关键部分本质上是这样的:

var obj = {
    title: File.get_title(),
    name: File.get_name(),
    author: clientContext.load(File.get_author(), "Title"),
    modifiedBy: File.get_modifiedBy(),
    modified: File.get_timeLastModified()
};

File.get_modifiedBy()
返回 SP.User 对象,而
clientContext.load(File.get_author(), "Title")
返回未定义。

由于我不知道执行此操作的正确方法,因此我围绕此页面构建我的方法:https://social.technet.microsoft.com/wiki/contents/articles/22156.sharepoint-2010-a-使用 ecma-script.aspx 的 spfile 操作的完整列表

将author和modifiedBy解析为其各自的SP.User属性的正确方法是什么。

javascript sharepoint sharepoint-2010
1个回答
0
投票

当前

Author
Editor
ListItem
上可用,而不是该列表项的
SPFile
对象。使用
SPListItem.get_Item("propertyName")
后接
get_lookupValue()
即可达到目的。

以下代码片段检索所有必需字段并返回一个延迟对象,以便可以链接调用:

getEvidenceDocuments = function (relativePath) {
    var deferred = $.Deferred();
    var clientContext = new SP.ClientContext("/documents");
    var oList = clientContext.get_web().get_lists().getByTitle('Documents');
    
    var query = SP.CamlQuery.createAllItemsQuery();
    query.set_folderServerRelativeUrl(relativePath);
    
    var allItems = oList.getItems(query);
    clientContext.load(allItems, 
        'Include(Id, Title, ContentType, File, Author, Editor)');
    
    clientContext.executeQueryAsync(
        Function.createDelegate(this, function () {
            var ListEnumerator = allItems.getEnumerator();
            var fileCollection = [];
            
            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) {
                        var obj = {
                            id        : currentItem.get_id(),
                            title     : File.get_title(),
                            name      : File.get_name(),
                            createdBy : currentItem.get_item("Author").get_lookupValue(),
                            created   : File.get_timeCreated(),
                            // author : clientContext.load(File.get_author(), "Title"),
                            modifiedBy: currentItem.get_item("Editor").get_lookupValue(),
                            modified  : File.get_timeLastModified()
                        };
                        
                        fileCollection.push(obj);
                    }
                }
            }
            
            deferred.resolve(fileCollection);
        }), 
        Function.createDelegate(this, function () {deferred.reject(); })
    );
    
    return deferred.promise();
};
© www.soinside.com 2019 - 2024. All rights reserved.