سؤال

حالة استخدام بلدي:

أحاول تنفيذ نظام إدارة الأحداث في SharePoint باستخدام جزء (أجزاء) ويب مرئية.

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

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

في بلدي WebPart Visual WebPart (تمت إضافته عبر VIA & ToolPaneView= 2 أعلاه شكل عرض "الأحداث"، أظهر الأزرار ("التسجيل" و "إلغاء التسجيل") اعتمادا على التعليمات البرمجية التالية: giveacodicetagpre.

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

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

سيكون من الرائع إذا كان شخص ما يمكن أن يعطيني حلا / تلميحا كيفية القيام بذلك برمجيا لأنني لا أحصل عليه للعمل.

مع أطيب التحيات، دومينيك

p.s. أنا ألماني لذلك آمل أن تفهم سؤالي. لا تتردد في طلب المزيد من التفاصيل! سأبذل قصارى جهدي لشرح ذلك باللغة الإنجليزية المناسبة.

تحرير 1: إليك طريقة Addattendeene الخاصة بي، أيضا: giveacodicetagpre.

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

المحلول

As far as I know, changing field type from text to lookup is not supported in Sharepoint.

You should create new lookup field in the Attendees list and point it to Events list, either from Sharepoint list settings, or from code.

Basically, lookup field has the same structure as user field, which you populated in the final bit of your code - ID#;Title. Also, lookup field value is represented by SPFieldLookupValue class, so it can be retrieved like that:

return new SPFieldLookupValue((string)item["EventLookup"]);

You can set lookup field value by assigning new SPFieldLookupValue object to SPListItem property:

item["EventLookup"] = new SPFieldLookupValue(1, "Great Event");

where 1 - Event list item Id and "Great Event" - Event list Item title.

If I also may add some remarks to your code examples. As far as I can see, you are searching attendees for the event by iterating through SPList.Items object and comparing a string value of "Attendee" field with custom string value.

Such a search can return wrong and slow results, because usually user lookup field contains user display name, not a Login Name. I'd recommend using CAML query instead:

SPQuery qry = new SPQuery();
qry.Query =
"  <Where>"
+"    <And>"
+"      <Eq>"
+"          <FieldRef Name='Event' />"
+"          <Value Type='Text'>"+ currentEventItem.Title +"</Value>"
+"      </Eq>"
+"      <Eq>"
+"          <FieldRef Name='Attendee' LookupId='TRUE' />"
+"          <Value Type='Integer'>"+ currentUser.ID.ToString() +"</Value>"
+"      </Eq>"
+"    </And>"
+"  </Where>";
SPListItemCollection listItems = spList.GetItems(qry);
bool foundUsers = listItems.Count > 0;

The query above searches by Event field (type "text" as in your example) and by Attendee user Id without user login Name. Also it retrieves only items, that fall whithin the query where clause.

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