Sharepoint 2013, получить данные из списка в ClientPeoplePicker

В Sharepoint 2013 я попытался получить информацию о пользователе из настраиваемого списка для отображения в форме редактирования, которая будет отображаться в элементе управления ClientPeoplePicker.

Я поискал и попробовал два решения:

private void LoadUserToPeoplePicker(SPListItem item, string colName, ClientPeoplePicker peoplePicker)
    {
        //Get user information from list
        var user = item[colName] as string;

        if (!string.IsNullOrEmpty(user))
        {
            var spUser = new SPFieldUserValue(SPContext.Current.Web, user);

            //Solution 01
            var entity = new PickerEntity();
            entity.Key = spUser.LookupValue;

            PeopleEditor editor = new PeopleEditor();
            entity = editor.ValidateEntity(entity);

            peoplePicker.AddEntities(new List<PickerEntity> { entity });

            //Solution 02
            //if (!string.IsNullOrEmpty(spUser.User.Email))
            //{
            //    peoplePicker.InitialUserAccounts = spUser.User.Email;
            //}
        }
    }

Я вызываю их вместо формы Nintex: защищенное переопределение void OnFormControlDataBinding (отправитель объекта, EventArgs e)

Вот ошибка, которую я получил:

Введите «Microsoft.SharePoint.SPUser» в сборку «Microsoft.SharePoint, Version = 15.0.0.0, Culture = нейтральный, PublicKeyToken = 71e9bce111e9429c» не помечен как сериализуемый.

Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.

Сведения об исключении: System.Runtime.Serialization.SerializationException: введите «Microsoft.SharePoint.SPUser» в сборке «Microsoft.SharePoint, версия = 15.0.0.0, культура = нейтральный, PublicKeyToken = 71e9bce111e9429c» не помечен как сериализуемый.

Ошибка источника:

Необработанное исключение было создано во время выполнения текущего веб-запроса. Информацию о происхождении и местонахождении исключения можно определить с помощью трассировки стека исключений ниже.

Трассировки стека:

[SerializationException: введите «Microsoft.SharePoint.SPUser» в сборку «Microsoft.SharePoint, Version = 15.0.0.0, Culture = нейтральный, PublicKeyToken = 71e9bce111e9429c» не помечен как сериализуемый.] System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (RuntimeableMembers type) +14210117 System.Runtime.Serialization.FormatterServices.GetSerializableMembers (тип типа, контекст StreamingContext) +408 System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo () +420 System.RunormObjectInfo.InitMemberInfo () +420 System. .InitSerialize (Object obj, ISurrogateSelector surrogateSelector, контекст StreamingContext, SerObjectInfoInit serObjectInfoInit, преобразователь IFormatterConverter, ObjectWriter objectWriter, связыватель SerializationBinder) +532 System.Runtime.Serialization.Formatters.BjectSelector (объектный объект) serObjectInfoInit, IFormatterConverter преобразователь, ObjectWriter objectWriter, связыватель SerializationBinder) +270 System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize (Граф объекта, Заголовок [] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +814 System.Runorm.Sattersialization.F. BinaryFormatter.Serialize (Stream serializationStream, Граф объектов, Заголовки Header [], Boolean fCheck) +322 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (Stream serializationStream, Граф объектов) +17 System.Web.UI.ObjectStateFormatter. SerializeValue (писатель SerializerBinaryWriter, значение объекта) +3526

[ArgumentException: Ошибка сериализации значения 'i: 0 # .w | fsoft.fpt.vn \ hoavt2' типа 'Microsoft.SharePoint.SPUser.'] System.Web.UI.ObjectStateFormatter.SerializeValue (средство записи SerializerBinaryWriter, значение объекта) + 4068 System.Web.UI.ObjectStateFormatter.Serialize (StateGraph объекта, назначение цели) +103 System.Web.UI.Util.SerializeWithAssert (средство форматирования IStateFormatter2, StateGraph объекта, назначение цели) +67 System.Web.UI.HiddenFieldPageStatePers ) +173 System.Web.UI.Page.SaveAllState () +1161 System.Web.UI.Page.ProcessRequestMain (логическое includeStagesBeforeAsyncPoint, логическое includeStagesAfterAsyncPoint) +4660

Кто-нибудь сталкивается с этой проблемой, пожалуйста, помогите.


person zquanghoangz    schedule 05.10.2015    source источник


Ответы (1)


Нашел в чем ошибался :) Дело не в той функции, а в другой

private void ExtractValueForApprover(IOrderedDictionary dictionary, ClientPeoplePicker peoplePicker,
        string colName)
    {
        if (peoplePicker == null || string.IsNullOrEmpty(colName))
        {
            return;
        }

        if (peoplePicker.ResolvedEntities.Count > 0)
        {
            var user = SPContext.Current.Web.EnsureUser(peoplePicker.GetPickerEntity().Key);

            AddValueToDictionary(colName, user.LoginName, dictionary);
        }
    }

Я извлек эту строку: SPContext.Current.Web.EnsureUser (peoplePicker.GetPickerEntity (). Key) в метод расширения, затем произошла ошибка выше.

Это может быть полезно для вас, ребята.

Спасибо!

person zquanghoangz    schedule 06.10.2015