פתרון ללא קוד: הצגת הימים מאחר שפריט רשימה השתנה לאחרונה
Applies To
SharePoint ב-Microsoft 365 SharePoint ב-Microsoft 365 Small Businessמאת ג'אסטין ג'ויס, LANtek
הערה: מאמר זה מהווה חלק מאוסף של פרסומים מארבע שנים של הבלוג ' קבל את הנקודה ' עבור משתמשי קצה של SharePoint.
מבט כולל: דוחות גיול מותאמים אישית ללא קוד
אחת מהחתיכות הפונקציונליות המבוקשות לעתים קרובות של אתר SharePoint היא דוח גיול עבור פעילויות או פריטי רשימה. במילים אחרות, כמה ימים/חודשים חלפו מאז שפריט רשימה זה השתנה לאחרונה?
על פני השטח זו נראית בקשה מאוד פשוטה. לאחר הכל, יש לנו תאריכים עבור פריטים שנוצרו ושונו, יש לנו את היכולת לאחסן תאריכים מותאמים אישית כאשר שינויים מסוימים בפריטים מתרחשים באמצעות מקלטי אירועים. השגנו עמודות מחושבות שבהן ניתן לכלול נוסחאות בדומה ל-Excel כדי לעבוד עם המידע שלנו. זה נראה כמו הצעה ממש העברה ישר. באפשרותנו לבחור שדה תאריך, ליצור עמודה מחושבת ולאחר מכן לבצע נוסחה משהו לאורך הקווים של [DateField] – [Today]. אה, לא כל כך מהר, בכל זאת! כפי שכל מי שניסה את המשימה "פשוטה" זו יודע, מנסה להשתמש במשהו כגון [Today] בעמודה מחושבת גורמת לבעיות. נסה להוסיף [היום] לתוך תיבת הנוסחה של העמודה המחושבת תספק לך הודעת שגיאה כגון זו:
מדוע זה? ובכן, זה קשור לאופן שבו העמודות המחושבות מחושבות.
בוא ניקח נוסחה פשוטה כדוגמה:
= IF ( [Column1] < = [Column2], "OK", "Not OK")
כל מה שנאמר הוא שאם Column1 קטן או שווה ל-Column2, הצג אישור, אחרת לא יוצג אישור. זוהי נוסחה בסיסית טיפוסית למדי עבור עמודה מחושבת, והיא מהווה הנחה בסיסית לגבי פריט הרשימה המכיל עמודות אלה: הערכים עבור Column1 ו-Column2 לא יוכלו להשתנות ללא אירוע עדכון בפריט הרשימה.
נכון לעכשיו, עמודות מחושבות ייחשב מחדש רק כאשר הרשימה תתעדכן (או תיווצר) מאחר שהם יניחו שהמידע שאתה מחשב מכיל בפריט עצמו. פעולה זו יוצרת בעיה כאשר אתה מנסה להשתמש בפריט שמשתנה ללא קשר לשדות של הפריט, כגון התאריך של היום.
כעת לא הייתי בפגישה שבה הם החליטו שזוהי הדרך שבה העמודות המחושבות יפעלו, עם זאת, אם הייתי צריך לקבל ניחוש מושכל, הייתי מניח שהם פועלים בדרך זו לביצועים. תאר לעצמך אם הייתה לך רשימה של כמה אלפי פריטים, שכל אחד מהם הכיל עמודה מחושבת שהיתה זקוקה לעדכון "חי". משמעות הדבר היא שמנגנון מסוים, אולי משימת שעון עצר, תצטרך לחזר דרך כל פריט שהכיל את העמודה המחושבת הזאת מדי פעם ולעדכן את הערך שלו. אפשרות זו עשויה להיות מפרכת במיוחד במונחים של ביצועים מכיוון שבפריסות גדולות יותר משימה זו עשויה לפעול ולשנות דברים באופן קבוע. זהו רק הניחוש שלי, אך זה הגיוני מאוד אם תחשוב על כך.
יש כמה הצעות לפתרונות דומים המרחפים בחוץ, הכוללים הטעיית של SharePoint כדי לקבל ערך היום על-ידי יצירת עמודה בשם היום, ולאחר מכן הוספתה לנוסחה שלך ומחיקתם. כל אלה טובים וטובים, אך זכור מה אמרתי בנוגע למועד העדכון של עמודות מחושבות. ערך זה ישתנה רק כאשר הפריט יתעדכן כלומר, הערכים שלך יהיו שגויים בקרוב, במיוחד במקרה של חישוב יום.
ראיתי אנשים אחרים באמצעות JavaScript פיקח כדי לכתוב את הערכים לדף. פעולה זו גם מתאפשרת לך, אך אני כמעט לפי תסריט הלקוח כאשר ניתן להימנע ממנה.
יישום
אז מה לעשות? עמודות מחושבות אינן מועברות לשאלה שנקראת "נדיף" functions כמו היום. ייתכן שנוכל לפתח קוד מותאם אישית מסוים כדי לטפל בבעיה זו עבורנו כמו עמודה מחושבת, משימת שעון עצר או תהליך מתוזמן כדי להצטרף ולעדכן כל פריט בודד שזקוק לחישוב זה. פעולה זו מחזירה אותנו לבעיית הביצועים שהזכרתי בפיסקה האחרונה, ובנוסף זהו פתרון שביר שעשוי להיות ספציפי מאוד לאתר/לרשימה/לעמודה המדוברת. בחלק העליון של שני החששות האלה, עליך גם ללכת למצוא בחור חנון, כגון עצמי, שיודע כיצד לבצע קוד ולשכנע אותו לפתח פתרון זה עבורך. אך יש דרך קלה יותר!
אם יש לך זכויות ליצירת שדות ועריכת דפים באתר שלך, ולקבל מעט ידע אודות XSLT ויצירת תצוגות, באפשרותך להרכיב תבנית XSL שניתן לכלול בתצוגת רשימה ולחשב בנאמנות את הערך שלך בכל פעם שהדף מתבקש. תרחיש זה מסיר את הדאגה שלנו לגבי הביצועים, ואינו דורש שימוש בקוד מותאם אישית באמצעות פתרון.
מושלמת. אז כיצד ניתן לעשות זאת?
-
צור או בחר את השדה שישמש כמקור שלנו. זה חייב להיות סוג תאריך.
-
צור את השדה שלנו שישמש כמציין מיקום עבור הערך המחושב.
-
הוסף את שני השדות האלה לסוג תוכן והוסף סוג תוכן זה לרשימה.
-
צור תצוגה של רשימה זו המכילה הן את עמודות המקור והן את עמודות מצייני המיקום.
-
העלה את תבנית XSL לספריית הסגנונות.
-
הגדר את המאפיין ' קישור XSL ' עבור ה-Web Part של תצוגת רשימה באמצעות ממשק המשתמש.
-
הצלחה!
בוא נבחן מקרה של שימוש לדוגמה והתהלך ביישום. הלקוח שלנו רצה להציג את הרשימה הראשית שלהם, שאמור לומר להם כמה זמן פריט רשימה מסוים ישב במצבו. רשימה זו הכילה סוג תוכן אתר מותאם אישית שנגזר מסוג הפריט ונוסף לרשימה. כבר היה מקלט אירוע במקום שנלכד בכל פעם ששדה המצב בפריט הרשימה השתנה ושמרת תאריך זה לעמודה בשם "מצב תאריך השתנה". כל החיווט אינו נדרש, וניתן לעשות זאת באמצעות כל שדה תאריך (זה פשוט קורה כך שזהו היישום שלנו, אך הרגש חופשי להתנסות). המינימום המזערי שתזדקק לו הוא שדה תאריך המקור והשדה מציין מיקום כדי לקיים את החישוב (עוד בפיסקה הבאה בפיסקה הבאה), למרות שאני מציע לך להשתמש בעמודות אתר ובסוגי תוכן אתר למקרה שתרצה לעשות שימוש חוזר בפתרון זה במקומות אחרים באתר שלך.
יש לנו את תאריך המקור שלנו שנוכל להשתמש בו בחישוב שלנו כנגד התאריך של היום. כעת ניתן ליצור עמודת אתר מותאמת אישית לשימוש כגורם מכיל עבור הערך המחושב שלנו. במקרה זה, בחרתי להשתמש בעמודה מחושבת מאחר שלא ניתן לשנות אותה בטפסי הפריט החדשים או לערוך פריטים, אך ניתן לבחור אותם לתצוגה בתצוגות מאחר שאין ברצונך שמשתמשים יכניסו ערכים שרירותיים לעמודה זו. ייתכן שהוא מבלבל לגבי הסיבה לכך שהוא אינו מוצג בתצוגות וכדומה.
כעת, כאשר יש לנו את עמודת האתר שלנו, אנו יכולים להוסיף אותו לסוגי התוכן שישמשו אותנו ברשימה שלנו. לאחר מכן, אנו צריכים ליצור את התצוגה שלנו שמאוחר יותר תתאים אישית את ה-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 לעיבוד התצוגות, אם תמשיך לגלול כלפי מטה ל-line 357 תראה את ההתחלה של התבניות המותאמות אישית שהוספתי לסימון, הראשונה המהווה את תבנית "DateDiff" ולאחר מכן "חשב-ג'וליאן-day" ו Days_x0020_At_x0020_Status-"FieldRef_printTableCell_EcbAllowed. אלה הן שלוש התבניות שלנו שיבצעו ויציגו את החישובים שלנו בתצוגות שלנו. אם אתה מתכוון להשתמש בשמות שדות שונים מאלה שצוינו לעיל במאמר זה, יהיה עליך לעבור על תבניות אלה ולהחליף את ההפניות לשמות האחרים. זכור, כדי שתוכל להשתמש בשם הפנימי של השדה לא בשם התצוגה.
לאחר שאתה משוכנע שהתבנית מוכנה לעבור, נווט אל ספריית הסגנונות והעלה אותה תחת התיקיה "גליונות סגנונות של XSL" ולאחר מכן העתק את הקישור לקובץ. הדבר יאפשר לנו לבצע בו שינויים בקלות מאוחר יותר, או להוסיף אותו לחלקים שונים של האתר בהתאם לרצונו.
לאחר מכן, עבור אל הרשימה ובחר את התצוגה שיצרת קודם לכן במאמר זה. בתפריט ' פעולות אתר ', לחץ על ' ערוך דף '.
אתר את ה-Web part של תצוגת רשימה בדף ופתח את תפריט ה-Web part על-ידי לחיצה על החץ הקטן הפונה מטה בפינה השמאלית העליונה. מתפריט זה, בחר ' ערוך Web part '.
פעולה זו תפתח את התפריט של ה-Web Part בצד הימני של חלון הדפדפן שלך.
לחץ על המקטע ' שונות ' ואתר את המאפיין ' קישור XSL '.
הדבק את הקישור לקובץ XSL בספריית הסגנונות שהעתקת מוקדם יותר (אפשרות זו יכולה להיות קישור יחסי או מוחלט).
לחץ על ' אישור ' כדי לשמור את השינויים ולאחר מכן לחץ על לחצן ' הפסק עריכה ' ברצועת הכלים ' עמוד ' בחלק העליון של הדף.
אם הכל הוגדר כראוי, כעת תראה מספרים בעמודה ' ימים במצב '.
ולבסוף, כך זה ייראה עם נתוני בדיקה של תאריכים שונים:
סיכום
הנה היא: מעוצבת יפה, חזקה וביצוע ביצועים טובים יותר כדי ליצור דוח גיול ב-SharePoint., להשלים עם יישום ללא קוד פשוט. פעולה זו כוללת כמה יישומים פוטנציאליים פרט למקרה השימוש שחקרנו כאן. תרחיש נפוץ אחר עבור סוג דוח זה מצרף אותו לרשימת משימות כדי שתוכל לראות כמה זמן עבר מאז שפעילות נוצרה במבט מהיר.
בהצלחה!
--ג'סטין
ג'סטין ג'ויס, LANtek
הערות
השלבים חסרים
10/8/2012 3:51 AM לאחר מכן, ביצעתי את השלבים, אך חייב להיות משהו חסר-כיצד ה-XSL יידע באיזה תאריך להשתמש, או באיזה שדה להוסיף את הימים שבהם נכנס? שונא כאשר השלבים החמיצו.ללא קוד, מוסכם!
8/30/2012 12:12 PM אני מסכים-אני לא חושב שזה נחשב "ללא קוד". מעניין, באמצעות כמה התפרצות של SharePoint, יש לי עמודה מחושבת פועלת באמצעות היום... איני בטוח כיצד או מדוע מכיוון שאיני מצליח לעשות זאת שוב, אך האחד עדיין נמצא שם ועובד.נוסחה עבור "ימים במצב מחושב" עמודה מחושבת?
5/2/2012 7:39 AM ג'סטין-מהי הנוסחה שבה השתמשת עבור העמודה "ימים במצב מחושב" (עמודת מציין מיקום)? האם היה זה "= today"?SharePoint 2007
12/2/2011 11:29 AM בשלב זה לא ניסיתי להחיל פתרון זה ל-SharePoint 2007, אולם אני מחפש אותו. למרבה הצער, אין מאפיין XslLink לפני השטח של ה-web part באמצעות ממשק המשתמש.פרסום
נהדר 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 היי ג'סטין, זהו פתרון ממש טוב תודה, ובדיוק מסוג הדברים שביליתי את היומיים האחרונים בחיפוש! עם זאת, אני נתקל בבעיה קטנה וקיוויתי שתוכל לעזור לי. שיניתי את הקוד שלך מעט כדי לcalcultate את מספר הימים עד שמשהו קורה, ולא מאז, על-ידי החלפת המשתנים בשורה האחרונה של הפונקציה DateDiff. <xsl: value-of select = "$JulianToday-$JulianStartDate" ></xsl: value-of> עם זאת, אני מסוגל רק לcaclulate את ההבדל במחצית השעה בצורה נכונה. כך למשל עם תאריך זה (עיצוב dd/MM/yyyy); 30/12/2011 היא מחשבת כראוי, אך עם תאריך זה (אותה תבנית) 12/10/2011 היא מחשבת אם 10-Dec-2011 במקום 12-Oct-2011. ניסיתי פשוט להחליף את המיקומים של ערכי היום והחודש במשתנה "JulianStartDate", כך; <xsl: with-param name = "Month" בחר = "מחרוזת (ddwrt: FormatDateTime (string ($StartDate), 1033, ' yyyyMMdd '), 7, 2)"/> <xsl: with-param name = "Day" select = "מחרוזת (ddwrt: FormatDateTime (string ($StartDate), 1033, ' yyyyMMdd '), 5, 2)"/> ובעיה זו תוקנה בעיה עם התאריך השני, אך היא הייתה שגויה בתאריך הראשון! ניסיתי גם לשנות את השיחות של FormatDateTime כדי להשתמש בערכי LCID של אירופה ושינויים שונים לפרמטר האחרון של FormatDateTime (לדוגמה, ddMMyyyy, MMddyyyy) עם ההתאמות המתאימות לפרמטרי המיקום של מחרוזת המשנה ללא הצלחה. אני מאוד מעריכה עצות שתוכל להציע. תודה, כריסללא קוד
9/21/2011 4:27 AM איני חושב ש-XSL מתאים לפתרון "ללא קוד", כאשר הבנת שפת ה-XSL אינה עבור כולם-עם זאת, הוא אינו כולל תיכנות. מלבד זאת: פתרון נחמד, תודה!