Monatliche Archive: August 2007

MOSS-Erweiterte Suche-Anpassung — Fall spielt in Erweiterte Suche XSLT

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.

MOOS: Funktionale Beispiel – benutzerdefinierten Datentyp

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:

  1. Definieren Sie eine Klasse, die von SPField erbt (Man kann aus anderen Bereichen erben, falls erforderlich).

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

  1. Definieren einer anderen Klasse, die aus dem Basisfeld-Steuerelement erbt, wie in:

ö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).

  1. Implementieren einer Steuerelementvorlage (.ASCX-Datei) wie gezeigt:

<%@ 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.

  1. Schließlich, Wir erstellen eine XML-Datei speichern Sie in der... 12XML-Verzeichnis. Dies ist CAML, die unsere benutzerdefinierten Datentyp definiert und für mein Beispiel, sieht wie folgt aus:

<?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.

WSS: Technik zur Erstellung von CAML Felddefinitionen.

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:

  1. Erstellen eines Inhaltstyps.
  2. Eine Liste zuordnen.
  3. Öffnen Sie die Liste mit SharePoint Designer.
  4. Exportieren Sie in ein "persönliches Webpaket".
  5. Benennen Sie in eine CAB.
  6. Extrahieren Sie das manifest.
  7. Finden Sie Ihren Content-Type und die zugehörigen CAML.

WSS: Zusammenfassung Schritte zum Aktivieren der nützliche Merkmale/Elemente/etc. IntelliSense in VS 2005

Zusätzliche Kategorien: Visual Studio 2005

Nützliche Intellisense für Features aktivieren, Elemente, in visual Studio etc. 2005:

  1. Auf einen WSS-Server zugreifen.
  2. Navigieren Sie zu "c:\Programm c:ProgrammeGemeinsame Dateienmicrosoft Sharedweb Server extensions12TEMPLATEXML"
  3. Öffnen Sie ein anderes Windows-Explorer auf: "C:\Programm c:ProgrammeMicrosoft Visual Studio 8XmlSchemas"
  4. Kopieren Sie folgende Dateien aus dem WSS-Server, um Ihre VS 2005 Schemata Verzeichnis:
    1. WSS.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Starten Sie VS 2005
  6. Ein Projekt eine neue XML-Datei hinzufügen.
  7. Klicken Sie in den Textbereich der XML-Datei.
  8. Im Eigenschaftenbereich, Klicken Sie auf "Schemas" und wählen Sie "wss.xsd" aus den verfügbaren Werkzeugen. (Es ist nicht notwendig, andere Xsd auszuwählen, da sie von wss.xsd verwiesen wird).

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.

WSS-Prüfung 70-541, Microsoft Windows SharePoint Services 3.0 – Anwendungsentwicklung

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:

  1. Vertrauen Sie diesem link: http://www.microsoft.com/learning/exams/70-541.mspx.

    Es listet, was Sie brauchen, zu wissen, um die Prüfung und es ist zu übergeben, IMO, sehr genaue.

  2. Der Link empfiehlt auch Inside Microsoft Windows SharePoint Services 3.0 von Ted Pattison & Daniel Larson. Dieses Buch deckt fast alle Themen, die der Test Adressen. Ich fand es toll an und für sich über einfache Exam prep. Es bietet gute Beispiele und hat mich wirklich zum Nachdenken über einige neue und interessante Dinge zu versuchen. Wenn Sie ein paar Bits des Buches überspringen, nur Querverweise des Buches TOC mit den Elementen in den Link von oben.
  3. Es geht nichts über tatsächliche praktische Erfahrungen. Wenn Sie Zeit und Interesse haben, Neben Beispielen in dem Buch zu folgen und dann mit ihnen experimentieren. Sie werden haben eine einfachere Zeit auf die Prüfung als auch wirklich lernen WSS-Anwendungsprogrammierung.

</Ende>Onnieren Sie meinen Blog ab!

MOOS / InfoPath Forms Server (InfoPath 2007) Dropdown-Liste Leistung

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.

MOOS: Ausnahme. (Ausnahme von HRESULT: 0X 80020009 (DISP_E_EXCEPTION))

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..