在人员编辑器中显示共享点人员/组字段列表的值

Posted

技术标签:

【中文标题】在人员编辑器中显示共享点人员/组字段列表的值【英文标题】:Display sharepoint people/group field list's value in people editor 【发布时间】:2012-11-20 22:12:03 【问题描述】:

我想在页面加载时在人员编辑器(Web 部件)中显示共享点人员/组值的值。这是我用来获取 Web 部件中显示的值的代码

  if(SPContext .Current .ListItem .ID >= 1)
        using (SPSite site = new SPSite("sitename"))
        
            using (SPWeb web = site.OpenWeb())
            
                var id = SPContext.Current.ListItem.ID;
                SPList lists = web.Lists["DDClist"];
                SPListItem item = lists.GetItemById(id);

                

                    string test = Convert.ToString(item["Project No"]);
                    tb_pno.Text = test;
                    string test2 = Convert.ToString(item["Project Title"]);
                    tb_pname.Text = test2;
                    string test3 = Convert.ToString(item["DDC No"]);
                    tb_idcno.Text = test3;
                    string test4 = Convert.ToString(item["Date In"]);
                    TextBox3.Text = test4;

                
            
        

有没有办法用人物编辑器做同样的事情?

【问题讨论】:

【参考方案1】:

这有点棘手;当我以前必须这样做时,我使用以下方法从字段中获取 SPUser 对象:

SPUser singleUser = new SPFieldUserValue(
    item.Web, item["Single User"] as string).User;

SPUser[] multipleUsers = ((SPFieldUserValueCollection)item["MultipleUsers"])
    .Cast<SPFieldUserValue>().Select(f => f.User);

我不确定为什么一个用户被存储为一个字符串,而多个用户却被存储为一个特定的对象;这也可能不一致,因此您可能需要稍微调试一下,看看您的字段中的类型是什么。

一旦你有了这些SPUsers,你就可以填充你的PeopleEditor控件

使用以下帐户名称(相当冗长):

ArrayList entityArrayList = new ArrayList();
foreach(SPUser user in multipleUsers) // or just once for a single user

    PickerEntity entity = new PickerEntity;
    entity.Key = user.LoginName;
    entity = peMyPeople.ValidateEntity(entity);
    entityArrayList.Add(entity);

peMyPeople.UpdateEntities(entityArrayList);

这也执行某种用户的验证。

如果显示此控件的页面可能被回发,则您需要在回发期间完成以下操作,以便正确地往返;我把它放在PreRender,但它可能发生在生命周期的其他地方:

protected override void OnPreRender(EventArgs e)

    if (IsPostBack)
    
        var csa = peMyPeople.CommaSeparatedAccounts;
        csa = peMyPeople.CommaSeparatedAccounts;
    

如果您想检查控件为您生成的任何错误消息(如果用户输入不正确),您需要已经完成此切换:

var csa = usrBankSponsor.CommaSeparatedAccounts;
csa = usrOtherBankParties.CommaSeparatedAccounts;
//ErrorMessage is incorrect if you haven't done the above
if (!String.IsNullOrEmpty(usrBankSponsor.ErrorMessage))

    ...

这真的不是很好,可能有更好的处理方法,但这是我迄今为止的经验的结果,所以希望它可以节省你一些时间。

【讨论】:

以上是关于在人员编辑器中显示共享点人员/组字段列表的值的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint CSOM 处理人员和组字段

如何让一组开发人员访问同一个共享点站点并在其上共同开发?

使用组合框中的值编辑从列表框中选择的记录中的字段

Oracle APEX 选择列表

访问 - 预览更新查询将更改的内容

共享点列表字段的上下文菜单