ארכיון קטגוריה: פיתוח SharePoint

היזהרו שינויים של הרגע האחרון כדי ItemStyle.xsl

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

אין אפשרות להציג Web Part זה. כדי לפתור את הבעיה, לפתוח דף אינטרנט זה עורך HTML תואם Windows SharePoint Services, כגון Microsoft Office SharePoint Designer. אם הבעיה נמשכת, פנה אל מנהל שרת האינטרנט.

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

היזהר darned בעת עבודה עם ItemStyle.xsl (ואת כל הקבצים XSL גלובלית) — הפרתם משפיע על פריטים רבים באוסף האתרים.

<סיום />

הצגת תוצאות חלק אינטרנט של שאילתת תוכן ברשת / טבלה

מבט כולל על וחשיבה אובייקטיבית

מחוץ לקופסה, מוס’ 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>

גישה

בצע את השלבים הבאים כדי ליצור את הרשת:

  1. לזהות את הרכיבים של רשת (שורות/עמודות).
  2. להגדיר וליצור עמודות אתר הדרושים.
  3. יצירת אתרי משנה עבור פרוייקטים ורשימות סינגלטון.
  4. הוסף את CQWP לדף אינטרנט והגדר אותו לחיפוש אחר הרשימות שלך.
  5. שנה של CQWP XML כדי לאסוף את עמודות נוספות.
  6. שנה את ה-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 כדי לבטל את הפלט בריחה, זה יפיק דברים כמו"&lt;טבלה&gt;" במקום של"<טבלה>".
    -->
    <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 שם="ערך" 
בחר="@ Project_x005F_x0020_Budget"></xsl:עם param> </xsl:תבנית קריאה> </td> <td יישור="מימין"> <xsl:תבנית קריאה שם="formatcurrency"> <xsl:עם param שם="ערך" בחר="@ Project_x005F_x0020_Expenses">
</xsl:עם param> </xsl:תבנית קריאה> </td> <td> <xsl:הערך בחר="@ Project_x005F_x0020_Status"/> </td> <!-- כל הפעולות הבאות כהערות להבהיר את פני הדברים. עם זאת, להחזירן, ודחס אותו לתוך <td> כדי לראות את השפעתו. --> <!-- <div id = "linkitem" class = "פריט"> <xsl:אם בדיקת = "מחרוזת באורך($SafeImageUrl) != 0 "> <div class = "תמונת-שטח-שמאל"> <href = "{$SafeLinkUrl}" היעד = "{$LinkTxslet}"> <img class = "תמונת-ברוחב קבוע" src = "{$SafeImageUrl}"
alt = "{@ ImageUrlAltText}"/> </של> </div> </xsl:אם> <div class = "קישור-פריט"> <xsl:תבנית קריאה
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <href = "{$SafeLinkUrl}"
היעד = "{$LinkTxslet}" כותרת = "{@ LinkToolTip}"> <xsl:הערך של בחר = "$ DisplayTitle" /> </של> <div class = "תיאור"> <xsl:הערך של select="@Description" /> </div> </div> </div>
--> </. tr> <!-- לפלוט סגירת תג של טבלה. אם אנחנו לא נמצאים בשורה הראשונה, זה יהיה ריק. --> <xsl:הערך בחר="$tableEnd" בטל-פלט-בריחה="כן"/> </xsl:תבנית> <xsl:תבנית שם="formatcurrency"> <xsl:param שם="ערך" בחר="0" /> <xsl:הערך בחר='עיצוב מספר($ערך, "$ DDD,DDD,DDD.DD", "צוות")' /> </xsl:תבנית>

מסך הזנת הנתונים של WSS/מוס רגיל אינם תומכים נפתחות מדורגים (או אחרים אינטרה-מן התקשורת)

עדכון (04/2008): בערך זה בלוג נהדר מציג גישה מבוסס javascript טוב לבעיה הזאת: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

עדכון II: (04/2008): הפוסט בבלוג הזה נראה מבטיח גם כן: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

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

  • רשימת בארה. הברית
  • רשימת בארה. ערים.

כמו ספקי ממשק המשתמש אחראי, אנחנו רוצים לפעול ככה:

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

אין תמיכה out-של--box עבור תכונה זו. למעשה, אין תמיכה OOB עבור כל סוג של תקשורת ישירה אינטרה-טופס. זה כולל באופן תוכניתי מסתור/הפעלה/ביטול שדות בתגובה לשינויים שדה במקום אחר על הטופס.

המטרה האמיתית של מאמר זה כדי לתאר את הפתרונות האפשריים ואת אלה נמצאות האפשרויות כפי שאני מכיר אותם:

  1. לפתח סוג העמודה מותאם אישית. כמפתח מותאמת אישית-טור-, יש לך שליטה מלאה על העולם"" של העמודה מותאם אישית. באפשרותך ליישם מדורגים נפתחת ככה.
  2. שקול להשתמש בזרימת עבודה. במקרים מסוימים, ברצונך להקצות באופן אוטומטי ערך לשדה בהתבסס על הערך של שדה אחר. במקרה זה, בדרך כלל שתנסה להשתמש בעמודה מחושבת, אבל כמה פעמים, זה פשוט לא לעשות את העבודה. זרימת עבודה של SharePoint Designer היא אלטרנטיבה ידידותית לניהול יחסית הטלת מטה לתוך קוד ו- visual studio. אם תלך בדרך הזאת, להיות מודעים לבעיה שנדונה מאמר זה (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. מטפלים באירועים: כמו זרימת עבודה, פתרון לאחר--עובדה. באירועים שלך היא הרכבה של .NET (C #, VB.NET) כדי SharePoint אשר מעביר שליטה. האובייקט שאתה לפתח יש גישה לכל הנתונים של הרשימה (מודל האובייקט כולו) יכול לעשות את כל הדרוש חישוב.
  4. השתמש SharePoint Designer כדי ליצור טפסים של הזנת מותאם אישית. אין לי ניסיון ישיר עם גישה זו, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. רול הפונקציה הזנת נתונים משלך ASP.NET (כדף אינטרנט עצמאי או כ- web part) והוא השתמש בזה במקום.

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

<סיום />

תגיות טכנורטי:

ליצור גרפים של מייצגי ב- SharePoint

מבט כולל:

(עדכון 12/04/07: הוספת משאב מעניין אחר בקצה קישור לבלוג אחר המטפלת זה דרך web part מעניין מאוד)

את הבלוג מתאר כיצד ליצור גרף עמודות ב- SharePoint. זה עובד בסביבות WSS וגם מוס. כמו הדבר תלוי רק ה-web part של תצוגת נתונים.

הגישה הכללית היא כדלקמן:

  1. יצירת רשימה או ספריית מסמכים המכיל את הנתונים שברצונך גרף.
  2. המקום בספריית המסמכים הקשורים / מותאם אישית ברשימה בדף, להמיר אותו ל- web part של תצוגת נתונים (DVWP).
  3. שינוי של DVWP XSL ליצירת HTML המציגה בצורת גרף.

תרחישים עסקיים / תוכנית ההתקנה:

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

  • הציע נישואין
  • בתהליך
  • התקועה

המטרה היא לייצר אינטראקטיבי אופקי גרף המציג את קודי מצב אלה.

אני צריכה את הרשימה ואת זה נראה כמו זה:

התמונה

יצירת Web Part תצוגת נתונים:

ליצור את DVWP על-ידי הוספת הרשימה המותאמת אישית לדף (דף אתר במקרה שלי) ובצע את ההוראות כאן (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

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

התמונה

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

לשנות את ה-XSLT:

הגיע זמן לשנות ה-XSLT.

. אני תמיד משתמשת visual studio בשביל זה. (ראה כאן עבור הערה חשובה על intellisense זה יעזור לך הרבה).

ליצור פרוייקט ריק מוסיף קבצים חדשים ארבע (החלפת המילים "אורגינל" וחדש"" כיאה):

  • Original.xslt
  • New.xslt
  • Params.xml המקורי
  • Params.xml חדש

במקרה שלי, זה נראה כך:

התמונה

לשנות את ה-web part ולהעתיק את params ו- XSL למקור"" גירסה ב- Visual Studio.

המטרה כאן היא לגרום את ה-XSL להפוך את התוצאות שנחזור מהשאילתה DVWP לתוך HTML שמעבדת בצורת גרף.

למטרה זו, היא מסייעת לשקול קודם איך ה-HTML צריכה להיראות לפני לנו להתבלבל ידי לאי-השפיות הידוע "XSL". (כדי שיהיה ברור, להלן הוא פשוט דוגמה; אל תקליד את זה או העתק/הדבק לסטודיו חזותי. אני מספק מכה מלא נקודת ההתחלה בשביל זה בהמשך שכתוב). הגרף הבא לדוגמה מעובד לפי ה-HTML הבאים מיד לאחר:

תרשים עמודות לדוגמא

HTML המתאים:

<html>
<הגוף>
<מרכז>
<שולחן רוחב = 80%>
<. tr><td><מרכז>אופקי גרף</td></. tr>
<. tr>
<td ליישר = "המרכז">
<גבול הטבלה = "1" רוחב = 80%>
<. tr>
<td רוחב = 10%>פתוח</td>
<td><טבלה cellpadding ="0" cellspacing ="0" גבול = רוחב 0 = 50%><צבע רקע tr = אדום><td>&nbsp;</td></. tr></טבלה></td>
</. tr>
<. tr>
<td רוחב = 10%>סגור</td>
<td><טבלה cellpadding ="0" cellspacing ="0" גבול = רוחב 0 = 25%><צבע רקע tr = אדום><td>&nbsp;</td></. tr></טבלה></td>
</. tr>
<. tr>
<td רוחב = 10%>התקועה</td>
<td><טבלה cellpadding ="0" cellspacing ="0" גבול = רוחב 0 = 25%><צבע רקע tr = אדום><td>&nbsp;</td></. tr></טבלה></td>
</. tr>
</טבלה>
</td>
</. tr>
</טבלה>
</הגוף>
</html>

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

Take-away כאן את זה: בסופו של דבר, כל מה שאנחנו עושים הוא יצירת HTML עם שורות ועמודות.

תבנית ה-XSLT:

העתקתי את ה-XSLT שיוצר גרף עמודות אופקיות. . זה טוב למדי הגיב כדי לא להוסיף הרבה כאן למעט הערות אלו:

  • התחלתי עם ברירת המחדל XSL SharePoint Designer נתן לי כאשר שבתחילה יצרתי את DVWP.
  • . הייתי יכול לעשות את זה מ- SPD 657 קווים 166 קווים.
  • לא להתעסק עם קובץ ה-XML פרמטרים (נפרדת מאמצעי ה-XSL, לך תדע. למה אני מתכוון. כשאתה הולך לשנות את DVWP עצמה; קיימים שני קבצים, שבאפשרותך לשנות). עם זאת, על מנת לפשט את זה, להסיר וכמעט בכולם ה-XSL. זאת אומרת, אם אתה רוצה לעשות שימוש באותם הפרמטרים, אתה רק צריך להוסיף והגדרותיהם משתנים בחזרה ה-XSL. זה יהיה קל. מאז יהיה לך הגדרות המשתנה המקורי של XSL בפרוייקט visual studio.
  • אתה צריך להיות מסוגל להעתיק ולהדביק את זה ישירות לתוך הפרוייקט שלך visual studio. לאחר מכן, הסר את השיחות שלי ולהוסיף משלכם שיחות "ShowBar".
  • התרגיל למטה עבודות על-ידי יצירת <href> כמו זה: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. טכניקה זו עשוי להיות ערך בהקשרים אחרים. בהתחלה, . חשבתי שהיה צריך להתאים את תבנית מורכבת יותר: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, אבל בסביבה שלי זה לא נחוץ. כתובת URL של הרשימה מועברת אלינו על-ידי SharePoint אז זה די קל לעשות הכללות.

. הנה זה:

<xsl:גליון סגנונות גירסה="1.0" אי-כלילה-התוצאה-קידומות="ר' z o s ddwrt dt msxsl" 
xmlns:msxsl="כד:סכימות-מיקרוסופט-com:xslt" xmlns:xsl="http://www.w3.org/ 1999 / / שינוי XSL"
xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer"
xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="כד:סכימות-מיקרוסופט-com:office" xmlns:s="רכיב uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"
xmlns:dt="רכיב uuid:C2F41010-65B3 - 11d 1-A29F-00AA00C14882" xmlns:ר'="כד:סכימות-מיקרוסופט-com:שורות" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="כד:frontpage:פנימית"
> <xsl:פלט שיטה="html" כניסה="לא" /> <xsl:תבנית עשרונית נאן="" /> <xsl:param שם="ListUrlDir"></xsl:param> <!-- אני צריך את זה כדי לתמוך את ההסתעפות. --> <xsl:תבנית התאמה="/" xmlns:SharePoint="Microsoft.SharePoint.WebControls"
xmlns:__designer=http://schemas.microsoft.com/WebParts/v2/DataView/designer xmlns:asp="http://schemas.microsoft.com/ASPNET/20"
> <xsl:משתנה שם="dvt_StyleName">טבלה</xsl:משתנה> <xsl:משתנה שם="שורות" בחר="/dsQueryResponse/שורות/שורה" /> <xsl:משתנה שם="dvt_RowCount" בחר="ספירה($שורות)" /> <xsl:משתנה שם="IsEmpty" בחר="$dvt_RowCount = 0" /> <xsl:משתנה שם="dvt_IsEmpty" בחר="$dvt_RowCount = 0" /> <xsl:בחר> <xsl:כאשר מבחן="$dvt_IsEmpty"> אין נתונים על גרף!<br/> </xsl:כאשר> <xsl:אחרת> <!-- החומר מעניין מתחיל כאן. לצורך כך יש להגדיר זוג של משתני עבור כל שורה בגרף: המספר הכולל של פריטים אחוזים מכלל. --> <xsl:משתנה שם="totalProposed" בחר="ספירה(/dsQueryResponse/שורות/שורה[לנרמל-מרחב(@Status) = 'הציע'])" /> <xsl:משתנה שם="percentProposed" בחר="$totalProposed דיב $dvt_RowCount" /> <xsl:משתנה שם="totalInProcess" בחר="ספירה(/dsQueryResponse/שורות/שורה[לנרמל-מרחב(@Status) = "בתהליך"])" /> <xsl:משתנה שם="percentInProcess" בחר="$totalInProcess דיב $dvt_RowCount" /> <xsl:משתנה שם="totalStalled" בחר="ספירה(/dsQueryResponse/שורות/שורה[לנרמל-מרחב(@Status) = 'נתקע'])" /> <xsl:משתנה שם="percentStalled" בחר="$totalStalled דיב $dvt_RowCount" /> <!-- אנו מגדירים את השולחן HTML שלנו כאן. אני שואל מסגנונות מסוימים סטנדרטי SharePoint כאן כדי שזה בקנה אחד. אני חושב שנכבד זה שינויים לקובץ ה-css העולמית כמו גם נושא דורסת. --> <טבלה רוחב="100%" cellspacing="0" cellpadding="2" סגנון="הגבול הימני: 1 #C0C0C0 מוצק; גבול המדרגה: 1 #C0C0C0 מוצק; גבול-שמאל בסגנון: מוצק; גבול-שמאל-רוחב: 1; גבול-העליון בסגנון: מוצק; גבול עליון-ברוחב: 1;"> <. tr> <td יישור="מרכז"> <טבלה גבול="1" רוחב="100%"> <!-- עבור כל מצב שאנחנו רוצים ליצור גרף, אנחנו קוראים את ShowBar"" תבנית. אנחנו עוברים את זה: 1. תווית עבור השורה. זה הופך היפר-קישור. 2. האחוזים (משתנה מלמעלה). 3. שם השדה הממשי של קוד מהרשימה הבסיסית. . זה לא צריך להתאים את התווית תצוגה. 4. ערך השדה מתאימים עבור #3. 5. סה כ פריטים של קוד מצב (לא על הסכום הכולל של כל קודי מצב). הוא פולט <. tr></. tr> קו אופקי גרף. אנחנו קוראים תבנית זו עבור כל קוד מצב שאנחנו רוצים להציג. --> <xsl:תבנית קריאה שם="ShowBar"> <xsl:עם param שם="BarDisplayLabel" בחר=""הציע""/> <xsl:עם param שם="BarPercent" בחר="$percentProposed"/> <xsl:עם param שם="QueryFilterFieldName" בחר="'מצב'"/> <xsl:עם param שם="QueryFilterFieldValue" בחר=""הציע""/> <xsl:עם param שם="TotalItems" בחר="$totalProposed"></xsl:עם param> </xsl:תבנית קריאה> <xsl:תבנית קריאה שם="ShowBar"> <xsl:עם param שם="BarDisplayLabel" בחר="'נתקע'"/> <xsl:עם param שם="BarPercent" בחר="$percentStalled"/> <xsl:עם param שם="QueryFilterFieldName" בחר="'מצב'"/> <xsl:עם param שם="QueryFilterFieldValue" בחר="'נתקע'"/> <xsl:עם param שם="TotalItems" בחר="$totalStalled"></xsl:עם param> </xsl:תבנית קריאה> <xsl:תבנית קריאה שם="ShowBar"> <xsl:עם param שם="BarDisplayLabel" בחר=""בתהליך""/> <xsl:עם param שם="BarPercent" בחר="$percentInProcess"/> <xsl:עם param שם="QueryFilterFieldName" בחר="'מצב'"/> <xsl:עם param שם="QueryFilterFieldValue" בחר=""בתהליך""/> <xsl:עם param שם="TotalItems" בחר="$totalInProcess"></xsl:עם param> </xsl:תבנית קריאה> </טבלה> </td> </. tr> </טבלה> </xsl:אחרת> </xsl:בחר> </xsl:תבנית> <!-- תבנית זו עושה את העבודה של הצגת שורות בודדות של גרף. אתה בטח תעשה רוב מגרסאות שלך כאן. --> <xsl:תבנית שם="ShowBar"> <xsl:param שם="BarDisplayLabel" /> <!-- תווית להראות --> <xsl:param שם="BarPercent"/> <!-- % סה '. --> <xsl:param שם="QueryFilterFieldName"/> <!-- נהגו לקפוץ לשאילתה & מסנן --> <xsl:param שם="QueryFilterFieldValue"/> <!-- נהגו לקפוץ לשאילתה & מסנן --> <xsl:param שם="TotalItems" /> <!-- ספירה סך של barlabel הזה --> <. tr> <!-- הבר תווית עצמה. --> <td מחלקה="ms-formbody" רוחב="30%"> <!-- זו קבוצה הבאה של הצהרות בונה מחרוזת השאילתה המאפשר לנו להסתעף תצוגה מסוננת של הנתונים המשמשים כבסיס. נעשה שימוש כאן כמה דברים: 1. אנחנו יכול לעבור FilterField1 ו- FilterValue1 לרשימה כדי לסנן לפי עמודה. 2. SharePoint עובר פרמטר מפתח אלינו, ListUrlDir שמצביע על הרשימה הבסיסית שמולו הזה DVWP "פועל". לא כיף XSL? --> <xsl:טקסט בטל-פלט-בריחה="כן"> <![CDATA[<href ="]]></xsl:טקסט> <xsl:הערך בחר="$ListUrlDir"/> <xsl:טקסט בטל-פלט-בריחה="כן"><![CDATA[?FilterField1 =]]></xsl:טקסט> <xsl:הערך בחר="$QueryFilterFieldName"/> <xsl:טקסט בטל-פלט-בריחה="כן"><![CDATA[&FilterValue1 =]]></xsl:טקסט> <xsl:הערך בחר="$QueryFilterFieldValue"/> <xsl:טקסט בטל-פלט-בריחה="כן"><![CDATA[">]]></xsl:טקסט> <xsl:הערך בחר="$BarDisplayLabel"/> <xsl:טקסט בטל-פלט-בריחה="כן"><![CDATA[</של>]]></xsl:טקסט> <!-- הסיבית הבאה מציגה כמה מספרים בתבנית: "(סה / % מכלל)" --> (<xsl:הערך בחר="$TotalItems"/> / <!-- זה יוצר תווית אחוז נחמד בשבילנו. תודה, Microsoft! --> <xsl:תבנית קריאה שם="percentformat"> <xsl:עם param שם="אחוז" בחר="$BarPercent"/> </xsl:תבנית קריאה>) </td> <!-- לבסוף, פולטים <td> תג הבר עצמו.--> <td> <טבלה cellpadding="0" cellspacing="0" גבול="0" רוחב="{סיבוב($BarPercent * 100)+1}%"> <. tr צבע רקע="אדום"> <xsl:טקסט בטל-פלט-בריחה="כן"><![CDATA[&nbsp;]]></xsl:טקסט> </. tr> </טבלה> </td> </. tr> </xsl:תבנית> <!-- זה נלקח ישירות מתוך כמה XSL מצאתי בתוך תבנית MS. --> <xsl:תבנית שם="percentformat"> <xsl:param שם="אחוז"/> <xsl:בחר> <xsl:כאשר מבחן="עיצוב מספר($אחוז, '#,##0%;-#,##0%')= 'סבתא'">0%</xsl:כאשר> <xsl:אחרת> <xsl:הערך בחר="עיצוב מספר($אחוז, '#,##0%;-#,##0%')" /> </xsl:אחרת> </xsl:בחר> </xsl:תבנית> </xsl:גליון סגנונות>

התוצאות:

ה-XSL מלמעלה יוצר הגרף הזה:

התמונה

בהסתעפות הנתונים המשמשים כבסיס על-ידי לחיצה על קוד מצב:

התמונה

מחשבות המסכם:

זה יכול להיות מוכללת?

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

גרפים אנכי:

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

אני חושבת אתגר עם גרף אנכי זה התוויות עבור הגרף קשים יותר לניהול, אבל בהחלט לא בלתי אפשרי.

של שדה שם הבנתי אותך:

יש לפחות שני דברים לחפש עם שמות השדות שלך.

הראשונה, שם שדה ברווח חייב להיות נמלט את ה-XSL. זה יהיה כנראה בעיה כאן:

        <xsl:משתנה שם="totalProposed" 
בחר="ספירה(/dsQueryResponse/שורות/שורה[לנרמל-מרחב(@Status) = 'הציע'])" />

אם מצבך"" טור בעצם קוראים "קוד מצב" אז אתה צריך להפנות את זה בתור "Status_x0020_Code":

   <xsl:משתנה שם="totalProposed" 
בחר="ספירה(/dsQueryResponse/שורות/שורה[לנרמל-מרחב(@Status_x0020_Code) = 'הציע'])" />

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

על הצבע הזה:

אני בחרתי "אדום" כי זה לרצות אותי כרגע. זה לא יהיה עניין גדול להראות צבעים שונים כדי לספק יותר מאשר תיאור חזותי של מספר, אבל גם לספק KPI שימושי. לדוגמה, אם האחוז של "התקועה" הוא של דינה אזולאי > 10% אז תראי את זה אדום, אחרת להראות את זה בשחור. השימוש <xsl:בחר> כדי להשיג את זה.

משאבים אחרים:

שינוי צורה של שמחה!

<סיום />

מנוי על הבלוג שלי!

הצגת נתונים אום באמצעות רשימה מותאמת אישית (או, עדיין Displayor נתונים אום נוסף [כמו YACC, אבל שונה])

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

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

פרסמתי כדי של פורום MSDN את עשוייה ללא חת אנדרו וודוורד הפנה אותי לכיוון של הנתונים המשמשים כבסיס של מודל אובייקט.

הלכתי codeplex כדי למצוא כמה כלים שיעזרו לי להציץ אל הנתונים המשמשים כבסיס אום ולעזור לי לאתר את הבעיה.

ניסיתי מספר כלים, הם היו מאוד מגניב, מעניין אבל בסופו של דבר, ממשק המשתמש לא היה מספיק טוב עבור המטרה שלי. אני לא מבקר אותם בכל האמצעים, אבל בבירור הכלי להכנת לא היה הבעיה שלי בראש כשהם יצרו UI שלהם :). נראה שרוב האנשים משקיעה כמות סבירה של זמן ומאמץ ביצירת תחנות עבודה / יישומי לקוח המספקים תצוגות עץ, לחץ לחיצה ימנית על תפריטים תלויי-הקשר, וכן הלאה. . אלה נחמדות והכל, אבל זה הרבה עבודה כדי ליצור חוויית משתמש top-of--line הוא גם גמיש מאוד.

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

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