arhive lunare: August 2007

MOSS avansate de personalizare de căutare — Cazul contează în căutare avansată XSLT

Nu modifica căutare avansată XSLT foarte des, Deci se pare ca eu sunt alpinism dealuri mici de fiecare dată.

Lecţia mea cele mai noi este aceasta: Caz probleme când corelarea o coloană. În căutarea mea avansate, Am coloane definit ca aceasta:

<rădăcină xmlns:XSi="http://www.w3.org/ 2001/XMLSchema-exemplu">
<
Coloane>
<
Coloană nume="GafTrainingInvoiceNumber" />
<
Coloană nume="GafTrainingInvoiceLocation" />
<
Coloană nume="WorkId"/>
<
Coloană nume="Protopopiat"/>
<
Coloană nume="Titlul"/>
<
Coloană nume="Autor"/>
<
Coloană nume="Dimensiune"/>
<
Coloană nume="Calea"/>
<
Coloană nume="Descriere"/>
<
Coloană nume="Scrie"/>
<
Coloană nume="SiteName"/>
<
Coloană nume="CollapsingStatus"/>
<
Coloană nume="HitHighlightedSummary"/>
<
Coloană nume="HitHighlightedProperties"/>
<
Coloană nume="ContentClass"/>
<
Coloană nume="IsDocument"/>
<
Coloană nume="PictureThumbnailURL"/>
</
Coloane>
</
rădăcină>

XLST care afişează locaţia de numărul şi factură factura a fost:

<p>
Numărul de facturi de formare: <XSL:valoarea de Selectaţi="GafTrainingInvoiceNumber"/>
<
br></br>
Locaţie de factură de formare: <XSL:valoarea de Selectaţi="GafTrainingInvoiceLocation"/>
</
p>

Cu toate acestea, select a proprietăţii în toate minuscule de referinţă, ca şi în:

<p>
Numărul de facturi de formare: <XSL:valoarea de Selectaţi="gaftraininginvoicenumber"/>
<
br></br>
Locaţie de factură de formare: <XSL:valoarea de Selectaţi="gaftraininginvoicelocation"/>
</
p>


Până când am corectat că, rezultate de căutare a arătat etichetele (adică. "Numărul facturii de formare") dar nu există date.

MOSS: Exemplu funcţional-tip de date particularizat

Scenariu de afaceri:

Implementarea la nivel de Intreprindere MOSS pentru companie de producţie cu 30+ site-uri şi câteva zeci de departamentele corporative.

Obiectivul de afaceri:

În ciuda o multitudine de grupuri de afaceri (departamente, Locatii, etc), anumite date trebuie menținute la un nivel global. De exemplu, o autoritate lista master toate locaţiile fizice ale companiei (ex. facilităţi de producţie, locaţii de depozit, birouri de vânzări) ar trebui să fie menţinute într-o locaţie centrală.

Probleme tehnice:

Taxonomia Intreprindere a fost implementat folosind mai multe colecții de site-ul. Ne-ar fi plăcut să creeze autoritate lista de locaţii fizice într-o listă particularizată de AAC. Apoi, Când am nevoie pentru a avea o coloană într-un tip de conținut (sau o coloană de adăugat la o lista sau doc bibliotecă) care conţinea locatiile corporate, ne-ar crea o coloană utilizând "căutare" tip de date şi punct la această listă de maestru.

Din păcate, tipurile de date de căutare trebuie să accesa o listă de sursa "la nivel local" însemnând că lista noastră de autoritate nu cuprind colecţii de site-ul.

Soluţii tehnice:

Implementarea unui nou tip de date personalizate puse în aplicare pe baza SPField şi reprezentat ca un DropDownList în interfaţa utilizator a cărui ListItems popula din lista AAC maestru.

Am creat o colecţie de site-ul nou numit "http://localhost/EnterpriseData". Acolo, am creat o listă particularizată numit "Locatiile Corporate". Această listă utilizează doar standard "titlul" câmp să conţină lista de locaţii reale corporative.

Unul urmează mai multe etape discret pentru a crea un tip de date predefinite în AAC. Ele sunt:

  1. Definiţi o clasă care moștenește de la SPField (unul poate moşteni din alte domenii, dacă este necesar).

Aici este codul pentru că:

publice Clasa XYZZYCorporateLocationField : SPFieldText
{
publice XYZZYCorporateLocationField
(SPFieldCollection câmpuri, şir typeName, şir displayName)
: baza(câmpuri, typeName, displayName) { }

publice XYZZYCorporateLocationField
(SPFieldCollection câmpuri, şir displayName)
: baza(câmpuri, displayName) { }

publice suprascrie BaseFieldControl FieldRenderingControl
{
obţine
{
BaseFieldControl controlul = noi XYZZYCorporateLocationFieldControl();
controlul. Denumirea câmpului = Acest lucru.InternalName;
reveni controlul;
} //obţine
} // fieldrenderingcontrol

publice suprascrie şir GetValidatedString(obiect valoarea)
{
Dacă (Acest lucru.Necesare || valoare. ToString().Este egal cu(Şir.Gol))
{
arunca noi SPFieldValidationException ("Departamentul nu este alocat.");
}
reveni baza.GetValidatedString(valoarea);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Defini o altă clasă care moștenește de la controlul bazei câmp, ca şi în:

publice Clasa XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protejate DropDownList XYZZYCorporateLocationSelector;

protejate suprascrie şir DefaultTemplateName
{
obţine
{
reveni "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

publice suprascrie obiect Valoarea
{
obţine
{
EnsureChildControls();
reveni Acest lucru.XYZZYCorporateLocationSelector.SelectedValue;
} // obţine
set
{
EnsureChildControls();
Acest lucru.XYZZYCorporateLocationSelector.SelectedValue = (şir)Acest lucru.ItemFieldValue;
} // set
} // suprascrie obiect valoare

protejate suprascrie nule CreateChildControls()
{

Dacă (Acest lucru.Domeniul == nul || Acest lucru.ControlMode == SPControlMode.Afişare)
reveni;

baza.CreateChildControls();

Acest lucru.XYZZYCorporateLocationSelector =
(DropDownList)TemplateContainer. FindControl("XYZZYCorporateLocationSelector");

Dacă (Acest lucru.XYZZYCorporateLocationSelector == nul)
arunca noi Excepţie("EROARE: Imposibil de încărcat. Fișierul ASCX!");

Dacă (!Acest lucru.Pagina de IsPostBack.)
{

folosind (SPSite site-ul = noi SPSite("http://localhost/enterprisedata"))
{
folosind (SPWeb web = site-ul. OpenWeb())
{

SPList.Update() currentList = web. Liste["Locatii corporativă"];

foreach (SPItem XYZZYCorporateLocation în currentList.Items)
{
Dacă (XYZZYCorporateLocation["Titlul"] == nul) «««;

şir theTitle;
theTitle = XYZZYCorporateLocation["Titlul"].ToString();

Acest lucru.XYZZYCorporateLocationSelector.Items.Add
(noi ListItem(theTitle, theTitle));

} // foreach

} // folosind spweb web = site.openweb()
} // folosind site-ul spsite = nou spsite("http://localhost/enterprisedata")

} // Dacă nu o postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Codul de mai sus practic implementează logica pentru popularea DropDownList cu valori din listă particularizată AAC situat la http://localhost/enterprisedata şi numit "departamentele companiei".

Am definit ambele clase într-un fişier unic .cs, compilat-o şi pune-l în GAC (puternic solicitate, desigur).

  1. Aplicarea unui şablon de control (.ascx) ca:

<%@ Controlul Limba= "C#" Moștenește="Microsoft.SharePoint.portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.portal,Versiune = 12.0.0.0, Cultură = neutră,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Întotdeauna" %>
<%
@ Înregistrează-te TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Asamblare="Microsoft.SharePoint, Versiune = 12.0.0.0, Cultură = neutră, PublicKeyToken = 71e9bce111e9429c" %> <%@ Înregistrează-te TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Asamblare="Microsoft.SharePoint, Versiune = 12.0.0.0, Cultură = neutră, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID-UL= "XYZZYCorporateLocationFieldControl" Runat= "server">
<Şablon>
<ASP:DropDownList ID-UL= "XYZZYCorporateLocationSelector" Runat= "serverul" />
</Şablon>
</
SharePoint:RenderingTemplate>

Cele de mai sus este stocat în c:\Programul filescommon filesmicrosoft sharedweb server extensions12controltemplates.

  1. În cele din urmă, vom crea un fişier XML pentru a salva în... 12XML Director. Acest lucru este florin care defineşte tipul nostru de date personalizate şi exemplu meu, se pare ca acest lucru:

<?XML versiunea="1.0" codificarea="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Câmp nume="TypeName">CorporateLocations</Câmp>
<
Câmp nume="ParentType">Textul</Câmp>
<
Câmp nume="TypeDisplayName">Locatiile corporate</Câmp>
<
Câmp nume="TypeShortDescription">Toate locaţiile XYZZY corporative, inclusiv facilităţi de fabricație sau alte.</Câmp>
<
Câmp nume="UserCreatable">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInListCreate">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInDocumentLibraryCreate">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInSurveyCreate">ADEVĂRAT</Câmp>
<
Câmp nume="ShowInColumnTemplateCreate">ADEVĂRAT</Câmp>
<
Câmp nume="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versiunea = 1.0.0.0, Cultură = neutră, PublicKeyToken = b0b19e85410990c4</Câmp>
<
RenderPattern nume="DisplayPattern">
<
Comutator>
<
Expr>
<
Coloană />
</
Expr>

<Caz Valoarea=""/>

<În mod implicit>
<
HTML>
<![CDATA[
<stil de control = "culoare:Roşu"><b>]]>
</
HTML>

<
Coloană SubColumnNumber="0" HTMLEncode="ADEVĂRAT"/>

<HTML><![CDATA[</b></durata de>]]></HTML>

</
În mod implicit>
</
Comutator>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Acest fişier XML adaugă tipul de date particularizate pentru a AAC "Biblioteca" şi se potriveşte împotriva GAC au avut Adunarea.

După toate aceste biţi, se deplasează în locul, iisreset pe server şi acesta ar trebui să toate începe să lucreze frumos.

WSS: Tehnica pentru a crea definiţii de câmp florin.

Categorie suplimentară: CAML

aici este o mare detaşarea de un om numit "craig" pe o tehnica pentru a găsi florin definiții pentru domeniul tipurile de conținut bazate pe definiţii live reale de pe un site.

Postarea lui spune totul. Pe scurt:

  1. Crea un tip de conținut.
  2. L-a asociat cu o listă.
  3. Deschide lista cu SharePoint Designer.
  4. Export la un "pachet de web personale".
  5. Redenumiţi o .cab.
  6. Extrage manifest.
  7. Găsi vă tipul de conţinut şi asociate florin.

WSS: Rezumat paşi pentru a permite util Features/elemente etc.. IntelliSense vs 2005

Categorii suplimentare: Visual Student 2005

Pentru a activa utile intellisense pentru caracteristici, elemente, etc în visual studio 2005:

  1. Acces la un server de AAC.
  2. Navigaţi la "c:\Programul filescommon filesmicrosoft sharedweb server extensions12TEMPLATEXML"
  3. Deschide un alt windows explorer, ce indică spre: "C:\Program FilesMicrosoft Visual Studio 8XmlSchemas"
  4. Copiaţi următoarele fişiere la server AAC dumneavoastră VS 2005 schemele Director:
    1. WSS.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Reporniţi VS 2005
  6. Adăugaţi un nou fişier XML la un proiect.
  7. Faceţi clic în corpul de fişier XML.
  8. În panoul de proprietăţi, faceţi clic pe "scheme" şi alegeţi "wss.xsd" la alegerile. (Nu este necesar să selectaţi alte xsd, deoarece acestea sunt referite la wss.xsd).

IntelliSense este acum activat pentru acel document XML.

A se vedea aici pentru mai multe informaţii pe această temă şi pentru instrucţiuni despre cum să automat asociat AAC intellisense cu orice fişier XML.

AAC examen 70-541, Microsoft Windows SharePoint Services 3.0 – Dezvoltarea de aplicaţii

Am luat şi a trecut testul menţionate mai sus în această dimineaţă. Am găsit examen dificil si corect.

Există o relativă lipsa de informaţii cu privire la acest examen pe web. Nu sunt sigur de ce.

Evident, nu voi intra în orice detalii despre examen am luat, dar cred că în condiţii de siguranţă pot să spun următoarele:

  1. Încredere în acest link: http://www.microsoft.com/learning/exams/70-541.mspx.

    Este liste de ce trebuie să ştiţi să treacă examenul şi este, OMI, foarte precise.

  2. Link-ul, de asemenea, recomandă In interiorul Microsoft Windows SharePoint Services 3.0 de Ted Pattison & Daniel Larson. Această carte acoperă aproape toate subiectele pe care testul se adresează. L-am găsit pentru a fi mare la şi de la sine dincolo de simplu examen prep. Acesta oferă exemple de mare şi într-adevăr luat eu gândesc despre unele lucruri noi si interesante pentru a încerca. Dacă doriţi să săriţi peste un biţi câteva în cartea, Adresa doar cartea pe TOC cu elementele din linkul de mai sus.
  3. Nimic nu bate reale de experienta hands-on. Dacă aveţi timp şi interes, urmaţi împreună cu exemplele din carte şi apoi experiment cu ei. Te voi avea un timp mai uşor pe examen, precum şi învăţa într-adevăr AAC cerere programare.

</scop>Aboneaza-te la blog-ul meu!

MOSS / Server de formulare InfoPath (InfoPath 2007) drop-jos listă de performanţă

Categorie suplimentară: InfoPath

Rezumat: O InfoPath 2007 forma desfăşurate la un server de MOSS oferă un drop-jos listă de furnizori legat de o listă particularizată de MOSS. La selectarea un furnizor, reguli atribui valorile de câmp pentru un pumn de câmpuri de text, cum ar fi nume reprezentant de vânzări, Adresa, City, stat, zip şi telefon. Performanţa este oribil. Vom observa că performanţa se înrăutăţeşte (într-un mod non-liniar) pentru fiecare câmp suplimentar, vom actualiza acest fel. Adică, Dacă ne-am actualizare nume reprezentant de vânzări, este nevoie de [x] suma de timp. Dacă vom actualiza reprezentant de vânzări, address1, address2, City, stat, zip, este nevoie de 10 ori mai mult.

Soluție: Scrie un serviciu web (mostre de cod pot fi găsite aici) care este trecut numele un furnizor şi se întoarce înapoi detalii furnizor. Apoi, atribuiţi câmpurile în acest fel. Deşi acest lucru pare prea lent, nu a fost nici o diferenţă discernable în performanţă, când ne-am asociat 1 câmp comparativ cu 8 câmpuri. Ca un bonus, users a lua un cool "contactare server" Cylon efectul în timp ce ei aşteaptă pentru formularul pentru a invoca si consuma serviciul rezultate.

MOSS: Excepţie a avut loc. (Excepție de la HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

ACTUALIZARE: Am determinat niciodată cauza de această problemă şi it niciodată suprafaţă din nou.

Vom observa în timpul aplicării un site de dezvoltare că brusc, doi utilizatori sunt în imposibilitatea de a accesa o colecţie de site-ul. Aceste conturi pot autentifica la site-ul principal, dar atunci când încercarea de a accesa un anumit site de colectare, ei chiar a lua un ecran gol. Fără erori afişează, doar un gol pagină alb.

Am conectaţi-vă ca un admin site-ul de colectare şi încercaţi să adăugaţi unul dintre aceşti utilizatori ca un admin site-ul şi de această dată, la apăsarea "OK", ne-am lua acest mesaj:

Excepţie a avut loc. (Excepție de la HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Am petrecut ceva timp cercetând acest lucru şi, din păcate,, nu au venit cu ceva util.. Au existat unele mesaje în Jurnalul de diagnosticare, dar a fost greu să coreleze-le exact cu această problemă.

În cele din urmă, putem şterge colecția de site-ul şi re-creat şi că rezolvat-o.

Dacă m-am gândit ce cauzat acest lucru în viitor, Voi actualiza acest post.