archivi mensili: Agosto 2007

MOSS avanzata ricerca personalizzazione — Caso importa in ricerca avanzata XSLT

Ricerca avanzata XSLT non modificare molto spesso, così sembra che io sto salendo piccole colline ogni volta.

Questo è il mio più recente lezione: Caso conta quando si fa riferimento a una colonna. Nella mia ricerca avanzata, Ho le colonne definite come questo:

<radice xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Colonne>
<
Colonna Nome="GafTrainingInvoiceNumber" />
<
Colonna Nome="GafTrainingInvoiceLocation" />
<
Colonna Nome="ID lavoro"/>
<
Colonna Nome="Rango"/>
<
Colonna Nome="Titolo"/>
<
Colonna Nome="Autore"/>
<
Colonna Nome="Dimensioni"/>
<
Colonna Nome="Percorso"/>
<
Colonna Nome="Descrizione"/>
<
Colonna Nome="Scrivere"/>
<
Colonna Nome="Nomesito"/>
<
Colonna Nome="CollapsingStatus"/>
<
Colonna Nome="HitHighlightedSummary"/>
<
Colonna Nome="HitHighlightedProperties"/>
<
Colonna Nome="ContentClass"/>
<
Colonna Nome="IsDocument"/>
<
Colonna Nome="PictureThumbnailURL"/>
</
Colonne>
</
radice>

il XSLT che visualizza la posizione di numero e fattura fattura era stata:

<p>
Numero di fattura di formazione: <xsl:valore di selezionare="GafTrainingInvoiceNumber"/>
<
br></br>
Luogo di allenamento fattura: <xsl:valore di selezionare="GafTrainingInvoiceLocation"/>
</
p>

Tuttavia, select deve fare riferimento alla proprietà in tutte le lettere minuscole, come in:

<p>
Numero di fattura di formazione: <xsl:valore di selezionare="gaftraininginvoicenumber"/>
<
br></br>
Luogo di allenamento fattura: <xsl:valore di selezionare="gaftraininginvoicelocation"/>
</
p>


Fino a quando non ho corretto che, Risultati della ricerca hanno mostrati le etichette (vale a dire. "Numero di fattura di formazione") ma nessun dato.

MUSCHIO: Esempio funzionale – tipo di dati personalizzati

Scenario business:

Implementazione Enterprise-wide di MOSS per società di produzione con 30+ siti e qualche dozzina dipartimenti aziendali.

Obiettivo aziendale:

Nonostante una moltitudine di gruppi aziendali (dipartimenti, posizioni, ecc), alcuni dati devono essere mantenuti a livello globale. Per esempio, un autorevole elenco principale di tutti i luoghi fisici dell'azienda (e. g. impianti di produzione, posizioni di magazzino, uffici vendite) dovrebbe essere mantenuto in una posizione centrale.

Problema tecnico:

La tassonomia aziendale è stata implementata utilizzando più raccolte siti. Ci sarebbe piaciuto creare l'elenco autorevole dei luoghi fisici in un elenco personalizzato di WSS. Poi, Quando abbiamo bisogno di avere una colonna in un tipo di contenuto (o aggiunta di una colonna in un elenco o doc libreria) che conteneva le posizioni aziendali, si creerebbe una colonna utilizzando la ricerca"" DataType e punto di questo elenco master.

Purtroppo, ricerca datatypes deve accedere a un elenco di origine "localmente" significa che il nostro autorevole elenco non può occupare più raccolte siti.

Soluzione tecnica:

Implementare un nuovo tipo di dati personalizzata implementata sulla base di SPField e rappresentato come un oggetto DropDownList nell'interfaccia utente di cui ListItems popolare dall'elenco principale di WSS.

Abbiamo creato una nuova collezione di sito chiamata "http://localhost/EnterpriseData". Ci, Abbiamo creato un elenco personalizzato denominato "Sedi aziendali". Questo elenco viene utilizzato solo il titolo"standard" campo per contenere l'elenco delle sedi aziendali reali.

Uno segue diversi passaggi discreti per creare un tipo di dati personalizzati in WSS. Essi sono:

  1. Definire una classe che eredita da SPField (uno può ereditare da altri campi, se richiesto).

Ecco il codice per questo:

pubblica classe XYZZYCorporateLocationField : SPFieldText
{
pubblica XYZZYCorporateLocationField
(SPFieldCollection campi, stringa typeName, stringa displayName)
: base(campi, typeName, displayName) { }

pubblica XYZZYCorporateLocationField
(SPFieldCollection campi, stringa displayName)
: base(campi, displayName) { }

pubblica eseguire l'override BaseFieldControl FieldRenderingControl
{
Ottieni
{
BaseFieldControl controllo = Nuovo XYZZYCorporateLocationFieldControl();
controllo. FieldName = Questo.InternalName;
ritorno controllo;
} //Ottieni
} // fieldrenderingcontrol

pubblica eseguire l'override stringa GetValidatedString(oggetto valore)
{
Se (Questo.Obbligatorio || valore. ToString().È uguale a(Stringa.Vuoto))
{
Throw Nuovo SPFieldValidationException ("Il dipartimento non è assegnato.");
}
ritorno base.GetValidatedString(valore);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Definire un'altra classe che eredita dal controllo campo base, come in:

pubblica classe XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protetti DropDownList XYZZYCorporateLocationSelector;

protetti eseguire l'override stringa DefaultTemplateName
{
Ottieni
{
ritorno "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

pubblica eseguire l'override oggetto Valore
{
Ottieni
{
EnsureChildControls();
ritorno Questo.XYZZYCorporateLocationSelector. SelectedValue;
} // Ottieni
impostare
{
EnsureChildControls();
Questo.XYZZYCorporateLocationSelector.SelectedValue = (stringa)Questo.ItemFieldValue;
} // impostare
} // eseguire l'override object valore

protetti eseguire l'override void Metodo CreateChildControls()
{

Se (Questo.Campo = = null || Questo.ControlMode = = SPControlMode.Visualizzazione)
ritorno;

base.Metodo CreateChildControls();

Questo.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer. FindControl("XYZZYCorporateLocationSelector");

Se (Questo.XYZZYCorporateLocationSelector = = null)
Throw Nuovo Eccezione("ERRORE: Impossibile caricare. File ASCX!");

Se (!Questo.IsPostBack pagina.)
{

utilizzando (SPSite sito = Nuovo SPSite("http://localhost/enterprisedata"))
{
utilizzando (SPWeb Web = site. OpenWeb())
{

SPList currentList = web. Elenchi["Sedi aziendali"];

foreach (SPItem XYZZYCorporateLocation in currentList.Items)
{
Se (XYZZYCorporateLocation["Title"] == null) continuare;

stringa theTitle;
Titolo = XYZZYCorporateLocation["Title"].ToString();

Questo.XYZZYCorporateLocationSelector.Items.Add
(Nuovo ListItem(theTitle, theTitle));

} // foreach

} // utilizzando spweb web = site.openweb()
} // utilizzando il sito spsite = nuovo spsite("http://localhost/enterprisedata")

} // Se non un postback

} // Metodo CreateChildControls

} // XYZZYCorporateLocationFieldControl

Il codice sopra fondamentalmente implementa la logica per popolare la DropDownList con i valori dall'elenco personalizzato WSS situato presso http://localhost/enterprisedata e denominato "reparti aziendali".

Entrambe le classi definito in un file singolo con estensione., compilato e messo in GAC (necessaria forte, Naturalmente).

  1. Implementare un modello di controllo (.ascx) come illustrato:

<%@ Controllo Lingua= "C#" Eredita="Microsoft.SharePoint.Portal.serveradmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Versione = 12.0.0.0, Culture = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Sempre" %>
<%
@ Registro TagPrefix= wssawc"" Namespace="Microsoft.SharePoint.WebControls" Assemblea="Microsoft.SharePoint, Versione = 12.0.0.0, Cultura = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registro TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assemblea="Microsoft.SharePoint, Versione = 12.0.0.0, Cultura = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= XYZZYCorporateLocationFieldControl"" runat= "server">
<Modello>
<ASP:DropDownList ID= XYZZYCorporateLocationSelector"" runat= "server" />
</Modello>
</
SharePoint:RenderingTemplate>

Quanto sopra viene salvato in c:\programma c:ProgrammiFile comuniMicrosoft sharedweb server extensions12controltemplates.

  1. Infine, Creiamo un file XML per salvare nella... 12XML directory. Questo è CAML che definisce il nostro tipo di dati personalizzato e per il mio esempio, assomiglia a questo:

<?XML Versione="1.0" codifica="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Campo Nome="TypeName">CorporateLocations</Campo>
<
Campo Nome="ParentType">Testo</Campo>
<
Campo Nome="TypeDisplayName">Sedi aziendali</Campo>
<
Campo Nome="TypeShortDescription">Tutte le località XYZZY aziendale, compresi gli impianti di fabbricazione o di altri.</Campo>
<
Campo Nome="UserCreatable">VERO</Campo>
<
Campo Nome="ShowInListCreate">VERO</Campo>
<
Campo Nome="ShowInDocumentLibraryCreate">VERO</Campo>
<
Campo Nome="ShowInSurveyCreate">VERO</Campo>
<
Campo Nome="ShowInColumnTemplateCreate">VERO</Campo>
<
Campo Nome="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Cultura = neutral, PublicKeyToken = b0b19e85410990c4</Campo>
<
RenderPattern Nome="DisplayPattern">
<
Interruttore>
<
Expr>
<
Colonna />
</
Expr>

<Caso Valore=""/>

<Predefinito>
<
HTML>
<![CDATA[
<span style = "color:Rosso"><b>]]>
</
HTML>

<
Colonna SubColumnNumber="0" HTMLEncode="VERO"/>

<HTML><![CDATA[</b></arco>]]></HTML>

</
Predefinito>
</
Interruttore>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Questo file XML aggiunge il tipo di dati personalizzati per il WSS "biblioteca" e fiammiferi esso contro il GAC ha avuto Assemblea.

Dopo lo spostamento di tutti questi bit in luogo, iisreset sul server e si dovrebbe iniziare tutti a lavorare piacevolmente.

WSS: Tecnica per la creazione di definizioni di campo CAML.

Categoria supplementare: CAML

Qui è un grande distacco da un tizio di nome "craig" una tecnica per trovare definizioni CAML per tipi di contenuto campo basati fuori definizioni dal vivo da un sito.

Suo distacco dice tutto. In breve:

  1. Creare un tipo di contenuto.
  2. Associarlo a un elenco.
  3. Apri l'elenco con SharePoint Designer.
  4. Esportare in un pacchetto"web personale".
  5. Rinominare un cab.
  6. Estrarre il manifesto.
  7. Trova il tuo tipo di contenuto e associato CAML.

WSS: Riepilogo operazioni per abilitare utili funzioni/elementi/ecc. IntelliSense in VS 2005

Ulteriori categorie: Visual Studio 2005

Per abilitare l'intellisense utile per caratteristiche, elementi, ecc in visual studio 2005:

  1. Accedere a un server WSS.
  2. Passare a "c:\programma c:ProgrammiFile comuniMicrosoft sharedweb server extensions12TEMPLATEXML"
  3. Aprire un altro windows explorer che punta a: "C:\ProgrammiMicrosoft Visual Studio 8 XmlSchemas."
  4. Copiare i seguenti file dal server WSS tuo VS 2005 directory di schemi:
    1. WSS
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Riavviare VS 2005
  6. Aggiungere un nuovo file XML a un progetto.
  7. Fare clic nel corpo del file XML.
  8. Nel riquadro Proprietà, Clicca su "schemi" e scegliere "WSS" dalle scelte. (Non è necessario selezionare altri xsd, poiché essi si fa riferimento da WSS).

IntelliSense è ora abilitato per tale documento XML.

Vedere qui Per ulteriori informazioni su questo argomento e per istruzioni su come associare automaticamente WSS intellisense con qualsiasi file XML.

Esame di WSS 70-541, Microsoft Windows SharePoint Services 3.0 – Sviluppo di applicazioni

Ho preso e superato il test di cui sopra questa mattina. Ho trovato l'esame per essere leale e difficile.

C'è una relativa scarsità di informazioni su questo esame sul web. Non so perché.

Ovviamente non voglio entrare in alcun dettaglio circa l'esame che ho preso, ma penso che posso tranquillamente dire di seguito:

  1. Fiducia questo link: http://www.microsoft.com/learning/exams/70-541.mspx.

    Esso elenca quello che dovete sapere per passare l'esame ed è, IMO, molto accurata.

  2. Raccomanda anche il link Inside Microsoft Windows SharePoint Services 3.0 di Ted Pattison & Daniel Larson. Questo libro copre quasi tutti i soggetti che affronta il test. Ho trovato ad essere grande in sé e per sé di là di prep semplice esame. Fornisce numerosi esempi e davvero mi ha fatto riflettere su alcune cose nuove e interessanti per provare. Se si desidera saltare qualche bit nel libro, solo rimando TOC del libro con gli articoli nel link dall'alto.
  3. Niente batte l'effettiva esperienza hands-on. Se avete tempo e interesse, seguire con gli esempi nel libro e poi sperimentare con loro. Potrai avere un tempo più facile nell'esame così come davvero imparare la programmazione di applicazioni WSS.

</fine>Iscriviti al mio blog!

MUSCHIO / InfoPath Forms Server (InfoPath 2007) prestazioni di elenco a discesa

Categoria supplementare: InfoPath

Riassunto: Un InfoPath 2007 il modulo distribuito a un server MOSS fornisce un elenco a discesa dei fornitori legato a un elenco personalizzato di MOSS. Selezionando un fornitore, regole di assegnano valori di campo per una manciata di campi di testo, quali il nome del rappresentante, Indirizzo, città, stato, zip e telefono. Prestazioni sono orribile. Notiamo che prestazioni peggiora (in modo non lineare) per ogni ulteriore campo che aggiorniamo questo modo. Vale a dire, Se solo aggiornare il nome del rappresentante, ci vuole [x] quantità di tempo. Se aggiorniamo rappresentante vendite, Indirizzo1, Indirizzo2, città, stato, zip, ci vuole 10 volte di più.

Soluzione: Scrivere un servizio web (codice di esempio può essere trovato qui) che viene passato in nome di un venditore e restituisce indietro i dettagli del venditore. Poi, assegnare i campi in questo modo. Anche se questo sembra troppo lento, non ci era differenza percepibile in termini di prestazioni, quando abbiamo assegnato 1 Campo contro 8 campi. Come bonus aggiuntivo, gli utenti di ottenere un fresco "contattare il server" Cylon effetto mentre aspettano la forma a richiamare e consumare il servizio risultati.

MUSCHIO: Eccezione. (Eccezione da HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

AGGIORNAMENTO: Abbiamo mai determinata la causa principale di questo problema e mai superficiale nuovamente.

Notiamo che improvvisamente durante l'implementazione di un sito di sviluppo, due utenti sono in grado di accedere a una raccolta di siti. Tali conti è in grado di autenticare il sito principale, ma quando si tenta di accedere all'insieme un particolare sito, Basta avere una schermata vuota. Nessun errore visualizzato, solo una pagina bianca vuota.

Ci accedere come admin di raccolta un sito e cercare di aggiungere uno di quegli utenti come un admin del sito e questa volta, su premere "OK", si ottiene questo messaggio:

Eccezione. (Eccezione da HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Abbiamo trascorso qualche tempo alla ricerca di questo e purtroppo, non è venuto con qualcosa di utile. Ci sono stati alcuni messaggi nel Registro di diagnostico, ma è stato duro per correlarli esattamente con questo problema.

Alla fine, abbiamo l'eliminazione della raccolta siti e ricreata e che risolto.

Se io a capire cosa ha causato questo in futuro, Aggiornerò questo post.