איבערבליק און אָביעקטיוו
אויס פון די קעסטל, מאָך’ אינהאַלט קווערי וועב חלק (קקוופּ) דיספּלייז זייַן רעזולטאַטן אין אַ רשימה פֿאָרמאַט, similar to search results. It is also possible to display the results in a grid format (י.ע. HTML טיש פֿאָרמאַט). Grid formats are better in some circumstances. I describe how to achieve that effect in this article.
ביזנעס סינעריאָו
I have worked with a client on an enterprise-wide MOSS rollout. We have designed their taxonomy such that projects are first class citizens in the hierarchy and have their own top level site. Project managers maintain a singleton list of project summary information, אַזאַ ווי טיטל, בודזשעט, געריכט קאַמפּלישאַן דאַטע, remaining budget and other summary type fields. By "singleton" I mean a custom SharePoint list guaranteed to contain only one item. Simplistically, עס קוקט ווי דעם:
די טעכניש צוגאַנג איז פיל די זעלבע ווי דיסקרייבד דאָ (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). The CQWP uses an XSL transform to emit HTML for the browser to render.
I always envision the result before diving into the XSL because XSL is a nightmare. Here’s my desired result:
HTML ווי דעם דזשענערייץ אַז רעזולטאַט:
|
<HTML>
<גוף>
<צענטער>
<טיש גרענעץ= 1>
<!-- לאַבעלס ->
<טר בגקאָלאָר= בלוי>
<טד><קאַסע קאָליר= ווייַס><ב>פּראָיעקט נאָמען</ב></קאַסע></טד>
<טד ייַנרייען= רעכט><קאַסע קאָליר= ווייַס><ב>גאַנץ טאָג</ב></קאַסע></טד>
<טד ייַנרייען= רעכט><קאַסע קאָליר= ווייַס><ב>בודזשעט</ב></קאַסע></טד>
<טד ייַנרייען= רעכט><קאַסע קאָליר= ווייַס><ב>פאַקטיש עקספּענסע</ב></קאַסע></טד>
<טד><קאַסע קאָליר= ווייַס><ב>קוילעלדיק סטאַטוס</ב></קאַסע></טד>
</טר>
<טר>
<טד>בעניין-דראָט קאָמפּיוטער צימער.</טד>
<טד ייַנרייען= רעכט>02/01/08</טד>
<טד ייַנרייען= רעכט>22,500.00</טד>
<טד ייַנרייען= רעכט>19,000.00</טד>
<טד>אין פּראָגרעס</טד>
</טר>
<טר>
<טד>טנייַ סערווערס פֿאַר סקל ופּגראַדע</טד>
<טד ייַנרייען= רעכט>04/01/08</טד>
<טד ייַנרייען= רעכט>7,500.00</טד>
<טד ייַנרייען= רעכט>0.00</טד>
<טד>פּלאַננעד</טד>
</טר>
</טיש>
</צענטער>
</גוף>
</HTML>
|
צוגאַנג
גיי די טריט צו מאַכן די גריד:
- ידענטיפיצירן די קאַמפּאָונאַנץ פון די גריד (ראָוז / שפאלטן).
- דעפינירן און שאַפֿן נייטיק פּלאַץ שפאלטן.
- שאַפֿן סאַב זייטלעך פֿאַר די פראיעקטן און סינגגאַלטאַן רשימות.
- לייג די קקוופּ צו אַ וועב בלאַט און קאַנפיגיער עס צו זוכן פֿאַר דיין רשימות.
- מאָדיפיצירן די קקוופּ ס קסמל צו קלייַבן זיך די נאָך שפאלטן.
- מאָדיפיצירן די קססל צו דזשענערייט אַ טיש.
I’m going to concentrate on number six. Numbers one through four are straight-forward and something that any CQWP user has already done. Number five has been well-documented by others including this exhaustive screen-shot laden article from MSDN דאָ (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) און כעדער שלמה ס בלאָג דאָ (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).
ניסלעך און באָלץ
נעמען און ינסטרומענט טריט איינער דורך פינף ווי פּער די מסדן דאַקיומענטיישאַן און כעדער שלמה ס אַרטיקל.
אין דעם פונט, איר ווע צוגעלייגט דיין קקוופּ צו די בלאַט און איר האָבן דיין <קאָממאָנוויעוופיעלדס> קאַנפיגיערד ווי נייטיק.
ווייַטערדיק די געוויינטלעך טריט, איך באַקומען די ינטערמידייט רעזולטאַטן:
1. שאַפֿן אַ צופרידן טיפּ, a templatized custom list for that content type and two sites. Here is the content type:
דאָ איז די פּלאַץ סטרוקטור:
2. לייג די קקוופּ נאָך שאפן מיין פּרויעקט סובסיטעס און סינגגאַלטאַן פּרויעקט קיצער רשימות:
3. לייג אַלע די נאָך אינפֿאָרמאַציע איך וועלן דורך דעם <קאָממאָנוויעוופיעלדס>:
<פאַרמאָג נאָמען="קאָממאָנוויעוופיעלדס" טיפּ="שטריקל">פּראָדזשעקט_קס0020_נאַמע;פּראָדזשעקט_קס0020_עקספּענסעס;פּראָדזשעקט_קס0020_סטאַטוס;פּראָדזשעקט_קס0020_סטאַרט_קס0020_דאַטע;פּראָדזשעקט_קס0020_ענד_קס0020_דאַטע;פּראָדזשעקט_קס0020_בודגעט</פאַרמאָג>
באַמערקונג אַז איך געהאט צו האַלטן אַלע די פאַרמאָג פעלדער אויף איין שורה אָדער עס וואָלט נישט אַרבעטן (קקוופּ וואָלט זאָגן מיר אַז די אָנפֿרעג אומגעקערט קיין זאכן).
4. אין דעם פונט, we’re ready to move beyond the MSDN article and flip on over to Heather Solomon’s article. Follow her steps starting near step #5 צו שאַפֿן אַ קאַסטאַמייזד / unghosted version of ItemStyle.xsl. I follow Heather’s advice, אַרויף דורך שריט 11 און באַקומען די ינטערמידייט רעזולטאַטן:
4.1: נאָמען מיין קססל מוסטער ווי גייט:
<קססל:template name="Grid" match="Row[@Style=’Grid’]" mode="itemstyle">
איך אויך אַ ביסל מאָדיפיצירן איר סאַגדזשעסטיד <קססל:פֿאַר, יעדער …> דורך אַדינג אַ <בר /> פאַרבינדן צו צושטעלן אַ קלינער ליסטינג:
<קססל:פֿאַר, יעדער קלייַבן="@ *">
פּ:<קססל:ווערט-פון קלייַבן="נאָמען()" /><בר/>
</קססל:פֿאַר, יעדער>
4.2: איך מאָדיפיצירן די וועב טייל, go to appearance and select my "Grid" סטיל:
צולייגן די ענדערונג און דאָ איז דער רעזולטאַט:
מיר קענען זען פון די אויבן אַז די פעלדער מיר ווילן (פּראָיעקט נאָמען, קאָסט, מאַצעוו, אאז"ו ו) are available for us to use when we emit the HTML. Not only that, but we see the names by which we must reference those columns in the XSL. לעמאָשל, we reference Project Status as "Project_x005F_x0020_Name".
אין דעם פונט, מיר אַרויסגיין פון כעדער ס בלאָג און פון די פּלייצעס פון די דזשייאַנץ, איך לייג מיין אייגן ביסל ביסל.
קאָנטענטקווערימאַינ.קססל
נאָטיץ: ווען געמאכט ענדערונגען צו ביידע קאָנטענטקווערימאַינ.קססל ווי געזונט ווי יטעמסטילע.קססל, איר דאַרפֿן צו קאָנטראָלירן די טעקעס צוריק אין איידער איר זען די ווירקונג פון דיין ענדערונגען.
פֿאַר גריד-מאכן צוועקן, MOSS uses two different XSL files to produce the results we see from a CQWP. To generate the previous bit of output, we modified ItemStyle.xsl. MOSS actually uses another XSL file, ContentQueryMain.xsl to in conjunction with ItemStyle.xsl to generate its HTML. As its name implies, ContentQueryMain.xsl is the "main" XSL that controls the overall flow of translation. It iterates through all the found items and passes them one by one to templates in ItemStyle.xsl. We’ll modify ItemStyle.xsl to generate the open <טיש> פאַרבינדן איידער ימיטינג דער ערשטער רודערן פון דאַטן און די קלאָוזינג <טיש> tag after emitting the last row. To accomplish this, ContentQueryMain.xsl is modified to pass two parameters to our "grid" מוסטער אין יטעמסטילע.קססל, "last row" and "current row". ItemStyle.xsl uses these to conditionally emit the necessary tags.
ניצן כעדער שלמה ס טעכניק, we locate ContentQueryMain.xsl. It is located in the same place as ItemStyle.xsl. This screen shot should help:
מיר דאַרפֿן צו מאַכן די ווייַטערדיק ענדערונגען:
- מאָדיפיצירן אַ קססל מוסטער, "CallItemTemplate" that actually invokes our Grid template in ItemStyle.xsl. We will pass two parameters to the Grid template so that it will have the data it needs to conditionally generate opening and closing <טיש> טאַגס.
- Modify another bit of ContentQueryMain.xsl that calls the "CallItemTemplate" to pass it a "LastRow" פּאַראַמעטער אַזוי אַז לאַסטראָוו זאל זייַן דורכגעגאנגען אויף צו אונדזער גריד מוסטער.
Locate the template named "OuterTemplate.CallItemTemplate" יידענאַפייד דורך די שטריקל:
<קססל:מוסטער נאָמען="אָוטערטעמפּלאַטע.קאַלליטעמטעמפּלאַטע">
פאַרבייַטן די גאנצע מוסטער ווי גייט:
|
<קססל:מוסטער נאָמען="אָוטערטעמפּלאַטע.קאַלליטעמטעמפּלאַטע">
<קססל:פּאַראַם נאָמען="קורפּאָסיטיאָן" />
<!--
Add the "LastRow" פּאַראַמעטער.
We only use it when the item style pass in is "Grid".
-->
<קססל:פּאַראַם נאָמען="לאַסטראָוו" />
<קססל:קלייַבן>
<קססל:ווען פּרובירן="@ סטייל = 'נעווסראָללופּיטעם'">
<קססל:צולייגן-טעמפּלאַטעס קלייַבן="." מאָדע="יטעמסטילע">
<קססל:מיט-פּאַראַם נאָמען="עדיטמאָדע" קלייַבן="$קבק_יסעדיטמאָדע" />
</קססל:צולייגן-טעמפּלאַטעס>
</קססל:ווען>
<קססל:ווען פּרובירן="@ סטייל = 'נעווסביגיטעם'">
<קססל:צולייגן-טעמפּלאַטעס קלייַבן="." מאָדע="יטעמסטילע">
<קססל:מיט-פּאַראַם נאָמען="קורפּאָס" קלייַבן="$קורפּאָסיטיאָן" />
</קססל:צולייגן-טעמפּלאַטעס>
</קססל:ווען>
<קססל:ווען פּרובירן="@ סטייל = 'נעווסקאַטעגאָרייטעם'">
<קססל:צולייגן-טעמפּלאַטעס קלייַבן="." מאָדע="יטעמסטילע">
<קססל:מיט-פּאַראַם נאָמען="קורפּאָס" קלייַבן="$קורפּאָסיטיאָן" />
</קססל:צולייגן-טעמפּלאַטעס>
</קססל:ווען>
<!--
פאָרן איצטיקן שטעלע און לאַסטראָוו צו די גריד יטעמסטילע.קססל מוסטער.
יטעמסטילע.קססל וועט נוצן אַז צו אַרויסלאָזן די עפענען און קלאָוזינג <טיש> טאַגס.
-->
<קססל:ווען פּרובירן="@ סטייל = 'גריד'">
<קססל:צולייגן-טעמפּלאַטעס קלייַבן="." מאָדע="יטעמסטילע">
<קססל:מיט-פּאַראַם נאָמען="קורפּאָס" קלייַבן="$קורפּאָסיטיאָן" />
<קססל:מיט-פּאַראַם נאָמען="לעצט" קלייַבן="$לאַסטראָוו" />
</קססל:צולייגן-טעמפּלאַטעס>
</קססל:ווען>
<קססל:אַנדערש>
<קססל:צולייגן-טעמפּלאַטעס קלייַבן="." מאָדע="יטעמסטילע">
</קססל:צולייגן-טעמפּלאַטעס>
</קססל:אַנדערש>
</קססל:קלייַבן>
</קססל:מוסטער>
|
די באַמערקונגען באַשרייַבן די ציל פון די ענדערונגען.
אַוואַדע, the "OuterTemplate.CallItemTemplate" is itself called from another template. Locate that template by searching for this text string:
<קססל:מוסטער נאָמען="אָוטערטעמפּלאַטע.באָדי">
מעגילע דורך די ינסטראַקשאַנז אין אָוטערטעמפּלאַטע.באָדי און אַרייַנלייגן די לאַסטראָוו פּאַראַמעטער ווי גייט (געוויזן ווי אַ באַמערקונג אין ייטאַליקס):
<קססל:רופן-מוסטער נאָמען="אָוטערטעמפּלאַטע.קאַלליטעמטעמפּלאַטע">
<קססל:מיט-פּאַראַם נאָמען="קורפּאָסיטיאָן" קלייַבן="$קורפּאָסיטיאָן" />
<!-- אַרייַנלייגן די לאַסטראָוו פּאַראַמעטער. -->
<קססל:מיט-פּאַראַם נאָמען="לאַסטראָוו" קלייַבן="$לאַסטראָוו"/>
</קססל:רופן-מוסטער>
נאָך אַלע פון דעם, מיר לעסאָף האָבן דאס שטעלן אַרויף רעכט אַזוי אַז אונדזער יטעמסטילע.קססל קענען אַרויסלאָזן <טיש> Tags בייַ די רעכט אָרט.
יטעמסטילע.קססל
נאָטיץ: ווידער, טשעק אין יטעמסטילע.קססל נאָך מאכן קיין ענדערונגען אַזוי אַז איר זען די ווירקונג פון די ענדערונגען.
מיר האָבן צוויי טאַסקס דאָ:
- Replace the entire Grid template. You can copy/paste from below.
- Add some mumbo jumbo outside the template definition that enables "formatcurrency" template to work. (איר קענען זאָגן אַז איך האָבן אַ טעניאַוואַס שעפּן אויף קססל).
ערשטער, לעבן די שפּיץ פון יטעמסטילע.קססל, לייגן דעם שורה:
<!-- עטלעכע מאַמבאָו דזשאַמבאָו אַז ינייבאַלז אונדז צו אַרויסווייַזן יוז. קראַנטקייַט. -->
<קססל:דעצימאַל-פֿאָרמאַט נאָמען="שטעקן" ציפֿער="ד" />
<קססל:מוסטער נאָמען="ניט ויסצאָלן" גלייַכן="*" מאָדע="יטעמסטילע">
באַמערקונג אַז איך צוגעגעבן עס גלייַך איידער דעם <קססל:template name="Default" …> דעפיניציע.
ווייַטער, go back to our Grid template. Replace the entire Grid template with the code below. It is thoroughly commented, אָבער טאָן נישט קווענקלען צו Email מיר אָדער לאָזן באַמערקונגען אויף מיין בלאָג אויב איר האָט שאלות.
|
<קססל:מוסטער נאָמען="גריד" גלייַכן="רודערן[@ סטייל = 'גריד']" מאָדע="יטעמסטילע">
<!--
קאָנטענטמאַינ.קססל פּאַסיז קורפּאָס און לעצטע.
מיר נוצן די צו קאַנדישנאַלי אַרויסלאָזן די עפענען און קלאָוזינג <טיש> טאַגס.
-->
<קססל:פּאַראַם נאָמען="קורפּאָס" />
<קססל:פּאַראַם נאָמען="לעצט" />
<!-- די פאלגענדע וועריאַבאַלז זענען ונמאָדיפיעד פון דער נאָרמאַל יטעמסטילע.קססל -->
<קססל:בייַטעוודיק נאָמען="סאַפעימאַגעורל">
<קססל:רופן-מוסטער נאָמען="אָוטערטעמפּלאַטע.געצאַפעסטאַטיקורל">
<קססל:מיט-פּאַראַם נאָמען="ורלקאָלומננאַמע" קלייַבן="'ימאַגעורל'"/>
</קססל:רופן-מוסטער>
</קססל:בייַטעוודיק>
<קססל:בייַטעוודיק נאָמען="סאַפעלינקורל">
<קססל:רופן-מוסטער נאָמען="אָוטערטעמפּלאַטע.געצאַפעלינק">
<קססל:מיט-פּאַראַם נאָמען="ורלקאָלומננאַמע" קלייַבן="'לינקורל'"/>
</קססל:רופן-מוסטער>
</קססל:בייַטעוודיק>
<קססל:בייַטעוודיק נאָמען="דיספּלייַטיטלע">
<קססל:רופן-מוסטער נאָמען="אָוטערטעמפּלאַטע.געטטיטלע">
<קססל:מיט-פּאַראַם נאָמען="טיטל" קלייַבן="@ ענין"/>
<קססל:מיט-פּאַראַם נאָמען="ורלקאָלומננאַמע" קלייַבן="'לינקורל'"/>
</קססל:רופן-מוסטער>
</קססל:בייַטעוודיק>
<קססל:בייַטעוודיק נאָמען="לינקטאַרגעט">
<קססל:צי פּרובירן="@ אָפּעניננעווווינדאָוו = 'אמת'" >_בלאַנק</קססל:צי>
</קססל:בייַטעוודיק>
<!--
דאָ מיר דעפינירן אַ בייַטעוודיק, "tableStart". דעם כּולל די HTML
. באַמערקונג אַז אויב קורפּאָס = 1, עס כולל די HTML אין אַ קדאַטאַ פאַרבינדן.
אַנדערש, עס וועט זייַן ליידיק.
די ווערט פון טאַבלעסטאַרט איז עמיטעד יעדער צייַט יטעמסטילע איז גערופן דורך
.
-->
<קססל:בייַטעוודיק נאָמען="טאַבלעסטאַרט">
<קססל:צי פּרובירן="$קורפּאָס = 1">
<![קדאַטאַ[
<טיש גרענעץ = 1>
<tr bgcolor="blue">
<טד><font color="white"><ב>פּראָיעקט נאָמען</ב></קאַסע></טד>
<td align="right"><font color="white"><ב>גאַנץ טאָג</ב></קאַסע></טד>
<td align="right"><font color="white"><ב>בודזשעט</ב></קאַסע></טד>
<td align="right"><font color="white"><ב>פאַקטיש עקספּענסע</ב></קאַסע></טד>
<טד><font color="white"><ב>קוילעלדיק סטאַטוס</ב></קאַסע></טד>
</טר>
]]>
</קססל:צי>
</קססל:בייַטעוודיק>
<!--
אן אנדער בייַטעוודיק, טאַבלעענד פשוט דיפיינז די קלאָוזינג טיש פאַרבינדן.
ווי מיט טאַבלעסטאַרט, עס ס שטענדיק עמיטעד. דאס איז וואָס זייַן ווערט איז
.
-->
<קססל:בייַטעוודיק נאָמען="טאַבלעענד">
<קססל:צי פּרובירן="$קורפּאָס = $ לעצטע">
<![קדאַטאַ[ </טיש> ]]>
</קססל:צי>
</קססל:בייַטעוודיק>
<!--
שטענדיק אַרויסלאָזן די אינהאַלט פון טאַבלעסטאַרט. אויב דאָס איז ניט דער ערשטער
, דעמאָלט מיר וויסן זייַן ווערט
.
דיסייבאַל רעזולטאַט יסקייפּינג ווייַל ווען טאַבלעסטאַרט עס ניט ליידיק, עס
. צי
, it will generate
stuff like "&לט;טיש&גט;" instead of "<טיש>".
-->
<קססל:ווערט-פון קלייַבן="$טאַבלעסטאַרט" דיסייבאַל-רעזולטאַט-יסקייפּינג="יאָ"/>
<טר>
<!--
פּ:פּראָדזשעקט_קס005פ_קס0020_נאַמע
:פּראָדזשעקט_קס005פ_קס0020_ענד_קס005פ_קס0020_דאַטע
:פּראָדזשעקט_קס005פ_קס0020_בודגעט
:פּראָדזשעקט_קס005פ_קס0020_עקספּענסעס
:פּראָדזשעקט_קס005פ_קס0020_סטאַטוס
-->
<טד>
<קססל:ווערט-פון קלייַבן="@ פּראָדזשעקט_קס005פ_קס0020_נאַמע"/>
</טד>
<טד ייַנרייען="רעכט">
<קססל:ווערט-פון קלייַבן="@ פּראָדזשעקט_קס005פ_קס0020_ענד_קס005פ_קס0020_דאַטע"/>
</טד>
<טד ייַנרייען="רעכט">
<קססל:רופן-מוסטער נאָמען="פאָרמאַטקוררענסי">
<קססל:מיט-פּאַראַם נאָמען="ווערט" קלייַבן="@ פּראָדזשעקט_קס005פ_קס0020_בודגעט"></קססל:מיט-פּאַראַם>
</קססל:רופן-מוסטער>
</טד>
<טד ייַנרייען="רעכט">
<קססל:רופן-מוסטער נאָמען="פאָרמאַטקוררענסי">
<קססל:מיט-פּאַראַם נאָמען="ווערט" קלייַבן="@ פּראָדזשעקט_קס005פ_קס0020_עקספּענסעס"> </קססל:מיט-פּאַראַם>
</קססל:רופן-מוסטער>
</טד>
<טד>
<קססל:ווערט-פון קלייַבן="@ פּראָדזשעקט_קס005פ_קס0020_סטאַטוס"/>
</טד>
<!--
אַלע פון די פאלגענדע איז קאַמענטאַד אויס צו דערקלערן דאס.
אָבער, ברענגען עס צוריק און שטאָפּן עס אין אַ <טד> צו זען זייַן
.
-->
<!--
<div id="linkitem" class="item">
<קססל:if test="string-length($סאַפעימאַגעורל) != 0">
<div class="image-area-left">
<a href="{$סאַפעלינקורל}" target="{$לינקטאַרגעט}">
<img class="image-fixed-width" src="{$סאַפעימאַגעורל}" alt="{@ ימאַגעורלאַלטטעקסט}"/>
</אַ>
</דיוו>
</קססל:צי>
<div class="link-item">
<קססל:רופן-מוסטער name="OuterTemplate.CallPresenceStatusIconTemplate"/>
<a href="{$סאַפעלינקורל}" target="{$לינקטאַרגעט}" title="{@ לינקטאָאָלטיפּ}">
<קססל:value-of select="$DisplayTitle"/>
</אַ>
<div class="description">
<קססל:value-of select="@Description" />
</דיוו>
</דיוו>
</דיוו>
-->
</טר>
<!--
אַרויסלאָזן די קלאָוזינג טיש פאַרבינדן. אויב מיר זענען נישט אויף די לעצטע רודערן,
דאָס וועט זייַן פּוסט.
-->
<קססל:ווערט-פון קלייַבן="$טאַבלעענד" דיסייבאַל-רעזולטאַט-יסקייפּינג="יאָ"/>
</קססל:מוסטער>
<קססל:מוסטער נאָמען="פאָרמאַטקוררענסי">
<קססל:פּאַראַם נאָמען="ווערט" קלייַבן="0" />
<קססל:ווערט-פון קלייַבן='פֿאָרמאַט-נומער($ווערט, "$DDD,דדד,DDD.DD", "staff")' />
</קססל:מוסטער>
|