Al habilitar el blob cache en un sitio de publicación, después de cierto tiempo (pueden ser días, o incluso semanas) empieza a registrarse un par de errores en el Application Log:
Event Type: Error
Event Source: Office SharePoint Server
Event Category: Publishing Cache
Event ID: 5538
Date: 5/6/2008
Time: 4:34:51 PM
User: N/A
Computer: PRONOSTIC04
Description:
An error occured in the blob cache. The exception message was 'Access to the path 'C:\blobCache\1998969947\21eb88ef-e87f-4f3c-80d6-67b818822736.bin' is denied.'.
Event Type: Error
Event Source: Office SharePoint Server
Event Category: Office Server General
Event ID: 7888
Date: 5/6/2008
Time: 4:34:51 PM
User: N/A
Computer: PRONOSTIC04
Description:
A runtime exception was detected. Details follow.
Message: Access to the path 'C:\blobCache\1998969947\21eb88ef-e87f-4f3c-80d6-67b818822736.bin' is denied.
Techinal Details:
System.UnauthorizedAccessException: Access to the path 'C:\blobCache\1998969947\21eb88ef-e87f-4f3c-80d6-67b818822736.bin' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Microsoft.SharePoint.Publishing.BlobCache.WriteIndex(Boolean tokensOnly)
at Microsoft.SharePoint.Publishing.BlobCache.<>c__DisplayClasse.<CheckSiteChanges>b__a()
at Microsoft.Office.Server.Diagnostics.FirstChanceHandler.ExceptionFilter(Boolean fRethrowException, TryBlock tryBlock, FilterBlock filter, CatchBlock catchBlock, FinallyBlock finallyBlock)
Jussi Paolo tiene un post donde resuelve el problema http://howtocode.blogspot.com/2007/11/moss-blogcache-not-working.html, el dar permisos a la cuenta IIS_WPG hizo desaparecer el error!! Bueno, además desactive el blobcache, borre las carpetas, y lo volvi a activar.
Si en algunos dias o la proxima semana vuelve a aparecer el error, veran otro post al respecto... esperemos que no :D
Y así es, después de que uno de mis propósitos de año nuevo era escribir mas a menudo en mi blog, heme aquí 4 meses después escribiendo...
Un punto positivo, es que por fin habilite el CKS:EBE en mi blog en sharepoint, me encanta el tema default (de Heather Waterman) pero espero en poco tiempo crear algo mas personal.
Por cierto, batalle un poco para echar a andar el EBE en este sitio existente, durante la semana pasada mi blog no mostraba ningún post... en los foros del CKS hay una discusión en la que viene la solución al problema.
En mi caso fue porque había modificado la columna de Categorías en la lista de los posts, para que aceptara múltiples categorías. Simplemente desactive el feature de CKS:EBE, fui a la columna y le quite ese checkbox, y aunque perdí la configuración de las categorías de mis posts, ya se muestran correctamente.
Con el tiempo actualizare las categorías de los posts anteriores, pero me concentrare mas en escribir nuevas cosas, que estos 4 meses no han sido en vano ya que he estado aprendiendo mucho sobre MOSS, WF e InfoPath.
Saludos, y escriban sus comentarios!!
Una vez mas nuestro querido amigo InfoPath Services ha hecho de las suyas... con un par de errores que a continuación describo:
Tengo una forma (inofensiva a primera vista) que funciona a la perfección en InfoPath cliente. Esta forma utiliza el Contact Selector, y obtiene información de algunas listas de SharePoint y un WebService. Cuando se habilita para ser mostrada con InfoPath Forms Services, y la abro por medio del browser, todo funciona bien hasta que busco una persona en el Contact Selector, despues de un par de segundos aparece un mensaje de error:
There has been an error while processing the form.
Como este error no da mucha información sobre lo que paso realmente, hay que ir a los logs de SharePoint, donde pude identificar estas lineas:
Exception Message: Unexpected end of file while parsing Name has occurred.
DataObject constructor failure System.Xml.XmlException: There is an unclosed literal string.
Investigando un poco, encontré que es un error relativamente común relacionado con data connections sin utilizar en las formas... lo malo de todo esto es que no es mi caso. Entonces, no me quedo mas remedio que empezar nuevamente, paso a paso, volver a construir la forma y validar que funcionara en web, hasta encontrar el elemento que el xml de mi forma.
Los culpables de todo esto fueron una "ñ" y una "í", en los nombres de un par de listas que consulto en SharePoint. Por lo visto, a InfoPath Services no le gustan los caracteres especiales en los nombres de los Data Connections, si te conectas a listas de SharePoint como el nombre lo obtiene automáticamente del titulo de la lista, y no lo puedes modificar desde InfoPath.
Una ves que cambie el nombre de mi lista (sin acentos ni caracteres raros), y conecté mi forma de nuevo, todo funciono correctamente :D
Bendito español...
Asi es, si esperaban un nombre rimbombante y sin sentido para la versión release del actual silverlight 1.1 alpha, pues simplemente va a ser un cambio de versión. En lo personal me parece correcto, esa gente de marketing de microsoft ya habia hecho muchas travesuras con sus cambios de nombre (recuerdan WinFX - .net 3.0 y ahora el freak .net 3.5 ?? ).
Bueno Silverlight 2.0 estara disponible justo en las fechas del próximo evento MIX, y por lo que platica Tim Sneath en su blog con toda la funcionalidad que le van a incluir, si justifica el que ya no sea considerado una version 1.x
P.D. ultimamente habia evitado publicar noticias, con lo de "Ya esta listo Visual Studio 2008 RTM" parecia que cada blog debia de postearlo, y pues como que pierde interes... Pero como ni Rocky ni Chris han escrito la noticia, pues aqui esta :D
En mi experiencia (no solo de SharePoint, sino en general de este mundo de la informática) a la gente de Infraestructura le fascina limitar el espacio en disco. Antes porque no habia mucho. Ahora, porque les encanta hacer batallar a los desarrolladores/implementadores de sistemas :D
Bueno ya en serio, un ambiente de producción normalmente tiene limitado los espacios en C (porque solo debe ser para el OS), dejando otra unidad de disco donde poner los datos y la información. Pero en el mundo de SharePoint y otros productos Microsoft, aunque el instalador te pone la opcion de cambiar la ruta de instalación, siempre y repito SIEMPRE instala algo en C, SharePoint, segun he visto es poco (menos de 200 megas) pero algo va.
Cuando trabajas en este tipo de ambientes tan restringidos, es muy recomendable mover los logs de SharePoint a la unidad de datos. Estos pueden crecer mucho y ocupar bastante espacio, y despues tener problemas de espacio en disco y alentar todo el servidor...
Y precisamente eso me acaba de pasar hoy, llegar a las 8:00 AM y ver que tengo archivos de log de 600 MB es realmente escalofriante.... y mas aun cuando solo existia errores como este:
"The previous instance of the timer job 'X', id='{guid}' for service '{guid}' is still running, so teh currentinstance will be skipped. Consider increasing the interval between jobs'.
y com este, habia millonesimos mas con todo tipo de jobs y guids (imaginen un notepad de 600 megas, solo de este error). Y era muy sospechoso porque el dia anterior se reinicio el servidor y windows aprovecho para instalar los updates...
Bueno como esto no se podia quedar asi (practicamente me habia acabado mis 7.89 gigas que me dieron en C :P) encontre este kb de microsoft en el que explica que esto se debe a un security update 931212 (MS07-040)... bueno perfecto debe decir como resolver el problema y listo.... pero no, en lugar de resolver el problema el articulo te dice que cambies la configuracion del log para que no se registren los errores y simplemente captures errores de nivel mas alto...
Hey, me encanta SharePoint y siempre lo defiendo, pero eso no va a hacer que deje de quejarme cuando no arreglan los errores y simplemente los tapan... cuantos recursos de hardware no se gastaran en generar y arrojar esas excepciones, cuando seguramente pueden ser evitados...
Y asi empezo mi Halloween. Aunque la verdad en el DF todas las noches te da miedo salir :P
Utilizando el control File Attachment en InfoPath 2007, pues resulta que este no funciona cuando abres la forma en el browser, al menos no cuando es una tarea de un workflow... Curiosamente no me habia dado cuenta al estar haciendo todas mis pruebas desde Outlook 2007 (como me gusta contestar los workflows desde Outlook), y desde ahi funciona muy bien.
Encontre la solución en el blog de Cris White: http://chrissyblanco.blogspot.com/2006/07/workflow-that-uploads-document-via.html, y cuando ves que todo se resuelve con una linea de codigo, bueno hasta el ejercito de programadores y testers de Microsoft se les escapan estos tipos de errores...
Me pregunto si ya lo sabran... ¿acaso actualizaran este archivo en el SP1? Cuando lo pueda instalar escribire al respecto :D
Saludos!!
Si, es noticia vieja, pero mas vale tarde que nunca.... me acaban de llegar los DVDs del TechEd y recorde la excelente presentación de Dustin Miller (la mejor presentación del TechEd, al menos de las que pude asistir); la mejor noticia de todo es que esta disponible en su blog, para que todos la vean.
Lo cual se los recomiendo ampliamente, Dustin explica todo el poder del SharePoint Designer, para todos aquellos que todavia no estan convencidos sobre el "nuevo FrontPage" esta presentación quiza los haga cambiar de opinion.
yo lo vi, yo estuve ahi!! y participe en la ola :D
Para que septiembre no se vaya en blanco, aqui les comparto algo que nos anduvo dando algunos dolores de cabeza...
Infopath tiene un control ActiveX llamado "Contact Selector", el cual permite capturar usuarios en las formas de infopath, esto se vuelve muy util principalmente cuando usas Infopath + Workflows en SharePoint... no voy a describir los pasos de como hacerlo ya que existe un muy buen articulo de la gente de InfoPath con todo lo que ocupan para ello.
Un error, que por lo visto no es muy común porque no encontre nada en google al respecto, es que cuando buscas una persona con el control, te sale un mensaje que dice Search failed. La primera cosa que deben revisar, es que se aseguren de haber incluido el archivo Context.xml como secondary data source en su forma, y de que lo hicieron sin errores de ortografia, recuerden que es case sensitive por lo que context.xml no es lo mismo que Context.xml.
Una ultima cosa, en algunas ocasiones me sucedio que aun con todo configurado correctamente el contact selector seguia sin funcionar.... aun cerrando y abriendo infopath parecia no funcionar. Tuve que quitar el control y volverlo a agregar, y como que reconocio el datasource y volvio a funcionar.... esto sucedio un par de veces, pero no he logrado reproducirlo consistentemente... al fin gajes del oficio...
cheers!!
Dicen que mas vale tarde que nunca, pero despues de un par de dias de vacaciones hay que volver a agarrar ritmo en los posts :D
Ya tiene algunos dias publicado el nuevo podcast de la comunidad de Sharepoint México, la tercera emision en donde continua la charla sobre muchos temas relacionados a SharePoint, y estoy muy orgulloso en decir que tuve la oportunidad de participar en este 3er podcast, invitado por Luis du Solier, en donde platico sobre mi experiencia en el TechEd, y mi participacion en el proyecto CKS.
Por lo tanto, fieles lectores (si, les hablo a ustedes 2 :P) los invito a que escuchen este podcast, y si no han escuchado los anteriores tambien los invito a que lo hagan, y subscribanse para que esten al pendiente porque, ¡esto apenas esta arrancando!
Cheers!!
Crossposted from http://blogs.timovil.com/pedropablo/Lists/Posts/Post.aspx?ID=23
Existen algunos tipos de columna (Lookup, People, Hyperlink/picture) que al momento de accederlos desde código, regresan una cadena con este formato "1;#Opcion1"
En SharePoint 2003 tenias que crear tu propia funcion que convierte ese formato en el objeto a buscar, ahora en SharePoint 2007 nos dan como opciones las variables SPFieldLookupValue y SPFieldUserValue para poder obtener el valor esperado de ellas:
SPList lista = web.Lists("MiLista");
SPFieldUserValue usuario = new SPFieldUserValue(web, lista["Usuario"]);
Console.WriteLine(usuario.Email);
SPList lista = web.Lists("MiLista");
SPFieldLookupValue usuario = new SPFieldLookupValue(lista["Usuario"]);
Console.WriteLine(usuario.LookupValue);
Lo mismo sirven para cambiar el valor de una de estas columnas, no tienen que armar la cadena sino construir el objeto pasandole el id y el valor (y adicionalmente el SPWeb, para el SPFieldUserValue).
Por ultimo, tambien existen las colecciones de estos objetos (SPFieldUserValueCollection, y SPFieldLookupValueCollection) para poder obtener y manipular la información cuando las columnas de sharepoint soportan multiples personas, asi como los multichoice y esos tipos de columnas que la verdad se volvia muuuy latoso de manejar como cadena...
Espero que esto les salve varias lineas de código, o que ya puedan desechar esas funciones hecahs para sus programas con WSS v2 :)
Cheers!!
Crossposted from http://blogs.timovil.com/pedropablo
Si, asi es, por lo visto es epoca de liberaciones, porque ademas del Beta 2 de visual studio, desde el viernes pasado fue liberada la version RC1 de Silverlight, junto con otro conjunto de herramientas... pueden checarlo en este post de Tim Sneath.
Ok, esta historia tiene una parte mala: esta version RC1 tiene cambios contra la version Beta liberada durante el Mix (0.9)... si alguien ha estado trabajando con silverlight, seguramente recuerdan que el cambio entre la version CTP y la version Beta fue bastante radical, no porque hubiera incontables cambios sino porque muchas funciones comunes (al menos en mi caso) cambiaron y se tuvo que corregir muchas lineas para que funcionaran con la nueva version.
Para que empiecen a revisar su codigo, y corregir lo necesario para que funcione con la nueva versión, pueden revisar el blog de Joe Stegman donde escribe los "breaking changes" entre la version anterior y el RC1. En mi caso el cambio si me afecta pero no mucho :D, o no tanto como el cambio de CTP a Beta
Cheers!!
Acabo de ver 2 aplicaciones hechas con Windows Presentation Foundation (WPF) que son muy interesantes:
Jing: Si quieren sacar una foto o video de su pantalla, de una manera sencilla y facil, esta es la unica herramienta que van a ocupar :) es sencilla, facil de usar, tiene una gran interfaz.
- Pros: graba los videos como swf, el cual ya tiene un reproductor integrado. Es un proyecto en desarrollo por TechSmith, los creadores de Camtasia. Excelente para crear screencast
- Contras: solo puede grabar los videos como swf
Familiy.Show: Una aplicación que permite crear un arbol genealógico, con una muy buena interfaz para moverte por el arbol, puedes hacer busquedas y mas cosas.
- Pros: Excelente interfaz, facil de usar, exporta a formatos "estandar" de este tipo de aplicaciones. Además, el codigo fuente esta en codeplex.
- Contras: es un demo para Microsoft, por lo que no habra ningun soporte ni mejora.
Son 2 ejemplos de aplicaciones con una interfaz sencilla y muy util... pueden obtener alguna idea de como integrar WPF a sus aplicaciones y hacerlas mas interesantes y mejorar la usabilidad de las mismas :D
¿Han escuchado sobre PowerShell (antes "Monad")? Es un nuevo command line que tiene su propio lenguaje y como 130 de cmdlets (instrucciones) con el que puedes hacer cosas muuy interesantes para administrar y automatizar procesos, que antes hacias con windows scripting; en mi post sobre el TechEd les dije que iba a ser algo muy interesante por investigar.
Aunque esta muy orientado a IT Admins, nosotros desarrolladores mortales podemos aprovechar algunas de las ventajas que nos da esta herramienta... una de las características de PowerShell es que esta orientado a objetos, y te permite instanciar objetos COM y objetos de .NET...
¿Ahora donde entra SharePoint en todo esto? Bueno les pongo algunos problemas
- Quiero obtener todas las listas de un sitio, su fecha de creación y modificación y quien las hizo.
- Quiero ocultar una lista, que no se vea en el View all site content
- Quiero hacer que una columna de mi lista no este disponible en la edición del elemento, que solo pueda ser capturado cuando sea un nuevo elemento.
Ninguna de estas acciones puede ser accedida por medio de la interfaz web. ¿Como lo resolverian? probablemente creando algun programita en .NET que haga las modificaciones... o podrian ser muuy cool y usar powershell para todo esto :D
¿Vamos a resolver el primer punto, que pasos hay que seguir?
Antes que nada hay que tener instalado PowerShell. Lo pueden bajar aqui.
Al abrir PowerShell podran observar que es una linea de comandos, tal como les dije al principio. PowerShell trae precargadas algunas librerias para poder hacer cosas, y SharePoint NO es una de ellas, por lo que hay que cargarla:
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
Como pueden ver esto es algo propio de .NET 2.0, no de PowerShell. Por medio de reflexion, cargamos un assembly. por cierto como no deberiamos hacer Partial Bind en ningun desarrollo, tampoco aqui deberiamos hacerlo por lo que lo correcto seria utilizar la funcion Load
[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
Ya que tenemos disponible la dll, podemos instanciar objetos de SharePoint:
$spsite = New-Object Microsoft.SharePoint.SPSite("http://mysharepoint")
En PowerShell podemos crear variables (las variables tienen que empezar con el caracter $) y crear objetos con el cmdlet New-Object.
Si no recordamos los comandos, existe el cmdlet get-member que nos regresa los metodos y propiedades del objeto en cuestion:
$spsite | get-member
Para que solo nos muestre propiedades o metodos hay qeu agregar el parametro -membertype method o -membertype property. Entonces ya tenemos un objeto SPSite en la variable $spsite, asi que podemos acceder a nuestro sitio web:
$web = $spsite.OpenWeb()
Y con nuestro sitio web podemos obtener las listas existentes:
$web.Lists
Por desgracia nos regresa absolutamente TODAS las propiedades de nuestra lista... y hay un par que tienen mucho XAML por lo que es muy poco practico para revisarlas. Aqui entra la magia de PowerShell y su cmdlet "select"
$web.Lists | select title, created, author
Esto nos regresa todas las listas, pero solo las propiedades de titulo, la fecha de creacion y el creador (author). Podemos concatenar otros cmdlet como sort o where para obtener un mejor reporte de nuestras listas:
$web.Lists | select title, created, author, hidden | where {!$_Hidden} | sort created
algo importante aqui es la variable "$_", es una variable especial que utilizas para hacer referencia al objeto del contexto en el que estas. Esta ultima instrucción se podria leer como "dame las propiedades title, created, author y hidden, donde hidden sea falso y ordeando por la fecha de creacion". Cool, no?
Por ultimo, como quiero poder ver esa información fuera de powershell, le agrego al final el cmdlet para convertir el texto a HTML y lo exporto a un archivo
$web.Lists | select title, created, author, hidden | where {!$_Hidden} | sort created | convertto-html > c:\ejemplo.html
con el operador ">" puedo mandar lo que me arroje powershell a un archivo fisico!!
Bueno, es un pequeño ejemplo de algo muy sencillo que se puede hacer en powershell. Existen muchos mas cmdlets y muchas otras opciones, y aunque el ejemplo fue con dlls de SharePoint pueden hacer esto con cualquier dll de .NET... y puedes generar scripts para automatizar procesos etc. etc. etc.
Saludos!!
Crossposted desde http://blogs.timovil.com/pedropablo/Lists/Posts/Post.aspx?ID=17
Si, asi es. Una VM que tenia con el trial de sharepoint se le ocurrio expirar justo cuando voy a volver a usarla. Siempre pasa, ¿no?
Al menos SharePoint tiene un excelente modelo que quita muchos dolores de cabeza al respecto: la versión Trial, Standard y Enterprise comparten los mismos bits. Es decir es el mismo software, lo que cambia es la llave que pones (o no poner llave para el trial :P)
Cuando trate de actualizar mi llave, se tardo un buen rato y al final me dio un informativo error:
FAILURE! your license conversion operation failed. Check the error logs
Y lo volvi a hacer y ahora si inmediatamente me decia el mismo error. En mi caso reinice el server y arranco con la licencia activa y todo funcionando wheeee!!!!
Como no siempre podre reiniciar un server, ademas de no quedarme con la duda le pregunte al buen google acerca del error y me encontre este post donde dicen que solo es necesario reinicar el timer de Windows SharePoint Services, y un iisreset que magicamente resuelve muchos de los problemas. Habra que probarlo para el proximo trial expirado que me encuentre :)
Saludos!!!
Crossposted desde http://blogs.timovil.com/pedropablo