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.
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.
Disponible para bajar de MS
http://www.microsoft.com/downloads/details.aspx?FamilyID=3d5e96d9-0074-46c4-bd4f-c3eb2abf4b66&DisplayLang=en
29/11/2006 Migrando nuestros Informes a SQL Server Reporting Services 2005
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-ES&EventID=1032310848&CountryCode=ES
12/12/2006 Migración de Servicios de Análisis 2000 a 2005
http://www.microsoft.com/mexico/empresas/webcasts/sql/default.mspx
13/12/2006 De DTS a Integration Services
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-ES&EventID=1032310850&CountryCode=ES
20/12/2006 Actualización a SQL Server Análisis Servicios 2005
http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032310852&EventCategory=5&culture=es-ES&CountryCode=ES
"No hay peor cosa que un poner a un(a) daltónico(a) a coger café"
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
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.
En Oracle existe la setencia START WITH and CONNECT BY, de manera que se puede hacerSELECT child, parent, levelFROM PruebaSTART 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
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.