كيف يمكنني تخصيص حسابات تجميع أعمدة قائمة SharePoint (الإجمالي)؟

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

سؤال

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

لقد وجدت أمثلة للقيام بشيء مماثل للأعمدة المحسوبة باستخدام XSLT و جافا سكريبت لكنني أعتقد أن كلا الأسلوبين يفشلان عندما يتم ترقيم البيانات (فقط تجميع المجموعة الفرعية من محتوى القائمة المعروضة على الشاشة).

أريد الاحتفاظ بوظيفة ListViewWebPart (العرض، والفرز، والتصفية، وتعريف العرض، وقوائم الإجراءات، وما إلى ذلك) ولكن أضف هذه الوظيفة.كيف يمكنني أن أفعل هذا؟

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

المحلول 2

لم تتح لي الفرصة لاختباره بالكامل ولكن هذا هو أفضل ما يمكنني التوصل إليه:

إنشاء WebPart والذي يحتوي على عنصرين تحكم:

  1. أ ViewToolBar مع سياق القائمة/العرض الذي سيتم عرضه
  2. أ Literal يحتوي على HTML المقدم للعرض الذي سيتم عرضه

سيتم عرض هذا بعد ذلك كقائمة/عرض أصلي.

على تقديم WebPart, ، احصل على العناصر من العرض، مع تحديد RowLimit كقيمة قصوى بحيث يتم استرداد كافة العناصر الموجودة (وليس الصفحة الأولى فقط).

كرر العناصر، واحسب الإجمالي في نوع بيانات مناسب للحفاظ على الدقة.

اعرض الإجمالي كقيمة مخفية في HTML واستبدل القيمة المقدمة Count الإجمالي باستخدام Javascript مثل الطريقة الموصوفة هنا.

رسم تقريبي للكود:

public sealed class TextAggregatingWebPart : WebPart {
  protected override void CreateChildControls() {
    base.CreateChildControls();

    var web = SPContext.Current.Web;
    var list = web.Lists[SourceList];
    var view = list.Views[ViewOfSourceList];

    var toolbar = new ViewToolBar();
    var context = SPContext.GetContext(
    Context, view.ID, list.ID, SPContext.Current.Web);
    toolbar.RenderContext = context;
    Controls.Add(toolbar);

    var viewHtml = new Literal {Text = view.RenderAsHtml()};
    Controls.Add(viewHtml);
  }

  protected override void Render(HtmlTextWriter writer) {
    EnsureChildControls();
    base.Render(writer);

    var web = SPContext.Current.Web;
    var list = web.Lists[SourceList];
    var view = list.Views[ViewOfSourceList];

    var items = list.GetItems(new SPQuery(view) {RowLimit = uint.MaxValue});
    foreach (SPItem item in items) {
      // Calculate total
    }

    // Render total and Javascript to replace Count
  }
}

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

نصائح أخرى

والشيء الوحيد الذي يمكنك القيام به مع المجاميع هي:

ومتوسط. عد. ماكس. دقيقة. مجموع؛ الانحراف المعياري؛ تباين

وغير متأكد من كيفية حساب أي شيء آخر.

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