سؤال

الجميع -

أنا أستخدم WSS 3.0.حاليًا، ستقوم الموارد البشرية بتحميل السيرة الذاتية الداخلية للشركة الخاصة بالموظف إلى مكتبة المستندات على موقعنا، ولكن لأسباب تتعلق بالخصوصية، يجب علينا بعد ذلك تقييد الوصول إلى مكتبة المستندات تلك، مما يفرض على المستخدمين المرور عبر الموارد البشرية في كل مرة يريدون تحديث سيرتهم الذاتية.

فكرتي هي إنشاء قائمة تحتوي على مرفقات ممكّنة تتيح للمستخدمين عرض/تحرير العناصر الخاصة بهم فقط، ثم منح إذن الموارد البشرية لإدارة جميع الإدخالات.يعمل هذا باستثناء أن الموارد البشرية ستحتاج إلى إنشاء عنصر القائمة الأولي وإرفاق السيرة الذاتية، مما يعني أن عنصر القائمة "سيتم إنشاؤه بواسطة {hr}" ولن يكون مرئيًا/قابلاً للتحرير بواسطة المستخدم النهائي الذي تم إرفاق سيرته الذاتية.

هل هناك أي أفكار حول كيفية السماح للموارد البشرية بتعديل حقل "تم الإنشاء بواسطة" عند التحميل حتى يتمكن المستخدمون النهائيون من رؤية سيرتهم الذاتية ويمكنهم تعديلها، أو القيام بذلك بطريقة مختلفة؟

شكرًا!

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

المحلول

وإنشاء مكتبة مستندات لعقد الذاتية ل. ثم إعطاء إدارة الموارد البشرية (شير مجموعة المستخدم) "القراءة / الكتابة عن" الأذونات على المكتبة، وإعطاء الجميع القراءة / الكتابة الخاصة بك "حقوق. إنشاء نوع المحتوى يسمى" استئناف "استنادا إلى خارج ال- وثيقة مربع نوع المحتوى، ثم إضافة الحقل الذي يحتوي على (حقل SPUser) موظف منهم المخاوف الذاتية إلى نوع المحتوى (وغيرها من المجالات المطلوبة، أي اسم، العنوان وما إلى ذلك). وقد شغل HR هذا بشكل صحيح عند إنشاء عنصر القائمة (جعل الحقول المطلوبة).

وبعد ذلك، إرسال بريد itemeventreceiver منضمة إلى نوع المحتوى الذي قمت بإنشائه وتجاوز حالة ItemUpdated.

وقال إن كود يكون شيئا مثل ما يلي:

public override void ItemUpdated(SPItemEventProperties properties)
{
  SPSecurity.RunWithElevatedPrivileges(delegate
  {
    using (SPWeb web = properties.OpenWeb())
    {
       web.AllowUnsafeUpdates = true; 
       var item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
       if (item != null)
       {
         if (item.Fields.ContainsField("Employee"))
         {
           item["Author"] = item["Employee"]; 
           // Author is the internal name of the Created by field, 
           // always use Internal Names!
           DisableEventFiring();
           item.SystemUpdate();
           EnableEventFiring();
         }
       }
     }
   });
}

ويمكنك ربط ItemEventReceiver باستخدام FeatureReceiver إلى نوع محتوى مثل ذلك:

SPContentType docCt = web.ContentTypes[new SPContentTypeId("CONTENTYPE ID GOES HERE")];
docCt.EventReceivers.Add(SPEventReceiverType.ItemUpdated, "ASSEMBLYNAME, Version=1.0.0.0, Culture=neutral, PublicKeyToken=TOKEN", "FULLY QUALIFIED CLASSNAME");
docCt.Update();

نصائح أخرى

لماذا لا مجرد استخدام مكتبة المستندات ليستأنف؟ (بدلا من قائمة ث / المرفقات.) يمكنك إعطاء HR قراءة كاملة / الكتابة على جميع الوثائق داخل، وسوف صاحب السيرة الذاتية لها المساهمة أذونات فقط الذاتية الخاصة بهم.

لقد وجدت طريقة لتغيير الحقل "تم الإنشاء بواسطة" باستخدام SharePoint Designer لإنشاء سير عمل.

  1. قم بإنشاء حقل وهمي في قائمتك باسم يسهل اكتشافه، على سبيل المثال.XYZZY.اجعله حقل "شخص أو مجموعة".
  2. في SharePoint Designer، قم بإنشاء سير عمل لقائمتك.السماح بالبدء اليدوي والبدء تلقائيًا عند إنشاء عنصر جديد.
  3. الإجراءات -> تعيين الحقل في العنصر الحالي -> تعيين XYZZY إلى الحقل الموجود في قائمتك الذي يحتوي على حساب المستخدم الذي تريد وضعه في "تم الإنشاء بواسطة".
  4. انقر فوق إنهاء
  5. الآن، افتح ملف .xoml الخاص بسير العمل باستخدام برنامج "المفكرة".استبدل "XYZZY" بـ "المؤلف".احفظ ملف .xoml.
  6. افتح سير العمل في المصمم.انقر فوق "إنهاء" حتى تتم إعادة المعالجة باستخدام الكود الجديد.
  7. احذف الحقل الوهمي من القائمة.
  8. قم بتشغيل سير العمل على كل عنصر موجود في قائمتك.سيتم تصحيح العناصر الجديدة ذاتيًا تلقائيًا.

ومع شاشة التحميل المخصص الذي يمكن أن يغير سياق المستخدم الحالي قبل القيام التحميل. فهو يتطلب النظر إلى فوق رمز المستخدم باستخدام شيء كما يلي (هذه هي قصاصات من التعليمات البرمجية التي تعمل مع معالجة الأخطاء وغيرها من الاشياء إزالة). لاحظ أن EnsureUser سيتطلب أن المستخدم الحالي أن يكون أساسا المسير / المالك.

using (SPSite site = GetImpersonatedSite(runAsUser))
{
    using (SPWeb web = site.OpenWeb())
    {
        // Do stuff here
    }
}

private SPSite GetImpersonatedSite(string username)
{
    user = SPContext.Current.Web.EnsureUser(username);
    SPSite site = new SPSite(SPContext.Current.Web.Url, user.UserToken);
    return site;
}

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

using (var root = site.RootWeb)
 {
   var users = root.SiteUsers;
   var user = users["domain\username"];
   file.Item[SPBuiltInFieldId.Created_x0020_By] = user.ID;
   file.Item[SPBuiltInFieldId.Modified_x0020_By] = user.ID;
   file.Item.UpdateOverwriteVersion();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top