<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Roberto Ramírez BlogRoberto Ramírez Blog</title>
	<atom:link href="http://intellekt.ws/blogs/roberto/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://intellekt.ws/blogs/roberto</link>
	<description>Desarrollo de software con tecnologías Microsoft</description>
	<lastBuildDate>Thu, 16 May 2013 22:38:11 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Resoluci&#243;n de incidencias en aplicaciones Windows Azure</title>
		<link>http://intellekt.ws/blogs/roberto/?p=106</link>
		<comments>http://intellekt.ws/blogs/roberto/?p=106#comments</comments>
		<pubDate>Thu, 16 May 2013 22:03:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[asp .net]]></category>
		<category><![CDATA[cloud service]]></category>
		<category><![CDATA[escritorio remoto]]></category>
		<category><![CDATA[intellitrace]]></category>
		<category><![CDATA[sitefinity]]></category>
		<category><![CDATA[web role]]></category>
		<category><![CDATA[windows azure]]></category>

		<guid isPermaLink="false">http://intellekt.ws/blogs/roberto/?p=106</guid>
		<description><![CDATA[Devilopers les suena la frase: “… no se que sea, en mi máquina sí funciona..”,&#160; seguramente les ha pasado que al momento de hacer la implementación de su aplicación en un ambiente diferente al de desarrollo, dicha aplicación simplemente no funciona. Bueno, básicamente esto es lo que vivimos al momento de hacer la implementación en [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image9.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; margin: 8px 10px 0px 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb9.png" width="569" height="381"></a></p>
<p>Devilopers les suena la frase: “… no se que sea, en mi máquina sí funciona..”,&nbsp; seguramente les ha pasado que al momento de hacer la implementación de su aplicación en un ambiente diferente al de desarrollo, dicha aplicación simplemente no funciona. Bueno, básicamente esto es lo que vivimos al momento de hacer la implementación en un ambiente de pruebas&nbsp; de una aplicación web la cual se ejecuta como cloud service en <a href="http://www.windowsazure.com/" target="_blank">Windows Azure</a>. </p>
<p>Cabe mencionar que esta aplicación la estamos desarrollando para <a href="http://www.pearsonespanol.com/" target="_blank">Pearson Educación</a>, y se esta construyendo sobre <a href="http://www.sitefinity.com/" target="_blank">Sitefinity</a> un sistema de administración de contenidos desarrollado por <a href="http://www.telerik.com/" target="_blank">Telerik</a>, como sabrán la resolución de conflictos cuando se utilizan herramientas de terceros en ocasiones se convierten en un verdadero dolor de cabeza.&nbsp;&nbsp; </p>
<p>La versión corta&nbsp; de la historia que da origen a esta publicación es: una vez terminado el proceso de implementación de la aplicación en Windows Azure esta simplemente no funcionaba, sin tener algún mensaje de error, la ejecución de la aplicación en Windows Azure se transforma prácticamente en una “caja negra”.</p>
<p>Afortunadamente Windows Azure cuenta con elementos para depurar su aplicación y/o realizar ajustes sobre las instacias generadas en sus implementaciones de tipo cloud service en Windows Azure. </p>
<p>Para depurar su aplicación ustedes pueden habilitar <strong>IntelliTrace</strong> al momento de publicar su aplicación Windows Azure. IntelliTrace lo que hace es generar un log con información clave acerca de la ejecución del código de su aplicación en Windows Azure como cloud service.</p>
<p>Para habilitar IntelliTrace, en la sección <strong>Advanced Settings</strong> del cuadro de diálogo <strong>Publish Windows Azure Application</strong>, marquen la casilla Enable IntelliTrace y para personalizar la configuración básica de IntelliTrace hagan clic en el vínculo <strong>Settings</strong>, el cual se encuentra a un costado.</p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image1.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb1.png" width="565" height="379"></a>&nbsp;</p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image2.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb2.png" width="567" height="417"></a></p>
<p>Posteriormente una vez implementada su aplicación pueden hacer uso de la ventana <strong>Server Explorer</strong> de <strong>Visual Studio 2012</strong> para conectarse a las instacias de sus roles y poder visualizar el log generado por IntelliTrace y así encontrar el porque de los conflictos ocurridos en su aplicación y dar solución a los mismos.</p>
<p><img alt="VST_DeployComputeNode" src="http://i.msdn.microsoft.com/dynimg/IC519064.png"></p>
<p><img alt="VST_IntelliTraceDownloadProgress" src="http://i.msdn.microsoft.com/dynimg/IC519065.png"></p>
<p>Al hacer la depuración de nuestra aplicación descubrimos que era necesario realizar algunos ajustes sobre el <strong>IIS</strong> de las instancias del <strong>web role</strong> de la aplicación Azure, para lo cual habilitamos el <strong>escritorio remoto</strong> sobre dichas instancias. Para ello al momento de publicar su aplicación o simplemente generar el paquete de publicación marquen la casilla <strong>Enable Remote Desktop</strong> y hagan clic en el vínculo <strong>Settings</strong> para establecer las credenciales de acceso a la máquina virtual de cada instancia.</p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image3.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb3.png" width="569" height="383"></a>&nbsp;<a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image4.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb4.png" width="305" height="169"></a></p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image5.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb5.png" width="353" height="267"></a>&nbsp;</p>
<p>Cuando hayan terminado de implementar su aplicación, desde el portal de administración de Windows Azure vayan a la sección <strong>Instances</strong> de su aplicación Azure, seleccionen alguna de sus instancias y en las opciones ubicadas en la parte inferior hagan clic en <strong>Connect</strong>, con esto les abrirá el escritorio remoto (o les descargará un archivo para abrir el escritorio remoto) para conectarse a la máquina virtual de la instancia seleccionada.</p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image6.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb6.png" width="569" height="480"></a></p>
<p>Cuando aparezca la ventana del escritorio remoto, ingresen las credenciales previamente asignadas y listo con ello ya pueden conectarse a la máquina virtual y realizar tareas como una configuración extra sobre el IIS, revisar el visor de sucesos si tienen algún conflicto en su aplicación, habilitar o detener servicios, etc. </p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image7.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb7.png" width="569" height="322"></a></p>
<p>Y bien así fue como haciendo uso de IntelliTrace y habilitando el escritorio remoto dimos solucion a los conflictos que surgieron y actualmente tenemos la aplicación en un ambiente de staging realizando las últimas pruebas para su próxima liberación <img class="wlEmoticon wlEmoticon-winkingsmile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Winking smile" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/wlEmoticon-winkingsmile.png">.</p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image8.png"><img title="image" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2013/05/image_thumb8.png" width="569" height="613"></a></p>
<p>Para conocer paso a paso el proceso de la creación e implementación de un cloud service en Windows Azure visiten: <a href="http://www.windowsazure.com/en-us/manage/services/cloud-services/how-to-create-and-deploy-a-cloud-service/" target="_blank">How to Create and Deploy a Cloud Service</a>. Para conocer más acerca de IntelliTrace éntrenle a: <a href="http://msdn.microsoft.com/en-us/library/windowsazure/ff683671.aspx" target="_blank">Debugging a Published Cloud Service with IntelliTrace and Visual Studio</a>. Por último para más detalle del uso del escritorio remoto les dejo el vínculo de la página: <a href="http://msdn.microsoft.com/es-es/library/windowsazure/gg443832.aspx" target="_blank">Usar Escritorio remoto con los roles de Windows Azure</a>.</p>
<p>Suerte y hasta la próxima!!</p>
]]></content:encoded>
			<wfw:commentRss>http://intellekt.ws/blogs/roberto/?feed=rss2&#038;p=106</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 8 Enterprise</title>
		<link>http://intellekt.ws/blogs/roberto/?p=79</link>
		<comments>http://intellekt.ws/blogs/roberto/?p=79#comments</comments>
		<pubDate>Fri, 24 Aug 2012 15:57:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[windows 8 enterprise features]]></category>

		<guid isPermaLink="false">http://intellekt.ws/blogs/roberto/?p=79</guid>
		<description><![CDATA[Para todos aquellos que al buscar su descarga del nuevo sistema operativo Windows 8 en alguna de las versiones originalmente anunciadas por Microsoft (Windows 8, Windows 8 Pro, Windows 8 RTM), se encontraron con la versión Enterprise, y que al igual que un servidor tienen la duda respecto a la diferencia de esta versión con [...]]]></description>
				<content:encoded><![CDATA[<p><img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Windows 8 Enterprise" alt="Windows 8 Enterprise" src="http://i.imgur.com/8Thee.jpg"></p>
<p>Para todos aquellos que al buscar su descarga del nuevo sistema operativo Windows 8 en alguna de las versiones originalmente anunciadas por Microsoft (Windows 8, Windows 8 Pro, Windows 8 RTM), se encontraron con la versión Enterprise, y que al igual que un servidor tienen la duda respecto a la diferencia de esta versión con las mencionadas anteriormente, seguramente las siguientes líneas son de tu interés.</p>
<p>La versión Enterprise de Windows 8 cuenta con todas las capacidades que ofrecen las características que tiene la versión Windows 8 Pro. Lo que marca la diferencia con la versión Enterprise son las siguientes características diseñadas para cubrir necesidades de negocio como productividad móvil, manejabilidad y virtualización:</p>
<p><strong>Windows To Go</strong>: se trata de una característica con la cual se puede iniciar Windows 8 con la imagen que maneja una empresa para sus equipos desde una unidad externa a través del puerto USB. Esto brinda el soporte necesario para la tendencia “<a href="http://blog.gotoassist.com/2012/03/06/does-your-company-offer-a-byopc-and-byod-program/" target="_blank">Bring Your Own PC</a>” sin comprometer el tema de seguridad.</p>
<p><strong>Direct Access</strong>: permite a los usuarios remotos el acceso a recursos en una red corporativa sin la necesidad de contar con una VPN separada y ayuda a los administradores a mantener los equipos de estos usuarios remotos alineados con las últimas políticas y actualizaciones de software.</p>
<p><strong>BranchCache</strong>: esta característica permite a los usuarios de PC almacenar en caché archivos, sitios web, y otro contenido de servidores centrales, por lo que todo este contenido no tendrá que ser descargado constantemente a través de la red.</p>
<p><strong>AppLocker</strong>: restringe los archivos y aplicaciones que los usuarios pueden ejecutar.</p>
<p><strong>Mejoras VDI</strong>: mejoras en Microsoft Remote FX y Windows Server 2012, brindan una experiencia de escritorio enriquecida con la capacidad de reproducir gráficos 3D, uso de periféricos USB y dispositivos con soporte touch a través de cualquier tipo de red para escenarios <a href="http://blogs.technet.com/b/yungchou/archive/2010/01/06/microsoft-virtual-desktop-infrastructure-vdi-explained.aspx" target="_blank">VDI (Virtual Desktop Infraestructure).</a></p>
<p><strong>Nueva implementación de aplicaciones</strong>: los equipos que se encuentren ejecutando Windows 8 Enterprise dentro de un dominio corporativo, automáticamente tendrán habilitada la característica “sideloading” para las aplicaciones estilo Metro, lo que permitirá a muchas empresas contar con sus aplicaciones sin la necesidad de publicar dichas aplicaciones en el Windows Store.</p>
<p>Si quieres saber más del tema puedes consultar el siguiente <a href="http://technet.microsoft.com/en-us/magazine/jj618401.aspx" target="_blank">artículo publicado en TechNet Magazine</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://intellekt.ws/blogs/roberto/?feed=rss2&#038;p=79</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tip: Como implementar procedimientos almacenados con T-SQL din&#225;mico en ADO.NET Entity Framework</title>
		<link>http://intellekt.ws/blogs/roberto/?p=36</link>
		<comments>http://intellekt.ws/blogs/roberto/?p=36#comments</comments>
		<pubDate>Wed, 22 Aug 2012 05:33:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ado.net entity framework]]></category>
		<category><![CDATA[procedimiento almacenados]]></category>
		<category><![CDATA[t-sql dinamico]]></category>

		<guid isPermaLink="false">http://intellekt.ws/blogs/roberto/?p=36</guid>
		<description><![CDATA[Actualmente estamos desarrollando una aplicación web utilizando el patrón de diseño Model View Presenter (MVP), para la cual se está usando ADO.NET Entity Framework en la gestión del modelo de datos. En esta aplicación contamos con procedimientos almacenados para realizar consultas las cuales se realizan a partir de T-SQL dinámico el cual es formado concatenando [...]]]></description>
				<content:encoded><![CDATA[<p>Actualmente estamos desarrollando una aplicación web utilizando el patrón de diseño <a href="http://msdn.microsoft.com/en-us/magazine/cc188690.aspx" target="_blank">Model View Presenter (MVP)</a>, para la cual se está usando <a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx" target="_blank">ADO.NET Entity Framework</a> en la gestión del modelo de datos.</p>
<p>En esta aplicación contamos con procedimientos almacenados para realizar consultas las cuales se realizan a partir de T-SQL dinámico el cual es formado concatenando cadenas con sentencias&nbsp; T-SLQ que se incluyen a través de parámetros de entrada en el procedimiento almacenado. </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:5fbe4492-ff57-4026-b2a9-251ec72c0943" class="wlWriterEditableSmartContent"><pre class="crayon-plain-tag">ALTER PROCEDURE [dbo].[usp_GetUsersList2] 
	@WhereClause NVARCHAR(2400) = NULL,
	@StartRowIndex INT,
	@MaximumRows INT,
	@OrderBy NVARCHAR(100) = NULL
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	
	DECLARE @SelectStatement NVARCHAR(1000)    
	DECLARE @PaginationStatement NVARCHAR(500)
	DECLARE @FullStatement NVARCHAR(3600)
	DECLARE @ParmDefinition NVARCHAR(4000)
	
    
	DECLARE @TUserList TABLE (Row int, UserName nvarchar(30), FirstName nvarchar(20), MiddleName nvarchar(20), LastName1 nvarchar(20), LastName2 nvarchar(20),
									Email nvarchar(50), JobTitle nvarchar(50), Active bit, IsLadpUser bit, LocationID smallint, LocationShortName nvarchar(10), 
									SegmentID smallint, SegmentShortName nvarchar(10)) 
									
	CREATE TABLE #TUserList (Row int, UserName nvarchar(30), FirstName nvarchar(20), MiddleName nvarchar(20), LastName1 nvarchar(20), LastName2 nvarchar(20),
									Email nvarchar(50), JobTitle nvarchar(50), Active bit, IsLadpUser bit, LocationID smallint, LocationShortName nvarchar(10), 
									SegmentID smallint, SegmentShortName nvarchar(10)) 
          

	SET @SelectStatement =	N';WITH UsersList AS ( ' +
							N'SELECT ROW_NUMBER() OVER (ORDER BY t1.UserName ASC) AS [Row], ' +
							N't1.UserName, t1.FirstName, t1.MiddleName, t1.Lastname1, t1.LastName2, t1.Email, t1.JobTitle, t1.Active, ' + 
							N't1.IsLdapUser, t1.LocationID, t2.ShortName LocationShortName, t1.SegmentID, t3.ShortName SegmentShortName ' +
							N'FROM dbo.Users t1 JOIN dbo.Locations t2 ON t1.LocationID = t2.LocationID JOIN dbo.Segments t3 ON t1.SegmentID = t3.SegmentID ' 
													
							
	SET @PaginationStatement = N' INSERT INTO #TUserList SELECT * FROM UsersList WHERE [Row] BETWEEN ((@IStartRowIndex - 1) * @IMaximumRows  + 1) AND (@IStartRowIndex * @IMaximumRows) ' + ISNULL(@OrderBy,'')

	IF @WhereClause IS NULL
	BEGIN
		SET @WhereClause = ' ) ' 
	END
	ELSE
	BEGIN
		SET @WhereClause = ' WHERE ' + @WhereClause + ' ) '
	END

	SET @FullStatement = @SelectStatement + @WhereClause + @PaginationStatement
    
	SET @ParmDefinition = N'@IStartRowIndex INT, @IMaximumRows INT ' 
	
	--PRINT @FullStatement
	EXECUTE sp_executesql @FullStatement, @ParmDefinition, @IStartRowIndex = @StartRowIndex, @IMaximumRows = @MaximumRows
	INSERT INTO @TUserList SELECT * FROM #TUserList
	DROP TABLE #TUserList
	SELECT * FROM @TUserList
END</pre></div>
<p>Al intentar agregar el procedimiento almacenado como función en el modelo conceptual, no es posible determinar el tipo de resultado que devuelve dicho procedimiento cuando se ejecuta.</p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/08/image.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/08/image_thumb.png" width="207" height="244"></a></p>
<p>Utilizando la herramienta <a href="http://msdn.microsoft.com/en-us/library/ms173757(v=SQL.105).aspx" target="_blank">SQL Server Profiler</a> se puede observar que cuando se ejecuta el procedimiento almacenado se asigna el valor NULL a todos los parámetros del procedimiento almacenado, por lo que no se obtiene ningún resultado.</p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/08/image3.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/08/image_thumb3.png" width="244" height="53"></a></p>
<p>Para dar solución a este problema, pueden incluir un bloque de T-SQL que se ejecute cuando todos los parámetros de entrada del procedimiento almacenado tengan un valor NULL y que permita obtener la estructura del conjunto de resultados que se obtendrá cuando se ejecute el procedimiento almacenado en condiciones regulares dentro de la aplicación.</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:f32c3428-b7e9-4f15-a8ea-c502c7ff2e88:e0341079-1390-418b-8d84-f0b8a0c10ee0" class="wlWriterEditableSmartContent"><pre class="crayon-plain-tag">]ALTER PROCEDURE [dbo].[usp_GetUsersList2] 
	@WhereClause NVARCHAR(2400) = NULL,
	@StartRowIndex INT,
	@MaximumRows INT,
	@OrderBy NVARCHAR(100) = NULL
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;
	
	DECLARE @SelectStatement NVARCHAR(1000)    
	DECLARE @PaginationStatement NVARCHAR(500)
	DECLARE @FullStatement NVARCHAR(3600)
	DECLARE @ParmDefinition NVARCHAR(4000)
	
    IF @WhereClause IS NULL AND @StartRowIndex IS NULL AND @MaximumRows IS NULL AND @OrderBy IS NULL 
	BEGIN
		SELECT
		CAST(NULL AS INT) AS Row,
		CAST(NULL AS NVARCHAR(30)) AS UserName,
		CAST(NULL AS NVARCHAR(20)) AS FirstName,
		CAST(NULL AS NVARCHAR(20)) AS MiddleName,
		CAST(NULL AS NVARCHAR(20)) AS LastName1,
		CAST(NULL AS NVARCHAR(20)) AS LastName2,
		CAST(NULL AS NVARCHAR(50)) AS Email,
		CAST(NULL AS NVARCHAR(50)) AS JobTitle,
		CAST(NULL AS BIT) AS Active,
		CAST(NULL AS BIT) AS IsLadpUser,
		CAST(NULL AS SMALLINT) AS LocationID,
		CAST(NULL AS NVARCHAR(10)) AS LocationShortName,
		CAST(NULL AS SMALLINT) AS SegmentID,
		CAST(NULL AS NVARCHAR(10)) AS SegmentShortName
	END	
	ELSE
	BEGIN
		DECLARE @TUserList TABLE (Row int, UserName nvarchar(30), FirstName nvarchar(20), MiddleName nvarchar(20), LastName1 nvarchar(20), LastName2 nvarchar(20),
										Email nvarchar(50), JobTitle nvarchar(50), Active bit, IsLadpUser bit, LocationID smallint, LocationShortName nvarchar(10), 
										SegmentID smallint, SegmentShortName nvarchar(10)) 
										
		CREATE TABLE #TUserList (Row int, UserName nvarchar(30), FirstName nvarchar(20), MiddleName nvarchar(20), LastName1 nvarchar(20), LastName2 nvarchar(20),
										Email nvarchar(50), JobTitle nvarchar(50), Active bit, IsLadpUser bit, LocationID smallint, LocationShortName nvarchar(10), 
										SegmentID smallint, SegmentShortName nvarchar(10)) 
	          

		SET @SelectStatement =	N';WITH UsersList AS ( ' +
								N'SELECT ROW_NUMBER() OVER (ORDER BY t1.UserName ASC) AS [Row], ' +
								N't1.UserName, t1.FirstName, t1.MiddleName, t1.Lastname1, t1.LastName2, t1.Email, t1.JobTitle, t1.Active, ' + 
								N't1.IsLdapUser, t1.LocationID, t2.ShortName LocationShortName, t1.SegmentID, t3.ShortName SegmentShortName ' +
								N'FROM dbo.Users t1 JOIN dbo.Locations t2 ON t1.LocationID = t2.LocationID JOIN dbo.Segments t3 ON t1.SegmentID = t3.SegmentID ' 
														
								
		SET @PaginationStatement = N' INSERT INTO #TUserList SELECT * FROM UsersList WHERE [Row] BETWEEN ((@IStartRowIndex - 1) * @IMaximumRows  + 1) AND (@IStartRowIndex * @IMaximumRows) ' + ISNULL(@OrderBy,'')

		IF @WhereClause IS NULL
		BEGIN
			SET @WhereClause = ' ) ' 
		END
		ELSE
		BEGIN
			SET @WhereClause = ' WHERE ' + @WhereClause + ' ) '
		END

		SET @FullStatement = @SelectStatement + @WhereClause + @PaginationStatement
	    
		SET @ParmDefinition = N'@IStartRowIndex INT, @IMaximumRows INT ' 
		
		--PRINT @FullStatement
		EXECUTE sp_executesql @FullStatement, @ParmDefinition, @IStartRowIndex = @StartRowIndex, @IMaximumRows = @MaximumRows
		INSERT INTO @TUserList SELECT * FROM #TUserList
		DROP TABLE #TUserList
		SELECT * FROM @TUserList
	END	
END</pre></div>
<p>Como se muestra a continuación, al modificar el procedimiento almacenado es posible conocer el tipo de resultado y generar a partir de la estructura devuelta por el procedimiento almacenado, un tipo de dato complejo que podrá ser usado como una objeto más en su aplicación.&nbsp;&nbsp;&nbsp; </p>
<p><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/08/image2.png"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/08/image_thumb2.png" width="207" height="244"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://intellekt.ws/blogs/roberto/?feed=rss2&#038;p=36</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kin&#202;tre</title>
		<link>http://intellekt.ws/blogs/roberto/?p=27</link>
		<comments>http://intellekt.ws/blogs/roberto/?p=27#comments</comments>
		<pubDate>Thu, 09 Aug 2012 15:31:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://intellekt.ws/blogs/roberto/?p=27</guid>
		<description><![CDATA[Recientemente se ha dado a conocer un nuevo proyecto de investigación que hace uso de Kinect para Windows desarrollado por el equipo de Microsoft Research Cambridge llamado KinÊtre, el cual permite dar vida a objetos inanimados por lo que promete ser una nueva alternativa&#160; como técnica de animación digital, mmmh!! interesante, no?. KinÊtre implementa la [...]]]></description>
				<content:encoded><![CDATA[<p>Recientemente se ha dado a conocer un nuevo proyecto de investigación que hace uso de <a href="http://www.microsoft.com/en-us/kinectforwindows/" target="_blank">Kinect para Windows</a> desarrollado por el equipo de <a href="http://research.microsoft.com/en-us/labs/cambridge/default.aspx" target="_blank">Microsoft Research Cambridge</a> llamado KinÊtre, el cual permite dar vida a objetos inanimados por lo que promete ser una nueva alternativa&nbsp; como técnica de animación digital, mmmh!! interesante, no?.</p>
<p>KinÊtre implementa la tecnología de <a href="http://channel9.msdn.com/Series/KinectQuickstart/Skeletal-Tracking-Fundamentals" target="_blank">Skeletal Tracking</a> incluida en el <a href="http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx" target="_blank">SDK de Kinect para Windows</a>. Primero se escanea el objeto a animar y posteriormente a través de algoritmos para el procesamiento de imágenes 3D, el objeto se convierte en una malla flexible que se manipula para que coincida con los movimientos del usuario registrados a través del sensor de Kinect.</p>
<p>A continuación les dejo un video en donde se muestra las capacidades de KinÊtre. </p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="320" height="246"><param name="source" value="http://research.microsoft.com/apps/video/ClientBin/EmbeddedPlayer.xap" /><param name="enableHtmlAccess" value="true" /><param name="initParams" value="id=170834,start=0,end=232" /><param name="background" value="white" /><param name="minRuntimeVersion" value="3.0.40818.0" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=3.0.40818.0" style="text-decoration:none"><img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none" /></a></object></p>
]]></content:encoded>
			<wfw:commentRss>http://intellekt.ws/blogs/roberto/?feed=rss2&#038;p=27</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuevo esquema de apps para Office 2013</title>
		<link>http://intellekt.ws/blogs/roberto/?p=11</link>
		<comments>http://intellekt.ws/blogs/roberto/?p=11#comments</comments>
		<pubDate>Wed, 18 Jul 2012 21:33:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[CSS 3]]></category>
		<category><![CDATA[Html 5]]></category>
		<category><![CDATA[Office 2013]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SkyDrive]]></category>

		<guid isPermaLink="false">http://intellekt.ws/blogs/roberto/?p=11</guid>
		<description><![CDATA[Office 2013 Preview ha sido liberado hace un par de días, esta nueva versión además de contar con una nueva UI, ofrece características excelentes para mejorar la experiencia de usuario con Windows 8, incrementar la productividad y la colaboración entre nuestro equipo de trabajo, además de ser bastante flexible para consumidores y clientes empresariales. Entre [...]]]></description>
				<content:encoded><![CDATA[<p>Office 2013 Preview ha sido liberado hace un par de días, esta nueva versión además de contar con una nueva UI, ofrece características excelentes para mejorar la experiencia de usuario con Windows 8, incrementar la productividad y la colaboración entre nuestro equipo de trabajo, además de ser bastante flexible para consumidores y clientes empresariales. Entre algunas de las características que ofrece Office 2013 Preview están:</p>
<ul>
<li>Mejores experiencias de usuario a través del <b>soporte para touch</b>.
<li><b>Integración con SkyDrive,</b> ahora podrás guardar los documentos de Office en SkyDrive y tener la información siempre disponible.
<li><b>Roaming</b>, esta característica nos permite tener el mismo marco de trabajo (archivos, platillas, diccionarios personalizados, etc.) en todos nuestros equipos de cómputo, para esto solo es necesario firmarse en Office y toda nuestra configuración se replica en nuestros dispositivos.
<li><b>Integración con Yammer </b>una red social privada para negocio y <b>Skype</b>.</li>
</ul>
<p><iframe height="315" src="http://www.youtube.com/embed/J-3uK2bRNnE" frameborder="0" width="560" allowfullscreen></iframe>
<p>&nbsp; <br />Para conocer más de estas y otras características de Office <a href="http://office.com/preview">haz clic aquí</a>.
<p>Desde versiones anteriores Microsoft Office permite integrar apps en las aplicaciones de Office (Word, Excel, etc.) permitiendo crear atractivas experiencias para sus clientes, con el nuevo Office 2013 Preview ahora tenemos la posibilidad de integrar aplicaciones desarrolladas con estándares web como HTML 5, JavaScript, CSS3 y API’s REST. Estas apps se agrupan en tres grupos:
<p><b>Task Pane </b>– trabajan lado a lado con los documentos de office permitiendo suministrar información contextual para mejorar la visualización del documento y la experiencia al estar trabajando con el documento.<br /><img alt="Task Pane app" src="http://i.msdn.microsoft.com/dynimg/IC597440.png"></p>
<p><b>Contenido</b> – integra contenido basado en web que puede ser mostrado en línea con el documento.<br /><img alt="In content app" src="http://i.msdn.microsoft.com/dynimg/IC597441.png">
<p><b>Mail </b>– permite desplegar información adicional de elementos de Outlook (correos, solicitudes, respuestas o cancelaciones de reuniones o una cita).<br /><img alt="Contextual app" src="http://i.msdn.microsoft.com/dynimg/IC597442.png">
<p>Básicamente una aplicación de Office es una página web la cual esta hospedada en un aplicación cliente de Office. Estas aplicaciones podrán ejecutarse en distintos ambientes y clientes como desktop, Office Web Apps, móviles y en la nube. Una vez terminado el desarrollo de una app, está podrá ser publicada en un catálogo interno o en el <a href="http://officepreview.microsoft.com/en-us/store/?CTT=97">Office Store</a> con lo cual estará disponible para su consumo desde las aplicaciones de Office 2013 Preview.<br /><a href="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/07/image1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://intellekt.ws/blogs/roberto/wp-content/uploads/2012/07/image_thumb1.png" width="569" height="364"></a>
<p>Los componentes básicos de una app para Office son un archivo manifiesto en formato XML y una página web. El archivo manifiesto define los siguientes parámetros de la página web:
<ul>
<li>URL de la página web que implementa la interface de usuario y la lógica de programación.
<li>Nombre, descripción, ID, versión, cultura local.
<li>Tipo de app (task pane, contenido, mail).
<li>Tipo de aplicaciones cliente que soportan la app.
<li>Nivel de permisos y requerimientos de acceso a datos.</li>
</ul>
<p><img alt="Manifest plus webpage equals app for Office" src="http://i.msdn.microsoft.com/dynimg/IC597439.png"></p>
<p>Sin duda este nuevo esquema nos permite a nosotros como desarrolladores contar con una nueva oportunidad en la generación de apps, puesto que la creación de apps para Office es ahora más sencilla y mucho más flexible ya que podemos aprovechar nuestra experiencia en desarrollo web haciendo uso de tecnologías estándares web y por último publicarlas en el <a href="http://officepreview.microsoft.com/en-us/store/?CTT=97">Office Store de Microsoft</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://intellekt.ws/blogs/roberto/?feed=rss2&#038;p=11</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
