الحصول على صورة المستخدم من SPUser باستخدام نموذج كائن WSS

StackOverflow https://stackoverflow.com/questions/61339

  •  09-06-2019
  •  | 
  •  

سؤال

أحاول استرداد مستخدم على صورة مستخدم Sharepoint من خلال نموذج كائن WSS 3.0.لقد كنت أتصفح الويب بحثًا عن حلول، لكن حتى الآن لم أتمكن من العثور على طريقة للقيام بذلك.هل من الممكن، وإذا كان الأمر كذلك كيف؟

هل كانت مفيدة؟

المحلول

فيما يلي مقتطف التعليمات البرمجية الذي من شأنه أن يساعدك في إنجاز المهمة نيابةً عنك.قد تحتاج إلى إجراء بعض عمليات التحقق الإضافية لتجنب أي استثناءات (التأكد من وجود الملف الشخصي بالفعل، والتأكد من وجود عنوان URL للصورة بالفعل، وما إلى ذلك...):

    //get current profile manager
    UserProfileManager objUserProfileManager = new UserProfileManager(PortalContext.Current);
    //get current users profile
    UserProfile profile = objUserProfileManager.GetUserProfile(true);
    //get user image URL
    string imageUrl = (string)profile[PropertyConstants.PictureUrl];

    //do something here with imageUrl

نصائح أخرى

إذا كنت تتحدث بشكل صارم عن WSS 3.0 (وليس MOSS)، فلن يكون لديك بالفعل ملفات تعريف مستخدم عامة في حد ذاتها، ولكن قائمة معلومات مستخدم مخفية في كل مجموعة مواقع مشتركة.وهذا يعني أن أيًا من العناصر الموجودة في مساحات أسماء Microsoft.Office.Server غير متاحة لك.

ومع ذلك، يمكنك تحديث قائمة معلومات المستخدم برمجيًا طالما أنك تعرف عنوان URL لصورة المستخدم.طالما أنك تعمل بنوع من الامتيازات المرتفعة، فيجب أن تكون قادرًا على ذلك التلاعب بهذه القائمة تمامًا كما يمكنك مع أي قائمة SharePoint أخرى.ضع في اعتبارك أن هذه القائمة مناسبة فقط لنطاق مجموعة الموقع، لذا سيتعين على المستخدمين إجراء هذا التحديث نفسه في كل مكان للحصول على عنوان URL للصورة فعليًا.بالإضافة إلى ذلك، لا يتمكن المستخدمون من الدخول إلى قائمة معلومات المستخدم حتى يقوم شخص ما بتعيين نوع من الإذن لهم، لذلك لن يكون كل مستخدم في نطاقك موجودًا هناك.

الطريقة النظيفة للتعامل مع هذا هي بالتأكيد آلية ملف تعريف المستخدم وهي MOSS، ولكن إذا كان هذا خيارًا، فيجب تحديث السؤال للسؤال عن MOSS مقابل WSS.

اه، يجب عليك استخدام فئة UserProfileManager.مزيد من المعلومات هنا: http://msdn.microsoft.com/en-us/library/microsoft.office.server.userprofiles.userprofilemanager.aspx

مثال على الاستخدام:

public override void ItemAdded(SPItemEventProperties properties)
{
    // Get list item on which the event occurred.
    SPListItem item = properties.ListItem;

    // Set the Author Image field to the user's PictureURL if it exists.
    using (SPWeb web = properties.OpenWeb())
    {
        // Author: {C32DB804-FF2D-4656-A38A-B0394BA5C931}
        SPFieldUserValue authorValue = new SPFieldUserValue(properties.OpenWeb(), item[new Guid("{C32DB804-FF2D-4656-A38A-B0394BA5C931}")].ToString());

        UserProfileManager profileManager = new UserProfileManager(ServerContext.GetContext(web.Site));
        UserProfile profile = profileManager.GetUserProfile(authorValue.LookupId);
        UserProfileValueCollection values = profile[PropertyConstants.PictureUrl];

        if (values.Count > 0)
        {
            // Author Image: {37A5CA4C-7621-44d7-BF3B-583F742CE52F}
            SPFieldUrlValue urlValue = new SPFieldUrlValue(values.Value.ToString());
            item[new Guid("{37A5CA4C-7621-44d7-BF3B-583F742CE52F}")] = urlValue.Url;
        }
    }

    item.Update();

    // News Text: {7F55A8F0-4555-46BC-B24C-222240B862AF}
    //

    // Author Image: {37A5CA4C-7621-44d7-BF3B-583F742CE52F}
    // 

    // Publish Date: {45E84B8B-E161-46C6-AD51-27A42E4992B5}
    //
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top