archivos mensuales: Agosto 2007

MOSS personalización búsqueda avanzada — Caso importa en búsqueda avanzada XSLT

Muy a menudo no modifico la búsqueda avanzada de XSLT, Entonces parece que estoy subiendo las colinas pequeñas cada vez.

Esta es mi nueva lección: Caso importante cuando hace referencia a una columna. En mi búsqueda avanzada, Tengo columnas definidas como esta:

<raíz xmlns:XSi="http://www.w3.org/2001/XMLSchema-instance">
<
Columnas>
<
Columna Nombre="GafTrainingInvoiceNumber" />
<
Columna Nombre="GafTrainingInvoiceLocation" />
<
Columna Nombre="WorkId"/>
<
Columna Nombre="Rango"/>
<
Columna Nombre="Título"/>
<
Columna Nombre="Autor"/>
<
Columna Nombre="Tamaño"/>
<
Columna Nombre="Ruta de acceso"/>
<
Columna Nombre="Descripción"/>
<
Columna Nombre="Escribir"/>
<
Columna Nombre="SiteName"/>
<
Columna Nombre="CollapsingStatus"/>
<
Columna Nombre="HitHighlightedSummary"/>
<
Columna Nombre="HitHighlightedProperties"/>
<
Columna Nombre="ContentClass"/>
<
Columna Nombre="IsDocument"/>
<
Columna Nombre="PictureThumbnailURL"/>
</
Columnas>
</
raíz>

Había sido el XLST que muestra la ubicación de número y factura factura:

<p>
Número de la factura de formación: <XSL:valor de Seleccione="GafTrainingInvoiceNumber"/>
<
BR></BR>
Formación factura ubicación: <XSL:valor de Seleccione="GafTrainingInvoiceLocation"/>
</
p>

Sin embargo, el select tiene que hacer referencia a la propiedad en todas minúsculas, como en:

<p>
Número de la factura de formación: <XSL:valor de Seleccione="gaftraininginvoicenumber"/>
<
BR></BR>
Formación factura ubicación: <XSL:valor de Seleccione="gaftraininginvoicelocation"/>
</
p>


Hasta que corrija, resultados de la búsqueda demostrados las etiquetas (i.e. "Número de la factura de formación") pero no hay datos.

MOSS: Ejemplo funcional: tipo de datos personalizados

Escenario de negocio:

Implementación de toda la empresa de musgo para empresa industrial con 30+ sitios y unos docenas de departamentos.

Objetivo de negocio:

A pesar de una multitud de grupos empresariales (departamentos, ubicaciones, etc.), ciertos datos deben mantenerse a un nivel global. Por ejemplo, una lista autorizada de todas las ubicaciones físicas de la empresa (por ejemplo:. instalaciones de fabricación, ubicaciones de almacén, oficinas de ventas) debe mantenerse en una ubicación central.

Problema técnico:

La taxonomía de empresa se implementó utilizando múltiples colecciones de sitios. Nos hubiera gustado crear la lista autorizada de ubicaciones físicas en una lista personalizada de WSS. A continuación, cuando necesitamos tener una columna en un tipo de contenido (o agrega una columna a una biblioteca lista o doc) que contenía sedes corporativas, crearíamos una columna usando la "búsqueda" tipo de datos y punto a esta lista maestra.

Por desgracia, tipos de datos de búsqueda deben acceder a una lista de fuentes "localmente" lo que significa que la lista autorizada no puede abarcar colecciones de sitios.

Solución técnica:

Implementar un nuevo tipo de datos personalizado aplicado basado en SPField y representado como un DropDownList en la interfaz de usuario cuyas ListItems poblar de la lista principal de WSS.

Hemos creado una nueva colección de sitios llamada "http://localhost/EnterpriseData". Allí, Hemos creado una lista personalizada denominada "Sedes corporativas". Esta lista sólo utiliza el estándar "título" campo que contiene la lista de sedes corporativas reales.

Uno sigue varios pasos específicos para crear un tipo de datos personalizado en WSS. Son:

  1. Definir una clase que hereda de SPField (uno puede heredar de otros campos si es necesario).

Aquí está el código para que:

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

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

público reemplazar BaseFieldControl FieldRenderingControl
{
Obtener
{
BaseFieldControl control = Nuevo XYZZYCorporateLocationFieldControl();
control. FieldName = Esto.InternalName;
retorno control;
} //Obtener
} // fieldrenderingcontrol

público reemplazar cadena GetValidatedString(objeto valor)
{
Si (Esto.Obligatorio || valor. ToString().Es igual a(Cadena.Vacío))
{
tiro Nuevo SPFieldValidationException ("El Departamento no está asignado.");
}
retorno base.GetValidatedString(valor);
} // getvalidatedstring

} // XYZZYCorporateLocation

  1. Definir otra clase que se hereda del control de campo base, como en:

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

protegido reemplazar cadena DefaultTemplateName
{
Obtener
{
retorno "XYZZYCorporateLocationFieldControl";
}
} // DefaultTemplateName

público reemplazar objeto Valor
{
Obtener
{
EnsureChildControls();
retorno Esto.XYZZYCorporateLocationSelector. SelectedValue;
} // Obtener
conjunto
{
EnsureChildControls();
Esto.XYZZYCorporateLocationSelector.SelectedValue = (cadena)Esto.ItemFieldValue;
} // conjunto
} // redefinir objeto valor

protegido reemplazar void CreateChildControls()
{

Si (Esto.Campo == NULL || Esto.ControlMode == SPControlMode.Pantalla)
retorno;

base.CreateChildControls();

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

Si (Esto.XYZZYCorporateLocationSelector == NULL)
tiro Nuevo Excepción("ERROR: No se puede cargar. Archivo ASCX!");

Si (!Esto.IsPostBack página.)
{

utilizando (SPSite sitio = Nuevo SPSite("http://localhost/enterprisedata"))
{
utilizando (SPWeb Web = página. OpenWeb())
{

SPList currentList = web. Listas de[«Sedes corporativas"];

foreach (SPItem XYZZYCorporateLocation en currentList.Items)
{
Si (XYZZYCorporateLocation["El título"] == NULL) «««;

cadena Sr.;
theTitle = XYZZYCorporateLocation["El título"].ToString();

Esto.XYZZYCorporateLocationSelector.Items.Add
(Nuevo ListItem(Sr., Sr.));

} // foreach

} // uso de spweb web = site.openweb()
} // uso de spsite site = new spsite("http://localhost/enterprisedata")

} // Si no es una devolución de datos

} // CreateChildControls

} // XYZZYCorporateLocationFieldControl

El código anterior básicamente implementa la lógica para rellenar el DropDownList con los valores de la lista personalizada de WSS ubicado en http://localhost/enterprisedata y llamado "departamentos".

Definí ambas clases en un archivo .cs sola, lo compila y lo puso en la GAC (fuerte necesaria, Claro).

  1. Aplicar una plantilla de control (.ascx) como se muestra:

<%@ Control Idioma= "C#" Hereda="Microsoft.SharePoint.portal.ServerAdmin.CreateSiteCollectionPanel1,Microsoft.SharePoint.portal,Versión = 12.0.0.0, cultura = neutral,PublicKeyToken = 71e9bce111e9429c" compilationMode= "Always" %>
<%
@ Registro TagPrefix= wssawc"" Namespace="Microsoft.SharePoint.WebControls" Asamblea="Microsoft.SharePoint, Versión = 12.0.0.0, Cultura = neutral, PublicKeyToken = 71e9bce111e9429c" %> <%@ Registro TagPrefix= "SharePoint" Namespace="Microsoft.SharePoint.WebControls" Asamblea="Microsoft.SharePoint, Versión = 12.0.0.0, Cultura = neutral, PublicKeyToken = 71e9bce111e9429c" %>
<SharePoint:RenderingTemplate ID.= XYZZYCorporateLocationFieldControl"" runat= "server">
<Plantilla>
<ASP:DropDownList ID.= XYZZYCorporateLocationSelector"" runat= "server" />
</Plantilla>
</
SharePoint:RenderingTemplate>

Lo anterior se guarda en c:\programa archivos de programaArchivos comunesMicrosoft sharedweb server extensions12controltemplates.

  1. Finalmente, creamos un archivo XML para guardar en el... 12XML directorio. Se trata de CAML que define el tipo de datos personalizados y por mi ejemplo, Parece que esto:

<?XML Versión="1.0" codificación="UTF-8" ?>
<
FieldTypes>
<
FieldType>
<
Campo Nombre="TypeName">CorporateLocations</Campo>
<
Campo Nombre="ParentType">Texto</Campo>
<
Campo Nombre="TypeDisplayName">Sedes corporativas</Campo>
<
Campo Nombre="TypeShortDescription">Todas las ubicaciones XYZZY corporativo incluyendo instalaciones de fabricación o de otras.</Campo>
<
Campo Nombre="UserCreatable">VERDADERO</Campo>
<
Campo Nombre="ShowInListCreate">VERDADERO</Campo>
<
Campo Nombre="ShowInDocumentLibraryCreate">VERDADERO</Campo>
<
Campo Nombre="ShowInSurveyCreate">VERDADERO</Campo>
<
Campo Nombre="ShowInColumnTemplateCreate">VERDADERO</Campo>
<
Campo Nombre="FieldTypeClass">Conchango.XYZZYCorporateLocationField, XYZZYCorporateLocationField, Versión = 1.0.0.0, Cultura = neutral, PublicKeyToken = b0b19e85410990c4</Campo>
<
RenderPattern Nombre="DisplayPattern">
<
Interruptor>
<
Expr>
<
Columna />
</
Expr>

<Caso Valor=""/>

<Por defecto>
<
HTML>
<![CDATA[
<span estilo = "color:Rojo"><b>]]>
</
HTML>

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

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

</
Por defecto>
</
Interruptor>

</
RenderPattern>
</
FieldType>
</
FieldTypes>
Este archivo XML agrega el tipo de datos personalizado a la "biblioteca WSS" y coincide con lo contra la GAC tenía Asamblea.

Después de todos estos bits en su lugar, iisreset en el servidor y debe empezar a trabajar muy bien.

WSS: Técnica para crear definiciones de campo CAML.

Categoría adicional: CAML

Aquí es un gran destino por un tipo llamado "craig" en una técnica para encontrar las definiciones de CAML para tipos de contenido de campo basados en definiciones reales en vivo desde un sitio.

Su destino lo dice todo. En breve:

  1. Crear un tipo de contenido.
  2. Asocian con una lista.
  3. Abra la lista de SharePoint Designer.
  4. Exportar a un "paquete web personal".
  5. Cambie el nombre a un .cab.
  6. Extracto del manifiesto.
  7. Encuentre su tipo de contenido y asociado CAML.

WSS: Resumen pasos para habilitar características útil, elementos, etc. IntelliSense en VS 2005

Categorías adicionales: Visual Studio 2005

Habilitar intellisense útil para características, elementos, etc. en visual studio 2005:

  1. Acceso a un servidor WSS.
  2. Desplácese hasta "c:\programa archivos de programaArchivos comunesMicrosoft sharedweb server extensions12TEMPLATEXML"
  3. Abra otro explorador de windows, apuntando a: "C:\Programa de programaMicrosoft Visual Studio 8XmlSchemas"
  4. Copiar los siguientes archivos desde el servidor WSS en tus VS 2005 Directorio de esquemas:
    1. WSS.xsd
    2. CamlQuery.xsd
    3. CamlView.xsd
    4. CoreDefintions.xsd
  5. Reiniciar VS 2005
  6. Agregar un nuevo archivo XML a un proyecto.
  7. Haga clic en el cuerpo del archivo XML.
  8. En el panel Propiedades, Haga clic en "esquemas" y elija "wss.xsd" entre las opciones. (No es necesario seleccionar otro xsd ya que se hace referencia desde wss.xsd).

IntelliSense está habilitado ahora para ese documento XML.

Ver aquí para más información sobre este tema y para obtener instrucciones sobre cómo asociar automáticamente cualquier archivo XML intellisense WSS.

Examen WSS 70-541, Microsoft Windows SharePoint Services 3.0 – Desarrollo de aplicaciones

Tomé y pasó la prueba mencionada esta mañana. Encontré el examen difícil y justo.

Hay una relativa escasez de información sobre este examen en la web. No sé por qué.

Obviamente no conseguirá en cualquier detalle sobre el examen de que tomé, pero creo que puedo afirmar lo siguiente:

  1. Confiar en este enlace: http://www.microsoft.com/learning/exams/70-541.mspx.

    Es una lista de lo que usted necesita saber para pasar el examen y su, OMI, muy preciso.

  2. También recomienda el enlace Inside Microsoft Windows SharePoint Services 3.0 por Ted Pattison & Daniel Larson. Este libro cubre a casi todos los temas que aborda la prueba. Me pareció ser grande de por sí más allá de la preparación del examen simple. Proporciona ejemplos de grandes y realmente me hizo pensar algunas cosas nuevas e interesantes para tratar de. Si desea omitir algunos bits en el libro, sólo referencia cruzada TOC del libro con los elementos en el enlace de arriba.
  3. No hay nada mejor experiencia práctica real. Si usted tiene tiempo e interés, seguir los ejemplos en el libro y luego experimentar con ellos. Usted lo tienen más fácil en el examen, así como realmente aprender programación de aplicaciones de WSS.

</final>Suscribirse a mi blog!

MOSS / Servidor de formularios de InfoPath (InfoPath 2007) rendimiento de la lista desplegable

Categoría adicional: InfoPath

Resumen: Un InfoPath 2007 forma implementado en un servidor MOSS proporciona una lista desplegable de los proveedores vinculados a una lista personalizada de MOSS. Al seleccionar un proveedor, reglas de asignan los valores de campo a un puñado de campos de texto como el nombre del representante de ventas, Dirección, ciudad, estado, postal y teléfono. El rendimiento es horrible. Nos damos cuenta que peor desempeño (de una manera no lineal) para cada campo adicional actualizamos esta manera. Es decir, Si acabamos de actualizar el nombre del representante de ventas, Toma [x] cantidad de tiempo. Si actualizamos representante de ventas, Address1, destinatario2, ciudad, estado, zip, Toma 10 veces más.

Solución: Escribir un servicio web (Código de ejemplo puede encontrarse aquí) Eso es pasado en nombre de un proveedor y vuelta devuelve los detalles del vendedor. A continuación, asignar los campos de esta manera. Aunque esto parece demasiado lento, No había ninguna diferencia discernible en el rendimiento cuando asignamos 1 campo versus 8 campos. Como un bono adicional, los usuarios obtienen un fresco "ponerse en contacto con el servidor" Cylon resultados del efecto mientras esperan el formulario para invocar y consumir el servicio.

MOSS: Se produjo una excepción. (Excepción de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

ACTUALIZACIÓN: Nunca se determinó la causa de este problema y nunca superficie nuevamente.

Notamos que de repente durante la implementación de un sitio de desarrollo, dos usuarios son incapaces de tener acceso a una colección de sitios. Estas cuentas pueden autenticarse en el sitio principal, pero al intentar acceder a una colección particular de sitio, acaba de llegar una pantalla en blanco. No muestra los errores, sólo una página en blanco en blanco.

Nos inicie sesión como un administrador de la colección de sitios e intentar agregar uno de estos usuarios como un administrador de sitio y esta vez, al pulsar "Aceptar", recibimos este mensaje:

Se produjo una excepción. (Excepción de HRESULT: 0x 80020009 (DISP_E_EXCEPTION))

Pasamos algún tiempo investigando esto y lamentablemente, no llegar a nada útil. Hubo algunos mensajes en el registro de diagnóstico, pero era difícil exactamente se correlacionan con este problema.

En el final, eliminar la colección de sitios y vuelve a crear y que resolvió.

Si averiguar qué causó en el futuro, Podrá actualizar este post.