arquivos mensuais: Agosto 2007

Moss busca avanzada personalización — Se non importa en investigación avanzada XSLT

Non modificar procura avanzada XSLT, moitas veces, entón parece que estou escalando pequenos outeiros cada vez.

O meu máis novo lección é esta: Se importa ao facer referencia a unha columna. Na miña busca avanzada, I columnas definido como esta:

<raíz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<
Columnas>
<
Columna Nome="GafTrainingInvoiceNumber" />
<
Columna Nome="GafTrainingInvoiceLocation" />
<
Columna Nome="WorkId"/>
<
Columna Nome="Posición"/>
<
Columna Nome="Título"/>
<
Columna Nome="Autor"/>
<
Columna Nome="Tamaño"/>
<
Columna Nome="Camiño"/>
<
Columna Nome="Descrición"/>
<
Columna Nome="Escribir"/>
<
Columna Nome="Nome_do_Site"/>
<
Columna Nome="CollapsingStatus"/>
<
Columna Nome="HitHighlightedSummary"/>
<
Columna Nome="HitHighlightedProperties"/>
<
Columna Nome="Contentclass"/>
<
Columna Nome="IsDocument"/>
<
Columna Nome="PictureThumbnailURL"/>
</
Columnas>
</
raíz>

O XLST que exhibe o número da nota fiscal e localización factura fora:

<p>
Training Invoice Number: <XSL:valor de seleccionar="GafTrainingInvoiceNumber"/>
<
br></br>
Training Invoice Location: <XSL:valor de seleccionar="GafTrainingInvoiceLocation"/>
</
p>

Con todo, o select ten que referenciar a propiedade en todas as letras minúsculas, como no:

<p>
Training Invoice Number: <XSL:valor de seleccionar="gaftraininginvoicenumber"/>
<
br></br>
Training Invoice Location: <XSL:valor de seleccionar="gaftraininginvoicelocation"/>
</
p>


Until I corrected that, search results showed the labels (i.e. "Training Invoice Number") but no data.

Moss: Exemplo Funcional - tipo de datos personalizado

Escenario empresarial:

En toda a empresa a implantación de Moss para empresa de construción con 30+ sitios e unha ducia de departamentos corporativos.

Negocios Obxectivo:

A pesar de un gran número de grupos empresariais (departamentos, locais, etc), certos datos debe ser mantida a un nivel mundial. Por exemplo, unha lista mestra autorizada de todos os lugares físicos da empresa (e.g. instalacións de produción, localizacións de almacén, oficinas de vendas) a manter nun lugar central.

Problema Técnico:

A taxonomía empresa implementado empregando varios conxuntos de sitios. Teriamos gusto de crear a lista oficial de lugares físicos nunha lista personalizada WSS. Entón, cando necesitamos ter unha columna nun tipo de contidos (ou unha columna engadida a unha lista ou biblioteca doc) que as empresas locais contidos, we would create a column using the "lookup" tipo de datos e apuntar a esta lista mestra.

Desafortunadamente, lookup datatypes must access a source list "locally" o que significa que a nosa lista oficial non pode abranguer conxuntos de sitios.

Solución Técnica:

Aplicar un novo tipo de datos personalizado aplicado na base SPField e representado como un DropDownList no UI cuxo ListItems cubrir a partir da lista WSS mestre.

Creamos unha nova colección sitio chamado "http://localhost/EnterpriseData". Alí, we created a custom list named "Corporate Locations". This list just uses the standard "Title" campo para conter a lista de lugares corporativos reais.

Un segue varias etapas distintas para crear un tipo de datos personalizado na WSS. Son:

  1. Definir unha clase que herda de SPField (alguén pode herdar doutros campos, se é necesario).

Aquí está o código para que:

público clase XYZZYCorporateLocationField : SPFieldText
{
público XYZZYCorporateLocationField
(SPFieldCollection campos, corda typeName, corda displayName)
: base(campos, typeName, displayName) { }

público XYZZYCorporateLocationField
(SPFieldCollection campos, corda displayName)
: base(campos, displayName) { }

público substituír BaseFieldControl FieldRenderingControl
{
obter
{
BaseFieldControl control = novo XYZZYCorporateLocationFieldControl();
control.FieldName = este.InternalName;
volver control;
} //obter
} // fieldrenderingcontrol

público substituír corda GetValidatedString(obxecto valor)
{
se (este.Required || value.ToString().Igual(Corda.Baleiro))
{
xogar novo SPFieldValidationException ("Department is not assigned.");
}
volver base.GetValidatedString(valor);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Establecer outra clase que herda o control de campo de base, como no:

público clase XYZZYCorporateLocationFieldControl : BaseFieldControl
{
protexido DropDownList XYZZYCorporateLocationSelector;

protexido substituír corda DefaultTemplateName
{
obter
{
volver "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

público substituír obxecto Valor
{
obter
{
EnsureChildControls();
volver este.XYZZYCorporateLocationSelector.SelectedValue;
} // obter
conxunto
{
EnsureChildControls();
este.XYZZYCorporateLocationSelector.SelectedValue = (corda)este.ItemFieldValue;
} // conxunto
} // override object Value

protexido substituír invalidar CreateChildControls()
{

se (este.Field == nulo || este.ControlMode == SPControlMode.Ver)
volver;

base.CreateChildControls();

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

se (este.XYZZYCorporateLocationSelector == nulo)
xogar novo Excepción("ERROR: Cannot load .ASCX file!");

se (!este.Page.IsPostBack)
{

utilización (SPSite site = novo SPSite("Http://localhost / enterprisedata"))
{
utilización (SPWeb web = site.OpenWeb())
{

SPList currentList = web.Lists["Corporate Locations"];

foreach (SPItem XYZZYCorporateLocation en currentList.Items)
{
se (XYZZYCorporateLocation["Title"] == nulo) continuar;

corda thetitle;
theTitle = XYZZYCorporateLocation["Title"].ToString();

este.XYZZYCorporateLocationSelector.Items.Add
(novo Listitem(thetitle, thetitle));

} // foreach

} // using spweb web = site.openweb()
} // using spsite site = new spsite("Http://localhost/enterprisedata")

} // if not a postback

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

O código anterior, basicamente aplica a lóxica para cubrir o DropDownList cos valores da lista personalizada WSS situado na http://localhost/enterprisedata and named "Corporate Departments".

Eu define ambas clases nun arquivo de cs único., compilado-lo e colocar-lo no GAC (forte necesaria, claro).

  1. Implementar un modelo de control (.ascx) como se mostra:

<%@ Control Linguaxe="C#" Herda="Microsoft.SharePoint.Portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.Portal,Version = 12.0.0.0, Culture = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode="Always" %>
<%
@ Rexistrarse Tagprefix="wssawc" Namespace="Microsoft.SharePoint.WebControls" Montaxe="Microsoft.SharePoint, Version = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Rexistrarse Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Montaxe="Microsoft.SharePoint, Version = 12.0.0.0, Culture = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID="XYZZYCorporateLocationFieldControl" runat="server">
<Modelo>
<áspide:DropDownList ID="XYZZYCorporateLocationSelector" runat="server" />
</Modelo>
</
SharePoint:RenderingTemplate>

A descrición anterior é gardado en c:\Arquivos de programas Arquivos comúns Microsoft Shared Web Server Extensions 12 CONTROLTEMPLATES.

  1. Finalmente, creamos un arquivo XML para gardar no ..... 12 directorio XML. Este é CAML que define o noso tipo de datos personalizado e para o meu exemplo, Parece que este:

<?xml versión="1.0" codificación="utf-8" ?>
<
FieldTypes>
<
FieldType>
<
Campo Nome="TypeName">CorporateLocations</Campo>
<
Campo Nome="ParentType">Texto</Campo>
<
Campo Nome="TypeDisplayName">Corporate Locations</Campo>
<
Campo Nome="TypeShortDescription">All XYZZY Corporate locations including manufacturing or other facilities.</Campo>
<
Campo Nome="UserCreatable">TRUE</Campo>
<
Campo Nome="ShowInListCreate">TRUE</Campo>
<
Campo Nome="ShowInDocumentLibraryCreate">TRUE</Campo>
<
Campo Nome="ShowInSurveyCreate">TRUE</Campo>
<
Campo Nome="ShowInColumnTemplateCreate">TRUE</Campo>
<
Campo Nome="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Version = 1.0.0.0, Culture = neutral, PublicKeyToken=b0b19e85410990c4</Campo>
<
RenderPattern Nome="DisplayPattern">
<
Cambiar>
<
Expr>
<
Columna />
</
Expr>

<No caso de Valor=""/>

<Omisión>
<
HTML>
<![CDATA[
<span style="color:Red"><b>]]>
</
HTML>

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

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

</
Omisión>
</
Cambiar>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
This XML file adds the custom data type to the WSS "library" e compara-se contra o conxunto GAC'd.

Despois de se cambiar todos eses bits no seu lugar, iisreset no servidor e todo debe comezar a traballar moi ben.

WSS: Técnica para crear definicións de campo CAML.

Categoría adicional: CAML

Aquí is a great posting by a fellow named "craig" nunha técnica para atopar definicións CAML para tipos de contido de campo baseado fóra definicións reais en directo de un sitio web.

A súa mensaxe xa di todo. Pronto:

  1. Crear un tipo de contido.
  2. Asocia-lo a unha lista.
  3. Abre a lista co SharePoint Deseño.
  4. Export to a "personal web package".
  5. Cambiar o nome a un. Cab.
  6. Extraia o manifesto.
  7. Atopar o tipo de contido e asociados CAML.

WSS: Resumo pasos para activar funcións útiles / Elementos / etc. Intellisense no VS 2005

Categorías adicionais: Visual Studio 2005

Para activar o intellisense útil para funcións, elementos, etc no visual studio 2005:

  1. Acceder un servidor WSS.
  2. Navigate to "c:\arquivos de programas ficheiros comúns Microsoft Shared web server extensions 12 Template XML"
  3. Abre outra Windows Explorer apuntando para: "C:\Arquivos de Programas Microsoft Visual Studio 8 XML esquemas"
  4. Copia os seguintes ficheiros do servidor WSS para a súa VS 2005 directorio esquemas:
    1. Wss.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Restart VS 2005
  6. Engadir un novo arquivo XML para un proxecto.
  7. Preme o corpo do ficheiro XML.
  8. No panel de propiedades, click on "Schemas" and pick "wss.xsd" a partir das opcións. (Non é necesario seleccionar outro XSD dunha vez que son referenciados desde wss.xsd).

Intellisense está activado para este documento XML.

Ver aquí para máis información sobre este asunto e para obter instrucións sobre como asociar automaticamente intellisense WSS con calquera arquivo XML.

Exame WSS 70-541, Microsoft Windows SharePoint Services 3.0 – Desenvolvemento de Aplicacións

Eu tomei e pasou a proba mencionado esta mañá. Penso o exame ser difícil e xusto.

Hai unha relativa escaseza de información sobre este exame na web. Non sei por que.

Eu, obviamente, non vai entrar en ningún detalle sobre o exame tomei, pero eu creo que podo seguramente dicir o seguinte:

  1. Confío nesta ligazón: http://www.microsoft.com/learning/exams/70-541.mspx.

    El lista o que precisa saber para pasar o exame e é, IMO, moi precisos.

  2. A ligazón tamén recomenda Dentro do Microsoft Windows SharePoint Services 3.0 Ted Pattison & Daniel Larson. Este libro cobre case todos os temas que a proba de enderezos. Eu pensei que fose grande en si máis alá da simple preparación para os exames. Ofrece grandes exemplos e realmente me fixo pensar sobre algunhas cousas novas e interesantes para tratar. Se quere saltar algúns anacos do libro, só cruzar do libro TOC cos elementos no enlace anterior.
  3. Nada supera o real hands-on experiencia. Se ten tempo e interese, seguir, xunto cos exemplos do libro e despois experimentar con eles. Terá un tempo máis doado no exame, así como realmente aprender programación de aplicación WSS.

</final>Rexístrate para o meu blog!

Moss / InfoPath Forms Server (InfoPath 2007) desempeño lista desplegable

Categoría adicional: InfoPath

Resumo: Un InfoPath 2007 formar implantado nun servidor Moss ofrece unha lista desplegable de provedores vinculados a unha lista MOSS personalizado. Ao seleccionar un provedor, normas de asignar valores de campo a un puñado de campos de texto, como vendas nome rep, enderezo, cidade, Estado, zip e teléfono. O desempeño é horrible. Notamos que o rendemento empeora (in a non-linear fashion) para cada campo adicional que actualizar esta forma. É dicir,, se só actualizar o nome do representante de vendas, leva [x] cantidade de tempo. Se atualizarmos representante de vendas, address1, address2, cidade, Estado, zip, leva 10 veces maior.

Solución: Escribir un servizo web (código de exemplo pódese atopar aquí) que se transmite en nome dun provedor e regresa de novo a información do provedor. Entón, asignar os campos deste xeito. Aínda que iso tamén parece lento, Non houbo diferenza perceptible no desempeño cando atribuímos 1 campo contra 8 campos. Como un extra adicional, users get a cool "contacting the server" Cylon efecto, mentres se espera para a forma de invocar e consumir os resultados de servizos.

Moss: Excepción. (Excepción de HRESULT: 0x80020009 (DISP_E_EXCEPTION))

Actualización: Nunca determinou a causa raíz do problema e nunca vir á tona de novo.

Notamos durante a implementación dun sitio web de desenvolvemento que, de súpeto, dous usuarios son capaces de acceder a un conxunto de sitios. Estas contas poden acceder ao sitio principal, pero ao tentar acceder a unha colección sitio web específico, they just get a blank screen. No errors displayed, just a white blank page.

We log in as a site collection admin and try to add one of those users as a site admin and this time, upon pressing "OK", we get this message:

Excepción. (Excepción de HRESULT: 0x80020009 (DISP_E_EXCEPTION))

We spent some time researching this and unfortunately, didn’t come up with anything useful. There were some messages in the diagnostic log, but it was hard to exactly correlate them with this issue.

A finais, we deleting the site collection and re-created it and that solved it.

If I figure out what caused this in future, Vou actualizar este post.