Månadsarkiv: Augusti 2007

MOSS Avancerad Sök anpassning — Fallet spelar roll i avancerad sökning XSLT

Jag ändra inte avancerad sökning XSLT ofta, så det verkar som jag klättrar små kullar varje gång.

Min senaste lektion är detta: Fall frågor när du refererar till en kolumn. I min avancerad sökning, Jag har kolumner definieras som detta:

<rot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Kolumner>
<
Kolumn Namn="GafTrainingInvoiceNumber" />
<
Kolumn Namn="GafTrainingInvoiceLocation" />
<
Kolumn Namn="Arbets-ID"/>
<
Kolumn Namn="Rang"/>
<
Kolumn Namn="Avdelning"/>
<
Kolumn Namn="Författare"/>
<
Kolumn Namn="Storlek"/>
<
Kolumn Namn="Sökväg"/>
<
Kolumn Namn="Beskrivning"/>
<
Kolumn Namn="Skriva"/>
<
Kolumn Namn="Platsnamn"/>
<
Kolumn Namn="CollapsingStatus"/>
<
Kolumn Namn="HitHighlightedSummary"/>
<
Kolumn Namn="HitHighlightedProperties"/>
<
Kolumn Namn="ContentClass"/>
<
Kolumn Namn="IsDocument"/>
<
Kolumn Namn="PictureThumbnailURL"/>
</
Kolumner>
</
rot>

Den XLST som visar faktura nummer och faktura platsen hade varit:

<p>
Utbildning fakturanummer: <XSL:värdet av Välj="GafTrainingInvoiceNumber"/>
<
br></br>
Utbildning faktura läge: <XSL:värdet av Välj="GafTrainingInvoiceLocation"/>
</
p>

Men, Välj måste referera till egenskapen i alla gemener, som i:

<p>
Utbildning fakturanummer: <XSL:värdet av Välj="gaftraininginvoicenumber"/>
<
br></br>
Utbildning faktura läge: <XSL:värdet av Välj="gaftraininginvoicelocation"/>
</
p>


Tills jag korrigerade som, Sökresultat visade etiketterna (dvs. "Utbildning fakturanummer") men inga data.

MOSS: Funktionella exempel-anpassad datatyp

Affärsscenario:

Enterprise-wide genomförandet av MOSS för tillverkande företag med 30+ platser och några dussin företagens avdelningar.

Verksamhetsmål:

Trots en mängd företagsgrupper (avdelningar, platser, m.m.), vissa uppgifter bör behållas på en global nivå. Till exempel, en auktoritativ Ledar-lista av alla fysiska platser av företaget (t.ex. tillverkningsanläggningar, lagerställen, försäljningskontor) bör behållas på en central plats.

Tekniska Problem:

Företaget taxonomin genomfördes med flera webbplatssamlingar. Vi skulle ha velat skapa en auktoritär lista över fysiska platser i en anpassad lista som WSS. Sedan, När vi behövde ha en kolumn i en innehållstyp (eller en kolumn läggs till en lista eller doc dokumentbibliotek) som innehöll corporate platser, Vi vill skapa en kolumn med "lookup" datatyp och peka på det Ledar-lista.

Tyvärr, lookup datatyper måste komma åt en källista "lokalt" vilket innebär att vår auktoritär lista inte kan span webbplatssamlingar.

Teknisk lösning:

Genomföra en ny anpassad datatyp genomförs utifrån SPField och representeras av en DropDownList i Gränssnittet vars ListItems fylla i master WSS-listan.

Vi skapade en ny webbplatssamling som kallas "http://localhost/EnterpriseData". Det, Vi skapade en anpassad lista som heter "Corporate platser". Denna lista använder bara standard "titeln" fältet innehåller en lista över faktiska corporate platser.

Följer en flera diskreta steg för att skapa en anpassad datatyp i WSS. De är:

  1. Definiera en klass som ärver från SPField (man kan ärva från andra fält om det behövs).

Här är koden för att:

offentliga klass XYZZYCorporateLocationField : SPFieldText
{
offentliga XYZZYCorporateLocationField
(SPFieldCollection fält, sträng typeName, sträng displayName)
: base(fält, typeName, displayName) { }

offentliga XYZZYCorporateLocationField
(SPFieldCollection fält, sträng displayName)
: base(fält, displayName) { }

offentliga åsidosätta BaseFieldControl FieldRenderingControl
{

{
BaseFieldControl kontroll = nya XYZZYCorporateLocationFieldControl();
kontroll. Fältnamn = Detta.InternalName;
återvändande kontroll;
} //få
} // fieldrenderingcontrol

offentliga åsidosätta sträng GetValidatedString(objekt värde)
{
om (Detta.Krävs || värdet. ToString().Är lika med(Sträng.Tom))
{
kasta nya SPFieldValidationException ("Avdelningen är inte tilldelad.");
}
återvändande base.GetValidatedString(värde);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Definiera en annan klass som ärver från fältkontroll, som i:

offentliga klass XYZZYCorporateLocationFieldControl : BaseFieldControl
{
skyddade DropDownList XYZZYCorporateLocationSelector;

skyddade åsidosätta sträng DefaultTemplateName
{

{
återvändande "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

offentliga åsidosätta objekt Värde
{

{
EnsureChildControls();
återvändande Detta.XYZZYCorporateLocationSelector. SelectedValue;
} // få
Ange
{
EnsureChildControls();
Detta.XYZZYCorporateLocationSelector.SelectedValue = (sträng)Detta.ItemFieldValue;
} // Ange
} // åsidosätta objektet värdet

skyddade åsidosätta void CreateChildControls()
{

om (Detta.Fältet == null || Detta.ControlMode == SPControlMode.Display)
återvändande;

base.CreateChildControls();

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

om (Detta.XYZZYCorporateLocationSelector == null)
kasta nya Undantag("FEL: Kan inte ladda. ASCX fil!");

om (!Detta.IsPostBack sida.)
{

med hjälp av (SPSite plats = nya SPSite("http://localhost/enterprisedata"))
{
med hjälp av (SPWeb Web = webbplats. OpenWeb())
{

SPList currentList = web. Listor["Corporate platser"];

foreach (SPItem XYZZYCorporateLocation i currentList.Items)
{
om (XYZZYCorporateLocation["Rubrik"] == null) «««;

sträng Ämneskod;
Ämneskod = XYZZYCorporateLocation["Rubrik"].ToString();

Detta.XYZZYCorporateLocationSelector.Items.Add
(nya ListItem(Ämneskod, Ämneskod));

} // foreach

} // med hjälp av spweb web = site.openweb()
} // webbplatsen för spsite = nya spsite("http://localhost/enterprisedata")

} // om inte ett återanslående

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

Ovanstående kod i princip implementerar logik för att fylla DropDownList med värden från WSS anpassade listan ligger på http://localhost/enterprisedata och heter "företagens avdelningar".

Jag definierade båda klasserna i en enda .cs fil, sammanställt det och Lägg den i den globala Sammansättningscachen (stark krävs, Självklart).

  1. Genomföra en kontrollmall (.ascx) som visas:

<%@ Kontroll Språk= "C#" Ärver="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, kultur = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Alltid" %>
<%
@ Registrera dig TagPrefix= "wssawc" Namespace="Microsoft.SharePoint.WebControls" Församling="Microsoft.SharePoint, Version = 12.0.0.0, Kultur = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registrera dig TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Församling="Microsoft.SharePoint, Version = 12.0.0.0, Kultur = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID= "XYZZYCorporateLocationFieldControl" Runat= "server">
<Mall>
<ASP:DropDownList ID= "XYZZYCorporateLocationSelector" Runat= "server" />
</Mall>
</
SharePoint:RenderingTemplate>

Ovanstående sparas in c:\programmet delade filerMicrosoft sharedweb server extensions12controltemplates.

  1. Slutligen, Vi skapar en XML-fil att spara i det... 12XML katalog. Detta är CAML som definierar våra anpassad datatyp och för mitt exempel, ser ut så här:

<?XML version="1.0" kodning="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Fältet Namn="TypeName">CorporateLocations</Fältet>
<
Fältet Namn="ParentType">Texten</Fältet>
<
Fältet Namn="TypeDisplayName">Corporate platser</Fältet>
<
Fältet Namn="TypeShortDescription">Alla XYZZY Corporate platser inklusive tillverkning eller andra anläggningar.</Fältet>
<
Fältet Namn="UserCreatable">SANNA</Fältet>
<
Fältet Namn="ShowInListCreate">SANNA</Fältet>
<
Fältet Namn="ShowInDocumentLibraryCreate">SANNA</Fältet>
<
Fältet Namn="ShowInSurveyCreate">SANNA</Fältet>
<
Fältet Namn="ShowInColumnTemplateCreate">SANNA</Fältet>
<
Fältet Namn="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Kultur = neutral, PublicKeyToken = b0b19e85410990c4</Fältet>
<
RenderPattern Namn="DisplayPattern">
<
Switch>
<
Expr>
<
Kolumn />
</
Expr>

<Fallet Värde=""/>

<Standard>
<
HTML>
<![CDATA[
<span style = "color:Röd"><b>]]>
</
HTML>

<
Kolumn SubColumnNumber="0" HTMLEncode="SANNA"/>

<HTML><![CDATA[</b></Spänn>]]></HTML>

</
Standard>
</
Switch>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
XML-filen lägger till en anpassad datatyp till WSS "bibliotek" och matchar det upp mot GAC hade församlingen.

Efter att ha flyttat alla dessa bitar på plats, iisreset på servern och det bör alla börja arbeta fint.

WSS: Teknik för att skapa CAML fältdefinitioner.

Ytterligare en kategori: CAML

Här är en stor utstationering av en Karl som heter "craig" på en teknik för att hitta CAML definitioner för fältet innehållstyper som bygger på verkligt levande definitioner från en webbplats.

Hans inlägg säger allt. I korthet:

  1. Skapa en innehållstyp.
  2. Associera den med en lista.
  3. Öppna listan med SharePoint Designer.
  4. Exportera till ett "Personligt webbpaket".
  5. Byta namn på till en CAB.
  6. Utdrag manifestet.
  7. Hitta din innehållstyp och tillhörande CAML.

WSS: Sammanfattande åtgärder för att möjliggöra användbara funktioner/element/etc. IntelliSense i VS 2005

Ytterligare kategorier: Visual Studio 2005

Aktivera användbara intellisense för funktioner, element, etc i visual studio 2005:

  1. Åt en WSS-server.
  2. Navigera till "c:\programmet delade filerMicrosoft sharedweb server extensions12TEMPLATEXML"
  3. Öppna en annan Utforskaren pekar på: "C:\Programmet Microsoft Visual Studio 8XmlSchemas"
  4. Kopiera följande filer från WSS-servern till din VS 2005 scheman katalog:
    1. WSS.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Starta om VS 2005
  6. Lägga till en ny XML-fil i ett projekt.
  7. Klicka i kroppen av XML-filen.
  8. I egenskapsfönstret, Klicka på "scheman" och plocka "wss.xsd" av val. (Det är inte nödvändigt att välja andra xsd eftersom referenser till från wss.xsd).

IntelliSense är nu aktiverat för XML-dokumentet.

Se Här Mer information om detta ämne och instruktioner om hur du automatiskt associera WSS intellisense med alla XML-filer.

WSS-examen 70-541, Microsoft Windows SharePoint Services 3.0 – Programutveckling

Jag tog och klarade ovan nämnda testet i morse. Jag hittade det testet för att bli svårt och rättvis.

Det finns en relativ brist på information om denna examen på webben. Jag vet inte varför.

Jag inte kommer att naturligtvis få in på några detaljer om testet jag tog, men jag tror jag kan lugnt säga följande:

  1. Lita på denna länk: http://www.microsoft.com/learning/exams/70-541.mspx.

    Det visar vad du behöver veta för att klara tentan och det är, IMO, mycket exakt.

  2. Länken rekommenderar också Inside Microsoft Windows SharePoint Services 3.0 av Ted Pattison & Daniel Larson. Denna bok täcker nästan alla ämnen som testet tar. Jag fann det vara bra i och för sig bortom enkla exam prep. Det ger bra exempel och fick mig verkligen att tänka om några nya och intressanta saker att prova. Om du vill hoppa över några bitar i boken, bara korsreferens bokens innehållsförteckning med objekten i länken från ovan.
  3. Inget slår faktiska praktisk erfarenhet. Om du har tid och intresse, Följ med exemplen i boken och sedan experimentera med dem.. Du ska ha en enklare tid på tentamen samt verkligen lära sig WSS applikationsprogrammering.

</slutet>Prenumerera på min blogg!

MOSS / InfoPath Forms Server (InfoPath 2007) listrutan prestanda

Ytterligare en kategori: InfoPath

Sammanfattning: En InfoPath 2007 formuläret distribueras till en MOSS server ger en drop-down lista över leverantörer knuten till en anpassad lista som MOSS. På att välja en leverantör, regler tilldela värden till en handfull textfält som säljare namn, Adress, staden, staten, zip och telefon. Prestanda är hemsk. Vi märker att prestanda blir värre (icke-linjärt) för varje ytterligare fält uppdatera vi detta sätt. Dvs., om vi bara uppdatera namnet säljare, Det tar [x] tid. Om vi uppdaterar säljare, Adress1, Adress2, staden, staten, zip, Det tar 10 gånger längre.

Lösning: Skriva en webbtjänst (exempelkod kan hittas Här) som skickas i en leverantör och det återgår tillbaka till leverantörsinformation. Sedan, tilldela fält detta sätt. Även om detta verkar alltför långsam, Det fanns inga märkbara skillnader i prestanda när vi tilldelats 1 fältet kontra 8 fält. Som en extra bonus, användare få en cool "att kontakta servern" Cylon effekt medan de väntar på formuläret att åberopa och konsumera tjänsten resultat.

MOSS: Undantag uppstod. (Undantag från HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

UPPDATERING: Vi fastställt aldrig orsaken till problemet och det aldrig ytan igen.

Vi märker under genomförandet av en utveckling som plötsligt, två användare kan inte komma åt en webbplatssamling. Dessa konton kan autentisera till huvudsidan, men när jag försöker komma åt en viss webbplatssamling, de får bara en blank skärm. Inga fel visas, bara en vit tom sida.

Vi logga in som en webbplats samling admin och försöker lägga till en av de användarna som en webbplats admin och den här gången, på att trycka på "OK", Vi får detta meddelande:

Undantag uppstod. (Undantag från HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Vi tillbringade en tid forska detta och tyvärr, kom inte upp med något användbart. Det fanns vissa meddelanden i diagnostiklogg, men det var svårt att exakt korrelera dem med denna fråga.

I slutet, Vi tar bort webbplatssamlingen och återskapas det och som löste det.

Om jag lista ut vad som orsakade detta i framtiden, Jag kommer uppdatera detta inlägg.