sábado, 30 de abril de 2016

Asignando valor predeterminado a una propiedad de un elemento Web de forma declarativa SharePoint 2013

Asignando valor predeterminado a una propiedad de un elemento Web de forma declarativa SharePoint 2013





Para agregar un valor predeterminado a una propiedad de un elemento web debemos de ir al código de servidor o Code Behind del control de usuario, como se muestra en la imagen de abajo.

Debemos definir una propiedad pública de la clase del control de usuario.  Y agregar los atributos: WebBrowsable,WebDisplayName, WebDescription,Category y Personalizable, como se muestra en el código de abajo.

Luego vamos a definir un módulo dentro del proyecto, esto nos permitirá adicionar páginas y elementos web a las páginas cuando se instale la solución y agregar el valor predeterminado a la propiedad.




Luego creamos una Application Page como plantilla para entonces crear una instancia de la página donde definamos el elemento web.




En la página se define las zonas de los elementos web para poner distribución de los elementos Web dentro de la página.




Ahora vamos a modificar el archivo elements.xml donde se define la instancia de la página y los elementos web dentro de ella.


     


Y través del nodo properties, definimos los nombres de cada propiedad con su respectivo valor.

Y eso es todo!

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

martes, 26 de abril de 2016

Como conocer los usuarios que estan conectados el día de hoy en SharePoint 2013

La única forma que encontrado de lado de SharePoint es ejecutando un comando de T-SQL hacia la base de datos de estádisticas con WSS_Logging o a veces lo nombran como WSS_UsageAplication.   Esta tiene diferentes vistas y funciones que nos pueden proveer información ya relacionada para facilitarnos la consulta.

El tema es que tienes que tener configurado la colección de datos de uso y salud.   Para ello ve al Central Adminsitration, a Montoring y luego Configure usage and health data collection.




Luego navegue un poco y espere por lo menos un día para que actualice la base de datos.  Si desea ver información más actualizada puede ejecutar manualmente los siguientes trabajos de SharePoint Timer Service.





Ahora el  query t-sql para ver la información.  


DECLARE @StartTime DATETIME     = GETDATE() ,
     @EndTime DATETIME     = DATEADD(day, 1, GETDATE());
      SELECT  UserLogin AS [User] ,
        COUNT(RowId) AS Hits ,
        MAX(LogTime) AS LastAccessTime

        FROM    [dbo].[RequestUsage]
       WHERE   PartitionId IN (
          SELECT  PartitionId
          FROM    dbo.fn_PartitionIdRangeMonthly(@StartTime, @EndTime) )
          AND LogTime BETWEEN @StartTime AND @EndTime
          AND UserLogin IS NOT NULL
          AND DATALENGTH(UserLogin) > 0
      GROUP BY UserLogIn


Y eso es todo amigos,

Juan Manuel Herrera

martes, 19 de abril de 2016

Request Management un Servicio de Cuidado


Request Management es un servicio introducido de SharePoint 2013, según la definición que podemos encontrar en Technet dice: “Permite a los administradores administrar las solicitudes entrantes y determinar cómo distribuir estas solicitudes”.  https://technet.microsoft.com/en-us/library/jj712708.aspx 

Pero solo habilitarlo y no configurarlo puede ser un gravísimo error.   Si la entrega de las páginas en el navegador es de forma desordenada o que demora alrededor de un minuto redireccionar de una página a otra puede ser un síntoma que el servicio esta levantado y no está configurado.  Como se muestra en la imagen de abajo.



Este servicio deberá estar habilitado cuando contemos con más de dos servidores front-end y lo tengamos configurado con  un balanceador o NLB, y tengamos una necesidad de administrar las solicitudes a los front-end en una granja mediana o grande, no es necesario ni aplicable para una pequeña granja.  Entonces la recomendación será apague el servicio.  Este se puede realizar  a través del Central Administration, en Manage services on server.






Solo presione la acción Stop sobre la fila donde aparece Request Management.  Haga clic en el botón de Refesh del navegador sobre la página y deberá ver el contenido de forma correcta.












Más sobre request Management y como configurarlo si cuentas con más de un servidor Font-end de tu granja.



http://www.harbar.net/archive/2012/11/12/Article-Request-Management-in-SharePoint-Server-2013.aspx


Hasta la próxima,



domingo, 3 de abril de 2016

Los secretos de las listas de SharePoint (2003,2007,2010,2013)

Investigando y evaluando la lentitud de una granja de SharePoint me llevo a indagar como SharePoint almacena las listas y aunque ya lo sabia no me habia percatado de lo siguiente:
Todas las listas de SharePoint se almacena en una sola tabla llamada AllLists en la base de datos de contenido (WSS_Content_????????????).


Segundo hallazgo todos los elementos de todas las listas incluyen las bibliotecas (que son listas especializadas) se almacenan un una sola lista llamada AllDocs.

Tercer hallazgo y aún mas revelador, los elementos eliminados permenecen en la lista hasta que el proceso de papelera de reciclaje los elimine en algún momento.  Observen lo siguiente:

En la Interfaz Web la lista aparece sin elementos
Pero a nivel de base de datos es otra historia Al ejecutar los siguientes Comandos T-SQL :

SELECT
*
FROM [WSS_Content_Reuniones].[dbo].[AllLists]
where --tp_Title like '%factura%'
tp_id = '00DA3DE4-D8AF-4EF1-A956-E44CBFEF1012'
SELECT count(*) as totalelements
FROM [WSS_Content_Reuniones].[dbo].[AllDocs]
where ListId = '00DA3DE4-D8AF-4EF1-A956-E44CBFEF1012'



Entonces si realizamos cargas grandes de documentos o elementos de las listas, aunque los eliminemos impactaran las cargas futuras de los elmentos y en las consultas que se hagan a la tabla.
Ahora cual es el campo que identifica si fue eliminado un elemento de la lista.  Veamos la siguiente consulta

SELECT
*
FROM [WSS_Content_Reuniones].[dbo].[AllDocs]
where ListId = '00DA3DE4-D8AF-4EF1-A956-E44CBFEF1012'
AND LEN(DeleteTransactionId) = 0




El campo es el DeleteTransacionId que si la logintud = 0 quiere decir que no esta eliminado, y lo único no eliminado es el encabezado de la lista y las páginas de la lista.
Para eliminar de la papelera de reciclaje los elementos podemos ejecutar las siguientes lineas:

$site = Get-SPSite http://sp2013man/sites/prueba
$site.RecycleBin | where {$_.DirName -like '*pruebaFacturas'} | foreach{ $site.RecycleBin.Delete($_.Id)}
$site.RecycleBin.Count // resultado = 3
Si ejecutamos el siguiente
SELECT count(*) as totalelements
    FROM [WSS_Content_Reuniones].[dbo].[AllDocs]
    where ListId = '00DA3DE4-D8AF-4EF1-A956-E44CBFEF1012'
El resultado es ahora:



Bueno en esta aprendimos que SharePoint para grandes volumenes de datos no es del todo la mejor opción de hecho encontré el siguiente artículo de msdn https://msdn.microsoft.com/en-us/library/ff647105.aspx
Using SharePoint Lists vs. Database Tables



Así que cuando pensemos grandes volumentes de elementos por el esquema de la base de datos de contenido de SharePoint no es una buena idea.

Hasta la proxima amigos!