Endlos Schachteln <div> Markierungen und jQuery

Dies scheint, wie so ein Spinner-Thema, Ich bin nicht sicher, dass es wirklich lohnt, über das Bloggen, aber das hat nie aufgehört mich vor, So hier gehen wir Lächeln

Ich bin an einem Projekt arbeiten wo ich einige Daten von einer Suche ziehen bin, Verpackung es bis in eine XML-Nachricht und dann die XML sich letztlich verwandelt in HTML via XSLT.  Es gibt eine Menge von jQuery beteiligt, ein wenig davon implementiert einige der Tab-Taste Funktionen.  Wenn Sie auf eine Registerkarte klicken (wirklich, eine <div>), jQuery ruft .hide() und ...zum() auf verschiedenen divs (der erste Seite laden lädt alle Inhalte, so gibt es in diesem Fall keine postbacks).

Ein paar Stunden, die Registerkarte Schaltlogik Schritte auffälliges Verhalten und es würde nicht eine meiner Registerkarten zeigen.  Ich verfolgt letztlich es bis auf die Tatsache, dass InternetExplorer (mindestens) dachte, dass die <div> Tags geschachtelt weit, weit tiefer als beabsichtigt.Die Developer Toolbar zeigen würde:

-<Div Id = "Tab1Content">
  -<div>
    -<div>
      -<Div Id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <— endlich zeigt es hier ganz unten geschlossen wurde!

Also, Wenn ich habe ein $("# Tab1Content").Ausblenden(), Ich würde auch Tab2 verstecken und ich könnte nie Tab2 zeigen, wenn ich nicht auch Tab1 zeigen.  Ich Kopieren und Einfügen den Code bis in visual Studio und es zeigte alle die Div Futter bis schön, so, wie sie angeblich zu tun, wie folgt aussehen:

-<Div Id = "Tab1Content">
  +<div>
  +<div>
-<Div Id = "Tab2Content">
  +<div>
  +<div>

Ich schlug meinen Kopf gegen die Wand für eine Weile und bemerkte, dass in der eigentlichen HTML Code eine Menge von leeren generiert wurde <div> Schlagwörter, wie:

<Körper>

  <Div Id = "Tab1Content">

    <Div Id = "row1" />
    <Div Id = "row2" />

  </div>

  <Div Id = "Tab2Content">

    <Div Id = "row1" />
    <Div Id = "row2" />

  </div>

</Körper>

(Das oben genannte ist Waaaaaaaaaaaay vereinfacht.  Die leere Div-Tags sind völlig gültig. Einige meiner <div> Markierungen waren voll von Inhalten, aber viel mehr nicht.  Ich kam zu der Erkenntnis, dass mein <XSL:für jeden> Richtlinien wurden die Kurzform ausgeben Div-tags wenn die XSL-Datei:für jede nicht ' finden Sie alle Daten.  Die Ausgabe einen HTML-Kommentar gezwungen, wie gezeigt:

image

 

Nachdem ich den tat, des Div schön aufgereiht und begann meine Tab switching.

Wie immer, Ich hoffe, dass dieses Hilfen im Notfall.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Quick Fix: "Den Namen des Inhaltstyps"$ Resources:ReportServerResources … nicht enthalten … Sonderzeichen”

Ich habe einige Zeit Bereinigen einer SharePoint verbrachte 2010 Website und eine der Bereinigung Fragen bezieht sich auf eine beschädigte / falsch installierte SQL Server Report Services-Problem.  Das Problem entstand, als einer meiner Kollegen versucht, eine Website als Vorlage speichern und erstellen Sie dann eine neue Website basierend auf dieser Vorlage erstellen.  Der Speichervorgang Vorgang wirkten Bußgeld, aber als sie versuchte, die neue Website zu erstellen, SharePoint folgende Fehlermeldung angezeigt:

Fehler

Der Content-Type-Name "$ Resources:ReportServerResources,DataSourceContentTypeName;' kann nicht enthalten: \ / : * ? “ # % < > { } | ~ & , zwei aufeinander folgende Punkte (..), oder Sonderzeichen wie z. B. eine Registerkarte.

Hier ist eine Bildschirm-cap:

 

image

Ich hatte einen Blick auf die Inhaltstypen auf der Website und fand dieses:

image

Diese Inhaltstypen sind eindeutig ungesund.

Dieses Problem scheint zu viel auf dem Internets kommen und es scheint nicht zu einem einzigen Konsens über wie es zu lösen.  Fand ich eine praktische Tabelle, die die schlechten Content-Type-Namen hier gute Content-Type-Namen zugeordnet: http://social.technet.microsoft.com/Forums/en-ZA/sharepoint2010programming/thread/cb03e866-8184-4943-acfe-cafffa1b8b7a.  Ich aktualisierte manuell sie auf diese Weise:

image

(BrightStarr der Name ist natürlich optional, aber es kann nicht Schaden Lächeln )

Dies erlaubte mir, Erstellen einer neuen Vorlage und nicht alles auf die anderen Seiten zu brechen, einschließlich einige PerformancePoint Server-Sachen, die eine ganz andere Gruppe von Menschen arbeiteten an.  Ich war dann in der Lage, auf der Vorlage eine neue Website erstellen.  Erfolg!

Ich bin mir nicht sicher, dies ist ein 100% Lösung, aber es hat mir und allen Beteiligten diese Vergangenheit ärgerlichen Fehler.  Wenn ich etwas neues finden, Ich werde ein Update.  Meine Nervosität ergibt sich aus der Tatsache, dass diese Namen falsch in erster Linie und durch die Festlegung der Anzeigename nicht, Ich bin nicht den internen Name berühren. 

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Eine Ursache für "der Schöpfer dieses Fehlers keinen Grund angegeben haben.”

Ich mache eine Menge Arbeit mit SharePoint-Suche in letzter Zeit und insbesondere die KeywordQuery-Klasse, Eigenschaften und Methoden.

Möchten Sie das Resultset wieder Ergebnisse jenseits der üblichen Verdächtigen (siehe hier), Sie hinzufügen sie der Auflistung SelectedProperties, wie in:

myKeywordQuery.SelectProperties.Add("Xyzzy");

Vielen Dank und eine Spitze des Hutes zu Corey Roth und Diese enorm hilfreich Blog-post (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

In meinem Fall, "Xyzzy" ist eigentlich eine verwaltete Eigenschaft nicht.  Wenn ich es SelectedProperties trotzdem hinzugefügt, SharePoint warf eine meiner Lieblings immer Laufzeitausnahmen:

"Der Schöpfer dieser Störung keinen Grund geben."

Besonders gut gefällt mir die Hauptstadt "R" in der Vernunft.  Das klingt für mich wie die.NET-Äquivalent des"I have no mouth, and I must scream.”

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Praktisches Nachschlagewerk: Standard-Ergebnisse aus KeywordQuery Suche

Beim Aufrufen der Execute() eine KeywordQuery-Methode, Sie können eine ResultTable basierend auf ResultType.RelevantResults erstellen.  Dieser Codeausschnitt veranschaulicht, was ich meine:

ResultTableCollection ResultsTableCollection = myKeywordQuery.Execute();

ResultTable SearchResultsTable = ResultsTableCollection[ResultType.RelevantResults];

Die sich ergebende Tabelle müssen die folgenden Spalten mit Informationen: 

Arbeits-ID
Rang
Titel
Autor
Größe
Pfad
Beschreibung
Schreiben
SiteName
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Eine SharePoint Liste abgeleitet 2010 Umgebung, Enterprise-Edition.  Hoffentlich wird es praktisch, um jemand in Zukunft sein.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Ein Grund für: "Fehler beim Extrahieren der Cab-Datei in der Projektmappe”

Während der Arbeit an einem Webpart visual Studio Projekt heute, Ich habe eine kleine Rück-Org einige Dateien in den Ordner _layouts als Teil des Bereitstellungsprozesses umgesetzt werden. Speziell, Ich benannte eine JS-Datei von "TypeAhead.js" auf "TypeAhead(alte).Js"  Ich plane, es zu entfernen, sobald dessen Nachfolger "TypeAhead.js" richtigen beweist.  Es sah so aus:

image

Dies verursacht sofort ein Problem mit visual Studio, als ich versuchte, das Projekt bereitstellen:

Fehler bei der Bereitstellungsschritt 'Projektmappe hinzufügen': Fehler beim Extrahieren der Cab-Datei in der Projektmappe.

Es stellt sich heraus, dass Sie keine Klammer in Dateinamen einfügen sollten.  Ich entfernte die Pars und das Problem gelöst.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Noch mehr jQuery–Ändern der Größe eines Bild-Beispiel

Eine alte Clienthersteller einen Webpart geerbt und es hat ein Imageproblem Größe.  Die Bilder sollten 60×50 aber aus irgendeinem Grund, der ursprüngliche Hersteller gezwungen, in 42×42, So suchen sie gequetscht:

 

Gutes Bild

Schlechtes Image

Hier befindet sich das markup (etwas vereinfacht):

<table Class = "erweitert-Outlook">
  <THEAD>
    <TR>
      <Th  Breite = 100′>3 Dienstag</Th>
    </TR>
  </THEAD>

  <TBODY>
    <TR-Klasse = 'Prognose'>
      <td Width = 100′>
        <UL>
          <Li Class = 'hoch'>Hoch: 72&DEG;F</Li>
          <Li Class = "niedriger">Niedrig: 44&DEG;F</Li>
          <Li Class = 'Zustand'>Sonnig
            <Img Src =’
http://deskwx.WeatherBug.com/images/Forecast/Icons/Localized/60×50/en/Trans/cond007.png’ Breite = 42’ Höhe = 42’ Alt =” />
          </Li>
        </UL>
      </TD>
    </TR>

  </TBODY>

</Tabelle>

Sie werden feststellen, dass obwohl die Pfad zu dem Bild selbst zeigt die richtige dimension (60×50) der ursprüngliche Hersteller gezwungen es 42×42.  Warum?  Verrückt.

Auf jeden Fall, Ich wollte eine schnelle und einfache Lösung für dieses Problem und ich wandte mich an jQuery.  Der Trick bestand darin, alle entsprechenden finden <IMG> Markierungen.  Ich wollte nicht mit anderen Img Tags Dreck über (davon gibt es viele).  Dieses Bit von jQuery Tat die Tücke:

<Skript-Typ = "Text/Javascript" Src ="http://AJAX.googleapis.com/AJAX/libs/jQuery/1.5/jQuery.Min.js"></Skript>

<Skript-Typ = "Text/Javascript">
     $(Dokument).bereit(Funktion () {

         $(' li.condition > Img').jeder(Funktion (Index, Artikel)
           
{
             $(Artikel).CSS("Breite", "60"); 
             $(Artikel).CSS("Höhe", "50");
            });
     }); // auf Dokument laden
</Skript>

Das Bit des Codes wird die Auflistung <Li> Markierungen, deren Klasse ist "Bedingung" und <IMG> Kinder.  Dann durchläuft es all das.  Wirkten gefällt ein Anmut.

Ich konnte es wahrscheinlich optimieren, aber ich war nie einer der Unix-Typ, das π gelöst An 18 Ziffern Genauigkeit mit Sed und Awk und ich bin nicht diese Art, wenn jQuery entweder Kerl Lächeln.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Analysieren von XML mit LINQ

Hier ist ein kurzes Beispiel einige analysieren mit LINQ  XML und steigen an der süßen, süße Attribute darin.

Hier ist das XML analysieren möchte:

<?XML Version = "1.0" Encoding = "Utf-8" ?>
<DeafultConfigurationSets>
  <PageLayouts>

    <Pagelayout-Name = "Xyzzy">
      <Registerkarten>
        <Registerkarte TabOrder = "1" TabLabel = "X" SharePointContentType = "a" AdditionalConstraints = "ac1" />
        <Registerkarte TabOrder = "2" TabLabel = "y" SharePointContentType = "b" AdditionalConstraints = "ac2" />
      </Registerkarten>
    </PageLayout>

    <PageLayout-Name = "xyzzy2">
      <Registerkarten>
        <Registerkarte TabOrder = "100" TabLabel = "X" SharePointContentType = "a" AdditionalConstraints = "ac1" />
        <Registerkarte TabOrder = "101" TabLabel = "y" SharePointContentType = "b" AdditionalConstraints = "ac2" />
        <Registerkarte TabOrder = "103" TabLabel = "Z" SharePointContentType = "c" AdditionalConstraints = "ac3" />
      </Registerkarten>
    </PageLayout>

  </PageLayouts>
</DeafultConfigurationSets>

Ich möchte einige Registerkarten zur Laufzeit von der Analyse der oben genannten aufzubauen.  Meine Tabs hängt ein Seitenlayout.  Wenn meine Seitenlayout-Namen "xyzzy2" ist, dann ich Tabs will 100, 101 und 103 (die Registerkarten im <PageLayout-Name = "xyzzy2">).

Hier ist die LINQ, die es tut:

Var AllTabs =
              von p in
                  XElement.Parse(theXmlToParse).
                 
Elemente("PageLayouts").
                  Elemente("PageLayout")
              wo (p.Attribute("Name").Value.Equals("xyzzy2"))
              von m in p.Elements("Tabs").Elemente("Tab")
              Wählen Sie m;

          Results.Text = Zeichenfolge.Leer;

          foreach (Var aTab in allTabs)
          {
              Results.Text =
                  "Tab-Reihenfolge: " + aTab.Attribute("TabOrder").Wert + " |" +
                  "Registerkarte Beschriftung: " + aTab.Attribute("TabLabel").Wert + " | " +
                  "SharePointContentType: " + aTab.Attribute("SharePointContentType").Wert + " | " +
                  "AdditionalConstraints: " + aTab.Attribute("AdditionalConstraints").Wert + "r";
          }

In den oben genannten, die Variable "TheXmlToParse" ist eine String-variable, Sie können jedoch die Belastung() Methode auf einen Stream, wenn du magst.

"Ergebnisse" ist eine Bezeichnung für ein Web Form, und wenn dieser Code ausgeführt wird, Es sieht wie folgt aus:

SNAGHTML11cd2e7c

Ich habe nicht gearbeitet, wie man die Ergebnisse noch sortieren, also lasse ich das für eine zukünftige Blog-post.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

SharePoint 2010 KeywordQuery und anonyme User

Ich aktiviert in meine Website zu testen, eine Such-Webpart, die ich entwickelt habe und keine große Überraschung anonymen Zugriff, Es hat nicht ganz funktioniert.  Anonymer Zugriff ist ziemlich immer eine Herausforderung für mich.

In diesem Fall, aus irgendeinem Grund war nicht die erste Suche ausgeführt.  Ich muß sagen, daß es war läuft, aber es war keine Ergebnisse zurück.  Ich benutze die KeywordQuery für die erste Anzeige.

Ich habe eine schnelle Suche und dieses Blog-Post von"sowmyancs"kam ziemlich schnell: “SharePoint 2010 Suche: keine Ergebnisse für anonyme Benutzer anzeigen nicht?”  Blog-Eintrag beschreibt das Problem von einem Out-of-Feld Schlüsselwort Suche Sicht aber das Verhalten war mir – ähnlich funktionierte es für authentifizierte Benutzer und anonyme Benutzer, aber anonyme User hat keine Ergebnisse. 

Ich folgte den Anweisungen und bang!  Es löste mein Problem.  Ich bin mir nicht sicher, was Nebenwirkungen wird und sie beweisen können, um ein problem, aber das kurzfristige Ergebnis ist hilfreich.

Klicken Sie auf durch den blog:

image

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

SharePoint 2010 KeywordQuery und die HiddenConstraints-Eigenschaft

Ich mache ein wenig Arbeit mit der KeywordQuery Objekt in SharePoint 2010 und nutzt die HiddenConstraints Eigenschaft.

Ich finde keine sofort hilfreiche Informationen auf, die die Eigenschaft, so ich dachte, würde ich schnell, wie ich es verwendet haben notieren.

Soweit ich das beurteilen kann, Dies ist eine automatische Einschränkung der Abfrage hinzugefügt werden, so dass Sie können Sortieren des Parks, die es gibt und nicht darum kümmern.  Als solche, Es ist nur ein weiteres Schlüsselwort (oder Satz von Schlüsselwörtern) und Modifizierer, die Sie in der Benutzeroberfläche eingeben können, wenn Sie eine Schlüsselwortsuche.  Hier ist ein Beispiel:

keywordQuery.HiddenConstraints = "Scope:\"Industry" ";

Sie können zusätzliche Einschränkungen mit Raum Trennzeichen hinzufügen.

keywordQuery.HiddenConstraints = "Scope:\"Industry" Verteidigung";

Die oben genannten ist in Englisch sagen, "Ausführen einer Schlüsselwort-Abfrage auf der Suche nach"Verteidigung"und darüber hinaus, Verwenden Sie den Bereich "Industrie".

Hier ist eine andere Art der Betrachtung es:

image

Ich habe es verwendet um einen Kontext-abhängige automatischen Anwendungsbereich auf ein benutzerdefiniertes Webpart bereitzustellen.  Wenn der Benutzer auf eine Registerkarte klickt und klickt auf eine Schaltfläche "suchen", die Registerkarte diktiert einen bestimmten Suchbereich.  Es funktioniert gut so weit.

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin

Beispiel: XSLT erstellen HTML-Href

Ich habe dabei ein wenig XSL stuff in letzter Zeit und dachte, ich würde zusammen ein Beispiel für meine zukünftige Referenz und das ist der Wert für uns alle XSLT-Ers ihren Lebensunterhalt in den internets.

Betrachten Sie das folgende XML:

<FdcSearchTabsCollection Count = "2">
  <SearchTab Label = "Industrie" SortOrder = "00" Label = "Industrien" SearchConstraints = "Contenttype:Industrie" TabID = "831b2a74-98c4-4453-8061-86e2fdb22c63" />
  <SearchTab Label = "Praktiken" SortOrder = "01" Label = "Praktiken" SearchConstraints = "Contenttype:PracticeGroups" TabID = "678e206b-6996-421f-9765-b0558fe1a9c0" />
</FdcSearchTabsCollection>

Der folgende XSL-Ausschnitt wird eine sortierte Liste der HREFs zu Registerkarten generiert.:

<XSL:Vorlage-Übereinstimmung = "FdcSearchTabsCollection" XML:Space = "preserve">
   
    <!– Die "all" Registerkarte –>
    <a Href = "Javascript:Sicht('All')">Alle anzeigen</eine>
   
    <!– Jede einzelne Registerkarte –>
    <!– Durchlaufen Sie alle Registerkarten und die korrekte Anzeige  Links. –>
    <XSL:for-each select = "SearchTab">
      <XSL:Sortieren select="@SortOrder"/>

      …
      <a Href = "Javascript:Sicht(‘{@ TabID}’)"><XSL:Wert-der select="@Label"/></eine>
    </XSL:für jeden>

    <BR /> 
   

   </XSL:Vorlage>

Hier ist wie es aussieht in SharePoint:

SNAGHTML78aa2cb

 

 

</Ende>

Onnieren Sie meinen Blog ab.

Folgen Sie mir auf Twitter bei http://www.twitter.com/pagalvin