Pubblicato un annuncio per vendere la mia auto nella contea di Bergen, NJ domenica notte. Ho ricevuto diverse richieste di informazioni via e-mail poco dopo e chiuso l'affare con qualcuno nella notte di martedì.
Quasi troppo bello per essere vero …
Pubblicato un annuncio per vendere la mia auto nella contea di Bergen, NJ domenica notte. Ho ricevuto diverse richieste di informazioni via e-mail poco dopo e chiuso l'affare con qualcuno nella notte di martedì.
Quasi troppo bello per essere vero …
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.
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:
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
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).
<%@ 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.
<?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.
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:
Ulteriori categorie: Visual Studio 2005
Per abilitare l'intellisense utile per caratteristiche, elementi, ecc in visual studio 2005:
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.
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:
Esso elenca quello che dovete sapere per passare l'esame ed è, IMO, molto accurata.
</fine>Iscriviti al mio blog!
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.
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.