Αρχεία κατηγοριών: Ανάπτυξη του SharePoint

Beware ολοκληρωτικών αλλαγών για να ItemStyle.xsl

Δούλευα με ItemStyle.xsl να προσαρμόσετε το βλέμμα του ένα τμήμα Web ερωτήματος περιεχομένου και το δικαίωμα για την ώρα του γεύματος, Έκανα ένα σπάσιμο αλλαγή στην XSL. Δεν είχα συνειδητοποιήσει αυτό, αλλά αυτό είχε εκτεταμένες συνέπειες σε ολόκληρη τη συλλογή τοποθεσιών. Πήγα στο μεσημεριανό γεύμα, καθώς και κατά την επιστροφή μου, παρατήρησα αυτό το μήνυμα που εμφανίζεται σε μια δέσμη των θέσεων:

Δυνατό να εμφανίσει αυτό το τμήμα Web. Για να αντιμετωπίσετε το πρόβλημα, άνοιγμα αυτής της σελίδας Web σε ένα πρόγραμμα επεξεργασίας HTML συμβατό με τις υπηρεσίες Windows SharePoint Services, όπως το Microsoft Office SharePoint Designer. Εάν το πρόβλημα παραμένει, επικοινωνήστε με το διαχειριστή του διακομιστή Web.

Εγώ κατηγόρησε τον πελάτη (δεν συνειδητοποιούν ακόμη ότι ήταν λάθος μου αυτή τη στιγμή) αλλά τελικά παρατήρησα ότι το οπτικό στούντιο intellisense ήταν προειδοποίηση μου ότι είχα ακατάλληλη XSL. Διόρθωσα και τα πάντα άρχισε να εργάζεται.

Να καταρημένη προσεκτικοί όταν ασχολούνται με ItemStyle.xsl (και κάποιο από τα παγκόσμια αρχεία XSL) — σπάζοντας τους επηρεάζει πολλά αντικείμενα της συλλογής τοποθεσιών.

<Τέλος />

Εμφάνιση περιεχομένου αποτελέσματα τμήμα Web ερωτήματος σε ένα πλέγμα / Πίνακας

Επισκόπηση και στόχος

Από το κουτί, MOSS’ Τμήμα Web ερωτήματος περιεχομένου (CQWP) εμφανίζει τα αποτελέσματα σε μορφή λίστας, παρόμοια με τα αποτελέσματα αναζήτησης. Είναι επίσης δυνατό να εμφανίσετε τα αποτελέσματα σε μια μορφή πλέγματος (ήτοι. Μορφή πίνακα HTML). Πλέγμα μορφές είναι καλύτερα σε ορισμένες περιπτώσεις. Περιγράφει τον τρόπο για να επιτευχθεί αυτό το αποτέλεσμα σε αυτό το άρθρο.

Επιχειρηματικό σενάριο

Έχω εργαστεί με έναν πελάτη για ένα ξεδίπλωμα ΒΡΎΑ ολόκληρη την επιχείρηση. Έχουμε σχεδιάσει το τους ταξονομία όπως ότι έργα είναι πρώτης κατηγορίας πολίτες στην ιεραρχία και έχουν τη δική τους τοποθεσία ανώτατου επιπέδου. Διαχειριστές έργου διατηρεί singleton λίστα πληροφοριών σύνοψης έργου, όπως με τίτλο, προϋπολογισμού, αναμενόμενη ημερομηνία ολοκλήρωσης, υπόλοιπα κονδύλια και άλλα πεδία σύνοψης τύπου. Από τον "Σίνγκλετον" Θέλω να πω μια προσαρμοσμένη λίστα SharePoint εγγυημένη για να περιέχουν μόνο ένα στοιχείο. Απλουστευτικά, μοιάζει με αυτό:

εικόνα

Η τεχνική προσέγγιση είναι πολύ το ίδιο όπως περιγράφεται Εδώ (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). Το CQWP χρησιμοποιεί ένας μετασχηματισμός XSL να εκπέμπουν HTML για το πρόγραμμα περιήγησης για την απόδοση.

Οραματίζομαι πάντα το αποτέλεσμα Βουτήξτε το XSL επειδή XSL είναι ένας εφιάλτης. Εδώ είναι το μου το επιθυμητό αποτέλεσμα:

εικόνα

HTML όπως αυτό δημιουργεί αυτό το αποτέλεσμα:

<HTML>
 <οργανισμός>
 <κέντρο>
 <Πίνακας σύνορα= 1>

<!-- Ετικέτες-->
 <TR χρώμα φόντου= μπλε>
 <TD><γραμματοσειρά χρώμα= λευκό><β>Όνομα έργου</β></γραμματοσειρά></TD>
 <TD Στοίχιση= δεξιά><γραμματοσειρά χρώμα= λευκό><β>Πλήρης ημερομηνία</β></γραμματοσειρά></TD>
 <TD Στοίχιση= δεξιά><γραμματοσειρά χρώμα= λευκό><β>Προϋπολογισμού</β></γραμματοσειρά></TD>
 <TD Στοίχιση= δεξιά><γραμματοσειρά χρώμα= λευκό><β>Πραγματική δαπάνη</β></γραμματοσειρά></TD>
 <TD><γραμματοσειρά χρώμα= λευκό><β>Συνολική κατάσταση</β></γραμματοσειρά></TD>
 </TR>

<TR>
 <TD>Αίθουσα πληροφορικής εκ νέου το σύρμα.</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. Δημιουργία υποδικτυακοί τόποι για τα έργα και τις λίστες singleton.
  4. Προσθέσετε το CQWP σε μια σελίδα web και να ρυθμίσετε τις παραμέτρους για την αναζήτηση λιστών.
  5. Τροποποίηση της CQWP XML για να συγκεντρώσει τις πρόσθετες στήλες.
  6. Τροποποιήσετε το XSL για τη δημιουργία ενός πίνακα.

Πάω να επικεντρωθεί σε αριθμό έξι. Αριθμοί μία μέσα από τέσσερις είναι απλή και κάτι που κάθε χρήστη της CQWP έχει ήδη γίνει. Αριθμός πέντε έχει καλά τεκμηριωμένο από άλλους συμπεριλαμβανομένου αυτό εξαντλητικό άρθρο εμφόρτου οθόνη-shot από MSDN Εδώ (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) και του Σολομώντα Heather blog Εδώ (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Καρύδια και τα μπουλόνια

Αρχίζουν και να εφαρμόσει τα βήματα ένα έως πέντε σύμφωνα με την τεκμηρίωση του MSDN και του Σολομώντα Heather άρθρο.

Σε αυτό το σημείο, έχετε προσθέσει στη σελίδα σας CQWP και να έχετε σας <CommonViewFields> ρυθμιστεί ανάλογα με τις ανάγκες.

Ακολουθώντας τα συνήθη βήματα, Έχω αυτά τα ενδιάμεσα αποτελέσματα:

1. Δημιουργήστε έναν τύπο περιεχομένου, μια templatized προσαρμοσμένη λίστα για αυτόν τον τύπο περιεχομένου και δύο τοποθεσίες. Εδώ είναι ο τύπος περιεχομένου:

εικόνα

Εδώ είναι η δομή του site:

εικόνα

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 και κτυπήματος σε άρθρο της Heather του Σολομώντα. Ακολουθήστε τα βήματα που αρχίζουν κοντά στο βήμα #5 για να δημιουργήσετε μια προσαρμοσμένη / unghosted έκδοση του ItemStyle.xsl. Ακολουθώ τις συμβουλές της ερείκης, επάνω μέσω βήμα 11 και να πάρετε αυτά τα ενδιάμεσα αποτελέσματα:

4.1: Όνομα μου πρότυπο XSL ως εξής:

<XSL:πρότυπο όνομα = "πλέγμα" ταιριάζει = "γραμμή[@Style = "Πλέγμα"]" λειτουργία = "itemstyle">

Μπορώ να τροποποιήσω την πρότεινε επίσης ελαφρώς <XSL:για-κάθε …> με την προσθήκη ενός <br /> ετικέτα για να παρέχουν μια λίστα με τα καθαρότερα:

    <XSL:για-κάθε Επιλέξτε="@*">
      P:<XSL:αξία των Επιλέξτε="Όνομα()" /><br/>
    </XSL:για-κάθε>

4.2: Μπορώ να τροποποιήσω το τμήμα web, μεταβείτε στην εμφάνιση και επιλέξτε μου πλέγμα"" στυλ:

εικόνα

Εφαρμόσετε την αλλαγή και ιδού το αποτέλεσμα:

εικόνα

Μπορούμε να δούμε από τα παραπάνω ότι τα πεδία θέλουμε (Όνομα έργου, δαπάνη, κατάσταση, κλπ) είναι διαθέσιμα για να εκπέμπουμε το HTML. Δεν είναι μόνο ότι, αλλά μπορούμε να δούμε τα ονόματα με τα οποία εμείς πρέπει να παραπέμπει σε αυτές τις στήλες στο αμέσως την XSL. Για παράδειγμα, αναφοράς κατάστασης του έργου ως "Project_x005F_x0020_Name".

Σε αυτό το σημείο, θα αναχωρήσουμε από blog ερείκης και από τους ώμους των γιγάντων αυτών, Θα προσθέσω δικό μου μικρό κομμάτι.

ContentQueryMain.xsl

ΣΗΜΕΊΩΣΗ: Όταν κάνετε αλλαγές σε τόσο ContentQueryMain.xsl όσο και ItemStyle.xsl, θα πρέπει να ελέγξετε αυτά τα αρχεία πίσω στο προτού να δείτε το αποτέλεσμα των αλλαγών σας.

Για σκοπούς λήψης πλέγμα, ΒΡΎΑ χρησιμοποιεί δύο διαφορετικά αρχεία XSL για να παράγει τα αποτελέσματα που βλέπουμε από ένα CQWP. Για τη δημιουργία το προηγούμενο κομμάτι της παραγωγής, τροποποιημένη ItemStyle.xsl. MOSS στην πραγματικότητα χρησιμοποιεί ένα άλλο αρχείο XSL, ContentQueryMain.xsl να σε συνδυασμό με ItemStyle.xsl για τη δημιουργία του το HTML. Όπως υποδηλώνει το όνομά, ContentQueryMain.xsl είναι η κύρια"" XSL που ελέγχει τη συνολική ροή της μετάφρασης. Την αναπροσεγγίζει μέσω του όλα τα στοιχεία που βρέθηκαν και τις περνάει μία προς μία για πρότυπα σε ItemStyle.xsl. Θα τροποποιήσουμε ItemStyle.xsl να δημιουργήσει το άνοιγμα <Πίνακας> ετικέτα πριν εκπέμπουν στην πρώτη γραμμή των δεδομένων και το κλείσιμο <Πίνακας> ετικέτα μετά την τελευταία γραμμή που εκπέμπουν. Για να επιτευχθεί αυτό, ContentQueryMain.xsl έχει τροποποιηθεί για να περάσει δύο παραμέτρους μας δίκτυο"" πρότυπο ItemStyle.xsl, «τελευταία γραμμή" και "τρέχουσα γραμμή". ItemStyle.xsl χρησιμοποιεί αυτά να εκπέμπουν υπό όρους την αναγκαία Ετικέτες.

Χρησιμοποιώντας την τεχνική του Σολομώντα Heather, εντοπίζουμε ContentQueryMain.xsl. Βρίσκεται στο ίδιο μέρος με ItemStyle.xsl. Αυτό το πλάνο οθόνη θα πρέπει να βοηθήσει:

εικόνα

Πρέπει να κάνετε τις ακόλουθες αλλαγές:

  • Τροποποιήσετε ένα πρότυπο xsl, "CallItemTemplate" που επικαλείται στην πραγματικότητα μας πρότυπο πλέγμα σε ItemStyle.xsl. Θα περάσουμε δύο παραμέτρους στο πλέγμα πρότυπο έτσι ώστε θα έχει τα στοιχεία που χρειάζεται για την παραγωγή υπό όρους άνοιγμα και κλείσιμο <Πίνακας> Ετικέτες.
  • Τροποποιήσετε ένα άλλο κομμάτι της ContentQueryMain.xsl, που καλεί το CallItemTemplate"" να δώσετε ένα "LastRow" παράμετρος έτσι ότι LastRow μπορεί να περάσει μας πρότυπο πλέγμα.

Εντοπίστε το πρότυπο με το όνομα "OuterTemplate.CallItemTemplate" προσδιορίζονται από τη συμβολοσειρά:

  <XSL:πρότυπο Όνομα="OuterTemplate.CallItemTemplate">

Αντικαταστήσει το σύνολο πρότυπο ως εξής:

  <XSL:πρότυπο Όνομα="OuterTemplate.CallItemTemplate">
    <XSL:Παράμ Όνομα="CurPosition" />

    <!--
      Προσθέστε το "LastRow" παράμετρος.
      Χρησιμοποιούμε μόνο όταν το στοιχείο στυλ πέρασμα σε είναι "Πλέγμα".
    -->
    <XSL:Παράμ Όνομα="LastRow" />

    <XSL:Επιλέξτε>
      <XSL:Όταν δοκιμή="@Style = 'NewsRollUpItem'">
        <XSL:εφαρμογή προτύπων Επιλέξτε="." λειτουργία="itemstyle">
          <XSL:με Παράμ Όνομα="EditMode" Επιλέξτε="$cbq_iseditmode" />
        </XSL:εφαρμογή προτύπων>
      </XSL:Όταν>
      <XSL:Όταν δοκιμή="@Style = 'NewsBigItem'">
        <XSL:εφαρμογή προτύπων Επιλέξτε="." λειτουργία="itemstyle">
          <XSL:με Παράμ Όνομα="CurPos" Επιλέξτε="$CurPosition" />
        </XSL:εφαρμογή προτύπων>
      </XSL:Όταν>
      <XSL:Όταν δοκιμή="@Style = 'NewsCategoryItem'">
        <XSL:εφαρμογή προτύπων Επιλέξτε="." λειτουργία="itemstyle">
          <XSL:με Παράμ Όνομα="CurPos" Επιλέξτε="$CurPosition" />
        </XSL:εφαρμογή προτύπων>
      </XSL:Όταν>

      <!--
              Περάσει την τρέχουσα θέση και lastrow στο πρότυπο itemstyle.xsl πλέγμα.
              ItemStyle.xsl θα χρησιμοποιήσω που να εκπέμπει το άνοιγμα και κλείσιμο <Πίνακας> Ετικέτες.
      -->
      <XSL:Όταν δοκιμή="@Style = "Πλέγμα"">
        <XSL:εφαρμογή προτύπων Επιλέξτε="." λειτουργία="itemstyle">
          <XSL:με Παράμ Όνομα="CurPos" Επιλέξτε="$CurPosition" />
          <XSL:με Παράμ Όνομα="Το τελευταίο" Επιλέξτε="$LastRow" />
        </XSL:εφαρμογή προτύπων>
      </XSL:Όταν>

      <XSL:διαφορετικά>
        <XSL:εφαρμογή προτύπων Επιλέξτε="." λειτουργία="itemstyle">
        </XSL:εφαρμογή προτύπων>
      </XSL:διαφορετικά>
    </XSL:Επιλέξτε>
  </XSL:πρότυπο>

Τα σχόλια που περιγράφουν το σκοπός των αλλαγών.

Φυσικά, το OuterTemplate.CallItemTemplate"" ίδια καλείται από ένα άλλο πρότυπο. Εντοπίστε το πρότυπο από την αναζήτηση αυτή τη συμβολοσειρά κειμένου:

<XSL:πρότυπο Όνομα="OuterTemplate.Body">

Μετακινηθείτε τις οδηγίες στο OuterTemplate.Body και την εισαγωγή της παραμέτρου LastRow ως εξής (εμφανίζεται ως ένα σχόλιο με πλάγια γράμματα):

<XSL:κλήση-πρότυπο Όνομα="OuterTemplate.CallItemTemplate">
  <XSL:με Παράμ Όνομα="CurPosition" Επιλέξτε="$CurPosition" />
  <!-- Εισαγάγετε την παράμετρο LastRow. -->
  <XSL:με Παράμ Όνομα="LastRow" Επιλέξτε="$LastRow"/>
</XSL:κλήση-πρότυπο>

Μετά από όλα αυτά, έχουμε τελικά τα πράγματα που έχει συσταθεί σωστά, έτσι ώστε να μπορεί να εκπέμψει μας ItemStyle.xsl <Πίνακας> Ετικέτες στο σωστό μέρος.

ItemStyle.Xsl

ΣΗΜΕΊΩΣΗ: Και πάλι, Ελέγξτε σε ItemStyle.xsl μετά τη καθιστώντας οποιεσδήποτε αλλαγές, ώστε να μπορείτε να δείτε το αποτέλεσμα αυτών των αλλαγών.

Έχουμε δύο καθήκοντα εδώ:

  • Αντικαταστήσει το ολόκληρο πλέγμα πρότυπο. Μπορείτε αντίγραφο/κόλλα από κάτω.
  • Προσθέστε μερικές mumbo jumbo υπάγονται στον ορισμό του προτύπου που επιτρέπει "formatcurrency" πρότυπο λύνω. (Μπορείτε να πείτε ότι έχω μια αδύναμη λαβή για XSL).

Πρώτη, κοντά στην κορυφή του ItemStyle.xsl, Προσθέστε αυτή τη γραμμή:

  <!-- Μερικές mumbo jumbo που μας επιτρέπει να εμφανίσετε U.S. νόμισμα. -->
  <XSL:δεκαδικό-format Όνομα="προσωπικό" ψηφίο="D" />

  <XSL:πρότυπο Όνομα="Προεπιλογή" αγώνα="*" λειτουργία="itemstyle">

Σημείωση ότι θα προστεθεί άμεσα πριν την <XSL:πρότυπο όνομα = "προεπιλεγμένη" …> Ορισμός.

Επόμενη, πάω πίσω για να μας πρότυπο πλέγμα. Αντικαταστήστε το ολόκληρο πλέγμα πρότυπο με τον παρακάτω κώδικα. Αυτό είναι πολύ καλά σχολίασε, αλλά μην διστάσετε να μου e-mail ή να αφήνουν σχόλια στο blog μου, αν έχετε ερωτήσεις.

  <XSL:πρότυπο Όνομα="Πλέγμα" αγώνα="Σειρά[@Style = "Πλέγμα"]" λειτουργία="itemstyle">

    <!--
      ContentMain.xsl περνάει CurPos και τελευταίο.
      Χρησιμοποιούμε αυτά να εκπέμπουν υπό όρους το άνοιγμα και κλείσιμο <Πίνακας> Ετικέτες.
    -->
    <XSL:Παράμ Όνομα="CurPos" />
    <XSL:Παράμ Όνομα="Το τελευταίο" />

    <!-- Τις ακόλουθες μεταβλητές είναι χωρίς τροποποιήσεις από το πρότυπο ItemStyle.xsl -->
    <XSL:μεταβλητή Όνομα="SafeImageUrl">
      <XSL:κλήση-πρότυπο Όνομα="OuterTemplate.GetSafeStaticUrl">
        <XSL:με Παράμ Όνομα="UrlColumnName" Επιλέξτε="«ImageUrl ενός»"/>
      </XSL:κλήση-πρότυπο>
    </XSL:μεταβλητή>
    <XSL:μεταβλητή Όνομα="SafeLinkUrl">
      <XSL:κλήση-πρότυπο Όνομα="OuterTemplate.GetSafeLink">
        <XSL:με Παράμ Όνομα="UrlColumnName" Επιλέξτε="«LinkUrl»"/>
      </XSL:κλήση-πρότυπο>
    </XSL:μεταβλητή>
    <XSL:μεταβλητή Όνομα="DisplayTitle">
      <XSL:κλήση-πρότυπο Όνομα="OuterTemplate.GetTitle">
        <XSL:με Παράμ Όνομα="Τίτλος" Επιλέξτε="@Title"/>
        <XSL:με Παράμ Όνομα="UrlColumnName" Επιλέξτε="«LinkUrl»"/>
      </XSL:κλήση-πρότυπο>
    </XSL:μεταβλητή>
    <XSL:μεταβλητή Όνομα="LinkTarget">
      <XSL:Αν δοκιμή="@OpenInNewWindow = "True"" >_blank</XSL:Αν>
    </XSL:μεταβλητή>

    <!--
      Εδώ μπορούμε να ορίσουμε μια μεταβλητή, "tableStart".  Αυτό που περιέχει τον κώδικα HTML που χρησιμοποιούμε για να ορίσουμε το άνοιγμα του πίνακα, καθώς και τις ετικέτες στηλών.  Σημειώστε ότι εάν CurPos = 1, περιλαμβάνει το HTML σε μια ετικέτα CDATA.
      Διαφορετικά, θα είναι άδειο.

      Η τιμή του tableStart είναι εκπέμπονται κάθε φορά ItemStyle καλείται μέσω ContentQueryMain.xsl.
    -->
    <XSL:μεταβλητή Όνομα="tableStart">
      <XSL:Αν δοκιμή="$CurPos = 1">
        <![CDATA[
        <τραπέζι σύνορα = 1>
          <χρώμα φόντου TR = "μπλε">
            <TD><χρώμα γραμματοσειράς = "λευκό"><β>Όνομα έργου</β></γραμματοσειρά></TD>
            <Στοίχιση TD = "δεξιά"><χρώμα γραμματοσειράς = "λευκό"><β>Πλήρης ημερομηνία</β></γραμματοσειρά></TD>
            <Στοίχιση TD = "δεξιά"><χρώμα γραμματοσειράς = "λευκό"><β>Προϋπολογισμού</β></γραμματοσειρά></TD>
            <Στοίχιση TD = "δεξιά"><χρώμα γραμματοσειράς = "λευκό"><β>Πραγματική δαπάνη</β></γραμματοσειρά></TD>
            <TD><χρώμα γραμματοσειράς = "λευκό"><β>Συνολική κατάσταση</β></γραμματοσειρά></TD>
          </TR>
        ]]>
      </XSL:Αν>
    </XSL:μεταβλητή>

    <!--
      Μια άλλη μεταβλητή, tableEnd ορίζει απλώς το κλείσιμο πίνακας ετικέτα.

      Όπως και με tableStart, είναι πάντα εκπέμπονται.  Γι ' αυτό και την αξία που αποδίδεται υπό όρους βασίζεται σε αν έχω ήδη περάσαμε την τελευταία γραμμή από ContentQueryMain.xsl.
    -->
    <XSL:μεταβλητή Όνομα="tableEnd">
      <XSL:Αν δοκιμή="$CurPos = $Last">
        <![CDATA[ </Πίνακας> ]]>
      </XSL:Αν>
    </XSL:μεταβλητή>

    <!--
      Πάντα να εκπέμψει το περιεχόμενο του tableStart.  Αν αυτό δεν είναι η πρώτη γραμμή πέρασε σε μας από ContentQueryMain.xsl, κατόπιν ξέρουμε την αξία θα είναι κενό.

      Απενεργοποίηση εξόδου διαφυγή επειδή όταν tableStart αυτό δεν είναι κενό, περιλαμβάνει πραγματική HTML που θέλουμε να καθίστανται από το πρόγραμμα περιήγησης.  Αν δεν λένε το XSL parser να απενεργοποιήσετε εξόδου διαφυγή, θα παραγάγει τα πράγματα όπως"&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:με Παράμ Όνομα="αξία" 
Επιλέξτε="@Project_x005F_x0020_Budget"></XSL:με Παράμ> </XSL:κλήση-πρότυπο> </TD> <TD Στοίχιση="δικαίωμα"> <XSL:κλήση-πρότυπο Όνομα="FormatCurrency"> <XSL:με Παράμ Όνομα="αξία" Επιλέξτε="@Project_x005F_x0020_Expenses">
</XSL:με Παράμ> </XSL:κλήση-πρότυπο> </TD> <TD> <XSL:αξία των Επιλέξτε="@Project_x005F_x0020_Status"/> </TD> <!-- Όλα τα ακόλουθα είναι σχολίασε έξω να διευκρινίσει τα πράγματα. Ωστόσο, φέρει πίσω και ουσία αυτό σε ένα <TD> να δούμε την επίδρασή. --> <!-- <div id = "linkitem" Class = "στοιχείο"> <XSL:Εάν δοκιμή = "-μήκος συμβολοσειράς($SafeImageUrl) != 0"> <div class = "εικόνα-περιοχή-αριστερά"> <ένα href = "{$SafeLinkUrl}" Target = "{$LinkTarget}"> <img class = "εικόνα-σταθερού πλάτους" src = "{$SafeImageUrl}"
ALT = "{@ImageUrlAltText}"/> </ένα> </div> </XSL:Αν> <div class = "σύνδεση-ΕΙΔΟΣ"> <XSL:κλήση-πρότυπο
name="OuterTemplate.CallPresenceStatusIconTemplate"/> <ένα href = "{$SafeLinkUrl}"
Target = "{$LinkTarget}" Τίτλος = "{@LinkToolTip}"> <XSL:αξία της επιλέξτε = "$DisplayTitle" /> </ένα> <div class = "Περιγραφή"> <XSL:select="@Description αξία των" /> </div> </div> </div>
--> </TR> <!-- Εκπέμπουν το κλείσιμο πίνακας ετικέτα. Αν δεν είμαστε στην τελευταία σειρά, αυτό θα είναι κενό. --> <XSL:αξία των Επιλέξτε="$tableEnd" Απενεργοποίηση-εξόδου-διαφυγή="Ναι"/> </XSL:πρότυπο> <XSL:πρότυπο Όνομα="FormatCurrency"> <XSL:Παράμ Όνομα="αξία" Επιλέξτε="0" /> <XSL:αξία των Επιλέξτε='μορφή-αριθμός($αξία, "$DDD,DDD,DDD.DD", "προσωπικό")' /> </XSL:πρότυπο>

Πρότυπο WSS/ΒΡΎΑ των οθονών καταχώρησης δεδομένων δεν υποστηρίζουν διαδοχική αναπτυσσόμενες λίστες (ή άλλη ενδο-ανακοίνωση)

Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ (04/2008): Αυτήν την είσοδο blog μεγάλη δείχνει μια καλή javascript βασίζεται προσέγγιση σε αυτό το πρόβλημα: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

UPDATE II: (04/2008): Αυτό το ιστολόγιο εισόδου φαίνεται πολλά υποσχόμενη, καθώς και: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Αρκετές φορές την εβδομάδα, αν όχι καθημερινά, Οι χρήστες του φόρουμ περιγράφουν μια απαίτηση που κανονικά θα πρέπει να πληρούνται μέσω επικαλυπτόμενα αναπτυσσόμενες λίστες. Για παράδειγμα, Έχω δύο αναπτυσσόμενο έλεγχοι:

  • Κατάλογος των ΗΠΑ. μέλη
  • Κατάλογος των ΗΠΑ. πόλεις.

Ως υπεύθυνη UI πάροχοι, θέλουμε να λειτουργήσει όπως αυτό:

  • Paul επιλέγει μια ΗΠΑ. μέλος από το drop-down.
  • Αυτό προκαλεί τις πόλεις του αναπτυσσόμενου να φιλτράρετε μόνο εκείνες τις πόλεις που ανήκουν στο επιλεγμένο μέλος.
  • Paul επιλέγει μια πόλη από αυτήν τη φιλτραρισμένη λίστα.

Δεν υπάρχει καμία υποστήριξη out-of-the-box για αυτό το χαρακτηριστικό γνώρισμα. Στην πραγματικότητα, δεν υπάρχει OOB υποστήριξη για οποιοδήποτε είδος των άμεσων ενδο-φόρμα επικοινωνίας. Αυτό περιλαμβάνει, μέσω προγραμματισμού, απόκρυψη/ενεργοποίηση/απενεργοποίηση πεδία απαντώντας στην τομέα αλλαγές σε άλλα μέρη της φόρμας.

Ο πραγματικός στόχος αυτού του άρθρου για να περιγράψει τις πιθανές λύσεις και αυτές είναι οι επιλογές όπως τους ξέρω:

  1. Αναπτύξει ένα είδος συνήθειας στήλη. Ως έθιμο-στήλη-προγραμματιστής, έχετε πλήρη έλεγχο πέρα από τον κόσμο»" αυτής της συνήθειας στήλης. Μπορείτε να εφαρμόσετε ένα πέφτοντας απότομα αναπτυσσόμενο αυτόν τον τρόπο.
  2. Μπορείτε να χρησιμοποιήσετε τη ροή εργασίας. Σε ορισμένες περιπτώσεις, θέλετε να αναθέσετε αυτόματα μια τιμή στο πεδίο βάσει του πεδίου τιμής. Σε αυτή την περίπτωση, κανονικά θα προσπαθείτε να χρησιμοποιήσετε μια στήλη υπολογισμού, αλλά μερικές φορές, απλά δεν θα πάρει την εργασία γίνοντη. Ροής εργασίας του SharePoint Designer είναι ένα σχετικά διαχείριση φιλική εναλλακτική λύση σε πτώση κάτω σε κώδικα και το οπτικό στούντιο. Αν πάτε αυτή τη διαδρομή, Γνωρίζτε το ζήτημα που θίγει η αυτό το άρθρο (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) και που χρησιμοποιεί αντί.

Αν κάποιος γνωρίζει άλλους ή/και καλύτερη επιλογές, Παρακαλούμε να στείλετε ένα σχόλιο και θα μπορώ να ενημερώσω το σώμα αυτής της θέσης.

<Τέλος />

Δημιουργία ραβδογράμματα στο SharePoint

Επισκόπηση:

(Η ΕΝΗΜΕΡΩΜΈΝΗ ΈΚΔΟΣΗ 12/04/07: Προστεθεί μια άλλη ενδιαφέρουσα πηγή στο τέλος σύνδεση σε ένα άλλο blog που ασχολείται με αυτό μέσω ενός πολύ ενδιαφέρουσα τμήματος web)

Αυτό το ιστολόγιο εισόδου περιγράφει πώς να δημιουργήσετε ένα γράφημα ράβδων στο SharePoint. Αυτό λειτουργεί τόσο WSS, και ΒΡΎΟ περιβάλλον, καθώς εξαρτάται μόνο από το τμήμα web προβολής δεδομένων.

Η συνολική προσέγγιση που έχει ως εξής:

  1. Δημιουργία μιας λίστας ή βιβλιοθήκης εγγράφων που περιέχει τα δεδομένα που θέλετε να.
  2. Τοποθετήστε τη βιβλιοθήκη του συσχετιζόμενου εγγράφου / προσαρμοσμένη λίστα επάνω σε μια σελίδα και να το μετατρέψει σε ένα τμήμα web προβολής δεδομένων (DVWP).
  3. Τροποποιήσετε το DVWP XSL για τη δημιουργία HTML που παρουσιάζει ως ένα γράφημα.

Επιχειρηματικό σενάριο / Εγκατάστασης:

Έχω δημιουργήσει μια προσαρμοσμένη λίστα με πρότυπο στήλη τίτλος και μία πρόσθετη στήλη, "Κατάσταση". Αυτά τα πρότυπα (πολύ απλουστευτικά) "άδεια για δαπάνη" σενάριο όπου ο τίτλος αντιπροσωπεύει το έργο και το καθεστώς μια τιμή από τη λίστα των:

  • Προτείνει
  • Στη διαδικασία
  • Αδιέξοδο

Ο στόχος είναι να παράγει μια διαδραστική οριζόντιο ραβδόγραμμα που δείχνει αυτούς τους κωδικούς κατάστασης.

Εγώ έχουν πληθυσμό τον κατάλογο και να μοιάζει με αυτό:

εικόνα

Δημιουργήσετε το τμήμα Web προβολής δεδομένων:

Δημιουργήστε το DVWP με την προσθήκη την προσαρμοσμένη λίστα σε μια σελίδα (στη δική μου περίπτωση της ιστοσελίδας) και ακολουθήστε τις οδηγίες Εδώ (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!395.entry).

Εκτός από απλά τη δημιουργία του DVWP, πρέπει επίσης να ορίσετε την ιδιότητα σελιδοποίησης για να δείξει όλες τις διαθέσιμες γραμμές. Για μένα, Αυτό φαίνεται κάτι σαν αυτό:

εικόνα

Σε αυτό το σημείο, Κλείνω πάντα το SPD και το πρόγραμμα περιήγησης. Στη συνέχεια ανοίξτε εκ νέου την σελίδα χρησιμοποιώντας τη μηχανή αναζήτησης. Αυτό αποφεύγει κατά λάθος χαλάει την δικτυακή διάταξη μέρος στη σελίδα.

Τροποποιήσετε XSLT:

Είναι πλέον καιρός να τροποποιήσετε XSLT.

Χρησιμοποιώ πάντα το οπτικό στούντιο για αυτό. (Δείτε Εδώ για μια σημαντική σημείωση για intellisense που θα σας βοηθήσει πολύ).

Μπορώ να δημιουργήσω ένα κενό έργο προσθέσετε τέσσερα νέα αρχεία (αντικαθιστώντας τις λέξεις "πρωτότυπο" και νέα"" ανάλογα με την περίπτωση):

  • Original.XSLT
  • New.XSLT
  • Αρχική Params.xml
  • Νέα Params.xml

Στην περίπτωσή μου, μοιάζει με αυτό:

εικόνα

Τροποποιήσει το τμήμα web και να αντιγράψετε το params και XSL στο αρχικό"" έκδοση του Visual Studio.

Ο στόχος εδώ είναι να προκαλέσει το XSL για να μετατρέπει τα αποτελέσματα που έχουμε πάρει πίσω από το ερώτημα DVWP στην HTML που καθιστά ως ένα γράφημα.

Για το σκοπό αυτό, βοηθά να εξετάσουμε πρώτα τι η HTML πρέπει να μοιάσει με προτού εμείς να μπερδευτεί από την παραφροσύνη που είναι γνωστό ως "XSL". (Για να είμαι σαφής, το ακόλουθο είναι απλά ένα παράδειγμα; Μην πληκτρολογείτε ή copy/paste στο οπτικό στούντιο. Παρέχω ένα πλήρες χτύπημα αφετηρία για αυτό αργότερα στο το write-up). Στο ακόλουθο γράφημα δείγμα αποδίδεται σύμφωνα με τον κώδικα HTML, αμέσως μετά:

Sample Bar Graph

Αντίστοιχη HTML:

<HTML>
<οργανισμός>
<κέντρο>
<Πίνακας πλάτος = 80%>
<TR><TD><κέντρο>Οριζόντιο ραβδόγραμμα</TD></TR>
<TR>
<TD align = "center">
<τραπέζι σύνορα = "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 σε σας οπτικός στούντιο προβλημένος.
  • Θα έπρεπε να είναι σε θέση να αντιγράψετε και να επικολλήσετε αυτό απευθείας σε σας οπτικός στούντιο προβλημένος. Στη συνέχεια, Αφαιρέστε τις κλήσεις μου και τοποθετήστε το δικό σας ζητεί να "ShowBar".
  • Το τρυπάνι κάτω έργων δημιουργώντας ένα <a href> Σαν αυτό: http://server/List?FilterField1=fieldname&FilterValue1=actualFilterValue. Αυτή η τεχνική μπορεί να είναι του τιμή σε άλλα πλαίσια. Κατά την πρώτη, Σκέφτηκα ότι θα πρέπει να είναι σύμφωνες με μια πιο σύνθετη μορφή: http://server/List/AllItems.aspx?View={guid}&FilterField1=blah&FilterValue1=blah, αλλά στο περιβάλλον μου ότι δεν είναι απαραίτητο. Ο κατάλογος URL είναι πέρασε σε μας από το SharePoint, έτσι αυτό είναι αρκετά εύκολο να γενικεύσουμε.

Εδώ είναι:

<XSL:stylesheet έκδοση="1.0" εξαίρεση-αποτέλεσμα-προθέματα="RS z o s ν dt msxsl" 
xmlns:msxsl="δοχείο:schemas-microsoft-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:ν="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
xmlns:o="δοχείο:schemas-microsoft-com:γραφείο" xmlns:s="UUID:BDC6E3F0-6DA3-11D1-A2A3-00AA00C14882"
xmlns:DT="UUID:C2F41010-65B3 - 11d 1-A29F-00AA00C14882" xmlns:RS="δοχείο:schemas-microsoft-com:σύνολο γραμμών" xmlns:z="#RowsetSchema"
xmlns:ddwrt2="δοχείο:FrontPage:εσωτερική"
> <XSL:εξόδου μέθοδος="HTML" περίπτωση="Όχι" /> <XSL:δεκαδικό-format NaN="" /> <XSL:Παράμ Όνομα="ListUrlDir"></XSL:Παράμ> <!-- Χρειάζομαι αυτό για να στηρίξει ένα τρυπάνι-κάτω. --> <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 div $dvt_RowCount" /> <XSL:μεταβλητή Όνομα="totalInProcess" Επιλέξτε="καταμέτρηση(/dsQueryResponse/γραμμών/εγγραφών[ομαλοποιήσει-χώρος(@Status) = «Στη διαδικασία»])" /> <XSL:μεταβλητή Όνομα="percentInProcess" Επιλέξτε="$totalInProcess div $dvt_RowCount" /> <XSL:μεταβλητή Όνομα="totalStalled" Επιλέξτε="καταμέτρηση(/dsQueryResponse/γραμμών/εγγραφών[ομαλοποιήσει-χώρος(@Status) = «Αδιέξοδο»])" /> <XSL:μεταβλητή Όνομα="percentStalled" Επιλέξτε="$totalStalled div $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:με Παράμ Όνομα="BarDisplayLabel" Επιλέξτε="«Προτείνει»"/> <XSL:με Παράμ Όνομα="BarPercent" Επιλέξτε="$percentProposed"/> <XSL:με Παράμ Όνομα="QueryFilterFieldName" Επιλέξτε="«Καθεστώς»"/> <XSL:με Παράμ Όνομα="QueryFilterFieldValue" Επιλέξτε="«Προτείνει»"/> <XSL:με Παράμ Όνομα="TotalItems" Επιλέξτε="$totalProposed"></XSL:με Παράμ> </XSL:κλήση-πρότυπο> <XSL:κλήση-πρότυπο Όνομα="ShowBar"> <XSL:με Παράμ Όνομα="BarDisplayLabel" Επιλέξτε="«Αδιέξοδο»"/> <XSL:με Παράμ Όνομα="BarPercent" Επιλέξτε="$percentStalled"/> <XSL:με Παράμ Όνομα="QueryFilterFieldName" Επιλέξτε="«Καθεστώς»"/> <XSL:με Παράμ Όνομα="QueryFilterFieldValue" Επιλέξτε="«Αδιέξοδο»"/> <XSL:με Παράμ Όνομα="TotalItems" Επιλέξτε="$totalStalled"></XSL:με Παράμ> </XSL:κλήση-πρότυπο> <XSL:κλήση-πρότυπο Όνομα="ShowBar"> <XSL:με Παράμ Όνομα="BarDisplayLabel" Επιλέξτε="«Στη διαδικασία»"/> <XSL:με Παράμ Όνομα="BarPercent" Επιλέξτε="$percentInProcess"/> <XSL:με Παράμ Όνομα="QueryFilterFieldName" Επιλέξτε="«Καθεστώς»"/> <XSL:με Παράμ Όνομα="QueryFilterFieldValue" Επιλέξτε="«Στη διαδικασία»"/> <XSL:με Παράμ Όνομα="TotalItems" Επιλέξτε="$totalInProcess"></XSL:με Παράμ> </XSL:κλήση-πρότυπο> </Πίνακας> </TD> </TR> </Πίνακας> </XSL:διαφορετικά> </XSL:Επιλέξτε> </XSL:πρότυπο> <!-- Αυτό το πρότυπο does the δουλειά εμφανίζει μεμονωμένες γραμμές στο γράφημα ράβδων. Θα κάνετε πιθανώς οι περισσότεροι από σας μικροαλλαγές εδώ. --> <XSL:πρότυπο Όνομα="ShowBar"> <XSL:Παράμ Όνομα="BarDisplayLabel" /> <!-- ετικέτα για να δείξει --> <XSL:Παράμ Όνομα="BarPercent"/> <!-- Τοις εκατό του συνολικού. --> <XSL:Παράμ Όνομα="QueryFilterFieldName"/> <!-- Για να μεταβείτε στο ερώτημα & φίλτρο --> <XSL:Παράμ Όνομα="QueryFilterFieldValue"/> <!-- Για να μεταβείτε στο ερώτημα & φίλτρο --> <XSL:Παράμ Όνομα="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:κλήση-πρότυπο Όνομα="μορφή ποσοστού"> <XSL:με Παράμ Όνομα="τοις εκατό" Επιλέξτε="$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:πρότυπο Όνομα="μορφή ποσοστού"> <XSL:Παράμ Όνομα="τοις εκατό"/> <XSL:Επιλέξτε> <XSL:Όταν δοκιμή="μορφή-αριθμός($τοις εκατό, '#,##0%;-#,##0%')= «NaN»">0%</XSL:Όταν> <XSL:διαφορετικά> <XSL:αξία των Επιλέξτε="μορφή-αριθμός($τοις εκατό, '#,##0%;-#,##0%')" /> </XSL:διαφορετικά> </XSL:Επιλέξτε> </XSL:πρότυπο> </XSL:stylesheet>

Τα αποτελέσματα:

Το XSL από ψηλά δημιουργεί αυτό το γράφημα:

εικόνα

Τρυπάνι κάτω σε το υποκείμενο των δεδομένων, κάνοντας κλικ στο ο κωδικός κατάστασης:

εικόνα

Συμπερασματικές σκέψεις:

Μπορεί αυτό να γενικευθεί?

Μου αρέσει αυτή η γραφική έννοια, αλλά μισώ το γεγονός ότι πρέπει να πάει και να κάνει τόσο πολύ χέρι-κωδικοποίησης. Έχω δώσει μια μικρή σκέψη, κατά πόσον μπορεί να γενικευθεί και να είμαι αισιόδοξος, αλλά, επίσης είμαι λίγο φοβισμένη ότι μπορεί να υπάρξει ένα τοίχο από τούβλα κάπου κατά μήκος της διαδρομής που δεν θα προσφέρουν κάθε έργο-γύρω. Αν κάποιος έχει κάποιες καλές ιδέες σχετικά με αυτό, Παρακαλώ κάνετε ένα σημείωμα στα σχόλια ή email μου.

Κάθετη γραφήματα:

Πρόκειται για ένα οριζόντιο ραβδόγραμμα. Είναι βεβαίως δυνατό να δημιουργήσετε ένα γράφημα κάθετη. Εμείς απλά πρέπει να αλλάξετε τον κώδικα HTML. Θα ήθελα να ξεκινήσω τον ίδιο τρόπο: Δημιουργήστε μια αντιπροσώπευση HTML από ένα κατακόρυφο ραβδόγραμμα και στη συνέχεια να καταλάβω πώς να πάρει ότι μέσω XSL. Εάν κάποιος is ενδιαφερόμενοs σε αυτό, Ίσως πεισθώ να δοκιμάσουν και της εργασίας τις συστροφές. Αν κάποιος έχει κάνει ήδη, please let me know and I’ll gladly link to your blog 🙂

Νομίζω ότι η πρόκληση με μια κάθετη γραφική παράσταση είναι ότι οι ετικέτες για το γράφημα είναι πιο δύσκολο να διαχειριστεί, αλλά σίγουρα δεν είναι αδύνατο.

Του πεδίου όνομα Gotcha:

Υπάρχουν τουλάχιστον δύο πράγματα για να κοιτάξει έξω με σας ονόματα πεδίων.

Πρώτη, ένα όνομα πεδίου με ένα διάστημα πρέπει να φυγεῖν σε το XSL. Αυτό πιθανότατα θα αποτελέσει ένα θέμα εδώ:

        <XSL:μεταβλητή Όνομα="totalProposed" 
Επιλέξτε="καταμέτρηση(/dsQueryResponse/γραμμών/εγγραφών[ομαλοποιήσει-χώρος(@Status) = «Προτείνει»])" />

Αν σας κατάσταση"" στήλη είναι πραγματικά το όνομα "κωδικός κατάστασης" τότε θα πρέπει να αναφέρονται ως "Status_x0020_Code":

   <XSL:μεταβλητή Όνομα="totalProposed" 
Επιλέξτε="καταμέτρηση(/dsQueryResponse/γραμμών/εγγραφών[ομαλοποιήσει-χώρος(@Status_x0020_Code) = «Προτείνει»])" />

Δεύτερη, και είμαι λίγο ασαφής σχετικά με αυτό, αλλά πρέπει επίσης να είστε σε επιφυλακή για το πεδίο "Επαληθεύτηκε" όνομα. Εάν εσείς το όνομα σας το πεδίο "κωδικός κατάστασης" και στη συνέχεια, αργότερα, Μετονομάστε το σε "Κατάσταση AFE", το εσωτερικό όνομα"" δεν αλλάζει. Το εσωτερικό όνομα θα εξακολουθεί να είναι "κωδικός κατάστασης" και πρέπει να αναφέρεται ως "Status_x0020_Code". Οι "άλλοι πόροι" Σύνδεσμοι μπορεί να βοηθήσει τη διάγνωση και διόρθωση του προβλήματος.

Σχετικά με αυτό το χρώμα:

Πήρα το "κόκκινο" επειδή είναι ευχάριστο για μένα αυτή τη στιγμή. Δεν θα ήταν μια μεγάλη υπόθεση για να δείξει τα διαφορετικά χρώματα, έτσι ώστε να παρέχουν περισσότερο από ακριβώς μια οπτική περιγραφή ενός αριθμού, αλλά να παρέχουν επίσης μια χρήσιμη KPI. Για παράδειγμα, Εάν το ποσοστό των «αδιέξοδο" Είναι του AFE > 10% στη συνέχεια να δείξει κόκκινο, έδειχνε σε μαύρο χρώμα. Χρήση <XSL:Επιλέξτε> για να επιτευχθεί αυτό.

Άλλων πόρων:

Ευτυχής μετασχηματισμός!

<Τέλος />

Εγγραφείτε στο blog μου!

Παρουσιάσει OM δεδομένων μέσω μια προσαρμοσμένη λίστα (ή, Ακόμα ένα άλλο OM δεδομένων Displayor [όπως το YACC, αλλά διαφορετικά])

Σήμερα, Πέρασα μια χούφτα ώρες εντοπισμό η βασική αιτία πίσω από το μήνυμα "το όνομα στήλης που εισαγάγατε χρησιμοποιείται ήδη ή διατηρούνται. Επιλέξετε ένα άλλο όνομα."

Η εν λόγω στήλη θα μπορούσε να δημιουργηθεί, διαγράφεται και αναδημιουργείται σε ένα άλλο περιβάλλον, έτσι ήξερα ότι δεν ήταν ένα δεσμευμένο όνομα. Ωστόσο, Απλά δεν μπορούσα να βρω στήλη οπουδήποτε μέσω τυποποιημένης διεπαφής χρήστη του SharePoint σε οποιαδήποτε τοποθεσία της συλλογής τοποθεσιών.

Τοποθέτησα να Φόρουμ MSDN εδώ και το αδάμαστο Andrew Woodward μου επισήμανε προς την κατεύθυνση της τα υποκείμενα δεδομένα μοντέλο αντικειμένου.

Πήγα στην Codeplex να βρείτε κάποια εργαλεία που θα σας βοηθήσουν μου peer στο τα υποκείμενα δεδομένα OM και να βοηθήσει να εντοπίσετε το πρόβλημα.

Δοκίμασα διάφορα εργαλεία και ήταν πολύ δροσερό και ενδιαφέρουσα, αλλά στο τέλος, το UI δεν ήταν αρκετά καλό για τον σκοπό μου. Δεν είμαι κριτική τους με οποιοδήποτε μέσο, αλλά σαφώς το εργαλείο-ιθύνοντες δεν έχουν πρόβλημα μου κατά νου όταν δημιούργησε τους UI :). Οι περισσότεροι άνθρωποι φαίνεται να επενδύουν ένα δίκαιο ποσό του χρόνου και της προσπάθειας για τη δημιουργία σταθμού εργασίας / εφαρμογές-πελάτες που παρέχουν θέα δέντρο, Κάντε δεξί κλικ μενού πλαίσιο και τα λοιπά. Αυτά είναι ωραία και όλα, αλλά είναι πολλή δουλειά για να δημιουργήσει ένα χρήστη top-of-the-line εμπειρία που είναι επίσης πολύ ευέλικτο.

Χρειάστηκα πραγματικά μια απάντηση σε αυτό το πρόβλημα. Αυτό να συνέβη σε μένα ότι αν θα μπορούσα να πάρω όλες τις στήλες τοποθεσίας στη συλλογή τοποθεσιών σε μια προσαρμοσμένη λίστα, Θα μπορούσα να φιλτράρετε, ταξινομήσετε και να δημιουργήσετε προβολές που θα σας βοηθήσει να βρω αυτό το δήθεν υφιστάμενη στήλη (που έκανε, BTW). Πήγα μπροστά και έκανε ότι και μία ή δύο ώρες αργότερα, είχε όλες τις στήλες τοποθεσίας μου φορτωθεί σε μια προσαρμοσμένη λίστα με την ομαδοποίηση, διαλογή και ούτω καθεξής. Βρήκα την απάντηση μου πέντε λεπτά αργότερα.

Αν και όταν παίρνω με επιτυχία πέρα από τον κόσμο, Νομίζω ότι εγώ θα διάταγμα ότι όλους τους παρόχους εργαλεία του SharePoint πρέπει να εξετάσει σοβαρά το ενδεχόμενο επιφανειακές τους αντικείμενο μοντέλο δεδομένων σε μια προσαρμοσμένη λίστα. Με αυτόν τον τρόπο, Έχω τη δύναμη να ψάξετε οποιων δήποτε τρόπο θέλω (περιορίζεται, Φυσικά, από το πρότυπο του sharepoint χαρακτηριστικά).