Sans cesse de nidification <Div> Étiquettes et jQuery

Cela semble un tel sujet d'excentrique, Je ne suis pas sûr que c'est vraiment utile sur les blogs, mais qui a jamais cessé de me avant, donc ici, nous allons Sourire

Je travaille un projet où je suis tirer certaines données de recherche, emballage il dans un message XML, puis que XML est finalement transformé en HTML via XSLT.  Il y a beaucoup de jQuery, un bit qui implémente certaines fonctionnalités de tabulation.  Lorsque vous cliquez sur un onglet (vraiment, un <Div>), jQuery appelle .hide() et .show() sur divers divs (le chargement de la page initiale télécharge tout le contenu, il n'y a aucune publication dans ce cas).

Un tas de jours ago, l'onglet logique de commutation a commencé à se comporter de façon erratique et il ne serait pas montrer un de mes onglets.  J'ai finalement suivi il vers le fait qu'internet explorer (au moins) estime que la <Div> balises imbriquées loin, beaucoup plus profond que prévu.La barre d'outils développeur montrerait:

-<div id = « Tab1Content »>
  -<Div>
    -<Div>
      -<div id = « Tab2Content »>
        -<Div>
           …………………………
                   </Div>  <— montrant Enfin il fut fermé jusqu'ici!

Si, Si j'ai fait un $(« # Tab1Content »).cacher(), Tab2 serait également masquer et je ne pourrais jamais montrer Tab2 si je n'a pas montrer aussi Tab1.  J'ai copié et collé le code dans visual studio et il a montré de doublure de la div pied joliment, tout comme ils étaient censés faire, qui ressemble à ceci:

-<div id = « Tab1Content »>
  +<Div>
  +<Div>
-<div id = « Tab2Content »>
  +<Div>
  +<Div>

Je bat ma tête contre le mur pendant un certain temps et a remarqué que dans le réel HTML code générait beaucoup de vide <Div> balises, comme:

<corps>

  <div id = « Tab1Content »>

    <div id = « row1 » />
    <div id = « row2 » />

  </Div>

  <div id = « Tab2Content »>

    <div id = « row1 » />
    <div id = « row2 » />

  </Div>

</corps>

(Ce qui précède est waaaaaaaaaaaay trop simplifié.  Les balises div vide sont totalement valides. Certains de mes <Div> balises étaient pleins de contenu, mais beaucoup d'autres ne le sont pas.  Je suis arrivé à la prise de conscience que mon <XSL:pour chaque> les directives ont été émettant la forme abrégée des balises div quand le xsl:n'a pas pour chaque « trouver toutes les données.  J'ai forcé un commentaire HTML dans la sortie, comme le montre:

image

 

Après que je le faisais, la div alignés parfaitement et mon onglet basculement a commencé à travailler.

Comme toujours, J'espère que cela aide quelqu'un dans une pincée.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Quick Fix: « Le nom de type de contenu » ressources$:ReportServerResources … ne peut pas contenir … caractères spéciaux”

J'ai été passé quelque temps nettoyer un SharePoint 2010 site et l'une des questions de nettoyage se rapporte à un corrompu / incorrectement installé SQL Server rapport Services question.  La question s'est posée quand un de mes collègues a tenté d'enregistrer un site comme un modèle et ensuite créer créer un nouveau site basé sur ce modèle.  L'enregistrement opération fonctionnait bien, mais lorsqu'elle a essayé de créer le nouveau site, SharePoint affiche le message d'erreur suivant:

Erreur

Le nom de type de contenu » ressources $:ReportServerResources,DataSourceContentTypeName;' ne peut pas contenir: \ / : * ? “ # % < > { } | ~ & , deux périodes consécutives de (..), ou des caractères spéciaux, comme un onglet.

Voici une casquette d'écran:

 

image

J'avait un regard sur les types de contenu dans le site et a jugé que cette:

image

Ces types de contenu sont clairement malsains.

Cette question semble arriver beaucoup sur les Internets et il ne semble pas être un simple consensus sur la façon de le résoudre.  J'ai trouvé un tableau pratique qui a cartographié les noms de type de contenu mauvais noms de type de contenu bon ici: http://social.technet.microsoft.com/Forums/en-ZA/sharepoint2010programming/thread/cb03e866-8184-4943-acfe-cafffa1b8b7a.  Je mis à manuellement jour leur donc:

image

(BrightStarr le nom est évidemment facultative, mais il ne peut pas blesser Sourire )

Cela m'a permis de créer un nouveau modèle et n'a pas casser quoi que ce soit sur les autres sites, y compris quelques trucs de PerformancePoint Server qu'un groupe différent de personnes y travaillaient.  Ensuite, j'ai pu créer un nouveau site sur le modèle.  Succès!

Je ne suis pas sûr que c'est un 100% solution, mais il m'a et toutes les personnes impliquées passé cela ennuyeux d'erreur.  Si je trouve quelque chose de nouveau, Je posterai une mise à jour.  Ma nervosité provient du fait que ces noms ne devrait pas être mauvais en premier lieu et en fixant le nom d'affichage, Je ne suis pas toucher le nom interne. 

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Une Cause pour « le créateur de cette faille ne précise pas une raison.”

J'ai fait beaucoup de travail avec SharePoint recherche dernièrement et plus particulièrement la classe KeywordQuery, propriétés et méthodes.

Si vous souhaitez que le jeu de résultats à retourner des résultats au-delà d'usual suspects (voir ici), vous ajouter à la collection SelectedProperties, comme dans:

myKeywordQuery.SelectProperties.Add(« xyzzy »);

Merci beaucoup et un truc du chapeau à Corey Roth et ce billet de blog extrêmement utile (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

Dans mon cas, « xyzzy » n'est pas réellement une propriété gérée.  Lorsque j'ai ajouté à SelectedProperties de toute façon, SharePoint a jeté un de mes favoris toujours des exceptions runtime:

« Le créateur de cette faille ne précise pas une raison. »

J'aime particulièrement la capitale « R » dans la raison.  Cela sonne pour moi comme la.NET équivalent de »Je n'ai aucune bouche, et je dois crier.”

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Référence pratique: Par défaut résultats de la recherche KeywordQuery

Lorsque vous invoquez l'Execute() méthode sur un KeywordQuery, vous pouvez créer un ResultTable basé sur ResultType.RelevantResults.  Cet extrait de code illustre ce que je veux dire:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

La table résultante aura les colonnes suivantes de l'information: 

WorkId
Grade
Titre
Auteur
Taille
Chemin d'accès
Description
Écriture
Nom du site
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

J'ai cette liste dérivé un SharePoint 2010 environnement, Enterprise edition.  J'espère que ce sera utile à quelqu'un à l'avenir.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Une des raisons pour: « Impossible d'extraire le fichier cab de la solution”

Alors qu'il travaillait sur un composant WebPart de visual studio de projet aujourd'hui, J'ai fait une re-org mineur de certains fichiers à mettre dans le dossier _layouts dans le cadre du processus de déploiement. Spécifiquement, J'ai renommé un fichier .js de « TypeAhead.js » de TypeAhead"(vieux).js »  J'ai l'intention de l'enlever dès que son successeur, « TypeAhead.js » s'avère correcte.  Il ressemblait à ceci:

image

Cela a immédiatement provoqué un problème avec visual studio lorsque j'ai essayé de déployer le projet:

Erreur s'est produite à l'étape de déploiement « Ajouter une Solution »: Ne pas extraire le fichier cab de la solution.

Il s'avère que vous ne devez pas mettre une parenthèse dans les noms de fichier.  J'ai enlevé les parens et qui a résolu le problème.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Encore plus de jQuery–Redimensionner l'Image par exemple

J'ai hérité un composant WebPart de vieux vendeur de son client et elle a un problème de taille des images.  Les images doivent être 60×50 mais pour une raison étrange, le vendeur initial les contraint à 42×42, ils cherchent donc écrasés:

 

Bon Image

Mauvaise Image

Voici le balisage (quelque peu simplifiées):

<Tableau de classe = « étendu-outlook »>
  <THEAD>
    <TR>
      <Th  largeur = 100′>3 Mardi</Th>
    </TR>
  </THEAD>

  <tbody>
    <classe TR = « prévisions »>
      <largeur de TD = 100′>
        <UL>
          <classe Li = « high »>Haute: 72&deg;F</Li>
          <classe Li = « faible »>Faible: 44&deg;F</Li>
          <classe Li = « condition »>Sunny
            <img src =’
http://deskwx.Weatherbug.com/images/Forecast/Icons/localized/60×50/en/trans/cond007.PNG’ largeur = 42’ hauteur = 42’ Alt =” />
          </Li>
        </UL>
      </TD>
    </TR>

  </tbody>

</table>

Vous remarquerez que même si la chemin d'accès à l'image de soi montre la bonne dimension (60×50) le fournisseur original l'a forcé à 42×42.  Pourquoi?  Crazy.

De toute façon, Je voulais une solution rapide et facile à cette question et je me tournai vers jQuery.  Le truc est de localiser toutes les <img> balises.  Je ne voulais pas muck avec les autres balises img (dont il existe de nombreux).  Ce bit de jQuery a fait le truc:

<script type = "text/javascript" SRC ="http://Ajax.googleapis.com/Ajax/libs/jQuery/1.5/jQuery.min.js"></script>

<script type = « text/javascript »>
     $(document).prêt(fonction () {

         $(' li.condition > img »).chaque(fonction (index, élément)
           
{
             $(élément).CSS(« largeur », « 60 »); 
             $(élément).CSS(« hauteur », « 50 »);
            });
     }); // le chargement du document
</script>

Que le bit de code trouve la collection <Li> balises dont la classe est « condition » et <img> enfants.  Puis itère tout cela.  A fonctionné comme un charme.

Je pourrais probablement simplifier il, mais j'ai jamais été un genre de guy unix résoudre π À 18 précision de chiffres à l'aide de sed et awk et je ne suis pas ce genre si jQuery guy soit Sourire.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

L'analyse de XML avec LINQ

Voici un exemple rapide à l'aide de LINQ pour analyser certains  XML et au bonbon, Sweet des attributs qui y sont.

Voici le code XML je veux analyser:

<?XML version = "1.0" Encoding = "utf-8" ?>
<DeafultConfigurationSets>
  <PageLayouts>

    <PageLayout nom = « xyzzy »>
      <Onglets>
        <Onglet TabOrder = "1" TabLabel = "x" SharePointContentType = "un" AdditionalConstraints = « ac1 » et>
        <Onglet TabOrder = "2" TabLabel = y »" SharePointContentType = « b" AdditionalConstraints = « ac2 » />
      </Onglets>
    </PageLayout>

    <PageLayout nom = « xyzzy2 »>
      <Onglets>
        <Onglet TabOrder = "100" TabLabel = "x" SharePointContentType = "un" AdditionalConstraints = « ac1 » et>
        <Onglet TabOrder = 101 »" TabLabel = y »" SharePointContentType = « b" AdditionalConstraints = « ac2 » />
        <Onglet TabOrder = 103 »" TabLabel = "z" SharePointContentType = c »" AdditionalConstraints = « ac3 » />
      </Onglets>
    </PageLayout>

  </PageLayouts>
</DeafultConfigurationSets>

Je veux construire certains onglets lors de l'exécution par l'analyse de ce qui précède.  Mes onglets dépendent d'une mise en page.  Si nom du ma mise en page n'est « xyzzy2 » alors je veux avoir des onglets 100, 101 et 103 (les onglets de <PageLayout nom = « xyzzy2 »>).

Voici le LINQ qui fait:

var allTabs =
              de p dans
                  XElement.Parse(theXmlToParse).
                 
Éléments(« PageLayouts »).
                  Éléments(« PageLayout »)
              où (p.Attribute(« nom »).Value.Equals(« xyzzy2 »))
              de m à p.Elements(« Onglets »).Éléments(« Tab »)
              Sélectionnez m;

          Results.Text = string.Vide;

          foreach (aTab var en allTabs)
          {
              Results.Text =
                  "Ordre de tabulation: " + aTab.Attribute(« TabOrder »).Valeur + " |" +
                  "Étiquette de l'onglet: " + aTab.Attribute(« TabLabel »).Valeur + " | " +
                  « SharePointContentType: " + aTab.Attribute(« SharePointContentType »).Valeur + " | " +
                  « AdditionalConstraints: " + aTab.Attribute(« AdditionalConstraints »).Valeur + « r »;
          }

Dans ce qui précède, la variable « theXmlToParse » est une variable de chaîne, mais vous pouvez utiliser la charge() méthode sur un cours d'eau si vous le souhaitez.

« Résultats » sont une étiquette sur un formulaire web et lorsque ce code s'exécute, Il ressemble à ceci:

SNAGHTML11cd2e7c

Je n'ai pas travaillé sur comment trier les résultats encore, donc je vous laisse que pour un futur blog.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

SharePoint 2010 KeywordQuery et utilisateurs anonymes

J'ai activé l'accès anonyme dans mon site pour tester un composant WebPart de recherche que j'ai mis au point et à aucune grande surprise, Il n'a pas bien fonctionné.  L'accès anonyme est quasiment toujours un défi pour moi.

Dans ce cas, la recherche initiale n'était pas en cours d'exécution pour une raison quelconque.  Je dois dire qu'il a été course mais il rentrait pas tous les résultats.  J'utilise le KeywordQuery pour cet affichage initial.

J'ai fait une recherche rapide et par ce billet de blog"sowmyancs« venu assez rapidement: “SharePoint 2010 Recherche: ne se présente pas tous les résultats pour les utilisateurs anonymes?”  Entrée de blog décrit le problème d'une hors de la perspective de recherche de mot clé case, mais le comportement est semblable à la mienne – elle a travaillé pour les utilisateurs authentifiés et pour les utilisateurs anonymes, mais les utilisateurs anonymes n'ont aucun résultat. 

J'ai suivi les instructions et bang!  Il a résolu mon problème.  Je ne sais pas ce que cela aura des effets secondaires et ils peuvent se révéler un problème, mais le résultat à court terme est utile.

Cliquez sur via le blog:

image

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

SharePoint 2010 KeywordQuery et la propriété de HiddenConstraints

J'ai fait un peu de travail avec les KeywordQuery objet dans SharePoint 2010 et faisant usage de la HiddenConstraints propriété.

Je ne trouver toute information utile immédiatement sur la propriété, alors j'ai pensé que je le ferais rapidement écrire comment j'ai utilisé ce.

Comme je peux, C'est une contrainte automatique ajoutée à la requête de sorte que vous pouvez trier du parc il y et ne pas s'inquiéter à ce sujet.  Comme, C'est juste un autre mot clé (ou un ensemble de mots clés) et modificateurs que vous pouvez taper à l'interface utilisateur lorsque vous faites une recherche par mot-clé.  Voici un exemple:

keywordQuery.HiddenConstraints = "champ d'application:\« Industry » »;

Vous pouvez ajouter des contraintes supplémentaires avec un séparateur d'espace.

keywordQuery.HiddenConstraints = "champ d'application:\« Industry" défense";

Ce qui précède est dit en anglais, « exécuter une requête de mot clé à la recherche pour « la défense » et plus, Utilisez le champ « Industrie ».

Voici une autre façon de regarder:

image

J'ai utilisé ce pour fournir une étendue automatique dépendante du contexte sur un composant WebPart personnalisé.  Lorsque l'utilisateur clique sur un onglet et clique sur un bouton de recherche, l'onglet dicte une étendue de recherche particulière.  Il fonctionne bien jusqu'à présent.

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin

Exemple: Création HTML Href de XSLT

J'ai été faire un peu de stuff XSL dernièrement et pense que je mettrais ensemble un échantillon pour ma future référence et qui peuvent être de valeur pour nous tous de XSLT-ers, gagner sa vie dans les internets.

Examiner le code XML suivant:

<FdcSearchTabsCollection Count = « 2 »>
  <SearchTab Label = "industrie" SortOrder = « 00 » Label = « Industries » SearchConstraints = "contenttype:Industrie" TabID = « 831b2a74-98c4-4453-8061-86e2fdb22c63 » />
  <SearchTab Label = "pratiques" SortOrder = « 01 » Label = « Pratiques » SearchConstraints = "contenttype:PracticeGroups" TabID = « 678e206b-6996-421f-9765-b0558fe1a9c0 » />
</FdcSearchTabsCollection>

L'extrait de code XSL suivante générera une liste triée des onglets href:

<XSL:match de modèle = FdcSearchTabsCollection »" XML:espace = « sauvegarde »>
   
    <!– La somme de tous les »" onglet –>
    <a href = "javascript:Visualisations(« Toutes les »)">Voir tous</un>
   
    <!– Chaque onglet individuel –>
    <!– Effectuer une itération dans tous les onglets et afficher le bon  Liens. –>
    <XSL:pour chaque select = « SearchTab »>
      <XSL:genre select="@SortOrder"/>

      …
      <a href = "javascript:Visualisations(‘{@ TabID}’)"><XSL:valeur de select="@Label"/></un>
    </XSL:pour chaque>

    <br /> 
   

   </XSL:modèle>

Voici à quoi il ressemble dans SharePoint:

SNAGHTML78aa2cb

 

 

</fin>

S'abonner à mon blog.

Me suivre sur Twitter à http://www.twitter.com/pagalvin