Использование бинарного типа UserProperty - PullRequest
3 голосов
/ 21 января 2010

По какой-то причине мне нужно сохранить несколько больших строк в профили пользователей. Поскольку свойство со строкой типа имеет ограничение в 400 символов, я решил попробовать с двоичным типом (PropertyDataType.Binary), который допускает длину 7500. Моя идея - преобразовать мою строку в двоичный файл и сохранить в свойстве.

Я создаю свойство, используя код:

            context = ServerContext.GetContext(elevatedSite);
            profileManager = new UserProfileManager(context);
            profile = profileManager.GetUserProfile(userLoginName);
            Property newProperty = profileManager.Properties.Create(false);
            newProperty.Name = "aaa";
            newProperty.DisplayName = "aaa";

            newProperty.Type = PropertyDataType.Binary;
            newProperty.Length = 7500;                

            newProperty.PrivacyPolicy = PrivacyPolicy.OptIn;
            newProperty.DefaultPrivacy = Privacy.Organization;
            profileManager.Properties.Add(newProperty);
            myProperty = profile["aaa"];
            profile.Commit();

Проблема в том, что когда я пытаюсь предоставить значение типа byte [] свойству, я получаю ошибку "Невозможно привести объект типа 'System.Byte' к типу 'System.String'.". Если я пытаюсь предоставить строковое значение, я получаю «Неверное двоичное значение: входные данные должны соответствовать двоичному типу данных byte []». Тогда мой вопрос, как использовать этот двоичный тип?

Код, который у меня есть:

SPUser user = elevatedWeb.CurrentUser; ServerContext context = ServerContext.GetContext (HttpContext.Current); UserProfileManager profileManager = new UserProfileManager (context); Профиль UserProfile = GetUserProfile (elevatedSite, currentUserLoginName); UserProfileValueCollection myProperty = profile [PropertyName];

myProperty.Value = StringToBinary (GenerateBigString ());

и функции для проверки:

    private static string GenerateBigString()
    {
        StringBuilder sb = new StringBuilder();            
        for (int i = 0; i < 750; i++) sb.Append("0123456789");
        return sb.ToString();
    }

    private static byte[] StringToBinary(string theSource)
    {
        byte[] thebytes = new byte[7500];  
        thebytes = System.Text.Encoding.ASCII.GetBytes(theSource);
        return thebytes;
    }

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

Для тех, кто ищет ответ. Вы должны использовать метод Add вместо:

var context = ServerContext.GetContext(elevatedSite);
var profileManager = new UserProfileManager(context);
var profile = profileManager.GetUserProfile(userLoginName);
profile["MyPropertyName"].Add(StringToBinary("your cool string"));
profile.Commit();
0 голосов
/ 22 февраля 2010

Вы пробовали с меньшими строками? Достижение максимума в первом тесте может скрыть другое поведение. Когда вы проверяете сгенерированную строку в отладчике, она соответствует требованиям? (7500 байт [])

...