Wednesday, July 22, 2009

Cannot make a cache safe URL for "init.js", file not found

Sí, me dijeron que debía instalar un paquete de lenguaje, porque el sitio que se está intentando subir al nuevo servidor utiliza un lenguaje diferente del instalado con mi MOSS 2007, pero aun no funciona…

Así te puedes pasar todo el día, si efectivamente instalas tú Language Pack, que estoy seguro lo encontraste aquí:
http://www.microsoft.com/downloads/details.aspx?FamilyID=2447426b-8689-4768-bff0-cbb511599a45&displaylang=en

Pero el siguiente mensaje seguirá apareciendo: Cannot make a cache safe URL for "init.js", file not found. Please verify that the file exists under the layouts directory.

Lo que ocurre es que muy seguramente estas intentando subir un sitio que fue desarrollado utilizando WSS 3.0 a tú nuevo y reluciente MOSS 2007.  Ahí está el problema, de igual forma debes instalar el Language Pack del idioma utilizado por el sitio, pero para esa versión de Sharepoint específica, la cual está por aquí: http://www.microsoft.com/downloads/details.aspx?FamilyId=36EE1BF0-652C-4E38-B247-F29B3EEFA048&displaylang=en

Felíz restore

Labels: , , , ,

Tuesday, June 23, 2009

Preparando Exam 70-541

Algunos links para cubrir los temas que se preguntan en el examén:

1. Deploy a Web Part to the Windows SharePoint Services server.

  1. Register an assembly as a safe control in the Web.config file
    ”To deploy the Web Part to your WSS Site, you must then register the control as safe in web.config’s SafeControls node, as described in Chapter 3. Assuming the project name LitwareWebParts, the following entry in the SafeControls node in web.config will register the assembly and namespace as safe.
    <SafeControl Assembly="LitwareWebParts" Namespace="LitwareWebParts"
        TypeName="*" Safe="True" />
    Note that for this example, we are not strong-naming the assembly, and therefore we can use the simple name of the assembly. When you strong-name the assembly, you should always register the SafeControl entry using the full four-part assembly name.” [1]

Monday, May 04, 2009

Operation is not valid due to the current state of the object.

O debería decir mejor:

The database WSS_Content on ComputerName\Microsoft##SSEE is not accessible to missing Windows Internal Database signatur

Pasaron una cuantas horas y un colapso de mi sistema nervioso para llegar hasta aquí y gracias a los logs de windows y del propio Sharepoint.

untitled

http://support.microsoft.com/kb/944267/en-us/

- Primer consejo, lean todas esas entradas de Microsoft en inglés, la traducción es sencillamente una pestilencia.

- Segundo, estos errores de verdad que pueden causarle a un mortal un colapso nervioso, más cuando hay grandes proyectos de por medio que de un momento a otro dejan de andar.

-

En letra roja les digo que corran esto con mucho cuidado, por ejemplo lo que hacen ahi vuelve y deja los archivos web.config de sus sitios con la configuración original, así que si tienen en estos entradas personalizadas se van a perder. Esto es el caso cuando hemos utilziado webparts, páginas aspx, en fin extensibilidad a través de programación para sharepoint que siempre requiere modificar el web.config.

La teoría dice que una actualización pudo haber sido instalada, yo la verdad no pude ver en qué momento esto sucedió, así que creo que Microsoft debería hacer algo al respecto porque este error cuesta varias horas y que los sitios de Sharepoint dejen de funcionar abruptamente.

Felíz solución

AJAXControlToolKit – El blog de Pinocho

En el siguiente blog dicen algunas mentirillas, que no lastiman a nadie pero si nos vuelven paranóicos a los principiantes:

http://weblogs.asp.net/jan/archive/2007/02/26/using-the-ajax-control-toolkit-in-sharepoint.aspx

Nuestro buen amigo dice que para poder utilizar el ACT en Sharepoint es necesario agregar un par de entradas en los tags assemblies y controls del web.config. MENTIRA!!

Eso para nada es necesario amigos mios, lo único que Sharepoint quiere es que la dll del ACT sea confiable para el, así que la primera nota del amigo sí es cierta, pero solo la mitad, debemos poner la DLL en la carpeta BIN del sitio de Sharepoint.

Algunos blogs parecen autoria de Pinocho, pero solo con la práctica nos vamos dando cuenta de que muchas cosas le han pasado inadvertidas a muchas personas.

Feliz práctica

Labels: , ,

Saturday, April 25, 2009

Sharepoint List … Programáticamente

Hola de nuevo, y esta vez quiero mostrar un sencillo ejemplo de cómo podemos guardar información en una lista previamente configurada en Sharepoint.

Suponiendo que tenemos una página aspx en la cual programamos una interfaz adecuada para ingresar los valores y posteriormente guardarlos en la lista, el código de ejemplo quedaría de la siguiente forma:

Protected Sub btnGuardar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGuardar.Click
        SPSecurity.RunWithElevatedPrivileges(AddressOf Guardar)
    End Sub

    Private Sub Guardar()
        Dim objSitio As SPSite = New SPSite(ConfigurationManager.AppSettings("MiSitio"))
        Using objWeb As SPWeb = objSitio.OpenWeb()
            objWeb.AllowUnsafeUpdates = True
            Dim objLista As SPList = objWeb.Lists("MiLista")
            Dim objItem As SPListItem = objLista.Items.Add()
            objItem("Campo 1") = "xxxx"
            objItem("Campo 2") = "yyyy"
            objItem.Update()
            objWeb.AllowUnsafeUpdates = False
        End Using

    End Sub

Lo primero y más importante es la llamada al método:

SPSecurity.RunWithElevatedPrivileges(AddressOf Guardar)
Con lo anterior aseguramos que un usuario que ha iniciado sesión en el sitio de Sharepoint pueda ejecutar la acción.

Ya en el método Guardar(), se supone que ya existe un sitio llamado MiSitio, con una lista en ese sitio llamada MiLista la cual tiene una serie de campos, Campo 1 y 2. Eso obviamente lo deben cambiar a sus valores reales.

Lo realmente importante es la llamada a la propiedad AllowUnsafeUpdates con el valor true, lo cual le dice a la Lista que debe quedar hábilitada para permitir la actualización cuando se invoca el método  Update().

Lo anterior, que conste que lo escribo en letra roja, es practicamente una impersonación, así que hasta el más razo de los usuarios (read only) podrá hacer una actualización sobre esa lista. Por lo tanto miren la llamada nuevamente a AllowUnsafeUpdates pero esta vez asignado a False, porque puede ser un hueco de seguridad lo anterior. Además si ustedes quieren que la actualización la pueda ejecutar únicamente un usuario con mayores privilegios pues es cuestión de adicionar código que valide el grupo o algo por el estílo que verifique los permisos de dicho usuario, ya que lo anterior lo puede ejecutar cualquiera.

Felíz Update.

Labels: ,

Thursday, April 16, 2009

Windows Sharepoint Services Book – OnLine

Esto me dió gran sorpresa y entusiasmo que se comparta un preview de un libro tan maravilloso sobre la tecnología ya que para los que lo compramos desafortunadamente no trae una versión dígital o los que les interese comprarlo puedan darle un vistazo antes de. Afortunadamente como lo dije en un post anterior el libro vale mucho la pena por cada dolar invertido.

http://techbus.safaribooksonline.com/9780470127285/dear_reader

Felíz preview

Labels: ,

Wednesday, April 15, 2009

El GridView programático … una triste história

Si han seguido un post anterior sobre el gridview programático notaron que todo marchó a pedir de boca.

Pero cuando habilité la paginación del gridview en la webpart apareció este engendro sobrenatural:

Server Error in '/' Application.

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.UI.WebControls.GridView.get_StateFormatter() +25


Lo anterior es lo ocurrido cuando el gridview queda configurado para paginación. ¿Pero cómo se logra el error anterior?



Antes





Protected Overrides Sub CreateChildControls() 
           Dim customField As New TemplateField 


            customField.ItemTemplate = New GridViewTemplate(DataControlRowType.DataRow, "", Me.Imagen, Me.Titulo, Me.Resumen, Me.Contenido) 
            grvPrueba = New GridView() 
             grvPrueba.AutoGenerateColumns = False             grvPrueba .ShowHeader = False             grvPrueba .RowStyle.CssClass = Me.EstiloFila             grvPrueba .AlternatingRowStyle.CssClass = Me.EstiloAlternado 
            If Paginar Then 
                grvPrueba .AllowPaging = Paginar 
                If Me.NumeroRegistros > 0 Then 
                    grvPrueba .PageSize = Me.NumeroRegistros 
                End If 
            End If 
            grvPrueba.Columns.Add(customField) 
            grvPrueba.DataSource = ConsultarLista() 
            grvPrueba.DataBind() 
            AddHandler grvPrueba.PageIndexChanging, AddressOf grvPrueba_PageIndexChanging 
Me.Controls.Add(grvNoticias) 
        End Sub


¿Si han notado que dejo para el final el agregar el gridview a la colección Controls de la webpart? Pues eso es un grave error cuando el gridview permitirá la paginación y cuesta un par de tasas de café y una tarde entera de trabajo perdido. El por qué del error, creo quedo en deuda con la explicación de fondo porque no sé la razón.



Solución



En seguida de la creación del GridView este se debe agregar a la colección Controls de tal forma que nos queda así:



grvPrueba= New GridView()

Me.Controls.Add(grvPrueba)




Feliz GridView programático

Labels: ,

Wednesday, April 08, 2009

Una luz en el tunel … Guía Sharepoint

Quiero para los que no sepan que existe una guía de Patterns & Practices para Sharepoint darles el siguiente link:

http://msdn.microsoft.com/en-us/library/dd203468.aspx

Es muy bueno sentarse a revisar esto antes de tomar desiciones sobre la arquitectura y desarrollos para Sharepoint.

Y aprovechando esta entrada también darles el link a la revista de Sharepoint en español que me parece una grandiosa entrega del tema.

http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx

Felíz arquitectura

Labels: ,

TemplateField el Gridview programático

Teniendo que hacer una WebPart para WSS 3.0 necesitaba incluir un Gridview como control de la webpart pero con controles dentro de el como lo podemos hacer desde el diseñador de visual studio.

<asp:GridView ID="gvWebPart" runat="server" AutoGenerateColumns="false">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <div>
                                  <asp:HyperLink  ID="lblContenido" runat="server" Text='<%# Bind("campo")  %>'   ></asp:HyperLink>
                                    </div>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>

Pero lo anterior solo se logra en un proyecto de tipo ASP.NET, pero en un proyecto tipo Webpart? La respuesta está aquí igualmente para cualquier otro proyecto donde no podemos hacer lo anterior vía el diseñador:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.templatefield.templatefield.aspx

Felíz Gridview programático

Labels: , ,