为了账号安全,请及时绑定邮箱和手机立即绑定

从人员选取器获取值并将其添加到人员列中的列表中

从人员选取器获取值并将其添加到人员列中的列表中

哈士奇WWW 2022-08-18 16:27:50
我在我的SP16网站上有一个简单的JS表单,我在其中添加了这个标准的人员选择器:$(document).ready(function() {  initializePeoplePicker('pickerUAT');function initializePeoplePicker(peoplePickerElementId) {var schema = {};schema['PrincipalAccountType'] = 'User,DL,SecGroup,SPGroup';schema['SearchPrincipalSource'] = 15;schema['ResolvePrincipalSource'] = 15;schema['AllowMultipleValues'] = false;schema['MaximumEntitySuggestions'] = 50;schema['Width'] = '269px';this.SPClientPeoplePicker_InitStandaloneControlWrapper(peoplePickerElementId, null, schema);}});我能够从选取器中获取所选值(作为显示名称,电子邮件等),如下所示:function getEmailFromPeoplePicker(title) {var ppDiv = $("div[title='" + title + "']")[0];var peoplePicker = SPClientPeoplePicker.SPClientPeoplePickerDict.pickerUAT_TopSpan;var userList = peoplePicker.GetAllUserInfo();var userInfo = userList[0];var addThisUser;if(userInfo != null){addThisUser = userInfo.Key;}return addThisUser;}我有一个列表,我可以添加从其他表单域获取的其他值,通常是通过document.getElementById(“XXX”).value和这段代码:function addSubUser(addThisValue)  {var clientContext = new SP.ClientContext(siteurl);  var itemCreateInfo = new SP.ListItemCreationInformation();  var valueToAdd = addThisValue; var list = clientContext.get_web()  .get_lists()  .getByTitle("UAT");   this.oListItem = list.addItem(itemCreateInfo);  oListItem.set_item('userUAT', valueToAdd);  oListItem.update();  clientContext.load(oListItem);  clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));  }但是,此代码不适用于从人员选取器获取的值。控制台.log(typeof addThisUser)告诉我,我从选取器获得的值只是一个字符串,我是否正确地假设我不能简单地将字符串添加到人员/组列中?无论如何,我怎样才能让它工作?
查看完整描述

2 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

我认为您可以尝试使用两种不同的方法更新文件


作为查找提供用户的ID



    var LookupSingle = new SP.FieldLookupValue();  

    LookupSingle.set_lookupId(2);  // UserId

    oListItem.set_item('SomeLookupColumn', LookupSingle); 



作为单用户字段



    var singleUser = SP.FieldUserValue.fromUser('name surname');  

    oListItem.set_item('SomeSingleUserColumn', singleUser);  


查看完整回答
反对 回复 2022-08-18
?
手掌心

TA贡献1942条经验 获得超3个赞

我的本地 SharePoint 2016(多用户字段)中的示例测试脚本。


CustomPeoplePicker:

    <div id="peoplePickerDiv"></div>

    <input id="Button1" onclick="SaveItem()" type="button" value="button" />

    <script src="/_layouts/15/sp.runtime.js"></script>

    <script src="/_layouts/15/sp.js"></script>

    <script src="/_layouts/15/1033/strings.js"></script>

    <script src="/_layouts/15/clienttemplates.js"></script>

    <script src="/_layouts/15/clientforms.js"></script>

    <script src="/_layouts/15/clientpeoplepicker.js"></script>

    <script src="/_layouts/15/autofill.js"></script>

    <script src="_layouts/15/sp.core.js"></script>

    <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>

    <script type="text/javascript">

        $(document).ready(function () {

            SP.SOD.executeFunc('sp.js', 'SP.ClientContext', sharePointReady);

        })


        function sharePointReady() {

            context = new SP.ClientContext.get_current();

            web = context.get_web();

            var schema = {};

            schema['PrincipalAccountType'] = 'User,DL,SecGroup,SPGroup';

            schema['SearchPrincipalSource'] = 15;

            schema['ResolvePrincipalSource'] = 15;

            schema['AllowMultipleValues'] = true;

            schema['MaximumEntitySuggestions'] = 50;

            schema['Width'] = '280px';


            this.SPClientPeoplePicker_InitStandaloneControlWrapper('peoplePickerDiv', null, schema);

        }


        function SaveItem() {

            var ctx = new SP.ClientContext.get_current();

            var web = context.get_web();

            var list = web.get_lists().getByTitle("MyList");

            var listCreationInformation = new SP.ListItemCreationInformation();

            var listItem = list.addItem(listCreationInformation);

            var peoplePicker = SPClientPeoplePicker.SPClientPeoplePickerDict.peoplePickerDiv_TopSpan;

            // Get information about all users.

            var users = peoplePicker.GetAllUserInfo();

            // Get user keys.

            var keys = peoplePicker.GetAllUserKeys();

            var finalusers = new Array();

            for (var i = 0; i < users.length; i++) {

                var arryuser = users[i];

                finalusers.push(SP.FieldUserValue.fromUser(arryuser.Key));

            }

            listItem.set_item("Title", "Title");

            listItem.set_item("Requestor", finalusers);

            listItem.update();

            ctx.load(listItem);

            ctx.executeQueryAsync(

                Function.createDelegate(this, function () {

                    console.log(listItem);

                }),

                Function.createDelegate(this, function (sender, args) {

                    alert('Query failed. Error: ' + args.get_message());

                })

            );

        }

    </script>


查看完整回答
反对 回复 2022-08-18
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号