Archivo de la categoría: SharePoint

Cómo solucionar errores de SharePoint misteriosos.

Visión general:

Depuración es difícil al desarrollar funcionalidad personalizada para Windows SharePoint Services 3.0 (WSS) o Microsoft Office SharePoint Server (MOSS). El principal culpable es el que SharePoint normalmente las superficies de muy poca información diagnóstico en el navegador web cuando se produce un error. Esta entrada de blog describe cómo ubicar adicional generado por el sistema de información de diagnóstico que a menudo puede ofrecer ese extra poco de detalle que se necesita para identificar causas raíz. Entonces esto puede llevar a resolver el problema.

He utilizado esta técnica con gran éxito para resolver errores de otra manera misteriosas.

Enfoque:

SharePoint guarda una gran cantidad de información en un registro de diagnóstico en un archivo de registro en el 12 colmena.

La colmena 12"" se encuentra generalmente en "C:\Programa de programaArchivos comunesMicrosoft SharedWeb Server Extensions12 ". (No estoy seguro si es posible para el 12 colmena vivir en otro sitio, En realidad).

La idea es localizar el archivo de registro actual, el error la fuerza y luego abrir rápidamente el archivo de registro. Estos archivos de registro se caracterizan por:

  • Abundante cantidad de información. Genera una gran cantidad de información de diagnóstico de SharePoint y escribe en el archivo de registro muy rápidamente. ¡ Tienes que ser rápido con los dedos para capturarlo.
  • Multiplicidad. SharePoint no escribe en un archivo de registro único sino más bien genera varios archivos de registro en secuencia.
  • Copie y pegue bien en MS Excel.

Mi método favorito:

  1. Abra un explorador de windows, apuntando a la 12 hivelogs.
  2. Ordenar la vista para mostrar por fecha de modificación (más reciente primero).
  3. Resalte el archivo de registro más actual.
  4. En una ventana del navegador web, el error que se produzca la fuerza.
  5. Abra el archivo de registro actual rápidamente y copiar su contenido a MS Excel.
  6. Saltar al final y analizar las entradas relevantes.

Otras notas:

De forma predeterminada, el registro de diagnóstico se encuentra en el 12 directorio hiveLOGS.

MS Best practices (según el Mike. de Microsoft) Estado que los archivos de registro deben guardarse en un disco duro separado. Se hace por medio de la administración central. El administrador del sistema puede haber hecho esto, en cuyo caso obviamente tendría que encontrar el archivo de registro allí en lugar de la predeterminada 12 Ubicación de la colmena).

Esta entrada aborda cuestiones tales como:

  • Flujo de trabajo de SharePoint no se pudo iniciar debido a un error interno.
  • (más que ser añadido con el tiempo)
  • Esta entrada ha sido útil diagnosticar errores de flujo de trabajo (por ejemplo:. "El flujo de trabajo no se pudo iniciar debido a un error interno").

MOSS: Introducción a una organización

(Esta entrada publicada entre Cruz http://paulgalvin.spaces.live.com/blog/ y http://blogs.conchango.com)

Los anuncios en este sitio son míos y no representan necesariamente las posiciones de Conchango, estrategias u opiniones.

Visión general:

Este artículo describe algunos antecedentes sobre un grande (3,000 usuarios) Microsoft Office SharePoint Server (MOSS) implementación y lo que hicimos para conseguir el proyecto de rodar de tal manera que el cliente está satisfecho y firmemente por un camino termina con la adopción plena del conjunto de características MOSS. A partir de la escritura de la entrada, Somos aproximadamente 50% completar la primera fase del proyecto. Como el progreso de las cosas, I podrá actualizar esta entrada o escribir nuevas entradas.

En este caso específico, la compañía ya había instalado SharePoint Portal Server 2003. El grupo instaló el producto en una especie de "vamos a ver si alguien se preocupa" moda. Fue adoptado rápidamente por muchos usuarios de negocios y se hizo bastante popular en la empresa en general. Como se puede imaginar, Esto no fue la mejor estrategia de implementación (que el cliente admite fácilmente) y cuando MOSS llegaron a la escena, el cliente decidió "hacerlo bien" y nos contrató para ayudarles a.

Una de las cuestiones centrales que nos enfrentamos cuando comenzamos a implementar este proyecto fue: Cómo introducimos musgo a este cliente? Dado que el cliente ya tenía experiencia con SharePoint, nos preguntamos — ¿Tenemos que hacer "diferencial" entrenamiento o hacer que subir desde el suelo? Después de trabajar con los usuarios clave, determinamos tratar esto como un proyecto de campo verde tenido más sentido.

Esa decisión dio un punto de partida, pero todavía nos dejó con el importante requisito de averiguar de una buena estrategia para despliegue de musgo a la empresa. El musgo es un animal tan grande … incluye gestión de contenidos, gestión de documentos, búsqueda, seguridad, audiencia objetivo, gestión de proyectos, "fabuloso cuarenta" plantillas, flujo de trabajo, conector de datos de negocios, etc.. Si unimos esto con el hecho de que es una gran organización que puede realmente hacer uso de prácticamente todos los principales MOSS característica y tiene los ingredientes de un gran proyecto con un alcance de empresa y muchas cosas buenas pasando.

Nos estamos confrontados con este problema y otra vez … MOSS tiene una empresa llegar con su conjunto de características de la empresa, Todavía ni siquiera un poco sofisticados clientes tienen mucho mentalmente absorbe esas características, Deja que solo incorporar una fracción apreciable de ellos en su rutina diaria.

No tengo una solución mágica al problema. En su lugar abordar sólo los muy primeros pasos que hemos dado con el cliente para guiarlos por el camino a la adopción a largo plazo.

Ámbito de aplicación:

Tanto como quería el equipo para elaborar un plan de proyecto que incluía tales hitos como "Que PoepleSoft la integración mediante BDC Completed", «Nuevo producto departamentos lanzamiento flujo de trabajo completo" y "Dirección Ejecutiva KPI aceptado", Tuve que conformarme con algo menos. Esto no es para decir que "menos" es malo. En realidad, "menos" que hemos decidido para el despliegue inicial fue millas por delante de donde estaban antes de empezar. En nuestro caso, "menos" convertido en:

  • Gestión documental simple utilizando las bibliotecas de documentos, tipos de contenido y control de versión.
  • Búsqueda eficaz basado en tipos de contenido y personalizar la búsqueda avanzada (Via propiedades administradas, XSLT para producir resultados bastante, etc.).

Además de las anteriores características de toda la empresa (lo que significa que debían ser desplegado a todos los departamentos y usuarios), Hemos añadido los siguientes singleton dentro del alcance mini-proyectos:

  • Prueba de concepto integración BDC.
  • Proceso de pasos múltiples y múltiples sucursales de flujo de trabajo creado a través de SPD.
  • Complejo formulario de InfoPath.
  • Superficie de KPI para algunos procesos de negocio (Probablemente HR adquisición de talento en nuestro caso, Aunque eso puede cambiar).

El objetivo aquí no es 100% precisa pero representativo de nuestro enfoque y suficiente para mi propósito aquí, que es explicar lo que considero que es un eficaz"" Introducción de musgo que establecerá al cliente firmemente por el camino dorado en adopción plena MOSS.

No escribo mucho más sobre el singleton en esta entrada. Quiero señalar que estos son parte de nuestra estrategia primordial. La idea es implementar las características base documento gestión y buscar a todos los usuarios, sin embargo ofrecen gran funcionalidad, alto visibles y altamente representativos ejemplos de otras características MOSS de base que están simplemente más allá de la capacidad de absorber en esta etapa temprana de la mayoría de los usuarios. Sin embargo, "allí estarán" y espero que otras unidades de negocio sepa o aprender sobre ellos y quiero esas características por sí mismos, conduce a una mayor adopción. Estas historias de éxito de singleton también servir para proporcionar a nuestro equipo de ventas "munición" para ganar con éxito segundo, Proyectos tercera fase n.

Lo introducimos y por qué?

Habiéndose establecido como un requisito de toda la empresa de referencia en gestión de documentos y búsqueda, teníamos que empezar a reunir información. Como una cuestión práctica, Esta giraba en torno a la comprensión de sus documentos y que en última instancia asignado para la comprensión de los tipos de contenido.

He encontrado que es difícil de explicar los tipos de contenido sin ayudas visuales. Gente más técnica puede alejarse de una discusión sobre los tipos de contenido cuando CT se describe en términos de la base de datos. "Un TAC es similar a una tabla de base de datos, tiene columnas y columnas están definidas en términos de tipos de datos, Pero los tipos de datos CT incluyen más que simples entero/fecha, Pero también "elección" y búsqueda"" y similares." Podemos hablar de "ampliar" tipos de contenido, como uno puede heredar funcionalidad de una clase base en lenguajes orientados a objetos. Sin embargo esto obviamente no es útil para transporte Departamento admin quien no tiene ninguna formación técnica. Es decir, casi todo el mundo que importa en una implementación MOSS.

El uso de un tablero blanco es dudoso. Que he presentado la idea de un tipo de contenido y dibujado brillante (o eso parece) Fotos de tipos de contenido y lo que hacen para usted en términos de búsqueda y cómo ellos pueden ampliarse, etc.. En el final, se siente como haber encendido bombillas, pero la imagen resultante de la pizarra es un desastre.

Esto nos llevó a nuestro lugar de aterrizaje actual y hasta ahora más eficaz: un sitio de MOSS configurado para mostrar estas características.

Utilizando el sitio, demostramos:

  • Tipos de contenido:
    • Creando una CT con múltiples tipos de datos (texto, fecha, opción, Boolean, búsqueda, etc.).
    • Extendiendo una tomografía mediante la creación de un nuevo CT basado en uno de los padres.
    • Buscando documentos usando metadatos CT.
  • Bibliotecas de documentos:
    • Asociar un CT solo con una biblioteca.
    • ¿Qué sucede cuando subamos un documento a la biblioteca?
    • Asociar múltiples de CT con una biblioteca de doc.
    • ¿Qué sucede cuando subamos un documento a la biblioteca?
    • Filtrar y ordenar vía encabezados de columna en un lib doc.
    • Vistas de documento biblioteca:
      • Clasificación
      • Agrupación
      • "Entrada rápida" (vista Hoja de datos)
      • "Los datos no etiquetados" (para ayudar con la migración a MOSS entre otras fuentes de contenido; más información sobre este por debajo de).

El sitio de:

Hemos diseñado nuestro sitio para ser una característica permanente en el entorno de desarrollo para ser utilizado para propósitos de entrenamiento largos después de terminar el proyecto e incluyó varios artefactos como se describe:

Tipos de contenido:

Hemos definido los siguientes tipos de contenido: Factura, Orden de compra, Servicios de factura.

Seleccionamos la orden de compra y factura porque están más o menos universalmente bajo
entidades se puso. Todo el mundo en el negocio entiende que una factura es una demanda de pago a un atención al cliente para un cantidad emitido en una cierta fecha para ser pagado según algunos condiciones de pago. Esto conduce a una definición natural de un TAC que hemos denominado "formación de factura" (para distinguirlo de cualquier otro tipo de factura). La orden de compra se define semejantemente fácilmente. También hemos creado una factura de servicios de capacitación"" mediante la creación de un nuevo CT basado en la "formación factura" CT y añadido una columna, "servicios prestados".

Con lo anterior, Ahora podemos demostrar sin enredando tratando de explicar un concepto abstracto primero algunas características clave de CT; Ya todo el mundo entiende lo que queremos decir por "factura" y la "orden de compra" y en cambio son capaces de concentrarse en la mecánica de la CT se.

Listas personalizadas:

CT con las columnas de tipo "búsqueda" apuntan a una costumbre lista o biblioteca de documentos. Esto utilizamos extensamente y para el entorno limitado, hemos creado una lista personalizada que contiene a clientes de apoyo. Seleccionamos los clientes porque es un concepto fácil de entender y fácil de demostrar. El CT de factura tiene una columna, "atención al cliente" se define de tipo "búsqueda" señala en esta lista.

Hemos creado una lista personalizada similar para gestionar proveedores"" para la orden de compra"" CT.

Bibliotecas de documentos:

Hemos creado dos bibliotecas de documentos: "Facturas" y "documentos".

Configuramos la biblioteca de documentos de facturas para gestionar documentos únicos de tipo CT "Factura".

Configuramos los documentos mixtos"" Biblioteca para gestionar todas tres de CT.

Crear varias vistas que muestran la clasificación, filtrado, agrupación y hoja de datos.

Búsqueda:

Podemos definir dos nuevas propiedades administradas y les asigna al número de factura y el cliente.

Hemos creado un nuevo sitio de búsqueda de avance personalizado y modificado para permitir a los usuarios buscar "facturas" usando esas dos propiedades asignadas.

Modificar el XSLT para que el número de factura y el cliente, cuando están presentes, aparecen en una tabla HTML en un color brillante. El objetivo es demostrar que tal formato es posible.

Juntándolo todo:

Organizamos para que los usuarios clave participar en una demostración.

Seguimos este simple script:

  1. Describir el significado y propósito de un CT, utilizando como ejemplos facturas y órdenes de compra.
  2. La definición de CT factura mientras simultáneamente garantizándoles que no necesitan utilizar las pantallas se muestran, recoge los conceptos.
  3. Ir a la biblioteca de documentos de facturas.
  4. Cargar un documento.
  5. Demostrar que el cliente desplegable realmente es originario de una lista personalizada.
  6. Agregar a un nuevo cliente a la lista de clientes y luego actualizar los metadatos de la factura subido recientemente con el cliente recién creado.
  7. Cambiar a los "documentos mixtos" Biblioteca y subir un documento. Explicar cómo el sistema le solicita para un tipo de documento.
  8. Ir a biblioteca de documentos de facturas y mostrar cómo haciendo clic en un nombre de columna cambia el orden de clasificación.
  9. Demostrar a nivel de columna de filtración.
  10. Mostrar diferentes puntos de vista que muestran varios niveles de clasificación, filtrado y agrupación.
  11. Mostrar la vista Hoja de datos.
  12. Explicar el propósito de "documentos sin etiquetar" vista.
  13. Cambiar a la búsqueda avanzada modificado para requisitos particulares.
  14. Por ahora, el documento recientemente subido debería han sido arrastrado e indexadas, Entonces realizar una búsqueda que demuestra habilidad para localizar esa factura a través de la propiedad asignada.
  15. Demostramos la diferencia entre búsqueda mediante las propiedades asignadas vs. Sólo una búsqueda de texto.

En este punto, más o menos terminamos con la demo. Parece que tomar sobre 30 Para 45 minutos, dependiendo de cuántas preguntas preguntan.

Entonces enviamos a sus escritorios con la "tarea". Consiste en una simple hoja de cálculo de excel donde les pedimos que define para nosotros lo que ellos piensan que necesitan en términos de CT, tanto a nivel alto (propósito sólo nombre y negocios) así como de columnas y el tipo de datos almacenan en la columna. No les pedimos que definen tipos de datos de columna en términos de musgo, pero condiciones comerciales.

En Resumen:

Hemos creado un entorno sandbox que podemos utilizar para demostrar algunas características MOSS de base cuyo recurso es toda la empresa.

Nos hemos modelado entidades de negocios fácil de entender y común para que los usuarios pueden centrarse en musgo y no estancarse en las entidades / ejemplos propios.

Los usuarios de negocios alejarse de sesiones tesis con la "tarea" en forma de documentos de excel que ahora son competentes para llenar y utilizar para diseñar sus propios tipos de contenido de primer corte.

Finalmente, como realizamos demostraciones con el tiempo, miembros del equipo del cliente ellos mismos a ser más capaces de llevar adelante, la demo de sí mismos y generalmente liberar el resto de nosotros para trabajar en cuestiones más complejas, como taxonomía global, complejos flujos de trabajo, BDC y similares.

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.

MOSS: Actualizando una lista personalizada

Hay muchos buenos ejemplos de actualización de listas personalizadas mediante el SDK. Aquí está otro.

Problema del negocio: Formulario de InfoPath ha sido diseñada que permite a los usuarios entrar en línea requisiciones de compra. Requisición PO los números deben ser secuencia tradicional basado en valores enteros y calcula automáticamente.

Solución de negocio: Crear una lista personalizada de MOSS que contiene dos columnas: "ControlField" y "ControlValue". La columna valor contiene el siguiente número de requisición de compra. Tenga en cuenta que el genérico "control" Convención de nomenclatura proporciona para campos de control futuros que pueden utilizarse como sea necesario.

Solución técnica: Crear un servicio web accedido por el cliente de InfoPath. El servicio web vuelta devuelve el siguiente número de requisición de compra y actualiza el valor de la lista.

Lecciones aprendidas:

  • Al agregar este servicio web como origen de datos en el formulario de InfoPath, Me pareció necesario para convertirlo en un udc y almacenarlo en una biblioteca de conexiones de datos.
  • También me pareció necesario para permitir el dominio cruzado de secuencias de comandos mediante la administración de servicios centrales // Administración de aplicaciones // configuración del servidor de forma.
  • La primera vez la forma trató de acceso al servicio web, Toma un tiempo y en ocasiones, sería tiempo. Ha jugueteado con los ajustes de configuración del servidor de forma para ampliar las opciones de tiempo de espera y que parecía ayudar a.

El código:

utilizando Sistema;
utilizando System.Web;
utilizando System.Web.Services;
utilizando System.Web.Services.Protocols;
utilizando Microsoft.SharePoint;
utilizando System.Configuration;

[WebService(Namespace = "http://www.conchango.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
público clase PoService : System.Web.Services.WebService
{
público PoService () {

//Descomentar la siguiente línea si utiliza componentes diseñados
//InitializeComponent();
}

/// <Resumen>
/// Obtener el número siguiente de la lista de control número de sharepoint po.
/// Incrementar el número de la lista.
/// </Resumen>
/// <Devuelve></Devuelve>
[WebMethod]
público cadena GetNextPoNumber()
{
cadena SpPoControlSiteName; // Nombre del Real Sitio MOSS que aloja la lista de Control de la PO.
cadena SpPoControlListName; // Nombre de la lista de musgo real que contiene el control de la Po.

SpPoControlSiteName = ConfigurationSettings.AppSettings["PoControlListHostingSite"].ToString();
SpPoControlListName = ConfigurationSettings.AppSettings["PoControlList"].ToString();

cadena nextPoReqNumber = "xyzzy";

utilizando (SPSite sitio = Nuevo SPSite(SpPoControlSiteName))
{
utilizando (SPWeb Web = página. OpenWeb())
{

SPList currentList = web. Listas de[SpPoControlListName];

foreach (SPItem controlItem en currentList.Items)
{

Si (((cadena)controlItem["ControlField"]).Es igual a("NextPoNumber"))
{
nextPoReqNumber = (cadena)controlItem["ControlValue"];

int int_nextPoReqNumber;
int_nextPoReqNumber = Convertir.ToInt32(nextPoReqNumber);

int_nextPoReqNumber ;

controlItem["ControlValue"] = int_nextPoReqNumber;
controlItem.Update();
}

} // Localización de, lectura y actualización del número en la lista.


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

retorno nextPoReqNumber;

}
}