Archivo de la categoría: Desarrollo de SharePoint

Calendario de bambú interactuando con SharePoint causa "ocurrió un error inesperado"

Hoy en día, He estado trabajando en un entorno que utiliza un elemento web calendario de bambú para algunos mejor colaboración. Esto una estándar mediana/pequeña granja con dos WFEs carga equilibrada, un "application server" para indexación y back-end de InfoPath y un clúster SQL.

El cliente instalado algún software de recuperación de desastres en uno de las WFEs y que resultó en un ETF roto de un sitio específico en la colección de sitios. Cuando balanceo de carga señaló la afectada WFE y ese sitio, los usuarios vieron una pantalla en blanco en gran parte en blanco con la frase "se produjo un error inesperado". Ninguna otra información demostrada, sólo esa frase.

Me pidieron que lo mira. I reproducir fácilmente el problema y luego añade una ?contenido = 1 al final de la URL. Se trata de cómo me enteré de que estaban utilizando la WebPart de bambú. Volví a la página y ahora, de repente, me mostró un mensaje de error ordenada nice:

image

No sé lo que estaba sucediendo o lo que hice para obtener el mensaje de error controlado para mostrar que anexar el ?contenido = 1 bit de la cadena de consulta.

Este es probablemente un caso de borde muy raro pero si consigues ese mensaje, "Ocurrió un error inesperado" adelante y agregar ?contenido = 1 a la cadena de consulta y ver donde que conduce.

</final>

Suscribirse a mi blog.

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

Etiquetas de Technorati: ,

Con Reflector Microsoft.SharePoint.dll

Redgate .NET Reflector Michael Blumenthal aportó una artículo sobre alertas y vistas ("Que considera puede utilizarse cuando se crea una alerta ?"), que es interesante por sus propios méritos. Sin embargo, Me interesaba más ver cómo anda metódicamente a través del proceso de la utilización net Reflector de Redgate. Paso a paso, muestra cómo utilizar esa herramienta localizar como SharePoint determina si una vista en la lista debe ser "subscribable" falta de una palabra mejor (he explains this much better than I do 🙂 ).

En este punto en la época de SharePoint, casi tienes que ser sordos y ciegos que no han oído o leído acerca del uso de esa herramienta. Ha avanzado en cosas y mi sensación es que es en muchas maneras un instrumento de último recurso. Sin embargo, Si cree que necesita, pero no sé cómo, Reseña de Michael parece un gran tutorial sobre este tema.

</final>

Suscribirse a mi blog.

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

Ordenar elementos de calendario en la vista Calendario

Estoy usando un calendario para seguir debates en un día dado. Tengo dos sesiones: mañana y tarde. Quiero crear una vista que muestra sesiones de la mañana sólo alfabético mediante un identificador de sesión. Esto es un poco difícil de lograr (a menos que se me pasó algo muy obvio).

Fácilmente puedo crear una vista filtrada muestra sólo eventos de ese día. El calendario mostrará todos los eventos y si todos toman lugar en la misma hora, enumera al lado de la ranura de la hora. Genial. La parte difícil es, de forma predeterminada, quiere listar en formato de ID. Por lo tanto, Si añado "sesión 02" y luego "sesión 01" en el calendario, les muestra en ese orden (i.e, Período de sesiones 02 y luego sesión 01). Lista en orden de ID de sesión, Se me ocurrió probar estas cosas:

  1. Configurar la vista mediante la interfaz de usuario web. Sin suerte. No hay ninguna opción para ordenar los elementos de esta manera.

    Puesto que no trabajan, Estoy ahora con la esperanza de que es una consulta CAML en algún lugar de allí que me permitirá reemplazar la clase. CQWP me permite hacer eso tipo de cambio, Tal vez será como calendario?

  2. Editar el elemento web, buscar una "exportación" función y … BZZZT! No puedo exportar su XML. Hay ninguna opción de exportación.

    Todavía mantengo la esperanza que puedo encontrar y modificar algunas consulta CAML. Desde entonces no puedo exportar el elemento web, Eso deja a SharePoint Designer.

  3. Yo agregue el elemento web de calendario en un sitio de sandbox y abrir ese sitio usando SharePoint Designer. Miro el marcado para la parte web y encontrar lo que estoy buscando. Se ha codificado la locura, Pero es allí: "<ListViewXml …. >locura codificada</ListViewXml>". Específicamente, Hay esta joya:

<Consulta>
<Donde>
<DateRangesOverlap>
<FieldRef nombre = "EventDate" />
<FieldRef nombre = "EndDate" />
<FieldRef nombre = "RecurrenceID" />
<Tipo de valor = "DateTime">
<Mes />
</Valor>
</DateRangesOverlap>
</Donde>
<OrderBy><FieldRef nombre = "Session_x0020_ID" /></OrderBy>
</Consulta>

(Yo he descifrado el &lt;de y &de gt y dividirlas en múltiples líneas de claridad).

Añadir el <OrderBy> un poco y ahora ordena por ID de sesión, No el ID del elemento de lista interna.

Punta gigante o’ el sombrero Becky Isserman por su comentario a la entrada en el blog de Isha Sagi: http://www.sharepoint-tips.com/2008/07/caml-sorting-by-file-name.html. No habría puesto la <OrderBy> en el lugar correcto sin su comentario.

Espero poder escribir esto más claramente con capturas de pantalla pronto, Pero en caso de que yo no soy, al menos hice tanto.

</final>

Etiquetas de Technorati: , , ,

Características de SharePoint & Gestión de soluciones — No se olvide de la u de CRUD (o la d para el caso)

Colectivamente, pasamos mucho tiempo pensando en soluciones de SharePoint — cómo crearlos, Qué herramienta usar, ¿Qué sucede cuando no puedan implementar, trabajos del temporizador, ámbitos, etc.. Pasamos tanto tiempo pensando en los bits iniciales que es fácil olvidar que necesitamos retraerlos así. Soluciones que contrae es probablemente más difícil, desde una perspectiva de diseño conceptual, que desplegarlas. Implementación es básicamente un asunto de libro de cocina. Por lo general, instalar una característica, Tal vez tenga un receptor función cargar algunos datos en una lista, ese tipo de cosas. Sin embargo, retracción es potencialmente más complejo.

Una determinada solución puede crear artefactos semejantes:

  • Tipo de contenido
  • Lista de definiciones
  • Definición del sitio
  • Datos de una lista
  • Incluso los receptores
  • Formularios de InfoPath

La lista continúa.

Mientras que es obviamente importante diseñar una solución crea una instancia de esos artefactos correctamente, es tan importante considerar la actualización y eliminar los casos. Si su solución crea una nueva lista y esa lista con los datos, ¿Qué sucede cuando la solución está retraída? En algunos casos, se debería eliminar la lista. En otros casos, se debe dejar intacto para fines históricos. Requerimientos de su negocio le guiará a la decisión correcta.

Para ayudar con esto, crear una matriz que muestra cada artefacto que implementa su solución de SharePoint. Lista de tres columnas por artefacto, uno para crear, Update y delete. Para cada caso, determinar el resultado correcto para la operación.

Este tipo de análisis se realiza obviamente mejor antes de que la solución se implementa alguna vez a una granja de SharePoint. Sin embargo, como fumar, nunca es demasiado tarde para empezar a hacer las cosas correctamente. Crear esa matriz y desarrollar un plan para enfrentar los escenarios que faltan de actualizar/eliminar. Puede ser un problema difícil de resolver, Pero al menos se habrá puesto un cuadro alrededor del problema.

</final>

Suscribirse a mi blog.

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

Etiquetas de Technorati:

Quick Fix: Servicios Web interactuar con SharePoint, InvalidOperationException

Hace un millón de años, Ayudé a desarrollado un servicio web que se invoca mediante una acción personalizada para un flujo de trabajo de SharePoint Designer. Esta semana, el cliente quería pasar a producción (Finalmente!) así que hicimos.

La acción personalizada funcionaba bien, pero el servicio web que invoca no, nos da este error:

System.InvalidOperationException: Esta operación puede realizarse únicamente en un equipo que se une a una granja de servidores por los usuarios que tienen permisos en SQL Server para leer desde la base de datos de configuración. Para conectarse a este servidor a la granja de servidores, el Asistente de configuración de las tecnologías y productos de SharePoint, situado en el menú de inicio de herramientas administrativas.
en Microsoft.SharePoint.Administration.SPWebApplication.Lookup(URI requestUri)

Resulta que me olvidé de añadir el servicio al grupo de aplicaciones de SharePoint en IIS. Una vez que lo hice, funcionó bien.

Este registro de foro MSDN me dio la pista que necesitaba: http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopment/thread/2c97c004-7118-4e06-a62c-b2b0ac07ac99

</final>

Suscribirse a mi blog.

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

Etiquetas de Technorati:

Fácil y rápida: Obtener SPFolder de SPItemList

Sigo a la ejecución de este problema y el Google nunca parece entender lo que quiero hacer, así que pensé que esto sería anotar.

Yo he estado haciendo un montón de receptor de eventos de depuración en la última semana o dos. La ER se define contra una biblioteca de documentos. Los elementos individuales de la biblioteca de documentos se relacionan firmemente con sus carpetas principales. Por lo tanto, Siempre estoy recibiendo la carpeta del tema para la manipulación de diversos. Durante la depuración, Necesitaba para actualizar los metadatos de una carpeta para un elemento específico cuyo ID sé.

Aquí es una pequeña aplicación de consola (diseñado para ejecutarse en el servidor de la granja) toma dos argumentos: el ID de un elemento y un valor para asignar a un campo, "Estado de aprobación". Que duro códigos un montón de cosas y ninguna comprobación de errores.

El código busca un sitio duro codificado, es una biblioteca de documentos duro codificado y entonces encuentra el elemento indicado. A continuación, encuentra la carpeta principal de ese tema y asigna el valor de estado.

La lección clave aquí para mí es que SPItem no obtener acceso a la carpeta. Es necesario utilizar SPListItem.File.

Si nadie se preocupa de ofrecer una crítica o sugieren una mejor forma de obtener la carpeta de un elemento, por favor dejar un comentario.

<código>
utilizando Sistema;
utilizando System.Collections.Generic;
utilizando System.Text;
utilizando Microsoft.SharePoint;
utilizando System.Collections;

espacio de nombres Conchango
{
    /// <Resumen>
 /// </Resumen>
 clase ManualFolderUpdate
    {
        estática void Principal(cadena[] args)
        {
            cadena MSH = "ManualFolderUpdate (v1.0): "; // MSH = "encabezado del mensaje"

 Consola.WriteLine(MSH + "Puesta en marcha.  Estaba actualizado el 04/08/08.");

            cadena URL = http://localhost/xyzzy;

            utilizando (SPSite oSPSite = Nuevo SPSite(URL))
            {

                utilizando (SPWeb oSPWeb = oSPSite.OpenWeb())
                {
                    SPList docLib = oSPWeb.Lists["Documentos"];

                    Consola.WriteLine(MSH + "Tiene la biblioteca de documentos.");

                    Consola.WriteLine(MSH + "Número de elementos de la lib doc: [" + docLib.ItemCount + "].");

                    int FolderID = 0;
                    cadena NewStatus = "xyzzy";

                    FolderID = sistema.Convertir.ToInt32(args[0].ToString());
                    Consola.WriteLine("Buscar carpeta para elemento: [" + FolderID + "].");

                    SPListItem Li = docLib.GetItemById(FolderID);

                    SPFolder thisItemFolder = li.File.ParentFolder;

                    Consola.WriteLine(MSH + "Tiene la carpeta principal.");

                    NewStatus = args[1].ToString();
                    Consola.WriteLine("Establecer el estado de [" + NewStatus + "].");

                    Consola.WriteLine("Pulse volver a cometer la actualización o CTRL-C para cancelar.");

                    Consola.ReadLine();

                    thisItemFolder.Item["El estado de aprobación"] = NewStatus;
                    thisItemFolder.Item.Update();

                    Consola.WriteLine(MSH + "Finalizado la actualización de la carpeta.  Salir.");

                } // utilizando SPWeb

            } // utilizando SPSite

 Consola.WriteLine(MSH + "Terminó.");

        } // Principal

    } // clase foldersync
} // espacio de nombres
</código>

</final>

Suscribirse a mi blog.

Etiquetas de Technorati:

Ocultar acciones personalizadas en SharePoint

Hace varios meses, mientras trabajaba en un proyecto para un cliente, He creado una función. Entre otras cosas, esa función define una acción personalizada (Estos aparecen en configuración del sitio). El único propósito de esta acción personalizada fue demostrar que la activación de la característica estaba trabajando como se esperaba. Básicamente, Lo usé como una forma cruda de depuración.

Para mi vergüenza, Este artefacto depuración hizo su manera de dev UAT y a la producción antes de que alguien llegó a preguntar, "¿Qué es este enlace xyzzy?"

Por ahora, Estamos en la producción y realmente no quiero desinstalar la característica, fijar elements.xml y vuelva a instalar.

Todd sombrío señalado de una manera fácil de manejar. En sus palabras:

"CustomActions no se copian en la base de datos, ellos son leídos directamente desde el archivo Elements.xml y copiados en el estado de la aplicación en tiempo de ejecución. Por lo tanto, No es necesario desactivar, desinstalar, vuelva a instalar, y reactivar la función para eliminar la CustomAction. Sólo lo quite del archivo Elements.xml y recicla el grupo de aplicaciones(s) efectuado. La próxima vez que la función está en el ámbito, Ya no verás el Icon."

Seguí sus instrucciones y, Claro, trabajan.

En mi caso, se trata de una instalación de nivel de departamento con apenas un solo ETF. Si te encuentras con este problema en el futuro y con múltiples WFE, Creo que tendrás que hacer el cambio en cada uno.

</final>

Suscribirse a mi blog.

Etiquetas de Technorati: ,

Quick Fix: Acceder al sitio de SharePoint lanza [HttpException (0x 80004005): Solicitud agotado.]

Uno de mis colegas de desarrollador estaba trabajando en un proyecto de esta semana y se topó con un problema de tiempo de espera mientras se trabaja en la construcción de una parte de la web loco. Su parte de la web estaba bien, pero "repentinamente" un sitio relacionado se hizo muy lento y con frecuencia agotó con este error:

[HttpException (0x 80004005): Solicitud agotado.]

Conectado y vi que varios otros sitios eran muy bien. Sospeché que había algunas partes ocultas de la web en la página y el uso de el fiel ?contenido = 1 técnica de depuración, De hecho he encontrado 11 elementos en la página de Web, sólo dos de los cuales eran visibles. Mejor aún (desde una perspectiva let's-hope-I-find-something-ugly-here-that-I-can-fix), tres de esos elementos web cerrada tenían el nombre de "Error".

He eliminado los elementos web (que se llevó un tiempo sorprendentemente) y que soluciona el problema. Para hoy 🙂

</final>

Suscribirse a mi blog.

Etiquetas de Technorati:

Invocar servicios Web SSRS de WSS / MOSS en entorno de FBA

Necesitábamos invocar la CreateSubscription"" método de un servicio web SSRS que está alojado en una FBA MOSS entorno administrado desde un elemento web personalizado. Seguimos recibiendo las variaciones de:

  • 401: No autorizado
  • Objeto movido

El "objeto movido" mensaje fue más interesante porque decía que el objeto"" (nuestro servicio SSRS) había "trasladado" a login.aspx. Esto significaba claramente que tenía algún tipo de problema de autenticación.

Finalmente me di cuenta que tenía marcado una entrada de blog por Robert Garret describe cómo invocar un servicio de web WSS/MOSS de propósito general viviendo dentro de un entorno de FBA. Tenga en cuenta que no puedo ligar directamente al artículo (como de 06/09/08) porque quiere autenticar. El enlace que proporciono te lleva a un "todos los mensajes" Vista y se puede localizar el artículo específico mediante la búsqueda de "Acceso A MOSS de servicios Web mediante la autenticación de formularios basado".

Aquí está el código que trabajó para nosotros:

ReportingService2006 rs = NULL; 
// Autenticar Autenticación auth = Nuevo Autenticación(); 
autenticaciónURL = "http://URL/_vti_bin/Authentication.asmx";
autenticaciónCookieContainer =
Nuevo CookieContainer();
Resultado de LoginResult = autenticaciónInicio de sesión("ID de usuario", "contraseña");
Si (resultado.ErrorCode == LoginErrorCode.NoError) 
{
// Ningún error, así que las cookies.
CookieCollection cookies = autenticaciónCookieContainer.GetCookies(Nuevo URI(autenticaciónURL));
Cookie authCookie = cookies[resultado.Nombre_cookie];
RS =
Nuevo ReportingService2006();
RS.URL =
"http://Server/_vti_bin/ReportServer/ReportService2006.asmx";
RS.CookieContainer =
Nuevo CookieContainer();
RS.CookieContainer.Add(authCookie);
}
Intente
{
  RS.CreateSubscription(informe, extSettings, desc, eventType, matchData, parameters1);
}
capturas (Exception ex)
{
  Console.WriteLine(ex.Message.ToString());
}

Puedo interpretar las cosas como esta:

  • Nuestra parte web necesita el servicio de autenticación de acceso telefónico y decir, "Hey, Tony, soy yo!".
  • Servicio de autenticación responde diciendo:, "Hey, Yo te conozco. Cómo son los niños? Aquí es un símbolo."
  • Que llame al servicio SSRS y decimos, "Tony me ha enviado, aquí está el símbolo (token)."

</final>

Suscribirse a mi blog.

Etiquetas de Technorati: , ,

Rápida y sencilla: Provisión de un sitio Web mediante el modelo de objetos de SharePoint en C#

He intentado buscar un pequeño código de fragmento de código que mostraría Cómo puedo crear un SPWeb nuevo en una colección de sitios. No encuentro como fácilmente o rápidamente como esperaba así que pensé que sería bofetada juntos una pequeña entrada sobre el tema.

Este código crea un nuevo sitio Wiki:

 SPSite siteCollection;

    siteCollection = Nuevo SPSite("http://conchang-o9l8qi");

    SPWeb w = siteCollection.OpenWeb();

    w.Webs.Add("xyzzy", "xyzzy título",
        "xyzzy Descripción", 1033, SPWebTemplate.WebTemplateWIKI, falso, falso);

Mis búsquedas iniciales fallaron porque estaba buscando frases como "disposición un sitio web utilizando el modelo de objetos de sharepoint" y similares.

Si usted búsqueda para "Webs.Add()", Usted encontrará un número de entradas en el blog muy útil, Artículos MSDN y la documentación de SDK que entrar en profundidad sobre este tema. Definitivamente te recomiendo Este sitio.

</final>

Suscribirse a mi blog.

Etiquetas de Technorati: