سؤال

أحاول نسخ SPListItem (مع ملف) من مجموعة مواقع إلى أخرى.أفعل ذلك عن طريق إنشاء الملف مثل هذا:

var archiveFile = newsArchive.Lists[listName].RootFolder.Files.Add(originalItem.File.Name, originalItem.File.OpenBinary());
var archiveItem = archiveFile.Item;

من خلال إحدى الطرق المساعدة التي كتبتها، قمت بعد ذلك بتعيين كافة قيم الحقول للعنصر الجديد لتتوافق مع العنصر الأصلي بهذه الطريقة

Utilities.PopulateListItemMetadata(....)

الشيء هو أن هذا لا يستمر في حقل المؤلف.

لقد حاولت تعيين حقل المؤلف بشكل صريح بكل الطرق التي يمكن تخيلها، على سبيل المثال:

string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user.ID + ";#" + user.LoginName;
archiveItem.Update();

ومثل ذلك

string userName = originalItem.GetUser("Created by").LoginName;
SPUser user = newsArchive.SiteUsers[userName];
archiveItem["Author"] = user;
archiveItem.Update();

ولكن بمجرد استدعاء الأسلوب SPListItem.Update()، يعود الحقل archiveItem["Author"] إلى Sharepoint\system.أنا في حيرة قليلاً هنا، هذا يجب أن ينجح..

ملاحظة. الأسلوب SPListItem.GetUser هو أسلوب ملحق

P.S. يتم تشغيل التعليمات البرمجية من مهمة جهاز ضبط الوقت...

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

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

المحلول

وجدت الجواب باستخدام

SPFieldUserValue val = new SPFieldUserValue(newsArchive, user.ID, user.Name);
archiveItem["Author"] = val; 
archiveItem.SystemUpdate(false);

فعلت الحيلة!

نصائح أخرى

لقد واجهت نفس المشكلة.القي نظرة على هذا السؤال.

الطريقة التي نجحت معي هي تغليف نفس الكود الموجود في المثال الأخير بامتيازات مرتفعة.

يحرر

لماذا لا تحاول استبدال:

SPUser user = newsArchive.SiteUsers[userName];

مع:

SPUser user = newsArchive.EnsureUser(userName);

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top