Sharepoint学习笔记—error处理-- The user does not exist or is not unique.

   看到网上不少人遇到过这种类似的错误,而产生这种错误的原因也有多种,我产生此错误的背景是在试图通过ECMAscript对象模型把一个User添加到某个指定的Group中时遇到的。
        

   问题1.当我试图把一个User添加到Sharepoint的某个指定的Group,而这个User已经在Site Collection中存在,在此背景下我得到此错误信息。
   问题2.如果我试图把一个在Site Collection中不存在,而在AD中存在的User添加到Sharepoint的某个指定Group中时,这种操作是肯定不能成功的。因为微软的MSDN中明确指出了只能添加已经在Site Collection中存在的AD Users。
    我的解决步骤如下:
一、检查关于用户设置信息的代码是否有问题。
    我原来的代码如下:   

function addUserToSharePointGroup(groupID) {

         // var clientContext = new SP.ClientContext(siteUrl);
         var clientContext =  new SP.ClientContext.get_current();
         var collGroup = clientContext.get_web().get_siteGroups();
         var oGroup = collGroup.getById(groupID);
         var userCreationInfo =  new SP.UserCreationInformation();
        userCreationInfo.set_email('help@star.com.cn');
        userCreationInfo.set_loginName('help');
        userCreationInfo.set_title('help');
         this.oUser = oGroup.get_users().add(userCreationInfo);   // add user into group

         var userInfo = '\nUser: ' + oUser.get_title() +
            '\nEmail: ' + oUser.get_email() +
            '\nLogin Name: ' + oUser.get_loginName();

        alert(userInfo);
        clientContext.load(oUser);
        clientContext.executeQueryAsync(Function.createDelegate( thisthis.onQuerySucceededaddUserToSharePointGroup),
        Function.createDelegate( thisthis.onQueryFailedaddUserToSharePointGroup));
    }

     function onQuerySucceededaddUserToSharePointGroup() {

        alert( this.oUser.get_title() + " added.");
    }

     function onQueryFailedaddUserToSharePointGroup(sender, args) {

        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }

    此代码存在问题主要在userCreateInfo代码:

    1、set_loginName设置项应该加入此用户所在的域 DOMAIN 
    2、DOMAIN后面应该用"\\",否则在实际生成的User时就会把DOMAIN与User直接连接起来(如:DOMAINuser),这样的用户当然在AD中是不存在的
   因此,在代码设置中,针对User的Information应该符合真正存在的那个User在AD Account中的设置情况,所以在上述代码中你可以看到我加入了一个alert来显示设置的信息,便于你在查错时与AD中此user的对应信息进行比较。

  针对上面的问题修改后的代码如下:

function addUserToSharePointGroup(groupID) {

         // var clientContext = new SP.ClientContext(siteUrl);
         var clientContext =  new SP.ClientContext.get_current();
         var collGroup = clientContext.get_web().get_siteGroups();
         var oGroup = collGroup.getById(groupID);
         var userCreationInfo =  new SP.UserCreationInformation();
        userCreationInfo.set_email('help@star.com.cn');
        userCreationInfo.set_loginName('STAR\\help');
        userCreationInfo.set_title('help');
         this.oUser = oGroup.get_users().add(userCreationInfo);   // add user into group

         var userInfo = '\nUser: ' + oUser.get_title() +
            '\nEmail: ' + oUser.get_email() +
            '\nLogin Name: ' + oUser.get_loginName();

        alert(userInfo);
        clientContext.load(oUser);
        clientContext.executeQueryAsync(Function.createDelegate( thisthis.onQuerySucceededaddUserToSharePointGroup),
        Function.createDelegate( thisthis.onQueryFailedaddUserToSharePointGroup));
    }

     function onQuerySucceededaddUserToSharePointGroup() {

        alert( this.oUser.get_title() + " added.");
    }

     function onQueryFailedaddUserToSharePointGroup(sender, args) {

        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
    }

 

 二、检查Windows Server的 Domain member: Digitally encrypt or sign secure channel data (always) 安全设置项。
    如果上面的排错没有解决The user does not exist or is not unique报错,那么就进入这一步进行偿试。

    由于我的开发环境是Server 2008 R2,认证方式采用的是Kerberos(据说这点很重要,因为如果采用的是windows NTLM方式,则不会存在Application与AD环境的信息沟通问题),据说Windows Server 2008 (或 R2)中有某个Feature不支持Sharepoint上运行的Application,由此可能会造成AD信息交换出问题。
    解决的办法就是设置Domain member: Digitally encrypt or sign secure channel data (always) 这个安全项。这个选项默认是开启的,我们需要手工停止它。方法是在服务器上 Start -> Run -> type gpedit.msc.
进行设置界面后,依序打开
Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> Security Options.在Security Options的右边你可以看到此选项,请手工将其停止,然后重启服务器。

 

  需要指明的是,此处我只列出了上述两种解决思路,如果上面的情况均未解决你遇到的问题,你就需要针对你自己的特定情况,捕获可能的相关错误信息来解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值