29 sept 2009

// // Comentar

Editor de Texto en ASP .NET MVC

Cuando se desarrolla una aplicación que va a contender secciones donde se necesita ingresar texto con formato, siempre es muy útil un editor de texto que nos permita esto, estos se usan en diversos tipos de aplicaciones, en esta oportunidad les mostraré como usar el CKEditor con ASP .NET MVC.

Lo primero que hay que hacer es descargarse las librerías, descomprimirlo y copiarlo en el directorio /Content/js/ luego agregar la referencia al archivo ckeditor.js en la vista donde se va a usar o en la masterpage si se desea para toda la aplicación, seria algo similar a esto

<script src="../../Content/js/ckeditor/ckeditor.js" type="text/javascript" ></script>

Con esto ya tenemos la referencia al script a usar, ahora para ponerlo a funcionar agregamos lo siguiente


 

<%= Html.TextArea("Descripcion", "", new { @name = "Descripcion" })%>
<script type="text/javascript">
//<![CDATA[

// This call can be placed at any point after the
// <textarea>, or inside a <head><script> in a
// window.onload event handler.

// Replace the <textarea id="editor"> with an CKEditor
// instance, using default configurations.
CKEDITOR.replace("Descripcion");

//]]>
</script>
 
Con esto podemos logra algo así
ckeditor
 

Este editor tiene muchas opciones, como mostrar solo algunos comandos, skins, entre otros, los invito a revisarlo, esta muy bueno

Leer post completo

20 sept 2009

// // 3 comentarios

The requested database is not defined in configuration.

Si alguna vez están trabajando con Enterprise Library o Repository Factory, quizá les pueda dar este error al momento de hacer la llamada a la base de datos, es por que hay que definir algunos elemento en el nuestro archivo de configuración del proyecto que hace la referencia a la clase que se accede a la base de datos.


En mi caso me ha funcionado lo siguiente:


Agregar los tags en configSections.

<configSections> 
  <section name="repositoryFactory" type="Microsoft.Practices.Repository.Configuration.
RepositoryFactorySection, Microsoft.Practices.Repository, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=null" /> 
  <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.
Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, 
Version=3.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
</configSections>
 

Ahora definiremos la conexión por defecto de la aplicación

<dataConfiguration defaultDatabase="DefaultConnectionString" />

Esta cadena de conexión debe esta definida dentro de ConnectionStrings
 
<add name="DefaultConnectionString" 
connectionString="Data Source=.;Initial Catalog=Database;Integrated Security=True" 
providerName="System.Data.SqlClient" />
 

Teniendo definido esto ahora cuando hagamos llamadas a nuestra clase, en mi caso usando Repository Factory seria así:

ClaseRepository repository = new ClaseRepository("DefaultConnectionString");

Con esto ya no deberíamos tener ese error, al menos en mi caso ha funcionado si tienen mas aportes sobre el tema y posibles soluciones, agradeceré sus comentarios.

Leer post completo

31 ago 2009

// // 3 comentarios

Como permitir leer Archivos Excel 2007 desde Sistemas de 64 bits (x64)

Quizá esto le pueda pasar cuando trabaje ya sea en Windows Vista o en mi caso Windows 7 x64, he intentado leer un archivo Excel 2007 desde una aplicación en .NET y me daba el siguiente error:

El proveedor Microsoft.ACE.OLEDB.12.0 no está registrado en el equipo local. o en ingles

The Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine.

Pues resulta que esto es debido a que no hay controladores de office para x64, asi que hay que cambiar el tipo de compilación de la aplicación, que por defecto esta en “Any CPU” a “x86”, esto en las propiedades->Build.

Con esto ya se pueden leer los archivos con total normalidad, espero les sirva de algo.

Leer post completo
// // Comentar

Usando Client Application Services Parte 02

En el post anterior hablábamos de como crear una aplicacion que nos permita manejar los accesos de los usuarios ahora veremos como podemos utilizar el servicio de membresia de ASP .NET en una aplicacion Windows Forms que era lo que no se tenia disponible antes.

1. Creando la aplicación Cliente

Vamos a crear una aplicación Windows Forms sencilla como se ve en la imagen:

image

Como esto es solo de forma ilustrativa no necesitamos crear una aplicacion compleja.

2. Enlazando el Servicio

Ahora vamos a integrar el servicio que habiamos creado anteriormente para poder hacer uso de la validacion de usuarios, para ellos nos vamos al proyecto que acabamos de crear y hacemos clic derecho->Propiedades, ahi podemos apreciar al lado izquierdo que tenemos un tab Services, ahi es donde se habilita Client Application Services, marcamos el check e ingresamos los datos como se muestra en la imagen:

image

Tambien debemos agregar una referencia a System.Web, en nuestro proyecto clic derecho->Add Reference en el tab NET buscamos el ensamblado y lo agregamos, esto es para que podamos hacer uso de Clase Membership en nuestra aplicacion.

3. Validando Usuarios

Vamos a trabajar en el evento Load del formulario, dentro de este pondremos el siguiente codigo para validar las credenciales de un usuario si son correctas se mostrara el formulario, caso contrario se mostrara un mensaje y cerrará la aplicacion.

if (!Membership.ValidateUser("User", "Password"))
{
MessageBox.Show("Usuario no valido");
this.Close();
}


Con esto ya podemos validar los datos del usuario, incluso validar si pertene a algun Rol, todo lo que se podia hacer en ASP .NET 2.0 en cuanto a usuarios, ahora ya esta disponible para usar por otro tipo de aplicaciones, no solo esto, sino que tambien permite centralizar la administracion de usuarios.



Espero haya sido de ayuda estos post, si hubiese algo que no quedo claro, no duden en dejar sus  comentarios, tambien adjunto el codigo fuente del ejemplo para que puedan revisarlo.



Descargar Código Ejemplo

Leer post completo
// // Comentar

Usando Client Application Services Parte 01

Introducción

Cuando salió .NET Framework 2.0, una de las novedades que traía consigo era la posibilidad de usar una serie de controles y clases para la gestión de usuarios, perfiles y roles, con las características típicas de una aplicación con manejo de usuarios.

Pues hasta ahí todo bien, pero esto estaba disponible solo para las aplicaciones Web, no se podía usar en aplicaciones Windows, así que en este tipo de aplicaciones teníamos que hacer trabajo extra para la gestión de usuarios.

Ahora con la salida del .NET Framework 3.5, pues se van suavizando las cosas, no es que tengamos los mismos controles disponibles para poder hacer esto, sino que acá podemos centralizar el manejo de usuarios, con lo que se conoce como Client Application Services.

Que es Client Application Services?

Es un concepto que permite integrar las aplicaciones cliente como Windows Forms con los servicios de Membresia de ASP .NET, es decir, tendremos un servicio desde donde se administren los usuarios y desde una aplicación Winforms podemos referenciarlo y ya podemos autenticar usuarios y todo lo que las clases de Membresia nos puedan permitir.

Ejemplo Practico

Para que todo este tema quede claro, aquí les explicare como funciona para que puedan implementarlo.

Si desean conocer como funciona esto del manejo de usuarios y perfiles, los invito a revisar estos artículos que publique hace algunos años:

Personalización ASP .NET Parte 01

Personalización ASP .NET Parte 02

Estos artículos estaban para la versión 2.0 de asp .net, pero también son validos trabajarlo en VS 2008.

Volviendo al tema, vamos a iniciar con la aplicación de ejemplo.

1. Creación de la base de datos

Esta base de datos nos servirá para almacenar los usuarios, esto se hace con un utilitario que viene con el .NET Framework, lo que hay que hacer es ir a Inicio->Todos los Programas->Microsoft Visual Studio 2008->Visual Studio Tools y abrir el Command Prompt, nos abrirá una consola DOS, donde escribiremos asp_regsql, les aparecerá una un wizard que creara la base de datos automáticamente, solo hay que darle siguiente hasta donde nos pida datos del servidor y base de datos, podemos dejar que cree la base de datos con el nombre por default o podemos asignarle cualquier nombre como se muestra en la imagen.

image

Una vez ingresados los datos, damos siguiente y finalizar, con esto ya tenemos nuestra base de datos lista para usarla en nuestra aplicación de ejemplo.

2. Creación del Servicio

Ahora crearemos el servicio que se conectara a la base datos e interactúa con la aplicación para el manejo de usuarios, para esto crearemos un nuevo proyecto del tipo ASP .NET Web Service Application.

image

Con esto se crea una plantilla del servicio, lo cual no usaremos, ya que la aplicación Windows se conectara directamente.

3. Configuración de Roles y Usuarios

Ahora configuraremos nuestros usuarios y roles que tendrán acceso a nuestra aplicación, para esto usaremos el ASP .NET Configuration Tool que pueden ubicarlo en el menú Project->ASP .NET Configuration que se encuentra al final del menú.

Nos abrirá una venta del navegador que nos permitirá configurar todo, esto es bien intuitivo así que lo resumiré, hay que ir a la pestaña de Seguridad y vamos al enlace donde dice Utilice el Asistente para la configuración de seguridad para configurar la seguridad paso a paso. en Método de Acceso seleccionamos desde Internet, Habilitamos las funciones o roles para la aplicación, agregamos 02 roles (Administrador, Cliente), creamos 02 usuarios también, no agregamos ninguna regla de acceso y al finalizar vuelve a la pantalla de seguridad, ahí nos vamos a administrar usuarios->editar funciones y asignamos un usuario al Rol Administrador y el otro al Rol Cliente y cerramos el navegador.

4. Habilitando Client Application Services

Para poder hacer que este servicio pueda dar respuesta a aplicaciones que se comuniquen con el hay que agregar el siguiente código al archivo Web.config

<system.web.extensions>
<scripting>
<webServices>
<authenticationService enabled="true" requireSSL="false" />
<roleService enabled="true"/>
</webServices>
</scripting>
</system.web.extensions>


Nos leemos en la siguiente entrada.

Leer post completo

10 jun 2009

// // 6 comentarios

WCF: Esta colección ya contiene una dirección con el esquema http. Sólo puede haber una dirección por esquema en esta colección

“This collection already contains an address with scheme http. There can be at most one address per scheme in this collection.“

Pues recientemente me he topado con este mensaje de error, me ha salido al momento de hacer deployment de un servicio WCF, en modo local no tenia problemas, indagando un poco encontré que se trata de como IIS aloja los servicios, para lo cual permite una sola dirección por esquema (HTTP), por lo cual en servidores de hosting compartidos nos da este problema, en mi caso lo solucione creando una clase Factory que herede de ServiceHostFactory y sobrescriba el método que devuelve el  ServiceHost con solo una dirección:

public class CustomHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
Uri webServiceAddress
= new Uri("http://dominio.com/Service.svc");
ServiceHost webServiceHost
= new ServiceHost(serviceType, webServiceAddress);

return webServiceHost;
}
}


Ahora solo nos hace falta indicarle al servicio que debe usar esta clase como Factory



<%@ ServiceHost Language="C#" Debug="true" Service="Services.MyService" Factory="Services.CustomHostFactory" %>


Con esto ya no tendremos este error y nuestro servicio trabajará correctamente.



Adicionalmente a esto pueden otras opciones de como solucionar este problema como en los siguientes enlaces:



WCF: This collection already contains an address with scheme http



How can WCF support multiple IIS Binding specified per site ?



Espero les pueda evitar unos cuantos dolores de cabeza.

Leer post completo

22 may 2009

// // Comentar

Liberado Visual Studio 2010 Beta 1

Ya esta disponible para todos el Beta de Visual Studio 2010, ahora lo estoy descargando, si alguien quiere probarlo aquí tiene el enlace:

Download VS 2010 Professional Beta 1

 

Si están usando Windows 7 RC, puede que tengan problemas de compatibilidad con SQL Server 2008, para ver mas detalles en este enlace.

 

Si desean conocer mas de VS 2010 aquí les dejo la Pagina oficial del Producto

Leer post completo

3 may 2009

// // Comentar

Windows 7 RC Disponible

Desde el día 30 que ya esta disponible para descarga el RC(Reléase Candidate) de Windows 7, para los suscriptores MSDN y TechNet y a partir del 5 de mayo para los demás, viene con algunas novedades como es el XP Mode que permite ejecutar programas escritos para XP y que no funcionan en esta nueva Versión, en general tiene muchas cosas buenas que valen la pena probarlo, ya lo llevo usando algún tiempo y la verdad que estoy mas que satisfecho, los invito a probarlo.

Download MSDN | Download TechNet

UPDATE: Download sin suscripción

Leer post completo

28 abr 2009

// // 1 comentario

ASP.NET MVC Training Kit

Si haz oído hablar o haz leído algo sobre MVC y te interesa aprender y no sabes por donde empezar, pues aquí tienes una gran ayuda, el Training KIT de ASP .NET MVC, donde encontraras presentaciones, demos, labs y mas recursos para empezar con este nuevo framework.

Download ASP.NET MVC Training Kit

Leer post completo

22 abr 2009

// // Comentar

SQL Energy Event en la UNT

Ya hace buen tiempo que en la UNT no se hacia un eventito, pues ahora la gente de la Célula se ha puesto las pilas y estamos retomando actividades, para empezar se hará uno como Lanzamiento Oficial de SQL Server 2008, donde se mostrará muchas características y las ventajas que nos ofrece este producto, mas detalles en el afiche.

Evento Mayo 2009

Leer post completo

9 abr 2009

// // 2 comentarios

PIVOT SQL: Pasar filas a columnas

SQL no es mi fuerte, pero quisiera compartirles algo que he usado últimamente para solucionar un problema que he tenido con una consulta, pues resulta que tengo una tabla de Productos, los cuales están clasificados (Línea-Representada), lo cual lo tenia en otras tablas, y necesitaba traer cada producto con su línea y representada, con una consulta normal como esta:

SELECT    P.Codigo, P.Nombre, N.Nombre AS Nivel, A.Nombre AS Atributo, P.Ean
FROM Productos P
INNER JOIN ProductoAtributos PA ON PA.ProductoID = P.ProductoID
INNER JOIN Atributos A ON A.AtributoID = PA.AtributoID
INNER JOIN NivelProducto N ON N .NivelID = A.NivelID


El resultado seria el siguiente:



Codigo      Nombre                       Nivel                 Atributo                Ean             
-----------   ------------------------     --------------        -----------               ---------------


1000000     PAMPERS BABYSEC     Línea                 LACTEOS               5655425689322


1000000     PAMPERS BABYSEC     Representada    GLORIA                 5655425689322


1000001     GASEOSA CASINELLI   Línea                 CONDIMENTOS      6547574575474


1000001     GASEOSA CASINELLI   Representada    AJINOMOTO          6547574575474



Si analizamos el resultado, no nos sirve de mucho ya que se repite el producto con la Línea y la Representada, a mi lo que me interesa es tener la Línea y la representada en un solo registro con el producto, así que revisando un poco encontré la solución en PIVOT, esta es una característica nueva que viene a partir de la versión 2005 de SQL.



Con esta característica podremos colocar la Línea y la Representada en columnas y obtener el resultado deseado, la consulta quedaría algo así:



SELECT Codigo, Nombre, [Linea] AS 'Linea', [Representada] AS 'Representada', Ean
FROM (
SELECT P.Codigo, P.Nombre, N.Nombre AS Nivel, A.Nombre AS Atributo, P.Ean
FROM Productos P
INNER JOIN ProductoAtributos PA ON PA.ProductoID = P.ProductoID
INNER JOIN Atributos A ON A.AtributoID = PA.AtributoID
INNER JOIN NivelProducto N ON N .NivelID = A.NivelID
) PVT
PIVOT(
MIN(Atributo) FOR [Nivel] IN([Linea], [Representada])) AS Child




Obteniendo el resultado siguiente



 



Codigo      Nombre                       Línea                Representada   Ean

-----------   -------------------           ------------          -------------         ---------------


1000000     PAMPERS BABYSEC     LACTEOS           GLORIA             5655425689322


1000001     GASEOSA CASINELLI   CONDIMENTOS  AJINOMOTO      6547574575474



Esto si que nos sirve, tenemos un resultado mas ordenado y mejor presentado, con esto solucionamos el problema, esto se le conoce como PIVOT Estático, ya que las columnas las asignamos en duro, pero también se puede hacer dinámicamente, quizá mas adelante comente al respecto, por mientras les dejo algunos enlaces para que puedan profundizar el tema.



Usar PIVOT y UNPIVOT



Pasar filas a columnas con T-SQL: PIVOT() y las cosas que te alegran el día :)



Pivot y Unpivot en SQL Server 2005



Implementación de PIVOT Dinámico

Leer post completo

27 feb 2009

// // 19 comentarios

Crystal Reports 2008 y Windows Vista x64

Pues resulta que estoy trabajando con estos productos y tenia un gran problema al momento de cargar un reporte, me salia el siguiente mensaje:

An error has occurred while attempting to load the Crystal Reports runtime.

Either the Crystal Reports registry key permissions are insufficient or the Crystal Reports runtime is not installed correctly.

Please install the appropriate Crystal Reports redistributable (CRRedist*.msi) containing the correct version of the Crystal Reports runtime (x86, x64, or Itanium) required.  Please go to http://www.businessobjects.com/support for more information.

Pues haciendo caso del mensaje, estuve buscando el runtime para 64 bits, supuestamente viene en el DVD de instalacion de VS 2008, pero no di con la solucion.

Buscando un poco mas encontre este enlace donde se comenta el error y se da la solucion:

Pues basta con cambiarle el Target CPU del proyecto vamos a mostrar el reporte a x86 y podremos ver nuestro reporte.

Para esto debemos ir a nuestro Proyecto, clic derecho en Propiedades, nos vamos a la Pestaña Debug y en Platfom target que esta por defecto en Any CPU, lo cambiamos por x86 y ejecutamos.

Espero les sirva.

Saludos

Leer post completo