חל על
SharePoint ב-Microsoft 365 SharePoint ב-Microsoft 365 Small Business

מאת ג'סטין ג'ויס, LANtek

הערה: מאמר זה מהווה חלק מאוסף פרסומים מארבע שנים של הבלוג 'קבל את נקודת ' עבור משתמשי קצה של SharePoint.

מבט כולל: דוחות Aging מותאמים אישית ללא קוד

אחת מהפריטים הפונקציונליים המבוקשים לעתים קרובות של אתר SharePoint היא דוח הזדקנות עבור משימות או פריטי רשימה. במילים אחרות, כמה ימים/חודשים חלפו מאז שפריט רשימה זה השתנה לאחרונה?

על פני השטח זה נראה בקשה פשוטה מאוד. אחרי הכל, יש לנו תאריכים עבור פריטים שנוצרים ומשתנים, יש לנו את היכולת לאחסן תאריכים מותאמים אישית כאשר שינויים מסוימים בפריטים מתרחשים דרך מקבלי אירועים. יש לנו עמודות מחושבות שבהן נוכל לכלול נוסחאות הכלולות ב- Excel כדי לעבוד עם המידע שלנו. זה נראה כמו הצעה ישרה למדי קדימה. אנו בוחרים שדה תאריך, יוצרים עמודה מחושבת ולאחר מכן עושים נוסחה כלשהי לאורך השורות של [DateField] – [Today]. אה, לא כל כך מהר, אם כי! כפי שכל מי שמנסה לבצע משימה "פשוטה" זו יודע, ניסיון להשתמש במשהו כמו [Today] בעמודה מחושבת גורם לבעיות. נסה להוסיף את [Today] לתיבת הנוסחה של העמודה המחושבת כדי להציג הודעת שגיאה כגון זו:

הודעת שגיאה

למה זה . ובכן, זה צריך להיות קשר לאיך שעמודות מחושבות מחושבות מחושבות.

בוא נרשום נוסחה פשוטה כדוגמה:

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

כל מה שצוין הוא שאם Column1 קטן או שווה ל- Column2, הצג אישור, אחרת הצג לא אישור. זוהי נוסחה בסיסית אופיינית למדי עבור עמודה מחושבת והיא מבצעת הנחה בסיסית לגבי פריט הרשימה המכיל עמודות אלה: הערכים עבור Column1 ו- Column2 לעולם לא יוכלו להשתנות ללא אירוע Update בפריט הרשימה.

בדיוק, עמודות מחושבות יחושבו מחדש רק כאשר הרשימה מתעדכנת (או נוצרת) מאחר שהן מניחות שהמידע שאתה מחשב כלול בפריט עצמו. פעולה זו יוצרת בעיה כאשר אתה מנסה להשתמש במשהו שישתנה ללא קשר לשדות הפריט, כגון התאריך של היום.

לא הייתי בפגישה שבה הם החליטו שזו הדרך שבה עמודות מחושבות יפעלו, עם זאת, אם הייתי צריך לנחש משכיל הייתי מניח שהם יפעלו בדרך זו לביצועים. דמיין אם היתה לך רשימה של כמה אלפי פריטים, שכל אחד מהם הכיל עמודה מחושבת שהזדקקה לעדכון "חי". משמעות הדבר היא שמנגנון כלשהו, אולי משימת שעון עצר, תכלול כל פריט שהכיל עמודה מחושבת זו מדי פעם ויעדכן את הערך שלו. הדבר עלול להיות מיסוי במיוחד במונחים של ביצועים מכיוון שביצועי פריסה גדולים יותר עשויים לפעול במשימה זו ללא הרף ולבצע שינויים. זה רק ניחוש שלי, אבל זה הגיוני למדי אם אתה חושב על זה.

קיימות כמה הצעות לפתרונות דומים הצפים שם בחוץ, הכוללות תכסיס של SharePoint בקבלת ערך 'היום' על-ידי יצירת עמודה בשם 'היום' ולאחר מכן הוספתה לנוסחה ולאחר מכן מחיקתה. כל אלה טובים וחדשים, אבל זכור מה אמרתי לגבי מתי עמודות מחושבות מתעדכנת. ערך זה ישתנה רק כאשר הפריט יתעדכן, כלומר הערכים שלך יהיו שגויים בקרוב, במיוחד במקרה של חישוב יום.

ראיתי אנשים אחרים שמשתמשים ב- JavaScript חכם כדי לכתוב את הערכים לדף. זה גם יעבוד, אבל אני די מסווגת כנגד כתב-ה- Script של הלקוח כאשר ניתן להימנע מכך.

יישום:

אז מה לעשות . עמודות מחושבות נותנות לאותה שאלה עבור פונקציות "נדיפות" כגון Today. ייתכן שנוכל לפתח קוד מותאם אישית שיטפל בזה בשבילנו, כגון עמודה מחושבת, משימת שעון עצר או תהליך מתוזמן, שיצטרף ויעדכן כל פריט שצריך לבצע חישוב זה. עם זאת, זה מחזיר אותנו לבעיה של ביצועים שציינתי בפיסקה האחרונה, ו בנוסף, זהו פתרון שביר שעשוי להיות ספציפי במיוחד לאתר/רשימה/עמודה המדוברים. בנוסף לשתי החששות הללו, תצטרך גם למצוא בחור חנון, כמו עצמי, שיודע לקוד ולשכנע אותו לפתח פתרון זה עבורך. אבל יש דרך קלה יותר!

אם יש לך זכויות ליצור שדות ולערוך דפים באתר שלך, ויש לך מעט ידע לגבי XSLT ויצירת תצוגות, באפשרותך ליצור תבנית XSL שניתן לכלול בתצוגת רשימה ולחשב את הערך שלך באמונה בכל פעם שהדף יתבקש. תרחיש זה מסיר את דאגתנו לגבי הביצועים, והוא אינו דורש פיתוח ופריסה של קוד מותאם אישית באמצעות פתרון.

מושלם. אז איך אנחנו עושים את זה?

  1. צור או בחר את השדה ש יפעל כמקור שלנו. עליו להיות סוג תאריך.

  2. צור את השדה שלנו שישוב כמציין מיקום עבור הערך המחושב.

  3. הוסף את שני השדות האלה לסוג תוכן והוסף סוג תוכן זה לרשימה.

  4. צור תצוגה של רשימה זו המכילה הן את העמודות המשמשות כמקור והן עמודות מצייני מיקום.

  5. העלה את תבנית ה- XSL לספריית הסגנונות.

  6. הגדר את המאפיין "XSL Link" עבור ה- Web Part של תצוגת רשימה באמצעות ממשק המשתמש.

  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&הרשאותChanged=1&id=C262E8E2D59A86D9!104

אם תמשיך לגלול מטה אל שורה 357 תראה שפע של סימוני XSL רגילים של SharePoint לעיבוד התצוגות, אם תמשיך לגלול למטה עד שורה 357, תראה את התחלת התבניות המותאמות אישית שהוספתי לסימון, הראשונה היא התבנית "DateDiff" ואחריה "calculate-julian-day" ו- "FieldRef_printTableCell_EcbAllowed.Days_x0020_At_x0020_Status". אלה הן שלוש התבניות שלנו שתבצע ויציגו את החישובים שלנו בתצוגות שלנו. אם בכוונתך להשתמש בשמות שדות שונים מאלה שצוינו קודם לכן במאמר זה, יהיה עליך לעבור על תבניות אלה ולהחליף את כל ההפניות לשמות האחרים. זכור, לשם כך, מומלץ להשתמש בשם הפנימי של השדה ולא בשם התצוגה.

כאשר תהיה מרוצה שהתבנית מוכנה, נווט אל ספריית הסגנונות והעלה אותה תחת התיקיה "גליונות סגנונות XSL" ולאחר מכן העתק את הקישור לקובץ. פעולה זו תאפשר לנו לבצע בו שינויים בקלות במועד מאוחר יותר, או להוסיף אותו לחלקים שונים של האתר, בהתאם לתקלות.

לאחר מכן, עבור לרשימה ובחר את התצוגה שיצרת מוקדם יותר במאמר זה. בתפריט 'פעולות אתר', לחץ על 'ערוך דף'.

הפקודה 'ערוך דף' בתפריט 'פעולות אתר'

אתר את ה- Web Part של תצוגת רשימה בדף ופתח את תפריט ה- Web Part על-ידי לחיצה על החץ הקטן הפונה כלפי מטה בפינה השמאלית העליונה. בתפריט זה, בחר "עריכת Web Part".

עריכת פקודה של Web Part בתפריט Web Part

פעולה זו תפתח את התפריט של ה- Web Part בצד השמאלי של חלון הדפדפן.

תפריט Web Part

לחץ על + עבור המקטע "שונות" ואתר את המאפיין "קישור XSL".

המאפיין 'קישור XSL' בתפריט Web Part

הדבק את הקישור לקובץ ה- XSL בספריית הסגנונות שהעתקת קודם לכן (קישור זה יכול להיות קישור יחסי או מוחלט).

קישור קובץ XSL מודבק

לחץ על "אישור" כדי לשמור את השינויים ולאחר מכן לחץ על לחצן "הפסק עריכה" ברצועת הכלים "דף" בחלק העליון של הדף.

לחצן 'הפסק עריכה' בכרטיסיה 'דף'

אם התצורה של הכל נקבעה כראוי, אתה אמור לראות כעת מספרים בעמודה "ימים במצב".

העמודה 'ימים במצב' מציגה מספר

ולבסוף, כך זה יראה עם כמה נתוני בדיקה של תאריכים שונים:

דוח התיישנות מציג נתוני בדיקה

‏‏תקציר:

הנה זה: דרך בעלת עיצוב יפה, יציבה וביצוע טובה יותר ליצירת דוח הזדקנות ב- SharePoint. עם יישום פשוט ללא קוד. יש לנו לא מעט יישומים פוטנציאליים מלבד מקרה השימוש הנתקל בו כאן. תרחיש נפוץ נוסף עבור דוח מסוג זה מצרף אותו לרשימת משימות כדי שתוכל לראות כמה זמן עבר מאז יצירת משימה במבט מהיר.

בהצלחה!

--ג'סטין

ג'סטין ג'ויס, LANtek

הערות

שלבים חסרים 10/8/2012 03:51 AM בסדר ביצעתי את השלבים, אך חייב להיות משהו חסר - כיצד ה- XSL יודע באיזה תאריך להשתמש, או באיזה שדה יש להוסיף את הימים? שונא את זה כאשר שלבים חסרים.

ללא קוד, מוסכם! 30/08/2012 12:12 בלילה אני מסכים - אני לא חושב שזה נחשב כ"אין קוד".מעניין, על-ידי תיקון תקין של SharePoint, יש לי עמודה מחושבת עובדת המשתמשת ב- Today... לא בטוח איך או למה כי אני לא יכול לקבל את זה לעשות את זה שוב, אבל אחד הוא עדיין שם עובד.

נוסחה עבור העמודה המחושבת "ימים במצב"? 02/05/2012 07:39 AM ג'סטין - מהי הנוסחה שבה השתמשת עבור עמודת האתר המחושבת "ימים במצב" (עמודת מציין מיקום)? זה היה "=today"?

SharePoint 2007 2/12/2011 11:29 AM בשלב זה לא ניסיתי להחיל פתרון זה על SharePoint 2007, אך אני מסתכל עליו. למרבה הצער, לא מופיע מאפיין XslLink ב- Web Part באמצעות ממשק המשתמש.

פרסום נהדר 30/11/2011 09:53 שלום הודעה נהדרת.אני משתמש ב- SharePoint 2007.אין לי מקטע Misc כפי שצוין לעיל.האם יש לך שלבים עבור תצורת SP2007? תודה.

ש: פתרון ללא קוד: הצגת הימים מאז שפריט רשימה של SharePoint השתנה לאחרונה 10/11/2011 08:24 AM היי, כריס .חיפוש נהדר! אני הולך להסתכל על מה שפרסמה בתקווה מאוחר יותר היום ולראות אם אני יכול להפוך את הפתרון הזה קצת יותר חזק.אני שמח שאהבת את הפרסום, ואני שמח מאוד שיכולת למצוא פתרון לתבנית התאריך האירופאית. :) אישית -ג'סטין

פתרון עבור תבניות תאריך אירופאיות 10/11/2011 06:45 AM שלום שוב ג'סטין, לידיעתך, מצאתי פתרון לבעיה שציינתי קודם לכן בדף זה;https://sharepointbydummies.wordpress.com/2011/07/13/possible-work-around-to-date-format-issue-sharepoint-2010/

תבניות תאריך אירופאיות 7/10/2011 03:59 AM היי, ג'סטין. זהו פתרון ממש טוב תודה, ו סוג של דבר אני כבר בילה את היומיים האחרונים מחפש! עם זאת, אני נתקל בבעיה קטנה עם זה ואני מקווה שאתה יכול לעזור לי.החלפתי את הקוד שלך מעט כדי לחשב את מספר הימים עד שמשהו יקרה, ולא מאז, על-ידי החלפת המשתנים בשורה האחרונה של הפונקציה DateDiff; <xsl:value-of select="$JulianToday - $JulianStartDate"></xsl:value-of> עם זאת, אני יכול רק להשיג את זה כדי לכלול את ההבדל כראוי מחצית הזמן. לכן, לדוגמה, עם תאריך זה (תבנית dd/MM/yyyy); 12/03/2011/2011 היא מחשבת כראוי, אך עם תאריך זה (אותה תבנית) תאריך הפצה בתאריך 10/12/2011 היא מחשבת כאילו 10-דצמבר-2011 ולא 12-אוקטובר-2011.ניסיתי פשוט להחליף את העמדות של ערכי היום והחודש במשתנה "JulianStartDate", כך; <xsl:with-param name="Month" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMdd'),7,2)"/> <xsl:with-param name="Day" select="substring(ddwrt:FormatDateTime(string($StartDate), 1033, 'yyyyMdd'),5,2)"/> ותיקון זה תיקן את הבעיה בתאריך השני, עם זאת הוא היה שגוי עבור התאריך הראשון! בנוסף, ניסיתי לשנות את הקריאות של FormatDateTime לשימוש במ מזהי LCID אירופאיים ובמגוון שינויים בפרמטר האחרון של FormatDateTime (למשל ddMMyyyy, MMddyyyy) עם ההתאמות המתאימות לפרמטרים של מיקום מחרוזת המשנה ללא הצלחה.אני אעריך מאוד כל עצה שתוכל להציע.תודה כריס

ללא קוד 21/09/2011 04:27 AM אני לא חושב ש- XSL עומד בדרישות כפתרון "ללא קוד", מכיוון שהבנת שפת ה- XSL אינה מיועדת לכולם - אך היא אינה כוללת תכנות. חוץ מזה: פתרון נחמד, תודה!

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.