Arxius per mes: Agost 2007

Avançada recerca personalització molsa — Cas importa a la cerca avançada XSLT

No modifica la cerca avançada XSLT molt sovint, Així, sembla que estic escalada petits turons cada vegada.

La meva lliçó més nou és això: Cas importa quan fa referència a una columna. En la meva recerca avançada, Tinc columnes definits com això:

<arrel xmlns:XSi="http://www.w3.org/2001/XMLSchema">
<
Columnes>
<
Columna Nom="GafTrainingInvoiceNumber" />
<
Columna Nom="GafTrainingInvoiceLocation" />
<
Columna Nom="WorkId"/>
<
Columna Nom="Rang"/>
<
Columna Nom="Títol"/>
<
Columna Nom="Autor"/>
<
Columna Nom="Mida"/>
<
Columna Nom="Camí"/>
<
Columna Nom="Descripció"/>
<
Columna Nom="Escriure"/>
<
Columna Nom="SiteName"/>
<
Columna Nom="CollapsingStatus"/>
<
Columna Nom="HitHighlightedSummary"/>
<
Columna Nom="HitHighlightedProperties"/>
<
Columna Nom="ContentClass"/>
<
Columna Nom="IsDocument"/>
<
Columna Nom="PictureThumbnailURL"/>
</
Columnes>
</
arrel>

eL XSLT que Mostra la ubicació del nombre i la factura factura havia estat:

<p>
Número de factura de formació: <XSL:valor de Selecciona="GafTrainingInvoiceNumber"/>
<
BR></BR>
Localització de factura de formació: <XSL:valor de Selecciona="GafTrainingInvoiceLocation"/>
</
p>

No obstant això, la selecció ha fer referència a la propietat en minúscules, com a:

<p>
Número de factura de formació: <XSL:valor de Selecciona="gaftraininginvoicenumber"/>
<
BR></BR>
Localització de factura de formació: <XSL:valor de Selecciona="gaftraininginvoicelocation"/>
</
p>


Fins que he corregit que, resultats de la cerca mostrar les etiquetes (i. e. "Número de factura de formació") però no hi ha dades.

MOSS: Exemple funcional-dades personalitzades tipus

Escenari de negocis:

Implantació àmplia d'empresa de molsa per empresa de fabricació amb 30+ uns quants dotzena corporatives departaments i llocs.

Objectiu de negoci:

Malgrat la multitud de grups empresarials (departaments, localitzacions, etc), ha de mantenir certes dades a nivell global. Per exemple, una llista mestra autoritzat de totes les ubicacions físiques de l'empresa (e. g. instal·lacions de fabricació, localitzacions de magatzem, oficines de vendes) ha de mantenir en un emplaçament cèntric.

Problema tècnic:

La taxonomia d'empresa va ser implementat utilitzant múltiples col·leccions de llocs. Ens hagués agradat crear una llista personalitzada WSS llista d'ubicacions físiques. Llavors, Quan el necessitàvem tenir una columna en un tipus de contingut (o una columna s'afegeix a una llista o document de la biblioteca) que contenia llocs corporatius, hem de crear una columna mitjançant la cerca"" tipus de dades i punt d'aquesta llista mestra.

Per desgràcia, es cerca d'accedir a una llista de font "localment" és a dir que la nostra llista autoritzat no pot abastar col·leccions de llocs.

Solució tècnica:

Implementar un nou tipus de dades personalitzades implementat sobre la base d'SPField i representat com un DropDownList en l'UI poblar la ListItems de la llista mestra WSS.

Hem creat una nova col·lecció anomenada "http://localhost/EnterpriseData". Hi ha, hem creat una llista personalitzada anomenat "Localitzacions corporativa". Aquesta llista només utilitza el "títol estàndard" camp conté la llista d'ubicacions reals corporatius.

Seguint uns quants passos discrets per crear un tipus de dades personalitzades en WSS. Són:

  1. Definir una classe que hereti des d'SPField (un pot heretar d'altres camps, si és necessari).

Aquí està el codi per a que:

públic classe XYZZYCorporateLocationField : SPFieldText
{
públic XYZZYCorporateLocationField
(SPFieldCollection camps, corda typeName, corda displayName)
: base(camps, typeName, displayName) { }

públic XYZZYCorporateLocationField
(SPFieldCollection camps, corda displayName)
: base(camps, displayName) { }

públic invalidació BaseFieldControl FieldRenderingControl
{
aconseguir
{
BaseFieldControl control = nou XYZZYCorporateLocationFieldControl();
control. FieldName = això.InternalName;
retorn control;
} //aconseguir
} // fieldrenderingcontrol

públic invalidació corda GetValidatedString(objecte valor)
{
Si (això.Requerit || valor. ToString().És igual a(Corda.Buit))
{
tir nou SPFieldValidationException ("Departament no està assignat.");
}
retorn base.GetValidatedString(valor);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Definir una altra classe que hereta el control de camp base, com a:

públic classe XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protegit DropDownList XYZZYCorporateLocationSelector;

protegit invalidació corda DefaultTemplateName
{
aconseguir
{
retorn "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

públic invalidació objecte Valor
{
aconseguir
{
EnsureChildControls();
retorn això.XYZZYCorporateLocationSelector.SelectedValue;
} // aconseguir
conjunt
{
EnsureChildControls();
això.XYZZYCorporateLocationSelector.SelectedValue = (corda)això.ItemFieldValue;
} // conjunt
} // substituir el valor d'objecte

protegit invalidació buit CreateChildControls()
{

Si (això.Camp = = nul·la || això.ControlMode = = SPControlMode.Exhibició)
retorn;

base.CreateChildControls();

això.XYZZYCorporateLocationSelector =
(DropDownList)FindControl TemplateContainer.("XYZZYCorporateLocationSelector");

Si (això.XYZZYCorporateLocationSelector = = nul·la)
tir nou Excepció("ERROR: No es pot carregar. Fitxer ASCX!");

Si (!això.Pàgina de IsPostBack.)
{

utilitzant (SPSite lloc = nou SPSite("http://localhost/enterprisedata"))
{
utilitzant (SPWeb web = lloc. OpenWeb())
{

SPList currentList = la web. Llistes["Llocs corporatius"];

foreach (SPItem XYZZYCorporateLocation en currentList.Items)
{
Si (XYZZYCorporateLocation[Títol""] == nul·la) «««;

corda theTitle;
theTitle = XYZZYCorporateLocation[Títol""].ToString();

això.XYZZYCorporateLocationSelector.Items.Add
(nou Element de llista(theTitle, theTitle));

} // foreach

} // utilitzant spweb web = site.openweb()
} // utilitzant spsite lloc = spsite nou("http://localhost/enterprisedata")

} // Si no una devolució

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

El codi citat bàsicament implementa la lògica per emplenar el DropDownList amb els valors de la llista de costum WSS situat al http://localhost/enterprisedata i anomenat "departaments corporativa".

Defineix ambdues classes en un arxiu sol CS, compilat i posar-lo a la GAC (fort requerit, clar).

  1. Aplicar una plantilla de control (.ascx) com es Mostra:

<%@ Control Llengua= "C#" Hereta="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Versió = 12.0.0.0, cultura = neutre,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Sempre" %>
<%
@ Registrar-se TagPrefix= «wssawc" Espai de noms="Microsoft.SharePoint.WebControls" L'Assemblea="Microsoft.SharePoint, Versió = 12.0.0.0, Cultura = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registrar-se TagPrefix= "Del SharePoint" Espai de noms="Microsoft.SharePoint.WebControls" L'Assemblea="Microsoft.SharePoint, Versió = 12.0.0.0, Cultura = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:Plantilla de representació ID= «XYZZYCorporateLocationFieldControl" runat= "servidor">
<Plantilla>
<escurçó:DropDownList ID= «XYZZYCorporateLocationSelector" runat= "servidor" />
</Plantilla>
</
SharePoint:Plantilla de representació>

L'anterior està guardada en c:\programa filescommon comunesMicrosoft sharedweb server extensions12controltemplates.

  1. Finalment, Creem un fitxer XML a salvar a la... 12XML directori. Això és CAML que defineix el nostre tipus de dades personalitzades i pel meu exemple, aquest aspecte:

<?XML versió="1.0" codificació="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Camp Nom="TypeName">CorporateLocations</Camp>
<
Camp Nom="ParentType">Text</Camp>
<
Camp Nom="TypeDisplayName">Llocs corporatius</Camp>
<
Camp Nom="TypeShortDescription">Totes les localitzacions XYZZY corporativa incloent instal·lacions de fabricació o altres.</Camp>
<
Camp Nom="UserCreatable">VERITABLE</Camp>
<
Camp Nom="ShowInListCreate">VERITABLE</Camp>
<
Camp Nom="ShowInDocumentLibraryCreate">VERITABLE</Camp>
<
Camp Nom="ShowInSurveyCreate">VERITABLE</Camp>
<
Camp Nom="ShowInColumnTemplateCreate">VERITABLE</Camp>
<
Camp Nom="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versió 1.0.0.0 de =, Cultura = neutral, PublicKeyToken = b0b19e85410990c4</Camp>
<
RenderPattern Nom="DisplayPattern">
<
Interruptor>
<
EXPR>
<
Columna />
</
EXPR>

<Cas Valor=""/>

<Per defecte>
<
HTML>
<![CDATA[
<abasten estil = "color:Vermell"><b>]]>
</
HTML>

<
Columna SubColumnNumber="0" HTMLEncode="VERITABLE"/>

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

</
Per defecte>
</
Interruptor>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Aquest fitxer XML afegeix el tipus de dades personalitzades a la "biblioteca WSS" i fa correspondre'l en contra de la GAC havia Assemblea.

Després entrant tots aquests bits en lloc, iisreset en el servidor i ho hauria all stars treballant de manera bonica.

WSS: Tècnica per a la creació de definicions de camp CAML.

Categoria addicional: CAML

Aquí és un anunci gran per un home anomenat "craig" en una tècnica per trobar les definicions de tipus de contingut de camp real, en directe definicions d'un lloc basats CAML.

L'anunci diu que tots els. En breu:

  1. Crear un tipus de contingut.
  2. Associar-lo amb una llista.
  3. Obre la llista amb el SharePoint Designer.
  4. Exportar a un "paquet personal web".
  5. Reanomenar un. cab.
  6. Extreure el manifest.
  7. Trobar el seu tipus de contingut i CAML associat.

WSS: Resum passos per permetre d'útil característiques/Elements/etc. IntelliSense en VS 2005

Categories addicionals: Estudi Visual 2005

Permetre intellisense útil per trets, elements de, etc. en estudi visual 2005:

  1. Accedir a un servidor WSS.
  2. Navegui a "c:\programa filescommon comunesMicrosoft sharedweb server extensions12TEMPLATEXML"
  3. Obrir un altre Explorador de windows que apunten a: "C:\Programa FilesMicrosoft 8XmlSchemas Visual Studio"
  4. Copieu els fitxers següents des del servidor WSS seu VS 2005 directori d'esquemes:
    1. Wss.XSD
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Reprengui VS 2005
  6. Afegeix un nou fitxer XML a un projecte.
  7. Feu clic en el cos del fitxer XML.
  8. En el vidre de propietats, feu clic a "esquemes" i triar "wss.xsd" partir de les eleccions. (No és necessari seleccionar altre xsd ja són referenciats de wss.xsd).

IntelliSense és ara permès d'aquell document XML.

Veure aquí per a més informació sobre aquest tema i per obtenir instruccions sobre com associar automàticament WSS intellisense amb qualsevol arxiu XML.

Examen WSS 70-541, Serveis de SharePoint de Microsoft Windows 3.0 – Desenvolupament d'aplicacions

Vaig prendre i superat la prova esmentada aquest matí. He trobat l'examen serà difícil i Fira.

Hi ha una relativa escassetat d'informació sobre aquest examen en la web. No sóc segur per què.

Òbviament, no entraré en detall sobre l'examen que vaig prendre, però crec que amb seguretat pot dir el següent:

  1. Confiar en aquest enllaç: http://www.microsoft.com/learning/exams/70-541.mspx.

    Ho llistes el que vostè necessita saber per passar l'examen i la seva, L'OMI, molt precisa.

  2. L'enllaç també recomana Serveis de SharePoint de Microsoft Windows dins 3.0 per Ted Pattison & Daniel Larson. Aquest llibre cobreix gairebé tots els temes que aborda la prova. Em va semblar ser grans en i de si mateix més enllà de prep d'examen simple. Proporciona grans exemples i realment em va fer pensar algunes coses noves i interessants a tractar. Si voleu ometre alguns fragments del llibre, només remetre TOC del llibre amb les peces de l'enllaç de dalt.
  3. Res millor que l'experiència pràctica real. Si teniu temps i interès, seguir amb exemples del llibre i llavors experimentar amb ells. Vostè a tenir un temps més fàcil a l'examen, així com aprendre realment la programació d'aplicacions WSS.

</final>Subscriure's al meu blog!

MOSS / Servidor de formes d'InfoPath (L'InfoPath 2007) actuació de llista desplegable

Categoria addicional: L'InfoPath

Resum: Un InfoPath 2007 forma desplegada a un servidor de molsa proporciona una llista desplegable de venedors lligat a una llista personalitzada de molsa. En seleccionar un proveïdor, regles assignar valors de camp a un grapat de camps de text com ara el nom de representant de vendes, Adreça, ciutat, estat, postal i telèfon. Rendiment és horrible. Ens adonem que rendiment empitjora (d'una manera no lineal) per a cada àmbit addicional podem actualitzar aquesta manera. És a dir, Si ens acaba d'actualitzar el nom representant de vendes, triga [x] quantitat de temps. Si actualitzem representant de vendes, address1, address2, ciutat, estat, cremallera, triga 10 vegades més.

Solució: Escriure un servei web (es poden trobar exemples de codi aquí) que es transmet en nom d'un proveïdor i torna altra vegada les dades de venedor. Llavors, assignar els camps d'aquesta manera. Encara que això sembla massa lent, hi va haver cap diferència posades en el rendiment quan podem assignada 1 camp enfront 8 camps. Com una gratificació afegida, els usuaris aconseguir un fresc "contactant amb el servidor" Cylon efecte mentre esperen per al formulari invocar i consumir els resultats del servei.

MOSS: S'ha produït una excepció. (Excepció de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

ACTUALITZACIÓ: Ens mai determinaren que la causa d'arrel d'aquest problema i mai superfície una altra vegada.

Notem que de sobte durant la implementació d'un lloc de desenvolupament, dos usuaris són incapaços d'accedir a una col·lecció de llocs. Els comptes poden autenticar al lloc principal, però quan es tracta d'accedir a una col·lecció particular, només aconsegueixen una pantalla en blanc. No hi ha errors que es Mostra, només una pàgina blanca en blanc.

Podem entrar com un col. lecció de lloc admin i proveu d'afegir un d'aquells usuaris com un administrador del lloc i aquesta vegada, en prémer "OK", arribem a aquest missatge:

S'ha produït una excepció. (Excepció de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Vam passar algun temps a investigar això i per desgràcia, no va arribar a res útil. Hi havia alguns missatges en el registre de diagnòstic, però era difícil exactament relacionar-los amb aquest assumpte.

Al final, hem de suprimir la col·lecció de llocs i tornar-lo i que resolt.

Si puc esbrinar què provocava això en el futur, Vaig a actualitzar aquest post.