Archivo de la categoría: Desarrollo de SharePoint

Uno de los motivos "uno o más campos tipos no están instalados correctamente”

Estaba haciendo un pequeño tweak ayer a un elemento web que hace una consulta CAML contra una lista.  Hice el cambio, lo desplegado y consiguió golpear con un error:

Ha producido un error inesperado en el WebPart de previsión meteorológica de Outlook día tres. Póngase en contacto con el administrador del sistema. Uno o más tipos de campo no están instalados correctamente. Ir a la página de configuración de la lista para eliminar estos campos.

Estaba enfrentando otra cuestión bastate anteriormente por lo que inmediatamente no se conecta mi consulta CAML con el error que me informaba de SharePoint.  Hice una búsqueda rápida de bing y y encontré este post de blog útil por Sandeep Nahta  (http://snahta.blogspot.com/2009/01/one-or-more-field-types-are-not.html).

Aquí está la consulta mal:

consulta.Query ="<Donde><Y><Neq><FieldRef nombre = 'Abbr' /><Tipo de valor = 'Texto'>SFNY</Valor><FieldRef nombre = 'Abbr' /><Tipo de valor = 'Texto'>SFIS</Valor></Neq></Y></Donde>";

Aquí se fija:

consulta.Query ="<Donde><Y><Neq><FieldRef nombre = 'Abbr' /><Tipo de valor = 'Texto'>SFNY</Valor></Neq><Neq><FieldRef nombre = 'Abbr' /><Tipo de valor = 'Texto'>SFIS</Valor></Neq></Y></Donde>";

Por lo tanto, la Moraleja de la historia es: Asegúrese de que su CAML es correcta o puede obtener un error de extraños.

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

</final>

SharePoint 2010 Atrapados en la "implementación de solución” Estado

Usé PowerShell para implementar una solución en una granja de SharePoint (h/t:  Corey Roth y su entrada de blog). 

Luego fui a la administración central, acceder a la configuración del sistema y, a continuación, "Administrar soluciones de granja" para implementarla a la granja y a mi (leve) consternación, tiene metida en la "implementación".

He visto a esta cuestión idear muchas veces en los foros MSDN, así que estaba bastante nerviosa acerca de él.  Busqué todo un poco y encontré este artículo útil (por una persona aparentemente autor anónimo http://www.resolutionsnet.co.uk/).  Cancelado el trabajo de implementación y cuando hice clic en la solución, me dijo que había desplegado con éxito la solución a tres de los cuatro servidores en la granja.

Fui al servidor errante, detiene el servicio de temporizador y lo reinicie.  Windows server realmente me dijo que el servicio no pudo responder al comando, por lo me dice que estaba enfermo.

A esta hora, Cuando volví a la administración central, Fui capaz de implementar sin problemas.

Esperemos que este bit de información ayudará a algunos en un aprieto uno de los días.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Error del día: "No se puede agregar el ensamblado especificado a la GAC”

Me he estado peleando un poco con visual studio 2010 en una una solución sp2010 y estaba recibiendo este error:

Error en el paso de implementación Agregar solución: Error: No se puede agregar el ensamblado especificado a la caché de ensamblados global: YourAwesomeDLLThat IAmJustNotGoingToInstallRightNow.dll

Fui a la GAC sí (c:\WindowsAssembly) para tratar de quitar y tiene un error de "archivos en uso".

Hice un iisreset, Descargué casi Sysinternals, Finalmente dejé el servicio de temporizador en Services..., Acabo de cerrado y reabierto visual studio propio y finalmente pude cerrar.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Fácil y rápida: Depuración de VS 2010 Implementación de soluciones

Visual Studio 2010 informes duros para depurar errores durante la implementación de algunas veces.  Una forma rápida y fácil para hacer cierta depuración muy accidentado es lanzar sus propio llamadas excepciones.  Visual Studio les mostrará en la consola de salida.

Tener en cuenta este bit de código:

image

Si esta función está en el ámbito de una aplicación web, sitio será null.  Si trata de hacer referencia a una propiedad del sitio, obtendrá el error ambiguo:

Error en el paso de implementación Agregar solución: Referencia a objeto no establecida como instancia de un objeto.

Sin embargo, Si lanza una nueva excepción y pasar una cadena al constructor, usted recibe un mensaje un poco más útil:

image

Es una técnica cruda, pero bastante rápido y fácil.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Temporizador FeatureActivated de trabajo y el alcance de la función

He estado trabajando con algún código que alguien me entregó para un trabajo del temporizador.  Él no había proporcionado el código de activación de la función real así que tuve que escribir, Claro.  Aprovechó de De Andrew Connell famoso blog post sobre el tema.

Estoy utilizando Visual Studio 2010 y despliegue mantuvo con un error "error en paso de implementación Agregar solución: Referencia a objeto no establecida como instancia de un objeto."

Estaba tomando demasiado literalmente su código.  Me alcance de la función a nivel de la aplicación web, como se muestra:

image

Como un resultado, las propiedades que se envían al receptor son desde la aplicación web, no es una colección de sitios.  En el final, el código de este aspecto:

public override void FeatureActivated(Propiedades de SPFeatureReceiverProperties)
{

    // No lo siguiente con características del ámbito de aplicación web, conduce a la desesperación Sonreír
    // Sitio de SPSite = properties.Feature.Parent como SPSite;

    SPWebApplication wa = properties.Feature.Parent como SPWebApplication;

    Si (wa == null) throw new Exception("webapp2 es nulo".);

    foreach (Trabajo de SPJobDefinition en wa.JobDefinitions)
    {

        Intente
        {
            Si (trabajo.Nombre == List_JOB_NAME)

                trabajo.Eliminar();
        }
        capturas (Excepción e)
        {
            throw new Exception("marcador 2");
        } // capturar la excepción e
    }

    // instalar el trabajo

    WeatherForecastTimerJob weatherForecastTimerJob =
        WeatherForecastTimerJob nuevo(List_JOB_NAME, wa);

    SPMinuteSchedule schedule = SPMinuteSchedule nuevo();
    programar.BeginSecond = 0;
    programar.EndSecond = 59;
    programar.Intervalo = 5;
    weatherForecastTimerJob.Schedule = programación;
    weatherForecastTimerJob.Update();

}

La clave para llevar es que cuando la función es en el ámbito de una aplicación web, el SPFeatureReceiverProperties que SharePoint pasa a su receptor característica tiene parámetros de nivel de aplicación web.  Entrada de blog viejo de Andrew asume que es el ámbito de la colección de sitios.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Donde es Microsoft.SharePoint.ApplicationPages.Administration.dll?

Yo me entregó un proyecto de visual studio que hace referencia a Microsoft.SharePoint.ApplicationPages.Administration.dll.  Me tomó un poco mientras que encontrar pensamiento y lo comparto.  En mi entorno, se encuentra en:

c:\programa de programaArchivos comunesMicrosoft sharedweb server extensions14configadminbin

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Proyecto de CodePlex – SP2010 Explorer

Como parte de un esfuerzo continuo para conocer los detalles técnicos de niveles bajos de SharePoint 2010, He creado un "Explorador de SharePoint"tipo de herramienta.  La idea no es nueva.  He utilizado este proyecto más de una vez: http://sharepointexplorer.codeplex.com/.  Mi idea es crear una versión de SharePoint que utiliza conecta elementos web para mostrar todos los detalles de bajo nivel que puede ofrecer el modelo de objetos. 

Esta entrada de blog sirve como ambos un anuncio del proyecto así como un llamado para voluntarios.  Si estás interesado en trabajar en este proyecto, Avísame por correo electrónico (Galvin.Paul@gmail.com) y trabajaremos.

Aquí está el proyecto: http://sp2010explorer.codeplex.com/

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Trabajo con TreeNodeBinding en ASP.Control Treeview NET

He estado trabajando en lo que espero que sea un poco-liberado CodePlex proyecto que proporciona un agradable poco integrado de elementos web hablando entre sí a través de conexiones de proveedor y consumidor con el fin de explorar un sitio de SharePoint en las portadas.  (Esto, sin duda, se ha hecho antes, pero este es un proyecto de aprendizaje tanto como cualquier otra cosa).  Este pretende ser un reemplazo para la vista del explorador de windows SharePoint 2010 bibliotecas de documentos.

El código tiene la recursiva habitual llamar abajo el SPWeb y SPLists inicien un determinado punto.  El objeto que tiene atravesar acumula una cadena XML que este aspecto:

<colecciónsitio url =’http://demo2010a:9090′>
 
<Web
     Título = 'Hola mundo Sandbox' 
     Plantilla =' un sitio para organizar rápidamente los equipos, autor, y compartir información, BLA BLA BLA '>

     <lista
        Título ='BCC_Health_Services_FAQs’
        Plantilla =' listaPersonalizada’
       
ListId =’http://demo2010a:9090/helloworldsandbox[DELIM]1e02b001-3cb2-4f17-b63d-7809e86b4174′>
    
</lista>

     <lista
        Título = 'BCC_Notifications' 
        Plantilla = 'ListaPersonalizada' 
        ListId =’
http://demo2010a:9090/helloworldsandbox[DELIM]5a5a13d1-877 c-41 c 0-9063-b9612be80d5e’>
     </lista>

  </Web>

</colecciónsitio>

Espero que limpiar que XML antes de todo está dicho y hecho.

Quiero finalmente obtener esa información arriba y en un control Treeview.  No es exactamente la tierra cosas demoledor.

El reto que tuvo aquí fue conectar un control de origen de datos XML en lugar de construir manualmente mi treenodes medida que navega en el árbol de la vista de árbol.  Hice esto en parte porque estoy deliberadamente haciendo las cosas más difíciles en mí (Esto es después de todo un proyecto de aprendizaje) y en parte porque tengo esta noción vaga que la construcción de nodos de árbol, que recorrer el árbol no es una buena idea a largo plazo.

El problema con este enfoque es que el control Treeview no sabe acerca de los atributos en los nodos interesantes como "lista" o "web" buenos por lo que muestra esta salida predeterminada:

 

image

No es útil.  Esto es donde ayuda la clase TreeNodeBinding.  Puedo utilizar esto para indicar que el control Treeview de cómo debe interpretar el código XML.  Aquí hay un ejemplo:

TNB = TreeNodeBinding nuevo();
TNB.DataMember = "lista"; // Esta es la etiqueta en el archivo xml para un sitio.
TNB.TargetField = "listid";
TNB.ValueField = "title";
TNB.ToolTipField = "Plantilla";

Este enlace dice treeview que cuando encuentre un <lista> nodo en el archivo XML, aplicar los enlaces de TargetField, ValueField y ToolTipField.  En mayo app, Estos mapas como sigue:

  • TargetField: Cuando alguien hace clic en un valor de nodo, Esto es lo que obtendrá para SelectedNode.Value.  Esto no es debe ser confundido con…
  • ValueField: Esto es lo que desea el Treeview para mostrar al usuario.
  • ToolTipField: El valor de los datos XML que desea como una información sobre herramientas.

Añadir que TreeNodebinding a DataBindings la vista de árbol y obtener salida como este:

 

image

A tener más información sobre todo esto como continuar en el proyecto y finalmente ponerlo en Codeplex.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Conectar los filtros de campo de texto a la parte de Web personalizado

Quería recibir información de un filtro de campo de texto en SharePoint 2010 en mi parte de web personalizado.  Intenté usar Este artículo MSDN como base pero el artículo es bien roto o simplemente no estoy siguiendo lo correctamente.

Un poco más buscando activado Mike Smith Contribución de MSDN aquí (http://social.msdn.microsoft.com/forums/en-us/sharepointdevelopment/thread/72F1732A-7F93-441E-8644-2E82BBB153D9).

Hay un montón de cosas por ahí sobre elementos web conectable pero artículo de Mike es tan sencillo como obtiene.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Fácil y rápida: Enviar correo electrónico utilizando el servidor SMTP de Gmail en .NET C#

Esto no es exactamente un nuevo tema, pero cuando necesitaba hacerlo, He encontrado un montón de "por qué no este trabajo para mí" y no demasiadas respuestas directas. Espero que alguien encuentra esta útil.

El siguiente trozo de código enviará un correo electrónico usando mi propia cuenta de gmail para hacerlo, incluidos los archivos adjuntos:

utilizando System.Net.Mail;
utilizando System.Net;

NetworkCredential loginInfo = Nuevo NetworkCredential("[Mi ID de Gmail]", "[Mi contraseña de Gmail]");
MailMessage MSG = Nuevo MailMessage();
MSG.From = Nuevo MailAddress("[M Id de Gmail]@gmail.com");
MSG.To.Add(Nuevo MailAddress("paul.galvin@arcovis.com"));
MSG.Tema = "Prueba de infopath dev tema";
MSG.Cuerpo = "<HTML><cuerpo><fuerte>Un mensaje fuerte.</fuerte></cuerpo></HTML>";
MSG.IsBodyHtml = verdadero;

foreach (cadena aFile en NIPFD.GetAttachmentNamesAndLocations())
{
    MSG.Attachments.Add(Nuevo Accesorio(aFile));
} // Agregando archivos adjuntos.

SmtpClient cliente = Nuevo SmtpClient("smtp.gmail.com");
cliente.EnableSsl = verdadero;
cliente.UseDefaultCredentials = falso;
cliente.Credenciales = loginInfo;
cliente.Puerto = 587;
cliente.EnableSsl = verdadero;
cliente.Enviar(MSG);

Unos bits clave que me ralentizado y otras observaciones / Notas:

  • La primera línea que crea el objeto de loginInfo necesita usar el gmail de que ID despojado "@gmail.com”. Por lo tanto, Si mi dirección de correo electrónico de gmail "sharepoint@gmail.com"y mi contraseña es"xyzzy"entonces la línea tendría el siguiente aspecto:

NetworkCredential loginInfo = Nuevo NetworkCredential("sharepoint", "xyzzy");

  • Mi cuenta de gmail está configurado para usar SSL y no era un problema.
  • Hay algunos datos contradictorios en qué puerto. Utilicé el puerto 587 y funcionó bien para mí.
  • En mi caso, También necesitaba para enviar archivos adjuntos. El objeto NIPFD tiene un método que sabe dónde están mis archivos adjuntos. Vuelve un camino completamente (por ejemplo:. "c:\tempattachment1.jpg". En mi prueba, Tuve dos archivos adjuntos y ambos trabajaron bien.

Usé visual studio 2008 para escribir este código.

</final>

Suscribirse a mi blog.

Sígueme en Twitter en http://www.twitter.com/pagalvin

Etiquetas de Technorati: ,,,