Ich hing auf eine Kleinanzeige für den Verkauf mein Auto in Bergen county, NJ am Sonntagabend. Ich habe mehrere Anfragen per e-Mail kurz darauf und das Geschäft mit jemandem am Dienstag Abend geschlossen.
Fast zu schön, um wahr zu sein …
Ich hing auf eine Kleinanzeige für den Verkauf mein Auto in Bergen county, NJ am Sonntagabend. Ich habe mehrere Anfragen per e-Mail kurz darauf und das Geschäft mit jemandem am Dienstag Abend geschlossen.
Fast zu schön, um wahr zu sein …
Ich ändern nicht sehr oft Erweiterte Suche XSLT., so es, scheint wie ich kleine Hügel jedesmal steige.
Das ist meine neueste Lektion: Fall ist wichtig, wenn Sie eine Spalte verweisen. In meine Erweiterte Suche, Ich habe so definierte Spalten:
<Stamm xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Spalten>
<Spalte Name="GafTrainingInvoiceNumber" />
<Spalte Name="GafTrainingInvoiceLocation" />
<Spalte Name="Arbeits-ID"/>
<Spalte Name="Rang"/>
<Spalte Name="Titel"/>
<Spalte Name="Autor"/>
<Spalte Name="Größe"/>
<Spalte Name="Pfad"/>
<Spalte Name="Beschreibung"/>
<Spalte Name="Schreiben"/>
<Spalte Name="SiteName"/>
<Spalte Name="CollapsingStatus"/>
<Spalte Name="HitHighlightedSummary"/>
<Spalte Name="HitHighlightedProperties"/>
<Spalte Name="ContentClass"/>
<Spalte Name="IsDocument"/>
<Spalte Name="PictureThumbnailURL"/>
</Spalten>
</Stamm>
Die XLST, das die Rechnung Nummer und Rechnung Position anzeigt gewesen:
<p>
Ausbildung-Rechnungsnummer: <XSL:Wert der Wählen Sie="GafTrainingInvoiceNumber"/>
<BR></BR>
Rechnung Trainingsort: <XSL:Wert der Wählen Sie="GafTrainingInvoiceLocation"/>
</p>
Jedoch, Wählen Sie muss die Eigenschaft in alle Kleinbuchstaben verweisen, wie in:
<p>
Ausbildung-Rechnungsnummer: <XSL:Wert der Wählen Sie="gaftraininginvoicenumber"/>
<BR></BR>
Rechnung Trainingsort: <XSL:Wert der Wählen Sie="gaftraininginvoicelocation"/>
</p>
Bis ich das korrigiert, Suchergebnisse zeigte die Etiketten (dh. "Ausbildung-Rechnungsnummer") aber keine Daten.
Business-Szenario:
Unternehmensweite Implementierung des MOOSES für Unternehmen mit 30+ Standorte und ein paar Dutzend Zentralbereiche.
Geschäftsziel:
Trotz einer Vielzahl von Unternehmensgruppen (Abteilungen, Standorte, usw.), bestimmte Daten sollten auf globaler Ebene gepflegt werden. Zum Beispiel, eine autorisierende master-Liste von allen Standorten des Unternehmens (zB. Produktionsstätten, Lagerstandorte, Vertriebsbüros) sollte an einem zentralen Ort beibehalten werden.
Technisches Problem:
Die Enterprise-Taxonomie wurde mit mehrere Websitesammlungen implementiert. Wir hätten gerne die autorisierende Liste der physischen Standorten in einer benutzerdefinierten WSS-Liste erstellen. Dann, Wenn wir brauchten, um eine Spalte in einem Inhaltstyp zu haben (oder eine Spalte einer Liste oder Doc-Bibliothek hinzugefügt) enthalten Firmenstandorten, Wir würden eine Spalte mithilfe des "Lookups schaffen." DataType und zeigen Sie auf dieser Masterliste.
Leider, Lookup-Datentypen müssen eine Liste "Quelle" "lokal zugreifen." Was bedeutet, dass unsere maßgebliche Liste Websitesammlungen erstrecken kann nicht.
Technische Lösung:
Implementierung ein neuen benutzerdefinierten Datentyps implementiert basierend auf SPField und als ein DropDownList in der Benutzeroberfläche, deren ListItems aus der WSS-Masterliste auffüllen, dargestellt.
Wir erschaffen eine neue Websitesammlung genannt "http://localhost/EnterpriseData". Dort, Wir haben eine benutzerdefinierte Liste mit dem Namen "Standorte". Diese Liste nutzt nur den standard "Titel" Feld, um die Liste der aktuellen Standorte enthalten.
Folgt man mehrere diskrete Schritte erstellen einen benutzerdefinierten Datentyp in WSS. Sie sind:
Hier ist der Code für das:
öffentliche Klasse XYZZYCorporateLocationField : SPFieldText
{
öffentliche XYZZYCorporateLocationField
(SPFieldCollection Felder, Zeichenfolge typeName, Zeichenfolge displayName)
: Base(Felder, typeName, displayName) { }
öffentliche XYZZYCorporateLocationField
(SPFieldCollection Felder, Zeichenfolge displayName)
: Base(Felder, displayName) { }
öffentliche Überschreiben BaseFieldControl FieldRenderingControl
{
Erhalten
{
BaseFieldControl Steuerung = Neu XYZZYCorporateLocationFieldControl();
Kontrolle. FieldName = Dies.InternalName;
Rückkehr Kontrolle;
} //Erhalten
} // fieldrenderingcontrol
öffentliche Überschreiben Zeichenfolge GetValidatedString(Objekt Wert)
{
If (Dies.Erforderlich || Wert. ToString().Entspricht(String.Leer))
{
werfen Neu SPFieldValidationException ("Abteilung ist nicht zugewiesen.");
}
Rückkehr Base.GetValidatedString(Wert);
} // getvalidatedstring
} // XYZZYCorporateLocation
öffentliche Klasse XYZZYCorporateLocationFieldControl : BaseFieldControl
{
geschützt DropDownList XYZZYCorporateLocationSelector;
geschützt Überschreiben Zeichenfolge DefaultTemplateName
{
Erhalten
{
Rückkehr "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName
öffentliche Überschreiben Objekt Wert
{
Erhalten
{
EnsureChildControls();
Rückkehr Dies.XYZZYCorporateLocationSelector.SelectedValue;
} // Erhalten
Satz
{
EnsureChildControls();
Dies.XYZZYCorporateLocationSelector.SelectedValue = (Zeichenfolge)Dies.ItemFieldValue;
} // Satz
} // Objekt Wert überschreiben
geschützt Überschreiben privatevoid CreateChildControls()
{
If (Dies.Feld == NULL || Dies.ControlMode == SPControlMode.Display)
Rückkehr;
Base.CreateChildControls();
Dies.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer.FindControl("XYZZYCorporateLocationSelector");
If (Dies.XYZZYCorporateLocationSelector == NULL)
werfen Neu Ausnahme("FEHLER: Kann nicht geladen werden. ASCX-Datei!");
If (!Dies.IsPostBack-Seite.)
{
Verwendung (SPSite Website = Neu SPSite("http://Localhost/enterprisedata"))
{
Verwendung (SPWeb Web = Site. OpenWeb())
{
SPList CurrentList = Web. Listen["Standorte"];
foreach (SPItem XYZZYCorporateLocation im currentList.Items)
{
If (XYZZYCorporateLocation["Titel"] == NULL) weiter;
Zeichenfolge theTitle;
TheTitle = XYZZYCorporateLocation["Titel"].ToString();
Dies.XYZZYCorporateLocationSelector.Items.Add
(Neu ListItem(theTitle, theTitle));
} // foreach
} // mit Spweb Web = site.openweb()
} // Nutzung Spsite Site = neue Spsite("http://"localhost"/ Enterprisedata")
} // Wenn kein postback
} // CreateChildControls
} // XYZZYCorporateLocationFieldControl
Der obige Code implementiert grundsätzlich die Logik zum Auffüllen der Dropdownliste mit Werten aus der WSS benutzerdefinierte Liste befindet sich am http://localhost/enterprisedata und benannte "Abteilungen".
Ich habe definiert beide Klassen in einer einzigen .cs-Datei, Es kompiliert und legen Sie sie in den GAC (starke erforderlich, Natürlich).
<%@ Kontrolle Sprache= "C#" Erbt="Microsoft.SharePoint.Portal.serveradmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, Culture = Neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Immer" %>
<%@ Registrieren TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Montage="Microsoft.SharePoint, Version = 12.0.0.0, Kultur = Neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registrieren TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Montage="Microsoft.SharePoint, Version = 12.0.0.0, Kultur = Neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" runat= "Server">
<Vorlage>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" runat= "server" />
</Vorlage>
</SharePoint:RenderingTemplate>
Die oben genannten wird in c gespeichert:\Programm c:ProgrammeGemeinsame Dateienmicrosoft Sharedweb Server extensions12controltemplates.
<?XML Version="1.0" Codierung="UTF-8" ?>
<FieldTypes>
<FieldType>
<Feld Name="TypeName">CorporateLocations</Feld>
<Feld Name="ParentType">Text</Feld>
<Feld Name="TypeDisplayName">Firmenstandorten</Feld>
<Feld Name="TypeShortDescription">Alle XYZZY Firmenstandorten einschließlich Herstellungs- oder andere Einrichtungen.</Feld>
<Feld Name="UserCreatable">WAHRE</Feld>
<Feld Name="ShowInListCreate">WAHRE</Feld>
<Feld Name="ShowInDocumentLibraryCreate">WAHRE</Feld>
<Feld Name="ShowInSurveyCreate">WAHRE</Feld>
<Feld Name="ShowInColumnTemplateCreate">WAHRE</Feld>
<Feld Name="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Kultur = Neutral, PublicKeyToken = b0b19e85410990c4</Feld>
<RenderPattern Name="DisplayPattern">
<Schalter>
<Expr>
<Spalte />
</Expr>
<Fall Wert=""/>
<Standard>
<HTML>
<![CDATA[<span Style = "Farbe:Red"><b>]]>
</HTML>
<Spalte SubColumnNumber="0" HTMLEncode="WAHRE"/>
<HTML><![CDATA[</b></Spannweite>]]></HTML>
</Standard>
</Schalter>
</RenderPattern>
</FieldType>
</FieldTypes>
Diese XML-Datei hinzugefügt den benutzerdefinierten Datentyp die WSS "Bibliothek" und vergleicht ihn mit dem GAC hatte Versammlung.
Nach dem Umzug dieser Bits in Ort, Iisreset auf dem Server und es sollten alle schön Arbeit beginnen.
Zusätzliche Kategorie: CAML
Hier ist ein großer Beitrag von einem Mann namens "craig" auf eine Technik zum Auffinden von CAML Definitionen für Feld Inhaltstypen basierend auf realen Definitionen von einer Website.
Seinem Posting sagt alles. In Kürze:
Zusätzliche Kategorien: Visual Studio 2005
Nützliche Intellisense für Features aktivieren, Elemente, in visual Studio etc. 2005:
IntelliSense ist jetzt für das XML-Dokument aktiviert..
Siehe Hier Weitere Informationen zu diesem Thema, sowie eine Anleitung wie jede XML-Datei automatisch WSS Intellisense zuzuordnende.
Ich nahm und den oben genannten Test heute Morgen bestanden. Ich fand die Prüfung zu schwierig und fair.
Es gibt ein relativer Mangel an Informationen über diese Prüfung im Web. Ich weiß nicht warum.
Ich wird nicht offensichtlich ins Detail über die Prüfung bekommen habe ich, aber ich denke, ich kann sicher folgendes sagen:
Es listet, was Sie brauchen, zu wissen, um die Prüfung und es ist zu übergeben, IMO, sehr genaue.
</Ende>Onnieren Sie meinen Blog ab!
Zusätzliche Kategorie: InfoPath
Zusammenfassung: Ein InfoPath 2007 Form auf einem MOSS-Server bereitgestellt bietet eine Dropdown-Liste Anbieter gebunden an eine benutzerdefinierte Liste von MOSS. Nach Auswahl eines Anbieters, Regeln zuweisen einer Handvoll von Text-Feldern wie Vertriebsmitarbeiter Name Feldwerte., Adresse, Stadt, Zustand, ZIP und phone. Leistung ist schrecklich. Wir bemerken, dass die Leistung noch schlimmer (in einem nicht-linear) für jedes weitere Feld aktualisieren wir auf diese Weise. N.B., Wenn wir einfach aktualisieren Sie den Vertriebsmitarbeiter-Namen, Es dauert [x] Zeit. Wenn wir Vertriebsmitarbeiter aktualisieren, Adresse1, Adresse2, Stadt, Zustand, ZIP, Es dauert 10 mal länger.
Lösung: Einen Webdienst programmieren (Beispielcode finden Sie Hier) die Namen eines Anbieters übergeben wird und es gibt wieder die Anbieter-details. Dann, Weisen Sie die Felder so. Obwohl dies scheint zu langsam, Es gab keinen erkennbaren Unterschied in der Leistung, wenn wir zugewiesen 1 Feld im Vergleich 8 Felder. Als zusätzlichen bonus, Benutzer erhalten ein cooles "Kontaktaufnahme mit dem server" Zylon Wirkung, während sie warten auf das Formular aufrufen und den Dienst belegen Ergebnisse.
UPDATE: Wir bestimmt nie wieder die Ursache für dieses Problem und es nie Oberfläche.
Wir bemerken, dass plötzlich während der Durchführung einer Website Entwicklung, zwei Benutzer können nicht auf eine Websitesammlung zugreifen. Diese Konten können auf der Haupt-Website authentifizieren., aber wenn Sie versuchen, eine bestimmte Websitesammlung zugreifen, Sie erhalten nur einen leeren Bildschirm angezeigt. Keine Fehler angezeigt, nur eine weisse leere Seite.
Wir melden Sie sich als ein Siggy Auflistung und versuchen, einen Benutzer als ein Siggy und diesmal hinzufügen, beim Drücken der "OK", Wir erhalten diese Nachricht:
Ausnahme. (Ausnahme von HRESULT: 0X 80020009 (DISP_E_EXCEPTION))
Wir verbrachten einige Zeit erforscht dies leider, nicht einfallen etwas sinnvolles. Es gab einige Nachrichten in das Diagnoseprotokoll, aber es war schwer, ihnen genau mit diesem Thema zu korrelieren.
Am Ende, wir die Websitesammlung gelöscht und neu erstellt und auf die löste es.
Wenn ich herausfinden, verursacht was dies in Zukunft, Ich werde diesen Beitrag aktualisieren..