SharePoint Web Services - تحديث حقل ContentType هل لديك خاصية مطلوبة؟

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

سؤال

لقد كنت أحاول إعادة إنتاج سلوك تحرير خصائص حقل نوع المحتوى برمجيًا في شاشة إدارة موقع SharePoint وتحديد زر الاختيار "مطلوب" دون نجاح باستخدام طريقة Webs.asmx "UpdateContentType" الخاصة بخدمة الويب WSS 3.0.

كانت الصعوبة الأولى هي مشكلة وثائق MSDN التي تنص على أن الحقول المذكورة يجب أن تكون من نوع FieldRef بينما في الواقع يجب أن تكون من نوع الحقل (مرجع).تعمل إضافة الحقول وحذفها بشكل جيد بعد الإصلاح، ولكن يبدو أن تحديث الحقول لا يعمل على الإطلاق.(تجدر الإشارة أيضًا إلى أنني اتبعت التوصية الواردة في الرابط السابق للاستخدام Method="2" لتحديث الحقول ولكنه لا يغير شيئًا، واستخدام قيم الطريقة بخلاف 1 للإضافة أو غير 3 للحذف يعمل أيضًا بشكل صحيح).

إليك استدعاء خدمة الويب (تم تعديله قليلاً باستخدام السلاسل بدلاً من كائنات XmlNode لتسهيل القراءة):

SharePointWebServices.Webs webService = new SharePointWebServices.Webs();
webService.Url = "http://mysharepointserver/site";
webService.UseDefaultCredentials = true;

webService.UpdateContentType(
    @"0x01005A089D9EC8A382458FB1F6C72096D52A", 
    @"<ContentType />", 
    @"<Fields />",
    @"<Fields><Method ID=""1""><Field Name=""SomeField"" ID=""{8a4803c4-6545-4a7a-804d-237eebff0ce3}"" Required=""TRUE"" Hidden=""FALSE"" ReadOnly=""FALSE"" PITarget="""" PIAttribute="""" PrimaryPIAttribute="""" Aggregation="""" Node="""" /></Method></Fields>",
    @"<Fields />");

بعد المكالمة، يظل الحقل مطلوبًا = "FALSE".

تشير نظرة سريعة على مجموعة stssoap.dll إلى أن الخاصية "المطلوبة" يتم تجاهلها على ما يبدو أثناء عملية التحديث.هل هذا سلوك طبيعي؟إذا كان الأمر كذلك، ما هي الطريقة الموصى بها لتغيير الحقل "المطلوب" برمجيًا من رمز العميل (لا يتم تنفيذه على خادم SharePoint)؟

أي مساعدة سيكون موضع تقدير كبير.

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

المحلول

لقد بحثت في هذا ووجدت نفس الشيء.لقد حاولت أيضًا إضافة السمة Cmd="Update" إلى Method عنصر دون نجاح. هذا المثال كانت كيفية استخدام UpdateContentType مفيدة أيضًا.

لا أعتقد أنك ستتمكن من القيام بذلك باستخدام خدمات SharePoint الجاهزة.لقد تأكدت من خلال النظر إلى stssoap.dll أن هذا لا يبدو أنه يعمل بشكل صحيح.خيار آخر على نمط "العميل" هو الاستخدام طرق RPC ولكن لا يبدو أن أيًا منها يوفر وظائف لأنواع المحتوى على الإطلاق.

خدمات الويب هي خصوصًا محبط لأن هذا النوع من الحالات غير المتطورة يظهر بانتظام.من النادر جدًا أن أفكر في استخدامها بسبب إضاعة الوقت بسبب قيودها.

هل تمتلك أي خيار لنشر التعليمات البرمجية المخصصة إلى الخادم؟يمكنك تطوير هذه الوظيفة باستخدام نموذج الكائن وتغليفه في خدمة الويب المخصصة الخاصة بك (يوجد تجول هنا) بسهولة شديدة.

هنا مثال مقتبس من غابي ويشني هذا يفعل ما تحتاجه:

SPContentType myContentType = myWeb.ContentTypes["myContentType"];
string internalName = myContentType.Fields["fieldToUpdate"].InternalName;
myContentType.FieldLinks[internalName].Required = false;
myContentType.Update(true);

عذرًا، هذا ليس مفيدًا أكثر ولكنه قصة شائعة عند استخدام خدمات الويب WSS 3.0 / SharePoint 2007.

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