Archives mensuelles: Décembre 2007

Mon fils a piraté Gamespot

Si, ce matin, mon fils est déterminé à voir qu'un âge-treize limité Halo 3 vidéo sur GameSpot. Je suis à l'extérieur de pelleter la neige, donc je ne suis pas là pour aider ou entraver. La nécessité est la mère de l'invention et tout ce qui … Il a un eureka! instant. Il se rend compte que, bien que Gamespot veut lui d'entrer dans son Real date de naissance, Il peut effectivement entrer dans n'importe quel date de naissance qu'il veut. Une fois qu'il se rendit compte que, Il a fait lui-même assez vieux pour voir la vidéo.

I’m not quite sure how I feel about this 🙂

Drôle de dimanche: “C'est les déchets d'impression”

À mon premier emploi de college de 1991, J'ai été chanceux de travailler pour une entreprise de fabrication avec 13 emplacements, sans compter son QG corporatif dans le New Jersey. J'ai rejoint juste au moment où la société roulait sur un nouveau système ERP. Nous étions un petit département informatique d'au total une dizaine de personnes, deux d'entre eux n'ont pas voyagé. Partie du projet en cause remplacement IBM System 36 boîtes avec matériel HP et HP-UX. Tout le monde utilisait des tubes verts pour accéder au système.

Le projet roule le long et je suis descendu à Baltimore avec un nouveau collaborateur, Jeff. Notre travail consistait à mettre sous tension la machine Unix, Veillez à ce que l'o/s était en cours d'exécution, installer le système ERP, configurer l'ERP, former les gens sur l'ERP et un travail personnalisé pour les gens sur place. (Il s'agissait d'un emploi de rêve, surtout venant tout droit sorti de l'Université). Avant que nous pourrions vraiment prendre leur envol, Nous avions besoin pour décompresser tous les tubes verts, Mettez-les sur un bureau et leur fils. Et la meilleure partie est que nous avons dû mettre les connecteurs RJ11 sur nous-mêmes.

Pour une raison que j'ai jamais compris et en fait jamais pensé pour s'enquérir au moment, Nous avions eu quelques entreprise venir et faire passer le câble dans toute la plante, mais nous n'avions pas les mettent sur les connecteurs. Si, Il y avait une boîte de patch"" avec des dizaines des câbles sans étiquette dans la salle d'informatique"" et ces serpentait autour du bâtiment à divers endroits dans le bâtiment.

Nous avons travaillé notre chemin à travers elle au cours d'un week-end, tester chaque fil, mettre sur un connecteur (en vous assurant elle était droites vs. franchi), assurer les réglages du bit sur les imprimantes et les tubes verts étaient correctes, marquage de fils, en vous assurant que getty"" fonctionnait correctement pour chaque port et probablement un millier d'autres choses que j'ai supprimé depuis lors. Tout cela s'est réunis à merveille.

Mais, Il y avait un câble important que nous ne pouvions pas trouver. L'usine de Baltimore a eu une relation avec un emplacement de stockage/entreposage dans le New Jersey. Quelques commandes passées à Baltimore expédiées hors de cet endroit. Il y avait deux fils qu'il fallait se connecter à la boîte de HP-UX: un tube de vert et d'une imprimante. Le tube vert était facile, mais l'imprimante est transformé en un cauchemar de trois semaines.

Si vous ne la connaissez, ou ont étouffé il, traitant de cette façon imprimantes et tubes verts, Il existe diverses options que vous traitez en définissant différentes broches. 8-bit, 7-bit, parité (même/impair/aucun), probablement d'autres. Si vous obtenez un de ces paramètres est incorrect, le tube ou l'imprimante affiche toujours des trucs, mais il sera total charabia, ou il sera charabia avec beaucoup de choses reconnaissables entre les deux. Bien sûr, Ces broches sont difficiles à voir et ne doit être définie à l'aide d'un petit tournevis plat bord. Et ils ne sont jamais standards.

Nous avons mis en place le premier des nombreux appels rapides avec le gars de NJ (un ennemi ordinateur grisonnant qui probablement nous maudit à ce jour). Nous avons obtenu le tube vert de travailler assez rapidement, mais nous ne pouvions pas obtenir l'imprimante au travail. Il a gardé « déchets d'impression ». Nous créerions un nouveau connecteur RJ11, commutation entre les croisés et droites. Nous consisterait à supprimer le port et recréé sous Unix. Nous avons traversé la tâche ardue de l'avoir pour nous expliquer la configuration de l'imprimante, jamais vraiment sûr si il le faisait correctement.

Il est temps d'aller vivre, Tout à Baltimore est bourdonnement, mais nous ne pouvons pas l'imprimante maudite vers le haut dans le New Jersey pour travailler! Nous avons épuisé toutes les possibilités à l'exception de conduite remonter à NJ pour travailler sur l'imprimante en personne. Afin d'éviter tout ce que la conduite, Nous avons enfin lui demander de nous envoyer une télécopie qu'il reçoit lorsqu'il est « ordures », dans l'espoir que peut-être il y aura quelques indices dans ces ordures qui nous dira ce que nous faisons mal.

Quand nous sommes arrivés à la télécopie, immédiatement, nous savions ce qui clochait. Voir, notre méthode d'essai si nous avions correctement configuré une imprimante devait délivrer un lp"" commande comme ceci:

LP/etc/passwd

Essentiellement, Nous avons imprimé le fichier de mot de passe unix. Il est toujours présent et out of the box, toujours juste une page. Fichier du mot de passe Unix standard de vous ressemble à ceci:

Smith:*:100:100:8A-74(Bureau):/Accueil/smith:/usr/bin/sh commentaires:*:200:0::/Accueil/Commentaires:/usr/bin/sh  

Nous avions été imprimer le fichier de mot de passe maintes et maintes fois pendant plusieurs semaines et c'était l'impression correctement. Cependant, à l'utilisateur final, Il a été « déchets d'impression ».

</fin>

Encore un autre réseau titres Multi-Challenge cause et Solution

Mon client a récemment installé un dispositif magique de Genévrier qui apparemment remplacé leur vieux équilibreur de charge réseau Cisco (NLB). Vers la même heure, Nous avons installé un correctif pour régler un problème de flux de travail.

Un ou deux jours plus tard, Nous avons remarqué un problème lorsque nous avons consulté le fournisseur de services partagés (PS3). Nous pourrions obtenir à elle, mais il serait difficile pour un ID utilisateur et le mot de passe plusieurs fois sur chaque page. Ce n'est pas arrivé avec l'application principale du portail, ni l'administration centrale. Naturellement, Nous ne savions pas qui des deux (Genévrier ou correctif) serait la question, Bien que je soupçonne fortement le correctif, pensant que nous avions installé pas tout à fait raison.

Il s'est avéré que Juniper avait une sorte de réglage compression. Un de la chiffres vêtus dans le réseau groupe transformé cette mise hors tension. Qui a résolu notre problème.

Ce n'est pas la première fois que la compression a été la cause d'un problème de SharePoint pour moi. Compression IIS affecté un outil tiers 3e du bon peuple at The Dot Net Factory pour IE 6 navigateurs (IE 7 navigateurs ont travaillé sans difficulté).

Si, Ajouter "compression" à la liste des dangers.

</fin>

Merci à: http://www.elfwood.com/art/s/h/sherry/death_colour.jpg.html

Réflexion sur le changement de plateforme blogs

J'ai commencé ma carrière de blogging »" à l'aide de la plateforme de Microsoft et il a été bon pour moi. Il est facile de poster, Il y a de bonnes options et de widgets pour la gestion de votre « espace », stockage web décent et ainsi de suite.

Cependant, J'ai vraiment tout simplement tombé dans la solution MS presque sans planification. Qui appelle seul pour moi d'évaluer où je suis et où je vais, en ce qui concerne une plateforme de blogs. Il y a aussi deux limitations importantes qui me dérangent juste maintenant vis-àvis Windows Live Spaces.

Première, Je ne peux pas obtenir de très bonnes statistiques. Il y a ses stats, mais le détail est souvent tronqué et pas présenté d'une manière qui permet à n'importe quel type d'analyse. Il y pas de fonction de tri ou de l'exportation. Je reçois beaucoup d'idées blog basé sur le type d'information que les gens trouvent (ou surtout ne parviennent pas à trouver) quand ils cherchent mon blog. Il est très difficile d'utiliser des espaces de vie pour cela.

Seconde, il ne semble pas être un mécanisme visant à « monétiser" un windows live space blog. En fait, afin de se débarrasser de MS annonces (d'où j'ai ne tirer aucun avantage), Je dois effectivement payer Microsoft. (Au moins, C'est ainsi que je comprends il; Je n'ai pas pu obtenir les réponses définitives à cela et des questions comme il).

Maintenant que j'ai un modèle établi et un ensemble d'habitudes de blogging, Je veux évaluer d'autres options. J'ai fait quelques recherches et il y a beaucoup de choix, mais je suis curieux de savoir ce que les autres gens, en particulier, d'autres dans la Communauté SharePoint (blogueurs ou lecteurs), souhaitez utiliser.

Si ce sujet vous intéresse et vous avez un avis ou sont prêts à partager votre expérience, s'il vous plaît laisser un commentaire ou écrivez-moi directement.

Merci!

<fin />

Tags Technorati:

Envoie de courriel de SharePoint Designer ???? dans un courriel

Parfois poser des utilisateurs du Forum: Pourquoi SharePoint Designer mis ???? dans mon courriel au lieu d'une valeur de champ?

Dans ce cas l'une des raisons sont parce que la variable à laquelle vous faites référence est nulle.

Cela peut se produire parce que vous essayez de référencer un champ de l'élément actuel »" mais jamais, l'utilisateur a entré une valeur dans ce champ de formulaire.

<fin />

Comparer / Test pour les Dates de vides dans le flux de travail SharePoint Designer

Scénario: Dans un flux de travail SharePoint Designer, vous devez déterminer si un champ de date est vide.

Problème: SPD ne fournit pas une méthode directe pour comparer des dates à autre chose qu'une date. Vous ne pouvez pas créer une condition comme ça: « Si [DateField] est égal à vide ».

Solution: Convertir la date en chaîne. Comparaison de chaînes permet de déterminer si la date est vide.

Captures d'écran:

Les captures d'écran suivantes montrent comment procéder. Dans ce scénario, un champ sur un élément, « Permis d'environnement:Tout d'abord permis Date de rappel", est présenté et le flux de travail est déclenché en réponse.

image

image

Notes:

Quand j'ai essayé ceci, J'ai été agréablement surpris d'apprendre que cela fonctionne. J'étais inquiet que SharePoint Designer peut refuser la cession de la chaîne (Variable:StringReminderDateDate) mais il ne permet pas il.

J'étais aussi inquiète que lui permettant, la valeur peut être null et soit sauter le WF lors de l'exécution ou peut-être augmenter la température globale 1/2 un degré, mais ces craintes n'étaient pas fondées.

</fin>

Bar est encore assez élevé pour étendre MOSS

Aujourd'hui, J'ai été travailler avec un client et qui décrit comment modifier le composant WebPart requête de contenu et d'afficher des bits supplémentaires d'informations d'un type de contenu.

« D'abord, vous configurez la CQWP pour se connecter à sa source de données, Ensuite, vous exportez votre station de travail, modifier <CommonViewFields>, Télécharger, supprimer l'original, et maintenant c'est ' apprêté’ pour afficher les autres colonnes. Prochaine, Ouvrez SharePoint designer, Accédez à la racine du site collection et localisez ItemStyle.xsl. Copier un des modèles comme point de départ utile. Revenir en arrière et modifier la CQWP de faire usage de ce nouveau modèle. Enfin, modifier le modèle pour afficher vos nouveaux champs! (N'oubliez pas de vérifier que dedans alors que d'autres utilisateurs peuvent voir les résultats)."

Il est tout à fait clair pour moi (et la plupart d'entre nous, les types de développeur SharePoint) ce qui se passe et comment il est très agréable, vraiment, que les aspects de récupération de données de la WebPart sont tellement bien-séparée des aspects de présentation de données. Mais, Il n'est pas si facile à expliquer, est-ce?

<fin />

Afficher le contenu Web partie résultats dans une grille / Table

Présentation et objectif

Out of the box, MOUSSE’ WebPart requête de contenu (CQWP) affiche les résultats dans un format de liste, semblables aux résultats de la recherche. Il est également possible d'afficher les résultats sous forme de grille (i.e. Format de tableau HTML). Formats de grille sont meilleures dans certaines circonstances. Je décris comment arriver à cet effet dans le présent article.

Scénario d'entreprise

J'ai travaillé avec un client sur un déploiement MOSS d'échelle de l'entreprise. Nous avons conçu leur taxinomie, telles que projets sont des citoyens de première classe dans la hiérarchie et ont leur propre site de niveau supérieur. Chefs de projet maintient une liste de singleton des informations sommaires sur le projet, par exemple, titre, budget, date d'achèvement prévue, budget restant et autres champs type de résumé. Par « singleton" Je veux dire une liste SharePoint personnalisée garantie pour ne contenir qu'un seul élément. De manière simpliste, Il ressemble à ceci:

image

L'approche technique est bien la même que celle décrite ici (http://paulgalvin.spaces.live.com/blog/cns!1CC1EDB3DAA9B8AA!447.entry). Le WebPart utilise une transformation XSL pour émettre HTML du navigateur pour le rendu.

J'envisage toujours le résultat avant de plonger dans le XSL, XSL étant un cauchemar. Voici mon résultat souhaité:

image

HTML comme ceci génère ce résultat:

<html>
 <corps>
 <Centre>
 <table frontière= 1>

<!-- Étiquettes-->
 <TR bgcolor= bleu>
 <TD><polices Couleur= blanc><b>Nom du projet</b></polices></TD>
 <TD aligner= droite><polices Couleur= blanc><b>Date complète</b></polices></TD>
 <TD aligner= droite><polices Couleur= blanc><b>Budget</b></polices></TD>
 <TD aligner= droite><polices Couleur= blanc><b>Dépense réelle</b></polices></TD>
 <TD><polices Couleur= blanc><b>État général</b></polices></TD>
 </TR>

<TR>
 <TD>Recâbler salle informatique.</TD>
 <TD aligner= droite>02/01/08</TD>
 <TD aligner= droite>22,500.00</TD>
 <TD aligner= droite>19,000.00</TD>
 <TD>En cours</TD>
 </TR>

<TR>
 <TD>Serveurs de disposition pour la mise à niveau SQL</TD>
 <TD aligner= droite>04/01/08</TD>
 <TD aligner= droite>7,500.00</TD>
 <TD aligner= droite>0.00</TD>
 <TD>Prévues</TD>
 </TR>

</table>
 </Centre>
 </corps>
</html>

Approche

Procédez comme suit pour créer la grille:

  1. Identifier les composantes de la grille (lignes/colonnes).
  2. Définir et créer des colonnes de site nécessaires.
  3. Créer des sous-sites pour les projets et les listes de singleton.
  4. Ajoutez le WebPart à une page web et le configurer pour rechercher vos listes.
  5. Modifier XML de la CQWP pour pouvoir les colonnes supplémentaires.
  6. Modifier le langage XSL pour générer une table.

Je vais me concentrer sur numéro six. Numéros d'un à quatre sont simples et quelque chose que n'importe quel utilisateur WebPart a déjà fait. Numéro cinq a été bien documenté par des tiers, y compris cet article en charge exhaustif de capture d'écran de MSDN ici (http://msdn2.microsoft.com/en-us/library/bb897399.aspx) et le blog de Heather Solomon ici (http://www.heathersolomon.com/blog/articles/CustomItemStyle.aspx).

Écrous et boulons

Commencer et mettre en œuvre les étapes une à cinq selon la documentation MSDN et article de Heather Solomon.

À ce point, vous avez ajouté votre WebPart à la page et vous avez votre <CommonViewFields> configuré selon les besoins.

Suivant la procédure habituelle, Je reçois ces résultats intermédiaires:

1. Créer un type de contenu, une liste personnalisée modélisée pour ce type de contenu et deux sites. Voici le type de contenu:

image

Voici la structure du site:

image

2. Ajoutez le WebPart après avoir créé mon projet sous-sites et singleton listes sommaires de projet:

image

3. Ajouter toutes les données supplémentaires je veux via le <CommonViewFields>:

        <propriété nom="CommonViewFields" type="chaîne">Project_x0020_Name;Project_x0020_Expenses;Project_x0020_Status;Project_x0020_Start_x0020_Date;Project_x0020_End_x0020_Date;Project_x0020_Budget</propriété>

Notez que j'ai dû garder tous les champs de propriété sur une ligne ou il ne fonctionnerait pas (CQWP me disait que la requête a retourné aucun élément).

4. À ce point, Nous sommes prêts à aller au-delà de l'article MSDN et flip sur l'article de Heather Solomon. Suivez ses étapes commençant près étape #5 pour créer un personnalisé / version incarnée de ItemStyle.xsl. J'ai suivi les conseils de Heather, vers le haut jusqu'à l'étape 11 et d'obtenir ces résultats intermédiaires:

4.1: Nom de mon modèle XSL comme suit:

<XSL:nom du modèle = "grille" match = "Row[@Style = "Grille"]" mode = « itemstyle »>

J'ai également légèrement modifier lui a suggéré <XSL:pour chaque …> en ajoutant un <br /> balise pour fournir une liste plus propre:

    <XSL:pour chaque Sélectionnez="@*">
      P:<XSL:de la valeur Sélectionnez="nom()" /><br/>
    </XSL:pour chaque>

4.2: J'ai modifier le composant WebPart, allez dans apparence et sélectionnez ma grille"" style:

image

Appliquer le changement et voici le résultat:

image

De ce qui précède, nous pouvons voir que les domaines que nous voulons (Nom du projet, frais, statut, etc.) n'existe pas pour nous d'utiliser lorsque nous émettons le code HTML. Non seulement cela, mais nous voyons les noms par lequel nous devons faire référence à ces colonnes dans le XSL. Par exemple, nous référençons projet statut comme « Project_x005F_x0020_Name ».

À ce point, Nous partons du blog de Heather et des épaules de ces géants, J'ajoute mon propre petit peu.

ContentQueryMain.xsl

NOTE: Lorsque des changements à la fois ContentQueryMain.xsl ainsi que ItemStyle.xsl, vous devez vérifier que ces fichiers en arrière en avant de voir l'effet de vos modifications.

À des fins de fabrication de grille, MOSS utilise deux fichiers XSL différents pour produire les résultats que nous voyons dans une CQWP. Pour générer le bit précédent de sortie, Nous avons modifié ItemStyle.xsl. MOSS utilise en fait un autre fichier XSL, ContentQueryMain.xsl pour conjointement avec ItemStyle.xsl pour générer son code HTML. Comme son nom l'indique, ContentQueryMain.xsl est le principal"" XSL qui contrôle l'ensemble du flux de traduction. Il parcourt tous les éléments trouvés et les passe un par un pour modèles ItemStyle.xsl. Nous allons modifier ItemStyle.xsl pour générer l'open <table> balise avant d'émettre la première ligne de données et de la fermeture <table> balise après émission de la dernière rangée. Pour y parvenir, ContentQueryMain.xsl est modifié pour passer deux paramètres à notre grille"" modèle en ItemStyle.xsl, "dernière ligne" et « ligne active ». ItemStyle.xsl utilise pour émettre sous certaines conditions les balises nécessaires.

À l'aide technique de Heather Solomon, Nous localiser ContentQueryMain.xsl. Il est situé au même endroit que ItemStyle.xsl. Cette capture d'écran devrait aider:

image

Nous avons besoin d'apporter les modifications suivantes:

  • Modifier un modèle xsl, "CallItemTemplate" qui appelle en fait notre modèle de grille dans ItemStyle.xsl. Nous passerons deux paramètres dans le modèle de grille afin qu'elle aura les données qu'il doit générer sous certaines conditions d'ouverture et de fermeture <table> balises.
  • Modifier un autre peu de ContentQueryMain.xsl qui appelle le "CallItemTemplate" pour réussir un LastRow"" paramètre afin que LastRow peut-être être transmise à notre modèle de grille.

Recherchez le modèle nommé "OuterTemplate.CallItemTemplate" identifié par la chaîne:

  <XSL:modèle nom="OuterTemplate.CallItemTemplate">

Remplacer le modèle entier comme suit:

  <XSL:modèle nom="OuterTemplate.CallItemTemplate">
    <XSL:Param nom="CurPosition" />

    <!--
      Ajouter le LastRow"" paramètre.
      Nous l'utilisons uniquement lorsque l'élément style pass en est la « Grille ».
    -->
    <XSL:Param nom="LastRow" />

    <XSL:choisir>
      <XSL:Lorsque test="@Style = 'NewsRollUpItem'">
        <XSL:appliquer-templates Sélectionnez="." mode="ItemStyle">
          <XSL:avec-param nom="EditMode" Sélectionnez="$cbq_iseditmode" />
        </XSL:appliquer-templates>
      </XSL:Lorsque>
      <XSL:Lorsque test="@Style = 'NewsBigItem'">
        <XSL:appliquer-templates Sélectionnez="." mode="ItemStyle">
          <XSL:avec-param nom="CurPos" Sélectionnez="$CurPosition" />
        </XSL:appliquer-templates>
      </XSL:Lorsque>
      <XSL:Lorsque test="@Style = 'NewsCategoryItem'">
        <XSL:appliquer-templates Sélectionnez="." mode="ItemStyle">
          <XSL:avec-param nom="CurPos" Sélectionnez="$CurPosition" />
        </XSL:appliquer-templates>
      </XSL:Lorsque>

      <!--
              Passer de la position actuelle et lastrow au modèle grille itemstyle.xsl.
              ItemStyle.xsl qui utilisera pour émettre l'ouverture et de fermeture <table> balises.
      -->
      <XSL:Lorsque test="@Style = "Grille"">
        <XSL:appliquer-templates Sélectionnez="." mode="ItemStyle">
          <XSL:avec-param nom="CurPos" Sélectionnez="$CurPosition" />
          <XSL:avec-param nom="Dernière" Sélectionnez="$LastRow" />
        </XSL:appliquer-templates>
      </XSL:Lorsque>

      <XSL:autrement>
        <XSL:appliquer-templates Sélectionnez="." mode="ItemStyle">
        </XSL:appliquer-templates>
      </XSL:autrement>
    </XSL:choisir>
  </XSL:modèle>

Les observations décrivent l'objet des modifications.

Bien sûr, le OuterTemplate.CallItemTemplate"" est elle-même appelée à partir d'un autre modèle. Localiser ce modèle en recherchant cette chaîne de texte:

<XSL:modèle nom="OuterTemplate.Body">

Faites défiler les instructions dans OuterTemplate.Body et insérer le paramètre LastRow comme suit (montré comme un commentaire en italique):

<XSL:appel-modèle nom="OuterTemplate.CallItemTemplate">
  <XSL:avec-param nom="CurPosition" Sélectionnez="$CurPosition" />
  <!-- Insérer le paramètre LastRow. -->
  <XSL:avec-param nom="LastRow" Sélectionnez="$LastRow"/>
</XSL:appel-modèle>

Après tout cela, Nous avons enfin les choses correctement mis en place afin que nos ItemStyle.xsl peut émettre <table> balises au bon endroit.

ItemStyle.Xsl

NOTE: Encore une fois, heure d'arrivée ItemStyle.xsl après d'apporter des modifications afin que vous voyez l'effet de ces changements.

Nous avons deux tâches ici:

  • Remplacer le modèle de grille complet. Vous pouvez copier/coller d'en bas.
  • Ajouter certains charabia en dehors de la définition du modèle qui permet de "formatcurrency" modèle de travailler. (Vous pouvez dire que j'ai une poignée ténue sur XSL).

Première, haut de ItemStyle.xsl, Ajoutez cette ligne:

  <!-- Certains charabia qui nous permet d'afficher des États-Unis. monnaie. -->
  <XSL:format décimal nom="personnel" chiffres="D" />

  <XSL:modèle nom="Par défaut" match de football="*" mode="ItemStyle">

Remarque que je l'ai ajouté directement avant le <XSL:nom du modèle = "par défaut" …> définition.

Prochaine, revenir à notre modèle de grille. Remplacer le modèle de grille complet avec le code ci-dessous. Il est abondamment commenté, mais n'hésitez pas à m'envoyer un email ou de laisser des commentaires sur mon blog, si vous avez des questions.

  <XSL:modèle nom="Grille" match de football="Ligne[@Style = "Grille"]" mode="ItemStyle">

    <!--
      ContentMain.xsl passe CurPos et dernier.
      Nous utilisons ces à émettre sous certaines conditions l'ouverture et de fermeture <table> balises.
    -->
    <XSL:Param nom="CurPos" />
    <XSL:Param nom="Dernière" />

    <!-- Les variables suivantes sont non modifiées de la norme ItemStyle.xsl -->
    <XSL:variable nom="SafeImageUrl">
      <XSL:appel-modèle nom="OuterTemplate.GetSafeStaticUrl">
        <XSL:avec-param nom="UrlColumnName" Sélectionnez="'ImageUrl'"/>
      </XSL:appel-modèle>
    </XSL:variable>
    <XSL:variable nom="SafeLinkUrl">
      <XSL:appel-modèle nom="OuterTemplate.GetSafeLink">
        <XSL:avec-param nom="UrlColumnName" Sélectionnez="« LinkUrl »"/>
      </XSL:appel-modèle>
    </XSL:variable>
    <XSL:variable nom="DisplayTitle">
      <XSL:appel-modèle nom="OuterTemplate.GetTitle">
        <XSL:avec-param nom="Titre" Sélectionnez="@Title"/>
        <XSL:avec-param nom="UrlColumnName" Sélectionnez="« LinkUrl »"/>
      </XSL:appel-modèle>
    </XSL:variable>
    <XSL:variable nom="LinkTarget">
      <XSL:Si test="@OpenInNewWindow = « True »" >_blank</XSL:Si>
    </XSL:variable>

    <!--
      Ici, nous définissons une variable, « tableStart ».  Ce dernier contient le code HTML que nous utilisons pour définir l'ouverture de la table ainsi que les étiquettes de colonne.  Notez que si CurPos = 1, Il inclut le code HTML dans une balise CDATA.
      Dans le cas contraire, il sera vide.

      La valeur de tableStart est émise chaque fois ItemStyle est appelée via ContentQueryMain.xsl.
    -->
    <XSL:variable nom="tableStart">
      <XSL:Si test="$CurPos = 1">
        <![CDATA[
        <bordure du tableau = 1>
          <TR bgcolor = « blue »>
            <TD><couleur de police = « white »><b>Nom du projet</b></polices></TD>
            <td align = « right »><couleur de police = « white »><b>Date complète</b></polices></TD>
            <td align = « right »><couleur de police = « white »><b>Budget</b></polices></TD>
            <td align = « right »><couleur de police = « white »><b>Dépense réelle</b></polices></TD>
            <TD><couleur de police = « white »><b>État général</b></polices></TD>
          </TR>
        ]]>
      </XSL:Si>
    </XSL:variable>

    <!--
      Une autre variable, tableEnd définit simplement la fermeture balise de tableau.

      Comme avec tableStart, Il est toujours émise.  C'est pourquoi sa valeur est assignée conditionnelle basée sur si nous avons passés la dernière rangée de ContentQueryMain.xsl.
    -->
    <XSL:variable nom="tableEnd">
      <XSL:Si test="$CurPos = $Last">
        <![CDATA[ </table> ]]>
      </XSL:Si>
    </XSL:variable>

    <!--
      Émettent toujours le contenu de tableStart.  Si ce n'est pas la première ligne passée à nous par ContentQueryMain.xsl, Ensuite, nous connaissons que sa valeur sera vide.

      Désactiver la sortie s'échapper parce que quand tableStart il non pas vides, Il inclut HTML réel que nous voulons être restitué par le navigateur.  Si nous ne disons l'analyseur XSL pour désactiver la sortie échappement, il génère des trucs comme"&lt;table&gt;" au lieu de"<table>".
    -->
    <XSL:de la valeur Sélectionnez="$tableStart" disable-output-escaping="Oui"/>


    <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:de la valeur Sélectionnez="@Project_x005F_x0020_Name"/>
      </TD>

      <TD aligner="droit">
        <XSL:de la valeur Sélectionnez="@Project_x005F_x0020_End_x005F_x0020_Date"/>
      </TD>

      <TD aligner="droit">
        <XSL:appel-modèle nom="FormatCurrency">
          <XSL:avec-param nom="valeur" 
Sélectionnez="@Project_x005F_x0020_Budget"></XSL:avec-param> </XSL:appel-modèle> </TD> <TD aligner="droit"> <XSL:appel-modèle nom="FormatCurrency"> <XSL:avec-param nom="valeur" Sélectionnez="@Project_x005F_x0020_Expenses">
</XSL:avec-param> </XSL:appel-modèle> </TD> <TD> <XSL:de la valeur Sélectionnez="@Project_x005F_x0020_Status"/> </TD> <!-- Tous les éléments suivants est commentée pour clarifier les choses. Cependant, le ramener et tout ça dans un <TD> pour voir son effet. --> <!-- <div id = "linkitem" Class = « item »> <XSL:si test = "string-length($SafeImageUrl) != 0"> <div class = « image-zone-left »> <a href = "{$SafeLinkUrl}" cible = "{$LinkTarget}"> <IMG class = "image-fixed-width" SRC = "{$SafeImageUrl}"
Alt = "{@ImageUrlAltText}"/> </un> </Div> </XSL:Si> <div class = « lien-item »> <XSL:appel-modèle
Name="OuterTemplate.CallPresenceStatusIconTemplate"/> <a href = "{$SafeLinkUrl}"
cible = "{$LinkTarget}" titre = "{@LinkToolTip}"> <XSL:de la valeur select = « $DisXSLyTitle » /> </un> <div class = « description »> <XSL:valeur-de select="@Description" /> </Div> </Div> </Div>
--> </TR> <!-- Émettre la fermeture balise de tableau. Si nous ne sommes pas sur la dernière rangée, ce sera vide. --> <XSL:de la valeur Sélectionnez="$tableEnd" disable-output-escaping="Oui"/> </XSL:modèle> <XSL:modèle nom="FormatCurrency"> <XSL:Param nom="valeur" Sélectionnez="0" /> <XSL:de la valeur Sélectionnez='format-nombre($valeur, $DDD",DDD,DDD.DD", « personnel »)' /> </XSL:modèle>

Écrans de saisie des données standard WSS/MOSS ne supportent pas la chute en cascade-downs (ou autre intra-communication)

MISE À JOUR (04/2008): Cet excellent blog montre une approche bien javascript basé à ce problème: http://webborg.blogspot.com/2008/04/add-functions-and-events-to-sharepoint.html

MISE À JOUR II: (04/2008): Cette entrée de blog est prometteuse ainsi: http://www.cleverworkarounds.com/2008/03/13/free-mosswss-2007-web-part-hide-controls-via-javascript/

Plusieurs fois par semaine, Si pas quotidiennement, Forum des utilisateurs décrivent une exigence qui serait normalement atteint via les listes déroulantes en cascade. Par exemple, J'ai deux contrôles déroulants:

  • Liste des États-Unis. États
  • Liste des États-Unis. villes.

En tant que responsables fournisseurs UI, Nous voulons qu'elle fonctionne comme ceci:

  • Paul sélectionne un U.S. État dans le menu déroulant.
  • Cela provoque les villes liste déroulante pour filtrer uniquement les villes qui appartiennent à l'état sélectionné.
  • Paul choisit une ville dans cette liste filtrée.

Il n'y a aucun soutien d'out-of-the-box pour cette fonctionnalité. En fait, Il n'y a aucun soutien OOB pour tout type de communication intra-forme directe. Cela inclut par programme masquage/activation/désactivation des champs en réponse aux changements de champ ailleurs sur le formulaire.

Le véritable objectif de cet article à pour décrire les solutions possibles et ce sont les options que je les connais:

  1. Développer un type de colonne personnalisé. En tant que coutume-colonne-développeur, vous avez un contrôle total sur le monde"" Cette colonne personnalisée. Vous pouvez implémenter une cascade vers le bas comme ça.
  2. Envisagez d'utiliser des flux de travail. Dans certains cas, vous voulez assigner automatiquement une valeur au champ basé sur valeur d'un autre champ. Dans ce cas, normalement, vous essayeriez d'utiliser une colonne calculée, mais certaines fois, il ne sera pas juste faire le travail. Flux de travail SharePoint Designer est une alternative relativement facile administrer à descendre dans le code et visual studio. Si vous suivez cette voie, être au courant de la question traitée par Cet article (http://paulgalvin.spaces.live.com/blog/cns!CC1EDB3DAA9B8AA!405.entry).
  3. Les gestionnaires d'événements: Comme le flux de travail, Il s'agit d'une solution après le fait. Votre gestionnaire d'événements est un assembly .NET (C#, VB.NET) transmet le contrôle à laquelle SharePoint. L'objet que vous développez a accès aux données de la liste (et le modèle d'objet complet) et peut faire n'importe quel calcul nécessaire.
  4. Utiliser SharePoint Designer pour créer des formulaires d'inscription personnalisés. Je n'ai pas l'expérience directe avec cette approche, but I hear they are doing good things with NewForm.aspx these days 🙂
  5. Rouler votre propre fonction d'entrée de données ASP.NET (comme une page web autonome ou un composant WebPart) et utiliser à la place.

Si quelqu'un sait options autres et/ou mieux, s'il vous plaît poster un commentaire et je vais mettre à jour le corps de ce post.

<fin />

Tags Technorati:

Oui/non (case à cocher) filtrage dans WebPart requête de contenu

Pour filtrer une requête pour l'Oui/aucune case à cocher n'intitulée « PG jalon », configurer CQWP comme ceci:

image

C'est un autre de ces questions évidentes-une fois-vous-savez-it, mais hard-to-find-an-answer-to: Comment filtrer sur un Oui/aucune case à cocher utiliser le composant WebPart requête de contenu.

Le premier résultat de la recherche J'ai trouver en utilisant le mot-clé "composant WebPart requête de contenu oui/non de filtre" est faux plat, alors j'ai pensé que je pourrais mettre cela là-haut et voir si elle peut remplacer le résultat incorrect dans les résultats de la recherche typique.

Il est assez facile: Vrai valeurs = "1" et des valeurs erronées n'égalent pas "1" (jolie rétro, en fait).

Dans l'exemple ci-dessus, J'ai créé la colonne de site de type oui/non" (case à cocher)" nommée « PG Milestone ». Je l'ai ajouté à une bibliothèque de doc, téléchargé quelques documents, définir la valeur pour un couple et l'ai testé.

<fin />