لا يوجد حل للتعليمات البرمجية: عرض الأيام منذ آخر تغيير لعنصر قائمه
Applies To
SharePoint في Microsoft 365 SharePoint في الشركات الصغيرة الخاصة بـ Microsoft 365بواسطة جوستين جويس ، لأنتيك
ملاحظة: تمثل هذه المقالة جزءا من مجموعه من المنشورات من أربع سنوات للمستخدمين " الحصول علي المدونة" ل SharePoint.
نظره عامه: تقارير اعمار مخصصه بدون رمز
تعتبر أحدي الأجزاء الوظيفية المطلوبة في موقع SharePoint الخاصة به تقرير فتره التاخر للمهام أو عناصر القائمة. بكلمات أخرى ، عدد الأيام/الأشهر التي تم فيها منذ آخر تعديل لعنصر القائمة هذا ؟
علي السطح ، يبدو انه طلب بسيط للغاية. بعد الكل ، لدينا تواريخ للعناصر التي يتم إنشاؤها وتعديلها ، تتوفر لدينا القدرة علي تخزين تواريخ مخصصه عند حدوث تغييرات معينه علي العناصر عبر مستقبل الاحداث. لقد قمنا بحساب أعمده بحيث يمكننا تضمين صيغ مثل Excel لاستخدام المعلومات الخاصة بنا. يبدو هذا مثل الاقتراحات المباشرة. نقوم باختيار حقل التاريخ ، وقم بإنشاء عمود محسوب ، ثم قم بتنفيذ صيغه شيء ما علي طول أسطر [داتيفيلد]-[اليوم]. Ah ، وليس علي الرغم من ذلك! بما ان اي شخص قام بتجربة هذه المهمة "بسيطه" ، فان محاولة استخدام شيئا مثل [اليوم] في عمود محسوب يؤدي إلى حدوث مشاكل. محاولة ادراج [اليوم] في مربع صيغه العمود المحسوب سيعطيك رسالة خطا مماثله لما يلي:
ما سبب ذلك ؟ حسنا ، يجب القيام بذلك بالطريقة التي يتم بها حساب الاعمده المحسوبة.
دعنا ننقل صيغه بسيطه كمثال:
= IF ( [Column1] <= [Column2], "موافق", "Not OK")
كل هذا هو انه إذا كانت قيمه Column1 اقل من أو تساوي Column2 ، سيتم عرضها بشكل غير صحيح ، وبخلاف ذلك لا يمكن العرض. هذه صيغه أساسيه نموذجيه بالنسبة إلى عمود محسوب وينتج عنه افتراض أساسي حول عنصر القائمة الذي يحتوي علي هذه الاعمده: لن تتمكن أبدا من تغيير القيم الخاصة ب Column1 و Column2 بدون حدث تحديث علي عنصر القائمة.
هذا صحيح ، سيتم فقط أعاده حساب الاعمده المحسوبة عند تحديث القائمة (أو إنشاؤها) لأنها افترض ان المعلومات التي تقوم بحسابها مضمنه في العنصر نفسه. يؤدي هذا إلى إنشاء مشكله عند محاولة استخدام شيء يتغير بشكل مستقل عن حقول العنصر ، مثل تاريخ اليوم.
لم أقم الآن في الاجتماع في المكان الذي حددت فيه ان هذه هي الطريقة التي ستعمل بها الاعمده المحسوبة ، ومع ذلك ، إذا كنت قد تخمين تخمينا بهذه الطريقة للأداء. تصور إذا كانت لديك قائمه بعده آلاف عنصر ، تضمن كل منها عمودا محسوبا يحتاج إلى تحديث "live". قد يعني ذلك ان بعض أليات ، ربما تكون مهمة مؤقته ، ستحتاج إلى التكرار عبر كل عنصر من العناصر التي تحتوي علي هذا العمود المحسوب كل الأمور التي تستخدمها. يمكن ان يكون هذا التشنج للغاية وفقا لمستوي الأداء لان العمليات الكبيرة التي قد يتم تشغيل هذه المهمة بشكل ثابت وتغيير الأمور. هذا هو فقط تخميناتي ، ولكنه يجعل القليل من الأمور المفيدة إذا رايته.
هناك بعض الاقتراحات المتعلقة بالحلول المشابهة التي تم حلها في المقابل هناك التي تتضمن تريكينج SharePoint في لقبول قيمه اليوم ، ثم اضافتها إلى الصيغة ، ثم حذفها. تكون هذه العناصر جيده ورائعه ، ولكن تذكر ما الذي قلته عند تحديث الاعمده المحسوبة. ستتغير هذه القيمة فقط عندما يتم تحديث العنصر الذي يعني ان القيم ستكون غير صحيحه ، وخاصه في حاله حساب اليوم.
لقد قمت برؤية الآخرين باستخدام عمل JavaScript لكتابه القيم إلى الصفحة. وهذا قد يعمل أيضا ، ولكن انا كاتيجوريكالي مقابل البرنامج النصي للعميل عندما يمكن تجنبه.
تصميم
فما الذي يجب فعله ؟ الاعمده المحسوبة خارج السؤال لكي تسمي الدالات "المتغيرة" مثل اليوم. من الممكن ان نقوم بتطوير بعض التعليمات البرمجية المخصصة لتجربه هذا الاجراء لنا مثل عمود محسوب أو مهمة مؤقت أو عمليه مجدولة ، وتحديث كل عنصر واحد يحتاج إلى هذه العملية الحسابية. ستعود إلى مشكله الأداء الذي قمت بالاشاره اليه في الفقرة الاخيره ، الاضافه إلى ذلك ، وهو عبارة عن حل بريتلي سيكون محددا بشكل كبير للموقع/القائمة/العمود المطلوب. في الجزء العلوي من الاهتمامين ، سيتعين عليك أيضا البحث عن نيردي شخص ، مثل نفسي ، الذي يعرف كيفيه القيام بالتعليمات البرمجية وإقناعه بتطوير هذا الحل نيابة عنك. لكن هناك طريقه أسهل!
إذا كانت لديك حقوق إنشاء الحقول وتحرير الصفحات علي موقعك ، وكانت لديك بعض المعلومات حول XSLT وإنشاء طرق العرض ، فيمكنك وضع قالب XSL يمكن تضمينه في طريقه عرض القائمة سفايثفولي حساب القيمة في كل مره يتم فيها طلب الصفحة. يزيل هذا السيناريو اهميه الأداء ، ولا يتطلب تطوير تعليمه برمجيه مخصصه ونشرها عبر حل.
ممتاز. كيف نقوم بذلك ؟
-
قم بإنشاء الحقل الذي سيعمل كمصدرنا أو تحديده. يجب ان يكون نوع التاريخ.
-
إنشاء الحقل الخاص بنا الذي سيعمل كعنصر نائب للقيمة التي يتم حسابها.
-
أضف كلا هذين الحقلين إلى نوع محتوي وأضف نوع المحتوي هذا إلى قائمه.
-
قم بإنشاء طريقه عرض لهذه القائمة تحتوي علي كل من عمودي المصدر والعنصر النائب.
-
تحميل قالب XSL إلى مكتبه الأنماط.
-
قم بتعيين الخاصية "ارتباط XSL" لجزء ويب لعرض القائمة عبر واجهه المستخدم.
-
تم بنجاح!
دعنا نستكشف مثالا حول استخدام الحالة واطلع علي التطبيق. يرغب العميل لدينا في عرض القائمة الرئيسية الخاصة به التي ستخبرهم عن المدة التي يستغرقها عنصر قائمه معينه عند حالته. تحتوي هذه القائمة علي نوع محتوي موقع مخصص تم اشتقاقه من نوع العنصر وأضافه إلى القائمة. ثمة بالفعل متلقي حدث في المكان الذي يتم فيه التقاط في كل مره يتم فيها تغيير حقل الحالة في عنصر القائمة وحفظه في عمود يسمي "حاله التاريخ" التي تم تغييرها. كل هذه الأسلاك غير مطلوبه ، ويمكن القيام بها باستخدام اي حقل تاريخ (فهذا هو التطبيق الخاص بنا ولكن من الأفضل ان تقوم بتجربتها). ستحتاج إلى الحد الأدنى المسموح به للحقل "تاريخ المصدر" و "حقل العنصر النائب" للاحتفاظ بالحساب (المزيد في الفقرة التالية) التي تمت اضافتها إلى القائمة ، علي الرغم من اننا نقترح استخدام أعمده الموقع وأنواع محتوي الموقع في حال كنت ترغب في أعاده استخدام هذا الحل
لذلك ، لدينا تاريخ المصدر الخاص بنا الذي يمكننا استخدامه في حسابنا مقابل تاريخ اليوم. يمكننا الآن إنشاء عمود موقع مخصص لاستخدامه كحاويه لقيمته المحسوبة. في هذه الحالة ، لقد اخترت استخدام عمود محسوب لأنه لن يتمكن من تغيير نماذج العناصر الجديدة أو تحريرها ، ولكن يمكنك تحديده للعرض في طرق العرض التي لا تريد ان يدخل فيها المستخدمون قيما إجباريه في هذا العمود. قد يكون الأمر مربكا لماذا لا يتم عرضه في طرق العرض ، وما إلى ذلك.
والآن بعد ان يكون لدينا عمود الموقع الخاص بنا ، يمكننا اضافته إلى أنواع المحتويات الخاصة بنا التي سيتم استخدامها في قائمتنا. بعد ذلك ، نحتاج إلى إنشاء طريقه العرض الخاصة بنا التي سيتم تخصيصها لاحقا باستخدام XSLT. تاكد من إنشاء طريقه عرض قياسيه تحتوي علي عمود تاريخ المصدر والعمود المحسوب الجديد الذي سيعمل كعنصر نائب للقيمة المحسوبة.
لدينا الآن كل شيء في المكان الذي سنطلبه لدعم تقرير اعمار الديون المخصصة الخاص بنا. كل ما يتبقى هو إنشاء قالب XSL الخاص بنا ، وتحميله إلى مكتبه أنماط الموقع ، وربطه بطريقه عرض القائمة. سيقوم قالب XSL الذي سنستخدمه باستخدام بعض العلامات العادية التي يتم إنشاؤها بواسطة SharePoint لإنشاء طريقه العرض بالاضافه إلى العلامات المخصصة الخاصة بنا المستخدمة لتجاوز أجزاء معينه منها وحساب القيمة المطلوبة لنا.
تقديم الرصيد حيث يكون الرصيد مستحقا ، تم توفير قوالب XSL لاجراء العمليات الحسابية الفعلية التي استخدمتها لهذا الحل جراسيوسلي بواسطة "سويرتش" في منتديات 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&بيرميشنشانجيد = 1&ID = c262e8e2d59a86d9! 104
سيؤدي فتح هذا الخيار في محرر النص المفضل لديك إلى عرض الكثير من علامات SharePoint XSL العادية لتقديم طرق العرض ، وذلك إذا كنت تريد التمرير لأسفل إلى السطر 357 ، ستشاهد بداية القوالب المخصصة التي أضفتها إلى العلامات ، والاولي التي يتم تطبيقها علي الDays_x0020_At_x0020_Status FieldRef_printTableCell_EcbAllowed قالب "DateDiff" هذه هي القوالب الثلاثة التي ستقوم باجراء العمليات الحسابية وعرضها في طرق العرض الخاصة بنا. إذا كنت ستستخدم أسماء حقول مختلفه عن تلك التي تم تحديدها مسبقا في هذه المقالة ، ستحتاج إلى الانتقال عبر هذه القوالب واستبدال اي مراجع بالأسماء الأخرى. تذكر انك ستحتاج إلى استخدام الاسم الداخلي للحقل وليس اسم العرض.
بمجرد ان تصبح القالب جاهزا للانتقال ، انتقل إلى مكتبه الأنماط وقم بتحميله ضمن مجلد "أوراق أنماط XSL" ثم انسخ الارتباط إلى الملف. سيسمح لنا هذا باجراء تغييرات عليها بسهوله في وقت لاحق ، أو اضافتها إلى أجزاء مختلفه من الموقع.
بعد ذلك ، انتقل إلى القائمة وحدد طريقه العرض التي انشاتها سابقا في هذه المقالة. من القائمة "إجراءات الموقع" ، انقر فوق "تحرير الصفحة".
ابحث عن جزء ويب الخاص بطريقه عرض القائمة علي الصفحة وافتح قائمه جزء ويب بالنقر فوق السهم المتجه لأسفل الصغير في الزاوية العلوية اليسرى. من هذه القائمة ، حدد "تحرير جزء ويب".
سيؤدي ذلك إلى فتح القائمة "جزء ويب" علي الجانب الأيمن من نافذه المستعرض.
انقر فوق المقطع + للمقطع "متنوع" وحدد موقع الخاصية "ارتباط XSL".
قم باللصق في الارتباط إلى ملف XSL في مكتبه الأنماط التي نسختها سابقا (يمكن ان يكون الارتباط نسبيا أو مطلقا).
انقر فوق "موافق" لحفظ التغييرات ، ثم انقر فوق الزر "إيقاف التحرير" علي شريط "الصفحة" في اعلي الصفحة.
إذا تم تكوين كل شيء بشكل صحيح ، فعليك الآن رؤية الأرقام في العمود "الأيام في الحالة".
وأخيرا ، اليك الاجراء الذي سيبدو عليه باستخدام بعض بيانات الاختبار لتواريخ مختلفه:
تلخيصي
هناك: الطريقة التي تم تنسيقها بشكل جيد وفعاله وأفضل أداء لإنشاء تقرير فتره التاخر في SharePoint. ، إكماله باستخدام تطبيق بسيط بدون تعليمات برمجيه. هذا العدد من التطبيقات المحتملة والتي اكسبلوريدها هنا. السيناريو الشائع الآخر لهذا النوع من التقارير هو إرفاقه بقائمه مهام لكي تتمكن من رؤية المدة التي كانت فيها منذ إنشاء مهمة بسرعة.
استمتع!
--جوستين
جوستين جويس ، لأنتيك
التعليقات
الخطوات مفقوده
10/8/2012 3:51 AM هل اتبعت الخطوات التالية ، ولكن يجب ان يكون هناك شيء ما مفقود-كيف سيعرف XSL التاريخ الذي يجب استخدامه ، أو الحقل الذي تريد أضافه الأيام اليه ؟ تكرهها عند فقدان الخطوات.لا توجد تعليمات برمجيه ، تمت الموافقة عليها!
8/30/2012 12:12 م أوافق-لا اعتقد ان هذا هو الحق في الحساب "بلا رمز". إينتيريستينجلي ، عبر بعض سكريووبات SharePoint ، لديك عمود محسوب للعمل يستخدم اليوم... لم تكن متاكدا من الطريقة التي يمكنني استخدامها لتنفيذ ذلك الأمر مره أخرى ، ولكن ما زال الأمر كذلك.صيغه للعمود "الأيام في الحالة" ؟
5/2/2012 7:39 AM جوستين-ما هي الصيغة التي استخدمتها في عمود الموقع المحسوب (العمود العنصر النائب) ؟ هل كان "= اليوم" ؟SharePoint 2007
12/2/2011 11:29 AM لم أقم حاليا بمحاولة تطبيق هذا الحل علي SharePoint 2007 ، ولكني سابحث عنه. للأسف لا توجد خاصيه إكسسلينك سورفاسيد علي جزء ويب عبر واجهه المستخدم.منشور
رائع 11/30/2011 9:53 AM مرحبا ، منشور رائع. انا استخدم SharePoint 2007. ليس لدي قسم متنوع كما هو موضح أعلاه. هل لديك خطوات لتكوين SP2007 ؟ شكرا.Re: الحل بدون تعليمات برمجيه: عرض الأيام منذ آخر تغيير
لعنصر في قائمه SharePoint 10/11/2011 8:24 AM مرحبا تحيه. بحث رائع! سالق نظره علي المهام التي قمت بنشرها أملين لاحقا في اليوم ومعرفه ما إذا كان يمكنني اجراء هذا الحل أكثر فعاليه. انا يسعدني الإعجاب بالمنشور ، وانا سعيد جدا انه يمكنك العثور علي حل لتنسيق التاريخ الأوروبي. :) -جوستينالحل لتنسيقات https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/
التاريخ الأوروبي 10/11/2011 6:45 AM مرحبا جوستين مره أخرى ، لمعلومتاتك ، لقد عثرت علي حل للمشكلة التي قمت بالرد عليها مسبقا علي هذه الصفحة ؛تنسيقات
التاريخ الاوروبيه 10/7/2011 3:59 AM مرحبا جوستين ، هذا الحل جيد جدا بالنسبة اليك ، وهو الأمر الذي حصلت فيه علي آخر يومين تم البحث عنهما في! ولكني أواجه مشكله فيها وكانت هوبينج يمكنك مساعدتي. لقد قمت بتغيير التعليمات البرمجية الخاصة بك بشكل طفيف لكالكولتاتي عدد الأيام حتى يحدث شيء ما ، بتبديل المتغيرات في السطر الأخير من الدالة "DateDiff" ؛ <xsl: قيمه select = "$JulianToday-$JulianStartDate" ></xsl: قيمه> ومع ذلك ، لا أستطيع الحصول عليه الا لكاكلولاتي الفرق في نصف الوقت بشكل صحيح. بالنسبة إلى المثيل بهذا التاريخ (التنسيق dd/MM/yyyy) ؛ 30/12/2011 يتم حسابها بشكل صحيح ، ولكن مع هذا التاريخ (نفس التنسيق) 12/10/2011 يتم حسابها كما لو كانت 10-ديسمبر-2011 بدلا من 12 أكتوبر-2011. لقد حاولت ببساطه تبديل موضع قيم اليوم والشهر في المتغير "جوليانستارتداتي" ، مثل هذا ؛ <xsl: with name = "Month" = "الشهر" select = "السلسلة الفرعية (دورت: FormatDateTime (string ($StartDate), 1033, ' ييييممد '), 7, 2)"/> <xsl: with name = "Day" = "اليوم" select = "دورت: FormatDateTime (string ($StartDate), 1033, ' ييييممد '), 5, 2)"/> وقد قمت بتصحيح المشكلة المتعلقة بالتاريخ الثاني ، ولكنه غير صحيح للتاريخ الأول! لقد جربت أيضا تغيير المكالمات الFormatDateTimeه لاستخدام اللسيدس الاوروبيه والتيريشنز المتعددة إلى المعلمة الاخيره من FormatDateTime (مثل دمي و ممدي) مع التعديلات المناسبة للمعلمات الموضعية الفرعية دون نجاح. انني نقدر بشكل كبير اي نصيحه يمكنك تقديمها. شكرا ، ابلغبدون رمز
9/21/2011 4:27 AM لا اعتقد ان XSL يؤهل كحل "التعليمات البرمجية التي لا تحتوي علي" ، لان التعرف علي لغة XSL ليس للجميع-ولكنه لا يتضمن برمجه. بالاضافه إلى ذلك: حل جيد ، شكرا لك!