Our Blogs
English
Español
Skip Navigation Links
News
Our Team
Mentoring
Javier Loría
Go to home page
Go Search

 
Other Blogs
There are no items in this list.
Links
There are no items in this list.

Our Blogs > Español > Javier Loría
Libro de Mejores Prácticas de Sharepoint

Como parte de una colaboración como MCT a MS-Press, recientemente leí el libro: Microsoft Office SharePoint Server 2007 Best Practices http://www.amazon.com/Microsoft-Office-SharePoint-Server-Practices/dp/0735625387/ref=sr_1_1?ie=UTF8&s=books&qid=1219844841&sr=1-1 y la verdad me dejo muy impresionado la calidad y profundidad del mismo. El libro no es un libro de desarrollo es un libro de arquitectura. Mis comentarios en el sitio de Amazon en ingles fueron:

My review may be biased, because I really enjoyed this book.
This book is well written and instead of directly heading to the technical aspects of Sharepoint, it goes and starts with the problems that are most likely to kill a project: change resistance, politics and conflict management. However it doesn't stop there. The book digs deep into every aspect of a SharePoint project lifecycle from envisioning to deployment. This book is a must read for software architects.
PROS:
1)    Full of effective recommendations on how to get the most of SharePoint.
2)    Solid advice on how to manage SharePoint projects.
CON:
1)    It may be overwhelming to new SharePoint players. If you are new to SharePoint consider reading the chapters relevant in each phase of the project.
2)    If you are looking for technical depth and how to practices, you won't find them here.

 

 

 

Como firmar y autorizar assemblies

Paso 1: Para crear la llave: sn -k MiLLave.snk

Un archivo es suficiente para una organización de desarrollo. No se requiere 1 llave por aplicación.

Paso 2: Agregar la referencia al assembly (Ejecutable, DLL o Sitio Web) en el archivo Assembly Info.

[assembly:AssemblyKeyFile(@"c:\Llave\MiLLave.snk")]

Paso 3: Agregar una política que permita la ejecución de assemblies con esa llave y asignarle los permisos adecuados.

Esto se hace en Administrative tools .NET Framework 2.0 Configuration,

                a) Navegar al Runtime Security Policy y con clic derecho sobre Runtime Security Policy escoger Trust Assembly.

                b) Escoger donde se harán los cambios  (maquina)

                c) Escoger la ruta del assembly firmado.

                d) Cambiar la opción para que sean All Assemblies with the same assembly public key.

                e) Definir el nivel de acceso mínimo requerido por la aplicación.

                f) Finish

Paso 4: Ponerle nombre al grupo de código.

El wizard genera un grupo de código llamado Wizard_0 que queda en Machine, Code Groups. Con clic derecho renombrarlo (Gilgal). También puede moverse a debajo de otra de los códigos de grupo, por ejemplo moverlo debajo de LocalIntranet con drag and drop.

Paso 5: Validar que la aplicación corre. Con estos permisos.

Paso 6: Crear instalador

Hacer clic derecho sobre RunTime security Policy y escoger Create Deployment Package

                a) Seleccionar Machine.

                b) Seleccionar una ruta y escribir un nombre de archivo MSI.

                c) Next

                d) Finish

Paso 7: Ejecutar el MSI donde sea necesario.

Cita Citable

"No hay peor cosa que un poner a un(a) daltónico(a) a coger café"

Implementando Nombre en Pascal case

El siguiente código sirve cuando quiere implementarse un estándar de nombre Pascal case en una base de datos. El siguiente código ayuda a generar el comando de cambio de nombres de tablas y columnas, pero no completamente. Cuando el objeto tiene un nombre compuesto por más de una palabra, deberá una persona reemplazar con mayúsculas los inicios de cada palabra excepto de la primera.

SELECT 'EXEC sp_rename '''+TABLE_SCHEMA+'.'+TABLE_NAME+''' , '''

        +UPPER(LEFT(TABLE_NAME,1))+LOWER(RIGHT(TABLE_NAME, LEN(TABLE_NAME)-1))

        +''''

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLES.TABLE_TYPE='BASE TABLE'

 

SELECT 'EXEC sp_rename '''+COLUMNS.TABLE_SCHEMA+'.'+COLUMNS.TABLE_NAME+'.'+COLUMN_NAME+''' , '''

        +UPPER(LEFT(COLUMN_NAME,1))+LOWER(RIGHT(COLUMN_NAME, LEN(COLUMN_NAME)-1))

        +''', ''COLUMN'''

FROM INFORMATION_SCHEMA.COLUMNS

JOIN INFORMATION_SCHEMA.TABLES

ON COLUMNS.TABLE_SCHEMA=TABLES.TABLE_SCHEMA

    AND COLUMNS.TABLE_NAME=TABLES.TABLE_NAME

WHERE TABLES.TABLE_TYPE='BASE TABLE'

Cita de Aprendizaje
Henry Ford
Anyone who stops learning is old, whether at twenty or eighty. Anyone who keeps learning stays young. The greatest thing in life is to keep your mind young.
Cualquiera que deje de aprender es viejo, sin importar si tiene veinte u ochenta. Cualquiera que se mantenga aprendiendo se mantiene joven. Lo más importante en la vida es mantener una mente joven.
Reporting Services de Computador a Computador

Es frecuente que en el mundo las relaciones entre personas y computadores cambien a través del tiempo. Durante mucho tiempo los servicios de una empresa o del gobierno solo se podían obtener como fruto de la relación directa entre dos personas. Por ejemplo ir a la tienda a comprar o al cajero a pagar facturas. Luego con la popularización de la web la relación cambio significativamente y es también posible contar con la relación Persona-Computador, como cuando realizo compras por internet o hago "web banking". Pero hay otro tipo de relación menos conocida que es la de computador-computador, que crece en frecuencia con la exposición de los servicios web. Los servicios de Reportes de SQL 2005 (Reporting Services) no están exentos de esta sentencia y nos ofrecen también la alternativa de invocar por código al servicio web de Reporting Services, sin usar objetos propietarios, invocando la funcionalidad de reporte usando SOAP.

Para hacer esto en C#, se inicia creando la referencia web al servicio de EXECUCION de Reporting Services, No debe confundirse con el servicio de Manejo de Reporting Services.. El url para la ejecución de reportes, por defecto es: http://localhost/reportserver/ReportExecution2005.asmx?wsdl. Esta ruta deber adaptarse al ambiente de desarrollo y/o producción que se tenga. Una vez creada la referencia web puede usarse el using para referenciar las clases Proxy del cliente sin usar su namespace. Esto se hace haciendo:

using WinRSClient.WSRS2005;

 

Debe reemplazarse WinRSClient por el nombre de la aplicación y WSRS2005 por el nombre asignado al servicio al momento de creación. Una vez escrito el using pueden hacerse referencias a los objetos de el namespace sin necesidad de usar nombre absolutos.

El código necesario para hacer generar el reporte en formato XML seria:

private string EjecutaReporte(string Reporte)

{

ReportExecutionService ws; // Servicio Web Ejecucion Reportes

byte[] ResultadoBytes; // Resultado como cadena de Bytes

string Resultado; // Resultado como string

Warning[] Errores; // Lista de Warnings

string[] StIDs = null;

string Extension;

string MimeType;

string Encoding;

String SessionId; // Mantiene la sesion entre invocaciones del servicio

 

 

// Inicio de Web Service Proxy

ws = new ReportExecutionService();

ws.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;

 

// Execucion del Reporte

ws.ExecutionHeaderValue = new ExecutionHeader();

ws.LoadReport(Reporte, null);

SessionId = ws.ExecutionHeaderValue.ExecutionID;

ResultadoBytes = ws.Render("XML", "<DeviceInfo><Encoding>UTF-8</Encoding><UseFormattedValues>false</UseFormattedValues><OmitSchema>true</OmitSchema></DeviceInfo>",

out Extension, out MimeType, out Encoding, out Errores, out StIDs);

// Conversion a Texto del resultado, debe ser UTF-8 porque fue lo que pedimos

Resultado = UnicodeEncoding.UTF8.GetString(ResultadoBytes);

ws.Dispose();

 

return Resultado;

}

 

Este código esta deliberadamente escrito sin control de errores ni manejo de excepciones, con el fin de enfatizar en la parte funcional del código. Deben monitorearse las excepciones y la colleccion de Warnings que llame en este caso errores.

 

START WITH en Oracle y WITH en SQL

En Oracle existe la setencia START WITH and CONNECT BY, de manera que se puede hacer
SELECT child, parent, level
FROM  Prueba
START WITH parent is null

  CONNECTED BY PRIOR child = parent;
En SQL como sintaxis equivalente tenemos:
WITH Empleados (EmployeeID, ManagerID, Level)
AS
 (
 SELECT EmployeeID, ManagerID, 1
 FROM HumanResources.Employee
 WHERE ManagerID IS NULL
 UNION ALL
 SELECT Employee.EmployeeID, Employee.ManagerID, Empleados.Level+1
 FROM HumanResources.Employee
 JOIN Empleados
 ON Empleados.EmployeeID=Employee.ManagerID
 )
SELECT * FROM Empleados

Reparación de SP2 SQL Server 2005

Si ha bajado el SP2 de SQL 2005 antes del 5 de marzo del 2005 debes reparar la instalación usando http://www.microsoft.com/downloads/details.aspx?FamilyId=e2c358a1-ecc4-4c49-8f65-daa6b7800eec&displaylang=en, el siguiente documento explica las razones http://support.microsoft.com/kb/933508. El no hacerlo producirá problemas de planes de mantenimiento y en las paquetes de Integration Services.

 ‭(Hidden)‬ Admin Links