zoukankan      html  css  js  c++  java
  • SharePoint 2010 的 PeopleEditor赋值给Item

    有时候页面是要放一个PeopleEditor,然后赋值给item。当然最开始的时候想法应该是超级简单,直接把控件的value赋值给item就完事了。结果根本就不是那么一回事。

    网上有人提供了方法,写了一大堆,很复杂,两眼没看懂,又感觉怎么不像自己要的。没办法,还是要自己弄一下。

    不过还是要承认借鉴了网上通用的方法,只是在SharePoint2010有点变化。

    页面加控件:

    <SharePoint:PeopleEditor ID="people" runat="server" selectionset="User" MultiSelect="false" />

    只选一个人的PeopleEditor控件

    下面的方法是拿控件里的值。和网上sharepoint2007版本的有点不同,在string DisplayName行

    public static string GetPeopleEditorValue(PeopleEditor objPeopleEditor)
            {
                string strResult = string.Empty;
                ArrayList list = objPeopleEditor.ResolvedEntities;
                
                foreach (Microsoft.SharePoint.WebControls.PickerEntity p in list)
                {
                    string userId = p.EntityData["SPUserID"].ToString();
                    string DisplayName = p.DisplayText.ToString();
                    strResult += userId + ";#" + DisplayName;
                    strResult += ",";
                }
                return strResult;
            }

    赋值:

    SPContext.Current.ListItem["人"] = GetPeopleEditorValue(people);

    如果PeopleEdit里面没有选人,则是空值,ListItem["人"]就是空值,不会报什么错误的。

    ----------

    注意,上面的方法不是很好,当这个用户从来没有登录到SharePont上,那么这个方法是会报错误的。这种情况发生在测试阶段就会暴露出来。

    要用下面的方法

     public string GetPersonInfo(Control control, string ffID)
    {
            string strReturn = "";
            if (control is PeopleEditor)
            {
                if (((PeopleEditor)control).Parent.Parent.Parent.ID == ffID)
                {
                    PeopleEditor peopleEditor = ((PeopleEditor)control);
                    foreach (PickerEntity pe in peopleEditor.ResolvedEntities)
                    {
                        string principalType = pe.EntityData["PrincipalType"].ToString();
                        if (principalType == "User" || principalType == "SecurityGroup")
                        {
                            strReturn = pe.Key;
                            break;
                        }
                    }
                }
            }
            else
            {
                foreach (Control c in control.Controls)
                {
                    strReturn = GetPersonInfo(c, ffID);
                    if (strReturn != "")
                    {
                        break;
                    }
                }
            }
            return strReturn;
     }
    

    有取值就要有赋值

    public void SetDefaultPerson(Control control, string ffID, string userLoginName)
     {
                string strflag = "";
                if (control is PeopleEditor)
                {
                    if (((PeopleEditor)control).Parent.Parent.Parent.ID == ffID)
                    {
                        if ((((PeopleEditor)control).ResolvedEntities.Count < 1))
                        {
                            PickerEntity entity = new PickerEntity();
                            entity.Key = userLoginName;
    
                            System.Collections.ArrayList entityArrayList = new
                            System.Collections.ArrayList();
                            entityArrayList.Add(entity);
    
                            ((PeopleEditor)control).UpdateEntities(entityArrayList);
                            strflag = "TaskOver";
                        }
                    }
                }
                else
                {
                    foreach (Control c in control.Controls)
                    {
                        SetDefaultPerson(c, ffID, userLoginName);
                        if (strflag != "")
                        {
                            break;
                        }
                    }
                }
    }
    

  • 相关阅读:
    项目遇到的坑
    知乎贺老live
    cookie
    Vue之不常注意的点
    移动端适配问题
    ubuntu之nginx的安装
    Http相关笔记
    如何使用Augury检查Angular 8中的延迟加载
    Serilog——一个集成了。net应用程序的优秀日志框架
    引导HTML助手
  • 原文地址:https://www.cnblogs.com/myheaven/p/2086300.html
Copyright © 2011-2022 走看看