ينطبق على
SharePoint في Microsoft 365 SharePoint في الشركات الصغيرة الخاصة بـ Microsoft 365

من قبل جوستين جويس، LANtek

ملاحظة: تعد هذه المقالة جزءا من مجموعة من المنشورات من أربع سنوات من الحصول على مدونة نقطة للمستخدمين النهائيين في SharePoint.

نظرة عامة: تقارير التقادم المخصصة بدون تعليمات برمجية

أحد الأجزاء الوظيفية المطلوبة غالبا من موقع SharePoint هو تقرير قديم للمهام أو عناصر القائمة. بمعنى آخر، كم عدد الأيام/الأشهر التي تم تعديلها منذ آخر تعديل لعنصر القائمة هذا؟

على السطح يبدو أن هذا طلب بسيط جدا. بعد كل شيء، لدينا تواريخ للعناصر التي يتم إنشاؤها وتعديلها، لدينا القدرة على تخزين التواريخ المخصصة عند إجراء تغييرات معينة على العناصر من خلال أجهزة استقبال الأحداث. لقد قمنا بحساب الأعمدة حيث يمكننا تضمين صيغ تشبه Excel للعمل مع معلوماتنا. هذا يبدو وكأنه اقتراح مستقيم جدا إلى الأمام. نختار حقل تاريخ، وننشئ عمودا محسوبا، ثم نقوم بعمل صيغة على غرار [DateField] - [اليوم]. آه، ليس بهذه السرعة على الرغم من! كما يعرف أي شخص حاول هذه المهمة "البسيطة"، فإن محاولة استخدام شيء مثل [اليوم] في عمود محسوب يسبب مشاكل. ستعطيك محاولة إدراج [اليوم] في مربع صيغة العمود المحسوب رسالة خطأ مثل هذه:

رسالة خطأ

لماذا هذا؟ حسنا، يجب أن يتعلق الأمر بالطريقة التي يتم بها حساب الأعمدة المحسوبة.

لنأخذ صيغة بسيطة كمثال:

= IF( [Column1]<=[Column2], "OK", "Not OK")

كل ما يقوله هذا هو أنه إذا كان Column1 أقل من أو يساوي Column2، فعرض OK، وإلا فاعرض Not OK. هذه صيغة أساسية نموذجية إلى حد ما لعمود محسوب وتجعل افتراضا أساسيا حول عنصر القائمة الذي يحتوي على هذه الأعمدة: لن تتمكن قيم العمودين 1 و Column2 من التغيير أبدا دون حدث تحديث في عنصر القائمة.

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

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

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

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

تنفيذ:

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

إذا كانت لديك حقوق لإنشاء حقول وتحرير الصفحات على موقعك، ولديك القليل من المعرفة حول XSLT وإنشاء طرق العرض، يمكنك تجميع قالب XSL يمكن تضمينه في طريقة عرض القائمة وسيحسب القيمة بأمانة في كل مرة يتم فيها طلب الصفحة. يزيل هذا السيناريو قلقنا بشأن الأداء، ولا يتطلب تطوير التعليمات البرمجية المخصصة ونشرها عبر حل.

ممتاز. إذن كيف نفعل ذلك؟

  1. إنشاء الحقل الذي سيكون مصدرنا أو تحديده. يجب أن يكون نوع التاريخ.

  2. قم بإنشاء حقلنا الذي سيكون بمثابة عنصر نائب للقيمة التي يتم حسابها.

  3. أضف كلا الحقلين إلى نوع محتوى وأضف نوع المحتوى هذا إلى قائمة.

  4. قم بإنشاء طريقة عرض لتلك القائمة تحتوي على كل من عمودي المصدر والعنواقل النائب.

  5. قم بتحميل قالب XSL إلى مكتبة الأنماط.

  6. قم بتعيين الخاصية "XSL Link" لجزء ويب لعرض القائمة من خلال واجهة المستخدم.

  7. تم بنجاح!

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

لذلك لدينا تاريخ المصدر الذي يمكننا استخدامه في حسابنا مقابل تاريخ اليوم. الآن يمكننا إنشاء عمود موقع مخصص لاستخدامه كحاوية لقيمتنا المحسوبة. في هذه الحالة اخترت استخدام عمود محسوب لأنه لن يكون قادرا على تغييره في نماذج العناصر الجديدة أو تحريرها، ولكن يمكن تحديده للعرض في طرق العرض لأننا لا نريد أن يدخل المستخدمون قيما عشوائية في هذا العمود. قد يكون مربكا بسبب عدم عرضه في طرق العرض، وما إلى ذلك.

الآن بعد أن أصبح لدينا عمود الموقع، يمكننا إضافته إلى أنواع المحتويات التي سيتم استخدامها في قائمتنا. بعد ذلك، نحتاج إلى إنشاء طريقة عرضنا التي سيتم تخصيصها لاحقا باستخدام XSLT. تأكد من إنشاء طريقة عرض قياسية تحتوي على عمود التاريخ المصدر والعمود المحسوب الجديد الذي سيكون بمثابة عنصر نائب للقيمة المحسوبة.

لدينا الآن كل ما نحتاجه لدعم تقرير الشيخوخة المخصص. كل ما تبقى هو إنشاء قالب XSL الخاص بنا، وتحميله إلى مكتبة أنماط الموقع، وربطه بعرض القائمة. سيحتوي قالب XSL الذي سنستخدمه على بعض العلامات العادية التي تم إنشاؤها من SharePoint لإنشاء طريقة العرض بالإضافة إلى العلامات المخصصة الخاصة بنا المستخدمة لتجاوز أجزاء معينة من هذا وحساب القيمة المطلوبة لنا.

إعطاء الائتمان حيث يكون الائتمان مستحقا، تم توفير قوالب XSL للقيام بالحسابات الفعلية التي أستخدمها لهذا الحل بشكل كريم من قبل "swirch" في منتديات MSDN:http://social.msdn.microsoft.com/Forums/en-US/sharepointcustomization/thread/aeda905b-9bc6-40c4-bd22-21306c5cb0d2/

تنزيل ورقة أنماط XSL (aging.zip) التي جمعتها هنا:https://OneDrive.live.com/?cid=c262e8e2d59a86d9&permissionsChanged=1&id=C262E8E2D59A86D9!104

عند فتح هذا في محرر النص المفضل لديك، سترى الكثير من علامات SharePoint XSL العادية لعرض طرق العرض، إذا استمر التمرير لأسفل إلى السطر 357، فسترى بداية القوالب المخصصة التي أضفتها إلى العلامات، الأول هو قالب "DateDiff" متبوعا ب "calculate-julian-day" و"FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". هذه هي قوالبنا الثلاثة التي ستقوم بإجراء وعرض حساباتنا في وجهات نظرنا. إذا كنت ستستخدم أسماء حقول مختلفة عما تم تحديده سابقا في هذه المقالة، فستحتاج إلى الانتقال عبر هذه القوالب واستبدال أي مراجع للأسماء الأخرى. تذكر، لهذا ستحتاج إلى استخدام الاسم الداخلي للحقل وليس اسم العرض.

بمجرد أن تكون راضيا عن أن القالب جاهز للانتقال، انتقل إلى مكتبة الأنماط وقم بتحميله ضمن المجلد "أوراق أنماط XSL" ثم انسخ الارتباط إلى الملف. سيسمح لنا هذا بإجراء تغييرات عليه بسهولة في وقت لاحق، أو إضافته إلى أجزاء مختلفة من الموقع كما يحلو لنا.

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

الأمر "تحرير صفحة" في قائمة "إجراءات الموقع"

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

الأمر "تحرير جزء ويب" في القائمة "جزء ويب"

سيؤدي ذلك إلى فتح قائمة جزء ويب على الجانب الأيمن من نافذة المستعرض.

القائمة "جزء ويب"

انقر فوق + لقسم "متنوعة" وحدد موقع الخاصية "ارتباط XSL".

الخاصية "ارتباط XSL" في القائمة "جزء ويب"

الصق الارتباط إلى ملف XSL في مكتبة الأنماط التي نسختها سابقا (يمكن أن يكون هذا ارتباطا نسبيا أو مطلقا).

لقد تم لصق ارتباط ملف XSL

انقر فوق "موافق" لحفظ التغييرات، ثم انقر فوق الزر "إيقاف التحرير" على شريط "الصفحة" أعلى الصفحة.

الزر "إيقاف التحرير" ضمن علامة التبويب "صفحة"

إذا تم تكوين كل شيء بشكل صحيح، يجب أن تشاهد الآن الأرقام في عمود "Days At Status".

عمود Days At Status يعرض رقماً

وأخيرا، إليك ما ستبدو عليه مع بعض بيانات الاختبار من تواريخ مختلفة:

يعرض "تقرير التقادم" بيانات اختبار

الملخص:

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

استمتع!

--جوستين

Justin Joyce, LANtek

التعليقات

الخطوات مفقودة 10/8/2012 3:51 صباحا حسنا لقد اتبعت الخطوات ، ولكن يجب أن يكون هناك شيء مفقود -- كيف سيعرف XSL أي تاريخ لاستخدامه ، أو أي حقل لإضافة الأيام منذ ذلك الحين؟ أكره ذلك عندما يتم تفويت الخطوات.

لا يوجد رمز، متفق عليه! 8/30/2012 12:12 م أوافق - لا أعتقد أن هذا يعد حقا على أنه "لا يوجد تعليمة برمجية".من المثير للاهتمام، من خلال بعض المسامير في SharePoint، لدي عمود محسوب يعمل باستخدام اليوم... لست متأكدا من كيفية أو لماذا لأنني لا أستطيع الحصول عليه للقيام بذلك مرة أخرى ، ولكن واحد لا يزال هناك والعمل.

صيغة العمود المحسوب "أيام في الحالة"؟ 5/2/2012 7:39 صباحا Justin - ما الصيغة التي استخدمتها لعمود الموقع المحسوب "Days At Status" (عمود العنصر النائب)؟ هل كانت "=اليوم"؟

SharePoint 2007 12/2/2011 11:29 صباحا لم أحاول حاليا تطبيق هذا الحل على SharePoint 2007، لكنني أتطلع إليه. لسوء الحظ، لا توجد خاصية XslLink تظهر على جزء الويب من خلال واجهة المستخدم.

نشر رائع 11/30/2011 9:53 صباحا مرحبا نشر كبير.أستخدم SharePoint 2007.ليس لدي قسم Misc كما هو مذكور أعلاه.هل لديك خطوات لتكوين SP2007؟ شكرا.

Re: حل بدون تعليمات برمجية: عرض الأيام التي تم فيها آخر تغيير لعنصر قائمة SharePoint 10/11/2011 8:24 صباحا مرحبا كريس.العثور على كبيرة! أنا ذاهب لإلقاء نظرة على ما قمت بنشره في وقت لاحق من اليوم ومعرفة ما إذا كان يمكنني جعل هذا الحل أكثر قوة قليلا.أنا سعيد لأنك أحب هذا المنصب ، وأنا سعيد جدا كنت قادرا على العثور على حل لتنسيق التاريخ الأوروبي. :) -جوستين

حل لتنسيقات التاريخ الأوروبي 10/11/2011 6:45 صباحا مرحبا مرة أخرى جوستين، لمعلوماتك، وجدت حلا للمشكلة التي ذكرتها سابقا في هذه الصفحة؛https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

تنسيقات التاريخ الأوروبية 10/7/2011 3:59 صباحا مرحبا جوستين، هذا هو حل جيد حقا بفضل ، وفقط نوع من الشيء الذي قضيته في اليومين الماضيين بحثا عن! ومع ذلك أنا أواجه قليلا من مشكلة مع ذلك وكنت آمل أن تتمكن من مساعدتي.لقد غيرت التعليمات البرمجية الخاصة بك قليلا لتفاضل حسابات عدد الأيام حتى يحدث شيء ما، بدلا من ذلك منذ ذلك الحين، عن طريق تبديل المتغيرات في السطر الأخير من الدالة "DateDiff"؛ <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> ومع ذلك أنا فقط قادرة على الحصول عليه لسد الفرق بشكل صحيح نصف الوقت. لذلك على سبيل المثال مع هذا التاريخ (تنسيق dd/MM/yyyy)؛ 30/12/2011 يتم حسابه بشكل صحيح، ولكن مع هذا التاريخ (نفس التنسيق) 12/10/2011 تحسب كما لو كانت 10-Dec-2011 بدلا من 12-Oct-2011.حاولت ببساطة تبديل مواضع قيم اليوم والشهر في متغير "JulianStartDate"، مثل هذا؛ <xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),7,2)"/> <xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMMdd'),5,2)"/> وصحح هذا المشكلة في التاريخ الثاني، ومع ذلك كان غير صحيح للتاريخ الأول! لقد حاولت أيضا تغيير استدعاءات FormatDateTime لاستخدام LCIDs الأوروبية والتعديلات المختلفة إلى المعلمة الأخيرة من FormatDateTime (على سبيل المثال ddMMyyyyy, MMddyyyy) مع التعديلات المناسبة لمعلمات موضع السلسلة الفرعية دون نجاح.أنا أقدر كثيرا أي نصيحة يمكنك تقديمها.شكرا ك ريس

بلا تعليمة برمجية 9/21/2011 4:27 صباحا لا أعتقد أن XSL مؤهل كحل "بدون تعليمات برمجية"، لأن فهم لغة XSL ليس للجميع - ومع ذلك فإنه لا يتضمن البرمجة. إلى جانب ذلك: حل لطيف، شكرا لك!

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.