מבט כולל על וחשיבה אובייקטיבית
מחוץ לקופסה, מוס’ Web Part של שאילתת תוכן (CQWP) מציג את התוצאות שלה בתבנית רשימה, דומה על תוצאות חיפוש. זה גם אפשרי להציג את התוצאות בתבנית רשת (כלומר. טבלת html). תבניות רשת טובים יותר בנסיבות מסוימות. אתאר כיצד להגיע לתוצאה זו במאמר זה.
תרחישים עסקיים
עבדתי עם לקוח על ההשקה מוס הארגון. עיצבנו את הטקסונומיה שלהם כך פרויקטים אזרחים מהשורה הראשונה בהירארכיה, יש האתר ברמה העליונה שלהם. מנהלי פרוייקטים לשמור על רשימה סינגלטון של מידע סיכום הפרויקט, כגון כותרת, תקציב, תאריך הסיום הצפוי, עלות תקציב ושדות אחרים סוג הסיכום. על ידי "סינגלטון" כלומר רשימת SharePoint מותאמות אישית מובטחת להכיל פריט אחד בלבד. בצורה פשטנית, זה נראה כך:
הגישה הטכנית דומים במידה רבה כפי שמתואר כאן (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). CQWP משתמשת שינוי XSL לפלוט HTML עבור הדפדפן לעיבוד.
אני תמיד לדמיין את התוצאה לפני הצלילה ה-XSL כי XSL היא סיוט. . הנה את התוצאה הרצויה:
HTML כמו זה יוצר תוצאה זו:
<html> <הגוף> <מרכז> <טבלה גבול= 1> <!-- תוויות –> <. tr צבע רקע= כחול> <td><גופן צבע= לבן><b>שם פרוייקט</b></גופן></td> <td יישור= מימין><גופן צבע= לבן><b>לתאריך הושלמה</b></גופן></td> <td יישור= מימין><גופן צבע= לבן><b>תקציב</b></גופן></td> <td יישור= מימין><גופן צבע= לבן><b>הוצאות בפועל</b></גופן></td> <td><גופן צבע= לבן><b>המצב הכללי</b></גופן></td> </. tr> <. tr> <td>Re-wire חדר מחשבים.</td> <td יישור= מימין>02/01/08</td> <td יישור= מימין>22,500.00</td> <td יישור= מימין>19,000.00</td> <td>בביצוע</td> </. tr> <. tr> <td>אספקת שרתים עבור שדרוג SQL</td> <td יישור= מימין>04/01/08</td> <td יישור= מימין>7,500.00</td> <td יישור= מימין>0.00</td> <td>מתוכנן</td> </. tr> </טבלה> </מרכז> </הגוף> </html> |
גישה
בצע את השלבים הבאים כדי ליצור את הרשת:
- לזהות את הרכיבים של רשת (שורות/עמודות).
- להגדיר וליצור עמודות אתר הדרושים.
- יצירת אתרי משנה עבור פרוייקטים ורשימות סינגלטון.
- הוסף את CQWP לדף אינטרנט והגדר אותו לחיפוש אחר הרשימות שלך.
- שנה של CQWP XML כדי לאסוף את עמודות נוספות.
- שנה את ה-XSL ליצירת טבלה.
. אני הולך להתרכז במספר שש. מספרי אחד עד ארבע הם ישר קדימה ומשהו כל משתמש CQWP כבר עשה. מספר חמש היה מתועדת היטב על-ידי אחרים כולל מאמר ממצה של לאדן צילום מסך מתוך MSDN כאן (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) ובלוגים הת'ר שלמה כאן (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
עלון
להתחיל וליישם את שלבים אחת עד חמש לפי התיעוד MSDN ו מאמר הת'ר שלמה.
בנקודה זו, שהוספת לדף CQWP שלך ויש לך שלך <CommonViewFields> נקבעה לפי הצורך.
ביצוע השלבים הרגילים, ניתן לקבל תוצאות ביניים אלה:
1. יצירת סוג תוכן, רשימה מותאמת אישית templatized עבור סוג תוכן זה, שני אתרים. . הנה סוג התוכן:
הנה מבנה האתר:
2. הוסף את CQWP לאחר יצירת אתרי משנה של הפרוייקט ואת סינגלטון שלי רשימות סיכום של פרוייקטים:
3. להוסיף כל מידע נוסף אני רוצה דרך <CommonViewFields>:
<מאפיין שם="CommonViewFields" סוג="מחרוזת">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</מאפיין>
שים לב כי הייתי חייב לשמור על שדות המאפיינים שורה זו או שהיא לא תתאים (CQWP יספר לי כי השאילתה החזירה פריטים).
4. בנקודה זו, . אנחנו מוכנים לזוז מעבר במאמר MSDN ו על היפוך למאמר של הת'ר שלמה. בצע את השלבים שלה מתחיל ליד שלב #5 כדי ליצור מותאם אישית / גרסה unghosted של ItemStyle.xsl. עצתו של הת'ר, דרך שלב 11 ולקבל תוצאות ביניים אלה:
4.1: שם אזור תבנית XSL כדלקמן:
<xsl:שם התבנית = "ברשת" להתאים = "שורה[@Style = 'רשת']" מצב = "itemstyle">
ניתן לשנות אותה הציע גם מעט <xsl:עבור-כל …> על-ידי הוספה <br /> תג כדי לספק רישום כלי הניקוי:
<xsl:עבור-כל בחר="@*"> P:<xsl:הערך בחר="שם()" /><br/> </xsl:עבור-כל>
4.2: ניתן לשנות את ה-web part, עבור אל המראה ובחר שלי ברשת"" סגנון:
להחיל את השינוי, הרי התוצאה:
נוכל לראות לעיל כי השדות אנחנו רוצים (שם פרוייקט, הוצאות, מצב, ועוד) זמינים עבורנו לשימוש כאשר אנחנו פולטים את ה-HTML. לא רק זה, אבל אנחנו רואים את השמות שבו. אנחנו ועליו להפנות את העמודים ב- ה-XSL. לדוגמה, אנו מפנים מצב הפרוייקט כ- "Project_x005F_x0020_Name".
בנקודה זו, אנו יוצאים מתוך הבלוג של הת'ר ומתוך כתפי ענקים אלה, ניתן להוסיף מעט משלי.
ContentQueryMain.xsl
הערה: בעת ביצוע שינויים שני ContentQueryMain.xsl וגם ItemStyle.xsl, עליך להכניס שחזרה קבצים אלה לפני לראות את השפעת השינויים שלך.
למטרות יצירת רשת, מוס משתמש שני קבצי XSL שונים כדי להפיק את התוצאות שאנחנו רואים מן CQWP. כדי ליצור את החלק הקודם של פלט, שינינו ItemStyle.xsl. מוס שבאמת משתמשת בקובץ XSL אחר, ContentQueryMain.xsl ל בשיתוף עם ItemStyle.xsl כדי ליצור את ה-HTML שלו. כפי ששמו מעיד עליו, ContentQueryMain.xsl הוא הראשי"" XSL השולט הזרם הכללי של תרגום. זה סובבת בין כל הפריטים שנמצאו ומעביר אותם אחד אחד כדי תבניות ב- ItemStyle.xsl. אנחנו לשנות ItemStyle.xsl כדי ליצור פתח <טבלה> תג לפני פליטת בשורה הראשונה של הנתונים וסגירת <טבלה> תג לאחר פליטת השורה האחרונה. כדי להשיג את זה, ContentQueryMain.xsl משתנה להעביר פרמטרים שני לרשת שלנו"" תבנית ב- ItemStyle.xsl, "השורה האחרונה" "השורה הנוכחית". ItemStyle.xsl משתמש בהם באופן מותנה לפלוט את התגים הדרושים.
בטכניקה הת'ר שלמה, אנחנו אתר ContentQueryMain.xsl. הוא ממוקם באותו מקום כמו ItemStyle.xsl. צילום מסך זה אמור לעזור:
אנחנו צריכים לבצע את השינויים הבאים:
- שינוי תבנית xsl, "CallItemTemplate" זה למעשה מפעיל תבנית הרשת שלנו ב- ItemStyle.xsl. . אנחנו נחלוף שני פרמטרים על תבנית רשת כך יהיו לו את הנתונים שצריך להתאוששות פתיחה וסגירה <טבלה> תגים.
- לשנות מעט אחר ContentQueryMain.xsl הקורא "CallItemTemplate" כדי להעביר אותה "LastRow" פרמטר כך LastRow כי ייתכן שניתן לגרום לדעיכתם לתבנית הרשת שלנו.
אתר את התבנית בשם "OuterTemplate.CallItemTemplate" מזוהה על-ידי המחרוזת:
<xsl:תבנית שם="OuterTemplate.CallItemTemplate">
החלף את התבנית כולה כדלקמן:
<xsl:תבנית שם="OuterTemplate.CallItemTemplate"> <xsl:param שם="CurPosition" /> <!-- הוספת "LastRow" הפרמטר. נוכל להשתמש בו רק כאשר המעבר סגנון פריט "רשת". --> <xsl:param שם="LastRow" /> <xsl:בחר> <xsl:כאשר מבחן="@ סגנון = 'NewsRollUpItem'"> <xsl:החלת תבניות בחר="." מצב="itemstyle"> <xsl:עם param שם="EditMode" בחר="$cbq_iseditmode" /> </xsl:החלת תבניות> </xsl:כאשר> <xsl:כאשר מבחן="@ סגנון = 'NewsBigItem'"> <xsl:החלת תבניות בחר="." מצב="itemstyle"> <xsl:עם param שם="CurPos" בחר="$CurPosition" /> </xsl:החלת תבניות> </xsl:כאשר> <xsl:כאשר מבחן="@ סגנון = 'NewsCategoryItem'"> <xsl:החלת תבניות בחר="." מצב="itemstyle"> <xsl:עם param שם="CurPos" בחר="$CurPosition" /> </xsl:החלת תבניות> </xsl:כאשר> <!-- המיקום הנוכחי של מעבר, lastrow לתבנית itemstyle.xsl ברשת. ItemStyle.xsl ישתמש בו לפלוט פתיחה וסגירה <טבלה> תגים. --> <xsl:כאשר מבחן="@ סגנון = 'רשת'"> <xsl:החלת תבניות בחר="." מצב="itemstyle"> <xsl:עם param שם="CurPos" בחר="$CurPosition" /> <xsl:עם param שם="האחרון" בחר="$LastRow" /> </xsl:החלת תבניות> </xsl:כאשר> <xsl:אחרת> <xsl:החלת תבניות בחר="." מצב="itemstyle"> </xsl:החלת תבניות> </xsl:אחרת> </xsl:בחר> </xsl:תבנית> |
ההערות מתארות את המטרה של השינויים.
בטח, "OuterTemplate.CallItemTemplate" עצמה נקראת תבנית אחרת. אתר את התבנית על-ידי חיפוש מחרוזת טקסט זו:
<xsl:תבנית שם="OuterTemplate.Body">
לגלול ההוראות OuterTemplate.Body וכדי להוסיף את הפרמטר LastRow כדלקמן (מוצג כתהליך של תגובה בכתב נטוי):
<xsl:תבנית קריאה שם="OuterTemplate.CallItemTemplate"> <xsl:עם param שם="CurPosition" בחר="$CurPosition" /> <!-- הוסף את הפרמטר LastRow. --> <xsl:עם param שם="LastRow" בחר="$LastRow"/> </xsl:תבנית קריאה>
אחרי כל זה, סוף סוף יש לנו דברים מוגדר כהלכה כך ItemStyle.xsl שלנו מסוגל לפלוט <טבלה> תגים בהמקום המתאים.
ItemStyle.Xsl
הערה: שוב, בדוק ב- ItemStyle.xsl לאחר ביצוע שינויים, כך שתראה את ההשפעה של שינויים אלה.
יש לנו שתי פעילויות כאן:
- להחליף את התבנית הרשת כולה. אתה יכול העתקה/הדבקה מלמטה.
- להוסיף כמה ג'מבו mumbo מחוץ להגדרת תבנית המאפשרת "formatcurrency" תבנית לעבודה. (באפשרותך לדעת שיש לי נקודת אחיזה רפים ב- XSL).
הראשונה, ליד החלק העליון של ItemStyle.xsl, הוסף את השורה:
<!-- כמה ג'מבו mumbo אשר מאפשרת לנו להציג את ארה. מטבע. --> <xsl:תבנית עשרונית שם="סגל" ספרה="יח" /> <xsl:תבנית שם="ברירת מחדל" התאמה="*" מצב="itemstyle">
הערה כי הוספתי אותו ישירות לפני <xsl:שם התבנית = "ברירת מחדל" …> הגדרה.
הבא, לחזור לתבנית הרשת שלנו. להחליף את התבנית לרשת כולה עם הקוד שלהלן. זה ביסודיות, הוא הגיב, אך אל תהסס שלח לי דוא ל או להשאיר הערות על הבלוג שלי, אם יש לך שאלות.
<xsl:תבנית שם="רשת" התאמה="שורה[@ סגנון = 'רשת']" מצב="itemstyle"> <!-- ContentMain.xsl עובר CurPos ולבסוף. אנו משתמשים אלה מותנה לפלוט פתיחה וסגירה <טבלה> תגים. --> <xsl:param שם="CurPos" /> <xsl:param שם="האחרון" /> <!-- המשתנים הבאים הם שלא שונתה מ ItemStyle.xsl רגיל --> <xsl:משתנה שם="SafeImageUrl"> <xsl:תבנית קריאה שם="OuterTemplate.GetSafeStaticUrl"> <xsl:עם param שם="UrlColumnName" בחר="'ImageUrl'"/> </xsl:תבנית קריאה> </xsl:משתנה> <xsl:משתנה שם="SafeLinkUrl"> <xsl:תבנית קריאה שם="OuterTemplate.GetSafeLink"> <xsl:עם param שם="UrlColumnName" בחר="'LinkUrl'"/> </xsl:תבנית קריאה> </xsl:משתנה> <xsl:משתנה שם="DisplayTitle"> <xsl:תבנית קריאה שם="OuterTemplate.GetTitle"> <xsl:עם param שם="כותרת" בחר="@Title"/> <xsl:עם param שם="UrlColumnName" בחר="'LinkUrl'"/> </xsl:תבנית קריאה> </xsl:משתנה> <xsl:משתנה שם="LinkTxslet"> <xsl:אם מבחן="@OpenInNewWindow = "true"" >_ blank</xsl:אם> </xsl:משתנה> <!-- כאן אנו מגדירים משתנה, "tableStart". מכיל את ה-HTML שבהם אנו משתמשים כדי להגדיר את הפתיחה של הטבלה, כמו גם לצד תוויות העמודה. שים לב כי אם CurPos = 1, זה כולל את ה-HTML בתוך תג CDATA. אחרת, זה יהיה ריק. הערך של tableStart הוא emited בכל פעם ItemStyle נקראת על ידי ContentQueryMain.xsl. --> <xsl:משתנה שם="tableStart"> <xsl:אם מבחן="$CurPos = 1"> <![CDATA[ <גבול הטבלה = 1> <צבע רקע tr = "כחול"> <td><צבע גופן = "לבן"><b>שם פרוייקט</b></גופן></td> <td ליישר = "זכות"><צבע גופן = "לבן"><b>לתאריך הושלמה</b></גופן></td> <td ליישר = "זכות"><צבע גופן = "לבן"><b>תקציב</b></גופן></td> <td ליישר = "זכות"><צבע גופן = "לבן"><b>הוצאות בפועל</b></גופן></td> <td><צבע גופן = "לבן"><b>המצב הכללי</b></גופן></td> </. tr> ]]> </xsl:אם> </xsl:משתנה> <!-- משתנה נוסף, tableEnd מגדיר בפשטות סגירת טבלה בתג. כמו עם tableStart, . זה תמיד emited. זו הסיבה מדוע הערך שלו מוקצית באופן מותנה על פי אם כבר עברנו את השורה האחרונה על ידי ContentQueryMain.xsl. --> <xsl:משתנה שם="tableEnd"> <xsl:אם מבחן="$CurPos = $Last"> <![CDATA[ </טבלה> ]]> </xsl:אם> </xsl:משתנה> <!-- תמיד פולטים את התוכן של tableStart. אם זו לא השורה הראשונה המועבר אלינו על ידי ContentQueryMain.xsl, אז אנחנו יודעים שאת הערך שלו יהיה ריק. בטל את פלט לברוח מכאן, כי כאשר tableStart זה לא ריקות, הוא כולל HTML בפועל שאנו רוצים להיות מעובד על-ידי הדפדפן. אם לא נספר מנתח XSL כדי לבטל את הפלט בריחה, זה יפיק דברים כמו"<טבלה>" במקום של"<טבלה>". --> <xsl:הערך בחר="$tableStart" בטל-פלט-בריחה="כן"/> <. tr> <!-- P:Project_x005F_x0020_Name P:Project_x005F_x0020_End_x005F_x0020_Date P:Project_x005F_x0020_Budget P:Project_x005F_x0020_Expenses P:Project_x005F_x0020_Status --> <td> <xsl:הערך בחר="@ Project_x005F_x0020_Name"/> </td> <td יישור="מימין"> <xsl:הערך בחר="@ Project_x005F_x0020_End_x005F_x0020_Date"/> </td> <td יישור="מימין"> <xsl:תבנית קריאה שם="formatcurrency"> <xsl:עם param שם="ערך" |
הייתה זו שימושית מאוד. תודה!
להתרגשות עצומה… זה היה כי שם אזור סגנון רשימה שונה ואני לא הספיקה להבין כי ב- ContentQueryMain.xsl הוא יבדוק "סגנון":
<xsl:כאשר test="@Style='NameOfMyStyle'">
עם זה שמה זה עבד. 🙂
זה כמעט עבד בשבילי: אני מצליח להוציא פלט </טבלה> לסיים כראוי תג, אך חסר תג התחלה. נראה המבחן = "$ CurPos = 1" אינה מחזירה true. אבל למה?
פוסט מעולה. פול עשיתי את כל הדברים לעיל. יש לי שאילתה, כיצד יכולה אני achive את הסכום של הכנסות (הוצאות "סה כ בפועל)" או סכום של הערך של שתי עמודות.
עשית עבודה עם יצירת קבצי xsl מותאמים אישית של ContentQueryMain ו- ItemStyle? אני אומר הוא לא רוצה לדאוג שלי סגנונות מותאמים אישית החלפה עם כל תיקונים או שדרוגים. האם יש לך דוגמאות? ניסיתי הפיכת עותק זהה של ContentQueryMain.xsl וטעינת עותק זה מותאם אישית חדש לספריית סגנון. כשאת הפניה לקובץ xsl זה במאפיין MainXslLink של .webpart, אני מקבל 401 לא מורשה. קובץ xsl מותאמים אישית הגירסה שפורסמה, לכולם יש גישת קריאה אליו.
פוסט נפלא תודה! להיאבק עם זאת כעת עבור הימים האחרונים.
היי, זו היתה הצעת לעזור. יש לי אותו כל עבודה, ושינוי בראון מייק מיושמים גם כך הוא מקבץ
התוצאות בתוך הטבלה על-ידי מה אבחר כפרמטר קבץ לפי מאפיינים של CQWB.
עשיתי הכותרת קישור גם, כך זה עובד יפה. עדיין יש לי בעיה אחת, למרות. אני אני מקבץ את התוצאות לפי שם האתר. בתוך הטבלה, הוא מקבץ אותם יפה, וזה נראה נהדר, אבל עדיין הדפסה החוצה הקבוצה
שמות(במקרה שלי שמות האתרים) מעל לטבלה. האם כל אחד יודע כיצד להיפטר אלה?
תודה,
גרג
מאמר נחמד. הצלחתי לתת לטבלה שלי את המראה של רשימות Sharepoint המשמש כברירת מחדל על-ידי ניתוח קוד המקור של הרשימה. כאן הם אבני HTML הראשי לצורך כך שיתאים ItemStyle:
<רוחב הטבלה = "100%" class = "ms-listviewtable" גבול = 0 cellspacing = 0 cellpadding = 1 dir = "ללא">
<!–כותרת עליונה–>
<TR class = "ms-viewheadertr" יישור אנכי = העליון>
<טווח ללא גלישה תאנון = "col" class = "ms-vh2"><סגנון div = "רוחב:100%;מיקום:יחסי;משמאל:0;העליון:0;">
<סגנון טבלה = "רוחב:100%;" CtxNum = "1" גובה = "100%" cellspacing = 1 cellpadding = 0 class = "ms-unselectedtitle">
<. TR>
<רוחב TD = "100%" Class = "ms-vb" ללא גלישה>
ה-Texte du titre ici
</TD>
<סגנון TD = "מיקום:מוחלט;">
</TD>
</. TR>
</טבלה></div>
</TH>
<!–חזור על כל תאי כותרת–>
</. TR>
<!– נתוני טבלה –>
<TR class = "">
<!–עמודת נתונים, השתמש בקוד של פול אחד הראשון עם היפר-קישור –>
<TD Class = "ms-vb2">נתונים כאן</TD>
<!–עמודה ריקה–>
<TD Class = "ms-vb2">
<span dir = אף אחד></טווח><
/TD>
<!–עמודת התאריך–>
<TD Class = "ms-vb2">
<NOBR>11/12/2008</NOBR>
</TD>
</. TR>
<!–***שורות חלופיות – משתמשים במשתנה XSL חדש שלא יוסיף את המחלקה חלופי מבוסס על השורה הנוכחית מודולו 2–>
<TR class = "מתחלפים ms">
…
</. TR>
</טבלה>
Thatz בדיוק שחיפשתי..סלע גבר...יחי...אוהב אותך עבור ההצבה..
<xsl:בחר להחיל תבניות = "." מצב = "itemstyle">
<xsl:שם עם param = "CurPos" בחר = "$ CurPosition" />
<xsl:שם עם param = "האחרון" בחר = "$ LastRow" />
<xsl:שם עם param = "StartNewGroup" select="@__begingroup" />
</xsl:כאשר>
<xsl:מתי מבחן = "$StartNewGroup = 'True'">
<. tr>
<td >
<xsl:name="OuterTemplate.GetGroupName שיחת תבנית">
<xsl:עם param שם = "שם קבוצה" select="@*[שם()= קבוצה $]"/>
<xsl:שם עם param = "GroupType" בחר "$ GroupType" = />
</xsl:תבנית קריאה>
</td>
</. tr>
</xsl:כאשר>
<xsl:אחרת>
</xsl:אחרת>
</xsl:בחר>
פול הי,
בעת עבודה עם ה-web part של שאילתת xml/xsl והתוכן, האם מצאתם כל דרכים טובות כדי לעצב את xslt? מנסה לבצע שינויים ולבדוק את העיצוב היא המוכיחה את כאב הימני ** פשוט בעזרת עורך טקסט…
כל טוב
(המסופקים. https://myweb.com/Marketing/images/icn-order.gif, )
מומלץ להשתמש תמונה סוג השדה CommonViewFields? (המסופקים. InternalColumnName, התמונה)
ההודעה שלך. זה בדיוק מה שחיפשתי. עם זאת, אני לא יכול לגרום לזה לעבוד.
יש לי מסמכים המאוחסנים ב דוק שונים. ספריות אבל מסווג באמצעות עמודה במחלקה מותאמת אישית (הבחירה: 1 או 2. אני רוצה להשתמש CQWP כדי להציג מסמכים אלה בהתבסס על השיעור שלהם.
הייתי מסוגל להוסיף את CQWP, היצוא שלה ל- SPD, להגדיר את itemStyle.xls כדי להציג שדות מותאמים אישית בתצוגת רשימה. עם זאת, אני יכול לא מיישמים בהצלחה מה שאתה מתאר כאן.
אלה הם הטורים שאני מעוניין להציג את CQWP שלי:
סוג קובץ (כדי להציג סמל)
כותרת קובץ
תאריך השינוי האחרון
השתנה על-ידי מי
הוצאה מאחסון
נרשמו הערות
כרגע יש לי התוצאה בתבנית רשימה. כיצד ניתן לשנות אותו לתבנית talble.
תודה.
סאג'י
מצטער missspelling על שמי לא בטוח איפה ” הגיע.