网站开发主要技术,wordpress最大上传,社交网站 源码,塘下做网站看到网上不少人遇到过这种类似的错误#xff0c;而产生这种错误的原因也有多种#xff0c;我产生此错误的背景是在试图通过ECMAscript对象模型把一个User添加到某个指定的Group中时遇到的。 问题1.当我试图把一个User添加到Sharepoint的某个指定的Group#xff0c;… 看到网上不少人遇到过这种类似的错误而产生这种错误的原因也有多种我产生此错误的背景是在试图通过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(helpstar.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(this, this.onQuerySucceededaddUserToSharePointGroup), Function.createDelegate(this, this.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(helpstar.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(this, this.onQuerySucceededaddUserToSharePointGroup), Function.createDelegate(this, this.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的右边你可以看到此选项请手工将其停止然后重启服务器。 需要指明的是此处我只列出了上述两种解决思路如果上面的情况均未解决你遇到的问题你就需要针对你自己的特定情况捕获可能的相关错误信息来解决问题。