【问题标题】:How to retrieve Sharepoint 2010 list item permissions using Javascript Client Object Model如何使用 Javascript 客户端对象模型检索 Sharepoint 2010 列表项权限
【发布时间】:2015-04-08 15:02:42
【问题描述】:

我在 Sharepoint 中检查列表项权限的功能似乎不起作用。它被放置在 Sharepoint 2010 站点上的 aspx 文件中。尝试运行它时,我在下面收到一条错误消息。有谁知道应该怎么做?我在 C# 中找到了大量相同函数的示例,但在 Javascript 中找不到任何内容。谢谢!

function checkPermissions(){
var ctx = new SP.ClientContext.get_current();
var oBooksList=ctx.get_web().get_lists().getByTitle('test Repository');
var listItem=oBooksList.getItemById(2);


//ctx.load(listItem.get_roleAssignments());
ctx.load(listItem, 'RoleAssignments');
ctx.executeQueryAsync(
    Function.createDelegate(this, this.onSucceededCallback),
    Function.createDelegate(this, this.onFailedCallback));

}
function onSucceededCallback(sender, args){
    alert('it worked');
}

错误信息:

SCRIPT5007: Unable to get value of the property 'apply': object is null or undefined 

【问题讨论】:

  • 我唯一能看到的......(除非它是故意遗漏的)是你的代码中没有onFailedCallback 函数。这会导致类似于它调用Function.prototype.applyonFailedCallback.apply 完成后。
  • 感谢 Michael,添加 onFailedCallback 函数后即可使用。但是我在检索回调数据时遇到了困难,所以我无法检查返回的数据是否正确。有什么想法吗?
  • 如果我没记错的话,失败回调只有 1 个参数,那就是错误。我认为 error.get_message() 中有错误消息
  • 其实有2个..msdn.microsoft.com/en-us/library/office/…function onQueryFailed(sender, args) { alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); }
  • 回调运行成功,因为 onSucceededCallback 已被调用。我查看了在 args 中返回的对象,它没有权限信息。所以看起来我的初始查询有问题....

标签: javascript sharepoint sharepoint-2010 csom


【解决方案1】:

这样的事情应该会有所帮助....

未经测试

function checkPermissions(){
    var ctx = new SP.ClientContext.get_current();
    var oBooksList = ctx.get_web().get_lists().getByTitle('test Repository');
    var listItem = oBooksList.getItemById(2);
    var roles = listItem.get_roleAssignments();

    ctx.load(roles);
    ctx.executeQueryAsync(
        // success
        function (sender, args){
            var roleInfo = '';
            var roleEnumerator = roles.getEnumerator();
            // enumerate the roles
            while (roleEnumerator.moveNext()) {
                var role = roleEnumerator.get_current();
                var principal = role.get_member();
                // get the principal
                ctx.load(principal);
                ctx.executeQueryAsync(
                    // success
                    function (sender, args){
                        // alert the title
                        alert(principal.get_title());
                    }, 
                    // failure
                    function (sender, args){
                        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); 
                    });
            }
        }, 
        // failure
        function (sender, args){
            alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace()); 
        });

}

【讨论】:

  • while-loop 中有一个小的范围问题,将var principal 更改为let principal 应该可以解决这个问题。但无论如何都是一个很好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多