<?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>Solo Quiero Info &#187; Administrador</title>
	<atom:link href="http://soloquiero.info/author/Administrador/feed/" rel="self" type="application/rss+xml" />
	<link>http://soloquiero.info</link>
	<description>La información: tu recurso más importante</description>
	<lastBuildDate>Thu, 02 Jun 2011 19:17:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Programando con AppEngine de Google y Java</title>
		<link>http://soloquiero.info/2010/07/programando-con-appengine-de-google-y-java/</link>
		<comments>http://soloquiero.info/2010/07/programando-con-appengine-de-google-y-java/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 03:42:18 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://soloquiero.info/2010/07/programando-con-appengine-de-google-y-java/</guid>
		<description><![CDATA[Pues, luego de muchos meses sin poder escribir nada y teniendo en cuenta que me tocó aprender un poco de ejb, jsf y rich faces al fin creo poder haber encontrado un poco de tiempo para escribir un poco. En esta ocasión los primeros pasos con AppEngine, Eclipse y Java, para quién no lo sepa, [...]]]></description>
			<content:encoded><![CDATA[<p>Pues, luego de muchos meses sin poder escribir nada y teniendo en cuenta que me tocó aprender un poco de <strong>ejb</strong>, <strong>jsf</strong> y <strong>rich faces</strong> al fin creo poder haber encontrado un poco de tiempo para escribir un poco. En esta ocasión los primeros pasos con <strong>AppEngine,</strong> <strong>Eclipse</strong> y <strong>Java,</strong> para quién no lo sepa, el AppEngine de Google nos permite hospedar nuestras aplicaciones Web Java en sus servidores (y teniendo en cuenta lo difícil que es conseguir un hosting Java decente y económico&#8230;) también soporta python y se espera que soporte más lenguajes a futuro. Me he decido a probar un poco, así que lo primero será configurar nuestro eclipse:</p>
<p>Lo Primero será agregar el servidor de Google a los origenes de descargas de Eclipse, Menú Help / Install new Software y agregamos el depósito según nuestra versión de Eclipse,</p>
<p>para Ganymede usamos<br /><span style="color:#008;text-align:left;">http://dl.google.com/eclipse/plugin/3.4</span></p>
<p style="color:#008;">Europa<br />http://dl.google.com/eclipse/plugin/3.3</p>
<p style="color:#008;">Galileo<br />http://dl.google.com/eclipse/plugin/3.5</p>
<p style="color:#008;">Helios<br />http://dl.google.com/eclipse/plugin/3.6</p>
<p><a href="http://soloquiero.info/wp-content/uploads/2010/07/NuevoProyecto.png" target="_blank"><img height="194" width="300" style="margin: 5px" class="" alt="" src="http://soloquiero.info/wp-content/uploads/2010/07/NuevoProyecto.png" title="" /><img height="194" width="300" style="margin: 2px" class="" alt="" src="http://soloquiero.info/wp-content/uploads/2010/07/instalando1.png" title="" /></a></p>
<p>Le damos a next&#8230; leemos y aceptamos las licencias&#8230; reiniciamos eclipse si nos lo solicita.</p>
<p>El siguiente paso será Ir a menú File / New / Web Application Project</p>
<p><img style="margin: 2px" class="" alt="" src="http://soloquiero.info/wp-content/uploads/2010/07/creandoProyecto.png" title="" /></p>
<p>Rellenamos el nombre del proyecto y el paquete por default para nuestras clases, también tenemos opción a seleccionar el motor del appengine (hay varias versiones) que deseamos utilizar y también Google GWT.</p>
<p>En mi caso no deseo usar el toolkit de Google GWT que sirve para crear aplicaciones AJAX como Google Maps escribiendo código Java y que será convertido (en donde se necesite) a código javascript. Pueden leer más sobre <a href="http://code.google.com/intl/es-ES/webtoolkit/overview.html">Google GWT en la página oficial</a>.</p>
<p><img height="627" style="margin: 5px; float: right" width="344" alt="" src="http://soloquiero.info/wp-content/uploads/2010/07/archivosNuevoProyecto.png" /> Una vez creado nuestro proyecto veremos que nuestro proyecto cuenta con varios archivos:</p>
<p>De esta lista de archivos, vemos un Servlet inicial, en la carpeta META-INF un archivo de nombre <strong>jdoconfig.xml</strong> que nos permitirá usar la almacenar nuestros datos en los servidores de google, el archivo log4j.properties para configurar el logging de la aplicación.</p>
<p>Luego encontramos el directorio <strong>war,</strong> que viene siendo la raíz de nuestra aplicación, si agregamos algo a este directorio (un css, imagen, etc) podríamos acceder a él de la manera: http://aplicacion.appspot.com/archivo.css por ejemplo.</p>
<p>También podremos incluír en este directorio nuestros archivos jsp, html, etc.</p>
<p>El directorio war\WEB-INF tiene 2 archivos importantes &quot;appengine-web.xml&quot; que nos permite configurar desde el ID de nuestra aplicación para poder subirla al google engine, como el manejo de sesiones y otras cosas más que veremos luego.</p>
<p>web.xml como en cualquier otra aplicación web nos permitirá configurar nuestros servlet y opciones de nuestra aplicación (Java Server Faces, facelets, etc).</p>
<p>En la carpeta war\WEB-INF\lib debemos agregar todas aquellas bibliotecas que necesitemos utilizar en nuestra aplicación, tal como httpClient, facelets, y otras, para saber si una biblioteca es utilizable en el appengine de google <a href="http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1">podemos ir a la página que tiene a nuestra disposición</a> con una lista de las bibliotecas que funcionan y con una lista de las que no funcionan.</p>
<p>Puede probar su aplicación ejecutando su aplicación en el servidor de pruebas como se ve en la siguiente imagen:</p>
<p><img height="153" style="margin: 5px" width="551" alt="" src="http://soloquiero.info/wp-content/uploads/2010/07/ejecutandoApp.png" /></p>
<p>Y puede acceder a su aplicación con su navegador favorito (chrome, firefox, sí incluso con internet explorer) a la dirección http://localhost:8888</p>
<p>para ver una página como la siguiente:</p>
<h1>Hello App Engine!</h1>
<table>
<tr>
<td style="font-weight:bold;">Available Servlets:</td>
</tr>
<tr>
<td><a href="#">Demo1</a></td>
</tr>
</table>
<p>Desde el link en dicha página puede probar el servlet que se creó junto con la aplicación que simplemente nos retornará un mensaje: &quot;Hello, World&quot;.</p>
<p>Ahora modificaremos el servlet para que nos devuelva algo más interesante, modificando el contenido del método doGet por el siguiente código:</p>
<pre>
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {

        resp.setContentType("text/plain");
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();

        if (user == null) {
            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
            return;
        }

        resp.getWriter().println("Bienvenido" +
        user.getNickname()+" su IP es " + req.getRemoteAddr());
    }
</pre>
<p>Necesitará agregar los siguientes import al inicio del código:</p>
<pre>
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
</pre>
<p>Una vez publicado en el appengine este simple servlet nos permitiría saber la IP pública por la que salimos a internet, al estilo de http://whatismyip.org (sí, ya sé, no es más interesante que el servlet original), pero hay un par de cosas interesantes en el código, las líneas:</p>
<pre>
   UserService userService = UserServiceFactory.getUserService();
   User user = userService.getCurrentUser();
</pre>
<p>Nos permiten utilizar el servicio de autenticación de google y validar si el usuario ha iniciado sesión o no. Si el usuario no ha iniciado sesión se le redireccionará a la página de inicio de sesión con el código</p>
<pre>
   if (user == null) {
            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
            return;
   }
</pre>
<p>A los usuarios que ya iniciaron sesión, se les mostrará el nombre configurado en su cuenta google y su ip. Si ejecutamos la aplicación en nuestra pc con el servidor de desarrollo que nos brinda el jdk de google con eclipse, veremos un diálogo para poner nuestro correo pero no nuestra contraseña, no se preocupe al publicarla se verá distinto.</p>
<p>Nuestro siguiente pasó será iniciar sesión en http://www.appspot.com con nuestra cuenta google y seleccionar la opción de &quot;Crear nueva aplicación&quot; / &quot;Create an application&quot; (al momento de escribir esto podremos crear hasta 10 applicaciones, pero no se preocupen, pueden borrar una app si deciden no utilizarla más)</p>
<p><img height="380" style="margin: 5px" width="418" alt="" src="http://soloquiero.info/wp-content/uploads/2010/07/registrarAppNueva.png" /></p>
<p>El Application Identifier es como queremos llamar a nuestra aplicación y será la forma por cómo ingresaremos a ella, por ejemplo http://misuperaplicacion.appspot.com y ojo, recuerden el identificador que utilicen ya que será necesario para configurar nuestra app en desarrollo y poder subirla. Application Title es el nombre descriptivo que se mostrará a nuestros usuarios.</p>
<p>Una vez creada nuestra aplicación, procedemos a abrir el archivo appengine-web.xml del directorio war\WEB-INF de nuestro proyecto, localizamos la cadena  <strong><em>&lt;application&gt;&lt;/application&gt;</em></strong> y escribimos el ID de nuestra aplicación, por ejemplo: &lt;application&gt;misuperaplicacion&lt;/application&gt; para el ejemplo anterior.</p>
<p>Finalmente podemos publicar nuestra aplicación, para ello damos clic derecho sobre la raíz de nuestro proyecto y buscamos la opción &quot;Google&quot; y &quot;Deploy to AppEngine&quot;</p>
<p><img style="margin: 5px" alt="" src="http://soloquiero.info/wp-content/uploads/2010/07/deployApp.png" /></p>
<p>Indicamos nuestras credenciales de acceso y publicamos, una vez terminado podremos ir a nuestra aplicación con</p>
<p>Http://nuestroIdentificador.appspot.com/</p>
<p>A Experimentar con AppEngine!</p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2010/07/programando-con-appengine-de-google-y-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Modelo CakePhp</title>
		<link>http://soloquiero.info/2009/07/modelo-cakephp/</link>
		<comments>http://soloquiero.info/2009/07/modelo-cakephp/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 05:50:25 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[MVC]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://soloquiero.info/?p=119</guid>
		<description><![CDATA[Siguiendo con el tema de CakePhp, ahora toca la introducción al tema de modelos, El Modelo en el paradigma MVC, es el primer concepto con el que nos toparemos, y básicamente proveé un acceso a los datos de nuestra aplicación o sitio, estén estos en una base de datos mysql, sql server, oracle, xml, directorio [...]]]></description>
			<content:encoded><![CDATA[<p>Siguiendo con <a href="http://soloquiero.info/2009/06/iniciando-con-cakephp/">el tema de CakePhp</a>, ahora toca la introducción al tema de modelos,</p>
<p>El Modelo en el paradigma MVC, es el primer concepto con el que nos toparemos, y básicamente proveé un acceso a los datos de nuestra aplicación o sitio, estén estos en una base de datos mysql, sql server, oracle, xml, directorio ldap o cualquier otro al que php pueda conectarse. Todo lo referente a la manipulación de datos (obtención, modificación, eliminación, etc).</p>
<p>La primera parte será definir una conexión a nuestro origen de datos, en mi caso utilizaré mysql. todo lo que tiene que hacer es guardar el archivo database.php.default con el nombre de database.php y editarlo.</p>
<p>Encontrará al final del archivo la clase DATABASE_CONFIG con 2 variables: $default y $test, la primera como su nombre lo indica será la conexión predeterminada en caso no se especifique, y la segunda la que se utilizará en las pruebas unitarias (unit test) en caso las utilice. En mi caso estoy utilizando mysql y quedó así mi variable $default</p>
<p><code>var $default = array(<br />
'driver' =&gt; 'mysql',<br />
'persistent' =&gt; false,<br />
'host' =&gt; '192.168.1.1',<br />
'login' =&gt; 'usuarioDB',<br />
'password' =&gt; 'miPassword',<br />
'database' =&gt; 'MiBD_Ejemplo',<br />
'prefix' =&gt; '',<br />
);</code></p>
<p>Guarda su archivo y está listo para continuar. (con la utilidad bake de cake también podrá configurar este archivo, pero se verá más adelante).</p>
<p>Los modelos deben ser creados con la palabre clave de php &#8220;<em>class</em>&#8221; y deben heredar de la clase &#8220;AppModel&#8221;, que es una clase que cakephp nos brinda en el directorio cake/libs/model.php</p>
<p>Los modelos deben ser almacenados en la carpeta &#8220;Models&#8221; de nuestra aplicación, aunque hay 2 cosas a tener en cuenta. El nombre de la tabla debe ser escrita en plural, y El nombre nuestra clase debe ser en singular y almacenada en un archivo con el mismo nombre.</p>
<p>Por ejemplo, el controlador para la tabla &#8220;<em>Actividades</em>&#8221; debe almacenarse en el archivo models/actividad.php y el contenido del archivo sería el siguiente:</p>
<p><code>class Actividad extends AppModel {<br />
var $name = 'Actividad';<br />
}</code></p>
<p>Si intentara usar este modelo en CakePhp obtendría un error, ya que éste espera que los nombres de las tablas estén en inglés, pero no se preocupe, la gente de CakePhp sabía que el inglés no es el único idioma así que proveen un mecanimos para que cakephp sepa buscar la clase en base al nombre de la tabla cuando esta está en español.</p>
<p>Edite el archivo Config/inflections.php de la carpeta de su aplicación y agregue las <a href="http://www.mail-archive.com/cakephp-es@googlegroups.com/msg04356.html">siguientes líneas</a> justo antes de ?&gt; :</p>
<p><code>$pluralRules = array(<br />
'/([aieou])$/i' =&gt; '\1s',       # dependencia<br />
'/(d|r|n)$/i' =&gt; '\1es', # unidad(es)<br />
);</code></p>
<p><code> </code></p>
<p><code>$singularRules = array(<br />
'/(d|r|n)es$/i' =&gt; '\1',<br />
'/([aeiou])s$/i' =&gt; '\1', # dependencia<br />
);</code></p>
<p>Y ya tiene un modelo creado, aunque este en particular no valida datos, podría escribir sus reglas de validación para esta tabla, pero eso escapa de este post, pero puede leerlo en la <a href="http://book.cakephp.org/view/318/Data-Validation">documentación de de cakePhp</a>.</p>
<p>Ahora la forma más sencilla de crear un modelo y sus validaciones respetando además el nombre y locación del archivo es usando la shell de cakephp, así que vaya a inicio /ejecutar y escriba cmd y presione enter.<br />
muevase a la carpeta en que almacena su aplicación (en mi ejemplo c:\cakephp\miProyecto)</p>
<p>cd C:\cakephp\miProyecto<br />
cake bake</p>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/07/cakephp_modelo1.jpg"><img class="alignnone size-full wp-image-120" title="cakephp_modelo1" src="http://soloquiero.info/wp-content/uploads/2009/07/cakephp_modelo1.jpg" alt="cakephp_modelo1" width="665" height="303" /></a></p>
<p>Si no configuró su base de datos, puede seguir el asistente que le permitirá hacerlo en su proyecto cómo se muestra en la siguiente imagen</p>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/07/cakephp_modelo2.jpg"><img class="alignnone size-full wp-image-121" title="cakephp_modelo2" src="http://soloquiero.info/wp-content/uploads/2009/07/cakephp_modelo2.jpg" alt="cakephp_modelo2" width="673" height="459" /></a></p>
<p>Una vez configurada la base de datos con el asistente debemos volver a ejecutar &#8220;Cake Bake&#8221; y nos mostrará el siguiente menú, desde el que selecionaremos la opción M (Modelo)<br />
donde nos desplegará una opción por cada tabla que exista en nuestra base de datos, escribiremos el número asignado a nuestra tabla &#8220;actividades&#8221; que en mi caso ha sido &#8220;1&#8243;, luego nos preguntará si queremos crear las validaciones de nuestros campos, escribimos &#8220;y&#8221; y nos preguntará por cada campo qué tipo de validación queremos.<br />
<a href="http://soloquiero.info/wp-content/uploads/2009/07/cakephp_modelo3.jpg"><img class="alignnone size-full wp-image-122" title="cakephp_modelo3" src="http://soloquiero.info/wp-content/uploads/2009/07/cakephp_modelo3.jpg" alt="cakephp_modelo3" width="673" height="758" /></a></p>
<p>Entre las validaciones existentes podemos escojer que ingresen un número(<strong>numeric</strong>), que no dejen el campo vacío(<strong>notEmpty</strong>), que el valor esté entre un rango de dos valores (<strong>Between</strong>) y también crear nuestras propias validaciones.</p>
<p>Una vez que terminemos con las validaciones, nos preguntará si queremos agregar las relaciones de nuestras tablas, esto es para que genere el código necesario para poder integrar las búsquedas de los datos en las tablas relacionadas, por ejemplo obtener el detalle de la factura (obtener los registros hijos de la tabla).</p>
<p>En mi caso ha creado el siguiente modelo:<br />
<code><br />
class Actividad extends AppModel {<br />
	var $name = 'Actividad';<br />
	var $validate = array(<br />
		'nombre_actividad' => array('notempty'),<br />
		'minimo_llamada' => array('numeric'),<br />
		'maximo_llamada' => array('numeric'),<br />
		'num_clientes' => array('numeric')<br />
	);<br />
}<br />
</code></p>
<p>Ahora el siguiente paso será crear un <a href="http://soloquiero.info/2009/07/controlador-cakephp/">Controlador</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2009/07/modelo-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Iniciando con CakePhp</title>
		<link>http://soloquiero.info/2009/06/iniciando-con-cakephp/</link>
		<comments>http://soloquiero.info/2009/06/iniciando-con-cakephp/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 20:54:41 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[MVC]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://soloquiero.info/?p=98</guid>
		<description><![CDATA[CakePHP es un framework escrito en php que implementa un modelo vista controlador (MVC), su uso es sumamente sencillo y nos ayuda a desarrollar código y aplicaciones más rápido. Puede bajar la última versión estable de CakePhp o bien obtener la versión más actualizada (en desarrollo) vía SVN (si no conoce o nunca ha utilizado [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cakephp.org">CakePHP</a> es un framework escrito en php que implementa un modelo vista controlador (<a title="qué es MVC" href="http://soloquiero.info/2009/06/que-es-asp-net-mvc/">MVC</a>), su uso es sumamente sencillo y nos ayuda a desarrollar código y aplicaciones más rápido.</p>
<p>Puede bajar la <a href="http://cakephp.org/#get-it">última versión estable de CakePhp</a> o bien obtener la versión más actualizada (en desarrollo) vía SVN (si no conoce o nunca ha utilizado SubVersion (SVN) puede leer estos 2 tutoriales: <a href="http://fox.desdeguate.com/2007/08/18/subversion_instalacion_vfp1/">Instalación</a> y <a href="http://fox.desdeguate.com/2007/08/27/tortoisesvn_configuracion_vfp2/">Configuración</a> de SVN).<br />
Antes de iniciar el tutorial, asegúrese de tener corriendo un servidor web(IIS, apache, etc) y tener correctamente configurado PHP.</p>
<p>En mi caso utilizaré la versión de desarrollo de CakePHP que obtuve vía SVN (versión 1.2.3.8166). No importa cómo lo obtiene, todo lo que necesita es extraer CakePhp a un directorio en su computadora, digamos a c:\CakePHP y ver que su estructúra de directorios sea similar a lo siguiente:<br />
<a href="http://soloquiero.info/wp-content/uploads/2009/06/estructura_1.jpg"><br />
<img class="alignnone size-large wp-image-100" title="Estructura de directorios de CakePhp" src="http://soloquiero.info/wp-content/uploads/2009/06/estructura_1.jpg" alt="Estructura de directorios de CakePhp" width="644" height="390" /></a></p>
<p>Rápidamente veremos que hay en cada carpeta</p>
<p>App -&gt; donde nosotros haremos que nuestra magia suceda, acá guardaremos nuestras funciones, códigos, páginas, controladores, etc.</p>
<p>Cake-&gt; acá está el núcleo de CakePhp, al estar separado del código de nuestra o nuestras apps, podemos compartir una sola instalación de cakephp con varias aplicaciones (sitios web)</p>
<p>Vendors -&gt; Si tenemos algún componente de terceros que vayamos a utilizar (foros php, componentes para php, etc) lo debemos guardar acá.</p>
<p>La carpeta Cake y Vendors no la tocaremos en este tutorial, así que vamos a examinar la carpeta App, esta es la carpeta de la aplicación default, si necesitamos una aplicación más (otro sitio web o una sub aplicación en un sitio web existente) lo único que debemos hacer es copiar el contenido de APP a una nueva carpeta dentro de c:\cakephp.</p>
<p>Yo no recomiendo utilizar la carpeta App para nuestro primer desarrollo, siempre prefiero que la carpeta tenga el nombre de mi proyecto. Así que empezaremos a configurar nuestro entorno para crear nuestra estructura y aplicación.</p>
<p>Estoy utilizando <a href="http://www.apachefriends.org/es/xampp.html">Xampp</a> en windows, así que luego de instalarlo ya tengo Apache+php+mysql en mi pc instalado y configurado. Lo único que me resta hacer es agregar a la ruta de búsqueda (path en inglés)  la carpeta donde tengo Php y CakePhp:</p>
<p>Damos clic derecho sobre mi pc y luego seleccionamos Propiedades luego seleccionamos la página de Opciones Avanzadas (si está en windows vista o windows 7 debe seleccionar primero la opción que dice &#8220;configuración avanzada del sistema&#8221;) y finalmente vamos al botón que dice &#8220;Variables del Entorno&#8221;:</p>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/06/propiedades_sistema_path.jpg"><img class="alignnone size-full wp-image-110" title="propiedades_sistema_path" src="http://soloquiero.info/wp-content/uploads/2009/06/propiedades_sistema_path.jpg" alt="propiedades_sistema_path" width="664" height="440" /></a><br />
Una vez en la ventana que aparecerá deberemos buscar en la lista inferior la variable que dice &#8220;path&#8221;, seleccionamos el botón de &#8220;editar&#8221;, nos movemos al final del valor y agregamos un ; y escribimos la ruta donde tenemos instalado PHP  con un ; al final. luego agregamos la ruta donde está CakePhp  y le agregamos la ruta cake\console para que se vea como lo siguiente:</p>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/06/modificar_path_php.jpg"><img class="alignnone size-full wp-image-109" title="modificar_path_php" src="http://soloquiero.info/wp-content/uploads/2009/06/modificar_path_php.jpg" alt="modificar_path_php" width="394" height="518" /></a></p>
<p>Una vez que tengamos esto hecho haremos la prueba, desde menú inicio/ejecutar y escribimos &#8220;cmd&#8221; y aceptar, en la ventana de comandos que aparecerá escribiremos &#8220;php -v&#8221; sin las comillas y presionamos enter, la pantalla debería lucir más o menos así:</p>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/06/php_v.jpg"><img class="alignnone size-full wp-image-114" title="php_v" src="http://soloquiero.info/wp-content/uploads/2009/06/php_v.jpg" alt="php_v" width="673" height="338" /></a><br />
si aparece un mensaje de error con el texto</p>
<blockquote><p>&#8220;php&#8221; no se reconoce como un comando interno o externo,programa o archivo por lotes ejecutable.</p></blockquote>
<p>significa que no hemos establecido la ruta correctamente.</p>
<p>Si todo ha ido bien, escribiremos &#8220;cake&#8221; y presionamos enter, la salida debe ser algo similar a la ventana siguiente:<br />
<a href="http://soloquiero.info/wp-content/uploads/2009/06/cake_exec.jpg"><img class="alignnone size-full wp-image-115" title="cake_exec" src="http://soloquiero.info/wp-content/uploads/2009/06/cake_exec.jpg" alt="cake_exec" width="673" height="566" /></a></p>
<p>Si todo está bien configurado veremos esa pantalla. lo que significa que estamos listos para crear nuestro primero proyecto: nos moveremos al directorio que creamos inicialmente con</p>
<blockquote><p>CD c:\cakePhp</p></blockquote>
<p>y ejecutaremos</p>
<blockquote><p>cake bake project c:\cakephp\miProyecto</p></blockquote>
<p>donde &#8220;miProyecto&#8221; es el nombre del proyecto a crear, usen el nombre que gusten.</p>
<p>Revisen los valores que cake bake les presentará y si están de acuerdo escriban &#8220;y&#8221; y presionen enter, si les preguntan si desean &#8220;verbose output&#8221; pueden escribir &#8220;n&#8221; y presionar enter (simplemente muestra los archivos que va creando).</p>
<p>el resultado debe ser similar a esto:</p>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/06/creando_proyecto_bake.jpg"><img class="alignnone size-full wp-image-116" title="creando_proyecto_bake" src="http://soloquiero.info/wp-content/uploads/2009/06/creando_proyecto_bake.jpg" alt="creando_proyecto_bake" width="673" height="422" /></a></p>
<p>Vamos a ver nuestro directorio con el explorador de windows, abriremos C:\cakePhp\miProyecto<br />
<a href="http://soloquiero.info/wp-content/uploads/2009/06/nueva_app.jpg"><img class="alignnone size-full wp-image-117" title="nueva_app_cake" src="http://soloquiero.info/wp-content/uploads/2009/06/nueva_app.jpg" alt="nueva_app_cake" width="392" height="350" /></a></p>
<p>El siguiente paso es configurar nuestro servidor web para que apunte a nuestro directorio<br />
Cómo estoy usando apache he creado esta sección en el archivo C:\xampp\apache\conf\extra\httpd-vhosts.conf:</p>
<pre>&lt;VirtualHost *:80&gt;
ServerName miServidor
DocumentRoot c:/cakephp/miProyecto/webroot
&lt;Directory /&gt;
Options FollowSymLinks AllowOverride All
&lt;/Directory&gt;
&lt;Directory c:/cakephp/miProyecto/webroot&gt;
Options Indexes FollowSymLinks
AllowOverride All Order allow,deny
Allow from all
&lt;/Directory&gt;
&lt;/VirtualHost&gt;
</pre>
<p>También necesité editar el archivo c:\windows\System32\drivers\etc\hosts agregando al final la siguiente línea</p>
<blockquote><p>127.0.0.1 miServidor</p></blockquote>
<p>Esto nos permitirá probar nuestra aplicación en la dirección http://miServidor/ si usa IIS quizá no necesite editar este archivo si usa un directorio virtual.</p>
<p>Ahora desde el navegador web abriremos http://miServidor y veremos una página similar a esta:<br />
<a href="http://soloquiero.info/wp-content/uploads/2009/06/primer_proyecto_cakephp_inical.jpg"><img src="http://soloquiero.info/wp-content/uploads/2009/06/primer_proyecto_cakephp_inical.jpg" alt="primer_proyecto_cakephp_inical" title="primer_proyecto_cakephp_inical" width="653" height="563" class="alignnone size-full wp-image-118" /></a></p>
<p>Para modificar el contenido de la página inicial basta con modificar el archivo en<br />
C:\CakePhp\miProyecto\views\pages\home.ctp</p>
<p>Para modificar la apariencia y aplicar nuestro propio diseño al sitio, basta con modificar el archivo<br />
C:\CakePhp\miProyecto\views\layouts\default.ctp</p>
<p>Bueno, en la siguiente artículo abordaremos el tema de la creación de <a href="http://soloquiero.info/2009/07/modelo-cakephp/">Modelos</a>, controladores  y vistas.</p>
<p>Hasta la próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2009/06/iniciando-con-cakephp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Qué es Asp.Net MVC</title>
		<link>http://soloquiero.info/2009/06/que-es-asp-net-mvc/</link>
		<comments>http://soloquiero.info/2009/06/que-es-asp-net-mvc/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:31:20 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[Asp.Net]]></category>

		<guid isPermaLink="false">http://soloquiero.info/?p=96</guid>
		<description><![CDATA[Asp.Net MVC es una plataforma liberada por Microsoft que permite desarrollar sitios web utilizando un patrón Modelo-Vista-Controlador (MVC), lo que significa un mejor control en el código html de nuestras páginas, integración AJAX, Urls autodescriptivas (SEO urls), además nos permite tener una separación real de de nuestras capas para una más fácil de mantener y [...]]]></description>
			<content:encoded><![CDATA[<p>Asp.Net MVC es una plataforma liberada por Microsoft que permite desarrollar sitios web utilizando un patrón Modelo-Vista-Controlador (MVC), lo que significa un mejor control en el código html de nuestras páginas, integración AJAX, Urls autodescriptivas (SEO urls), además nos permite tener una separación real de de nuestras capas para una más fácil de mantener y extenderlas y además nos permite agregar unidades de pruebas (unit tests) a nuestro proyecto.</p>
<p><a href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador">MVC</a> separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón MVC se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página. El modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio, y el controlador es el responsable de recibir los eventos de entrada desde la vista. </p>
<p>La ventaja principal que obtendremos al desarrollar bajo MVC es no utilizar Forms de Asp.Net y nuestro código html resultante será más liviano, también nos permitiría por ejemplo cambiar de motor de datos sin afectar a nuestra capa de presentación.</p>
<p>No crea que MVC es solo para asp.net, este está implementado en muchos frameworks de varios lenguajes como Ruby,Php o Perl. El framework más famoso para Ruby es <a href="http://www.rubyonrails.org/">Ruby on Rails</a>, de php existen muchísimos como <a href="http://cakephp.org">CakePhp</a> o <a href="http://framework.zend.com/">Zend Framework</a>, uno bastante sencillo de implementar para Perl  es <a href="http://www.catalystframework.org/">Catalyst</a>.</p>
<p>Una vez conoce y se familiariza con MVC programar en cualquier lenguaje siguiendo este esquema es sumamente fácil, Olvídese de tener que aprender con cada lenguaje una forma distinta de separar sus capas.</p>
<p>Puede obtener <a href="http://go.microsoft.com/fwlink/?LinkId=144444">Asp.Net MVC desde el sitio de Microsoft</a>.</p>
<p>MVC no es exclusivo de Asp.Net<br />
Algunos links de interés sobre MVC</p>
<p>http://msdn.microsoft.com/es-es/magazine/cc337884.aspx</p>
<p>http://www.asp.net/mvc/whatisaspmvc/</p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2009/06/que-es-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mostrando datos fácilmente con SubSonic</title>
		<link>http://soloquiero.info/2009/03/mostrando-datos-facilmente-con-subsonic/</link>
		<comments>http://soloquiero.info/2009/03/mostrando-datos-facilmente-con-subsonic/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 06:23:24 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SubSonic]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://soloquiero.info/?p=70</guid>
		<description><![CDATA[Una de las ventajas de usar SubSonic es el poder mostrar datos de una manera fácil con él. Si necesitamos mostrar varios registros de una tabla, solo basta con agregar a nuestro toolbox de controles a subsonic.dll y utilizaremos el control &#8220;QuickTable&#8221; Este es la forma más básica de usar este control, y nos mostrará [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las ventajas de usar SubSonic es el poder mostrar datos de una manera fácil con él.</p>
<p>Si necesitamos mostrar varios registros de una tabla, solo basta con agregar a nuestro toolbox de controles a subsonic.dll y utilizaremos el control &#8220;QuickTable&#8221;</p>
<p><code lang="csharp"><subsonic:QuickTable ID="QuickTable1" runat="server" ColumnList="Campo1,Campo2" TableName="Tabla" /></code></p>
<p>Este es la forma más básica de usar este control, y nos mostrará los datos de nuestra tabla:</p>
<div id="attachment_74" class="wp-caption alignnone" style="width: 182px"><img src="http://soloquiero.info/wp-content/uploads/2009/03/quicktable1.png" alt="Demo QuickTable sencilla" title="Demo QuickTable sencilla" width="172" height="274" class="size-full wp-image-74" /><p class="wp-caption-text">Demo QuickTable sencilla</p></div>
<p>La tabla nos permite ordenar por el campo que querramos, sin que tengamos que agregar nada. En el caso que los encabezados de nuestros campos necesiten personalizar, podremos cambiarlos de la siguiente manera  <strong>Campo:Título</strong></p>
<p><code lang="csharp"><subsonic:QuickTable ID="QuickTable1" runat="server" ColumnList="Campo1:Título,Campo2;Nuevo Título" TableName="Tabla" /></code><br />
<img src="http://soloquiero.info/wp-content/uploads/2009/03/quicktable2.png" alt="Títulos personalizados en QuickTable" title="Títulos personalizados en QuickTable" width="172" height="274" class="size-full wp-image-75" /></p>
<p>Si son demasiados datos podríamos paginarlos también agregando el atributo  PageSize=&#8221;##&#8221; donde ## es el número de registros que queremos mostrar a la vez:</p>
<p><code lang="csharp"><subsonic:QuickTable ID="QuickTable2" runat="server" ColumnList="Nombre:Título,Apellidos:Nuevo Título" TableName="Socios"  PageSize="12"/></code><br />
<img src="http://soloquiero.info/wp-content/uploads/2009/03/quicktable3.png" alt="Paginando con QuickTable y Subsonic" title="Paginando con QuickTable y Subsonic" width="325" height="310" class="alignnone size-full wp-image-82" /></p>
<p>Podríamos agregar un link a algún campo para editar un registro, pero entonces se necesita agregar el campo llave a la lista de campos que se seleccionan con &#8220;ColumnList&#8221;</p>
<p><code lang="csharp"><subsonic:QuickTable ID="QuickTable2" runat="server" ColumnList="ID_PK:Llave,Nombre:Título,Apellidos:Nuevo Título" TableName="Socios"  PageSize="12" LinkToPage="Pagina.aspx" LinkOnColumn="Nombre" /></code><br />
<img src="http://soloquiero.info/wp-content/uploads/2009/03/quicktable4.png" alt="Link en QuickTable" title="Link en QuickTable" width="325" height="310" class="alignnone size-full wp-image-85" /></p>
<p>Y eso es todo, en el siguiente post trataré de mostrar como usar un combo para seleccionar un registro de una tabla sin lidiar con el databind y demás.</p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2009/03/mostrando-datos-facilmente-con-subsonic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SubSonic y C# (2)</title>
		<link>http://soloquiero.info/2009/02/subsonic-y-c-2/</link>
		<comments>http://soloquiero.info/2009/02/subsonic-y-c-2/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 07:36:57 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[SubSonic]]></category>

		<guid isPermaLink="false">http://soloquiero.info/?p=52</guid>
		<description><![CDATA[Si no ha leído la primera parte, puede hacerlo ahora SubSonic y C# (1) Algunos ejemplos prácticos de uso de SubSonic son Obtener un listado ordenado de alguna tabla para usar con RadioButtons, ComboBox,ListBoxes: MyComboBox.DataSource= Category.GetListItems(); Donde Category es el nombre de la clase generada a partir de mi tabla &#8220;Category&#8221;. Ejecutar Querys y pasarle [...]]]></description>
			<content:encoded><![CDATA[<p>Si no ha leído la primera parte, puede hacerlo ahora<a title="Subsonic y C# parte 1" href="http://soloquiero.info/?p=7"> SubSonic y C# (1)</a></p>
<p>Algunos ejemplos prácticos de uso de SubSonic son</p>
<p>Obtener un listado ordenado de alguna tabla para usar con RadioButtons, ComboBox,ListBoxes:</p>
<p><code lang="csharp">MyComboBox.DataSource= Category.GetListItems();</code></p>
<p>Donde Category es el nombre de la clase generada a partir de mi tabla &#8220;Category&#8221;.</p>
<p>Ejecutar Querys y pasarle parámetros:<br />
<code lang="csharp">SqlQuery qry = new SqlQuery().From<Product>().Where( "categoryname" ).<br />
          IsEqualTo( "miParámetro de búsqueda" );<br />
</code></p>
<p>SubSonic.SqlQuery provee de un método Where() que como primer parámetro nos permite indicar la columna por la cual queremos filtrar,algunos ejemplos:</p>
<ul>
<li>Nos permite indicar que la columna debe tener el valor indicado.<br />
<code lang="csharp">.Where("columna").IsEqualTo("valor") </code></li>
<li>Nos permite indicar que la columna no tenga el valor indicado<br />
<code lang="csharp">.Where("columna").IsNotEqualTo("valor")</code></li>
<li>Nos permite construir una sentencia Like, el valor que pasemos al método Like puede incluír &#8220;%&#8221;<br />
<code lang="csharp">.Where("columna").Like("valor")</code>
</li>
<li>Filtra todos los registros donde &#8220;columna&#8221; sea null.<br />
<code lang="csharp">.Where("columna").isNull()</code>
</li>
<li>Filtra todos los registros donde &#8220;columna&#8221; no sea null.<br />
<code lang="csharp">.Where("columna").isNotNull()</code></li>
<li>Filtra todos los registros donde &#8220;columna&#8221; sea mayor a &#8220;valor&#8221;.<br />
<code lang="csharp">.Where("columna").IsGreaterThan(valor)</code>
</li>
<li>Filtra todos los registros en que &#8220;Columna&#8221; esté en el rango indicado de valores.<code lang="csharp">.Where("columna").InValues(valor1,valor2,n...)</code>
</li>
<li>Nos permite hacer un subSelect dentro del actual, pasando como parámetro otro SqlQuery.<br />
<code lang="csharp">.Where("columna").In(SqlQuery)</code>
</li>
<li>Para anidar instrucciones, usamos el Método And()<br />
<code lang="csharp">.Where("columna").IsGreaterThan(valor)<br />
.And("columna2").IsNotNull();</code></li>
</ul>
<p>Todo esta información y muchísima más la puede encontrar en la <a href="http://subsonichelp.com/">documentación de SubSonic</a></p>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/02/subsonic2.zip">Descargar Proyecto demo SubSonic2</a></p>
<p>Hasta la próxima entrega</p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2009/02/subsonic-y-c-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Subsonic y C# (1)</title>
		<link>http://soloquiero.info/2009/02/subsonic-y-c-1/</link>
		<comments>http://soloquiero.info/2009/02/subsonic-y-c-1/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 05:06:56 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[SubSonic]]></category>

		<guid isPermaLink="false">http://soloquiero.info/?p=7</guid>
		<description><![CDATA[Bueno, este es el primer post de ejemplo para iniciar con SubSonic. SubSonic es un componente o utilería que nos permite abstraernos del código necesario para conectarnos a una base de datos (Sql Server, Oracle, MySql, Etc) y también del código necesario para grabar/eliminar/actualizar un registro (hacer un ABM con SubSonic es facilísimo). Aunque no [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno, este es el primer post de ejemplo para iniciar con <a title="Página principal del proyecto Subsonic" href="http://subsonicproject.com/" target="_blank">SubSonic</a>.</p>
<p>SubSonic es un componente o utilería que nos permite abstraernos del código necesario para conectarnos a una base de datos <strong>(Sql Server</strong>, <strong>Oracle</strong>, <strong>MySql</strong>, Etc) y también del código necesario para grabar/eliminar/actualizar un registro (hacer un ABM con SubSonic es facilísimo). Aunque no es tan potente como <strong>nHibernate</strong>, nos ayuda mucho en el desarrollo de nuestras aplicaciones/sitios web que necesitan conectar a una base de datos.</p>
<p>Primero necesitaremos <a title="Descargar SubSonic" href="http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=14067" target="_blank">bajar SubSonic</a>, Una vez que lo tengamos instalado, podemos utilizar <strong>SubStage</strong> para generar la configuración para nuestra aplicación.</p>
<div id="attachment_9" class="wp-caption alignnone" style="width: 509px"><a href="http://soloquiero.info/wp-content/uploads/2009/02/substage_main.jpg"><img class="size-full wp-image-9" title="Pantalla principal de SubStage" src="http://soloquiero.info/wp-content/uploads/2009/02/substage_main.jpg" alt="Pantalla principal de SubStage" width="499" height="341" /></a><p class="wp-caption-text">Pantalla principal de SubStage</p></div>
<div>
<ul>
<li><strong>Crear Nuevo Proyecto <a href="http://soloquiero.info/wp-content/uploads/2009/02/nuevoproyecto.png"><img class="alignnone size-medium wp-image-19" title="nuevoproyecto" src="http://soloquiero.info/wp-content/uploads/2009/02/nuevoproyecto.png" alt="" width="16" height="16" /></a></strong></li>
</ul>
</div>
<ol>
<li>Lo primero será dar clic en el primer botón para crear un nuevo proyecto (clic en la imagen para agrandar).</li>
<li>cambiaremos el nombre por el de nuestro proyecto en <strong>Project Name.<br />
</strong></li>
</ol>
<div>
<ul>
<li><strong>Crear Nueva cadena de conexión <a href="http://soloquiero.info/wp-content/uploads/2009/02/nuevacadenaconexion.png"><img class="alignnone size-medium wp-image-20" title="nuevacadenaconexion" src="http://soloquiero.info/wp-content/uploads/2009/02/nuevacadenaconexion.png" alt="" width="16" height="16" /></a></strong></li>
</ul>
</div>
<ol>
<li>Clic en el tercer botón para agregar una nueva cadena de conexión.</li>
<li>En la propiedad <strong>ConnectionString</strong> debemos escribir la cadena de conexión a nuestra base de datos.Para efectos de prueba puede utilizar la cadena de conexión siguiente, si tiene Sql Server y las bases de datos de prueba instaladas.<br />
<blockquote><p>Data Source=(local); Database=Northwind; Integrated Security=true;</p></blockquote>
</li>
<li>En la propiedad <strong>Name </strong>debemos escribir un nombre descriptivo para esta conexión, o bien el nombre de la base de datos que usará, sobre todo si tendremos más de una conexión en la configuración de nuestro sitio web/aplicación .net.</li>
</ol>
<div>
<ul>
<li><strong>Crear el Proveedor <a href="http://soloquiero.info/wp-content/uploads/2009/02/nuevoproveedor.png"><img class="alignnone size-medium wp-image-21" title="nuevoproveedor" src="http://soloquiero.info/wp-content/uploads/2009/02/nuevoproveedor.png" alt="" width="16" height="16" /></a></strong></li>
</ul>
</div>
<ol>
<li>Seleccionamos el nombre de nuestro proyecto en la lista a la izquierda y damos Clic en el segundo botón para crear un nuevo <strong>Provider.<br />
</strong></li>
<li>Lo primero a hacer es modificar la propiedad <strong>Name</strong> nuevamente por un nombre descriptivo, o algo como &#8220;MiProyectoProviderPrincipal&#8221;, de tal manera que si necesitamos de más de un proveedor, pues podamos distinguirlos fácilmente.</li>
<li>Estableceremos la propiedad <strong>ConnectionStringI</strong>D al nombre de la conexión que creamos en el segundo punto.</li>
<li><strong>GeneratedNameSpace</strong> es de suma importancia seleccionar con cuidado el nombre del NameSpace bajo el que queremos que Subsonic nos genere el código para nuestras clases.Yo Acostumbro a Usar <em>NombreDelCliente.Data.DS</em> para poder reutilizar en distintos proyectos del mismo cliente mis librerías de acceso a datos, además puedo agregar más clases al NameSpace Data relacionadas con la base de datos, y finalmente DS que significa Data Source, únicamente las librerias de acceso a datos, por si necesito generar una librería con únicamente estos.</li>
<li>Estableceremos la propiedad <strong>ProviderTypeID</strong> al tipo de motor de bases de datos que vayamos a utilizar, entre las opciones disponemos de
<ul>
<li>Sql Server</li>
<li>MySql (ISAM)</li>
<li>MySql (InnoDB)</li>
<li>Oracle</li>
<li>Enterprise Library</li>
<li>SqlLite</li>
<li>SqlCE</li>
</ul>
<p>Existe también un <a title="Proveedor de datos Access para SubSonic" href="http://www.codeplex.com/subsonic/WorkItem/View.aspx?WorkItemId=13913">Proveedor de datos para Access</a>.</li>
<li>Con las opciones por default podríamos trabajar bien, pero algunas propiedades que les pueden interesar son:
<ol>
<li><strong>excludeTableList</strong> Permite indicar por medio de una mascara, lista o ambas las tablas que no queremos generar clases, ej: <em>Lista*, p*, procesos,reportes,generados</em>.</li>
<li><strong>generateRelatedTablesAsProperties</strong> Interesante opción que hace que podamos acceder desde una instancia de alguna clase a los registros hijos de otra tabla por medio de una propiedad.</li>
<li><strong>removeUnderscores</strong> Nos quita los <strong>&#8220;_&#8221;</strong> de los nombres de nuestras tablas al generar las clases, T_Ejemplo se generaría como TEjemplo.</li>
</ol>
</li>
<li>Una vez completado esto, tenemos que modificar la propiedad <strong>CodeGenerationPath</strong> en <strong>SubStage Configuration</strong> a la ruta donde queremos que nos genere el código.Luego, Utilizaremos el botón <img class="alignnone size-medium wp-image-22" title="generarcodigo" src="http://soloquiero.info/wp-content/uploads/2009/02/generarcodigo.png" alt="" width="16" height="16" /> para generar el código.SubStage nos generará un archivo .cs por cada tabla/procedimiento almacenado en nuestra base de datos.En el apartado de <strong>EventLog</strong> de SubStage, podremos ver los posibles errores y sucesos al generar el código. Luego deberemos copiar de <strong>Configuration OutPut </strong>la configuracion a nuestro web.config o App.config.
<p>El Apartado <strong>Event Log</strong> nos mostrará el resultado de generar nuestras clases, <strong>Configuration Output</strong> la configuración utilizada y  <strong>Generated Files</strong> contiene nuestros archivos generados,</li>
</ol>
<p><a href="http://soloquiero.info/wp-content/uploads/2009/02/opciones_subsonic.png" target="_blank"><img class="size-full wp-image-28" title="opciones_subsonic" src="http://soloquiero.info/wp-content/uploads/2009/02/opciones_subsonic.png" alt="Opciones de Generación de SubStage" /></a></p>
<p>Una vez agregado a su proyecto la configuración de SubSonic, y agregada la referencia a SubSonic.dll en su proyecto (Esto se verá más a fondo en la segunda parte de este artículo),  un ejemplo de código es este: (Yo utilice la cadena de conexión a la base de datos de ejemplo &#8220;<strong>Northwind</strong>&#8220;, usted debe actualizar el nombre del NameSpace seleccionado y el nombre de sus tablas.</p>
<p><code lang="csharp">using SoloQuiero.Data.DS;</p>
<p>namespace SubSonic1 {<br />
public partial class Form1 : Form {<br />
public Form1() {<br />
InitializeComponent();<br />
}<br />
private void button1_Click(object sender, EventArgs e) {<br />
CategoryCollection lista = new CategoryController()<br />
.FetchAll();</p>
<p>string resultado = "";<br />
foreach (Category categoria in lista) {<br />
resultado += "\r\n" +categoria.CategoryName;<br />
}<br />
listado.Text = "Existen "+resultado+" Categorías" ;<br />
listado.Text += resultado;<br />
}</p>
<p>private void button2_Click(object sender, EventArgs e) {<br />
int pk = 3;<br />
Category categoria = new Category(pk);<br />
listado.Text = "Tabla: " + categoria.TableName;<br />
listado.Text += "\r\nCategoryName" + categoria.CategoryName;<br />
listado.Text += "\r\nPrimary Key" + categoria.CategoryID;<br />
listado.Text += "\r\nPrimary Key" + categoria.Description;<br />
}<br />
}<br />
}</code></p>
<h3>Notas Finales</h3>
<p>SubSonic es gratuito y nos permite abstraernos del acceso a datos, evitándonos el tener que conectar a la base de datos, crear los parámetros para cada consulta, etc. Para ello, SubSonic nos provee de métodos para realizar ciertas acciones, por ejemplo:</p>
<p><code lang="csharp"> Category miCategoria = new Categoria(3);</code></p>
<p>Nos crea una clase del tipo Category (una clase derivada de nuestra tabla) y se conecta a la base de datos, ejecuta un query (Where CategoryID=3) y establece las propiedades de la clase a los valores de los campos para ese registro.</p>
<p>Agregar un nuevo registro es tan fácil como esto:<br />
<code lang="csharp"> Category miCategoria = new Categoria();<br />
miCategoria.CategoryName= "Mi Nueva Categoría";<br />
miCategoria.Description="Esta Categoría no debería usarse nunca";<br />
miCategoria.Save();<br />
</code></p>
<p>Borrar un registro:<br />
<code lang="csharp"> Category.Delete(3);</code></p>
<p>Si su aplicación es WinForm, deben agregar también las siguientes referencias a su proyecto<br />
System.Web<br />
System.Configuration</p>
<p>Bajar <a href="http://soloquiero.info/wp-content/uploads/2009/02/subsonic1.zip">Proyecto Demo</a></p>
<p>Hasta la próxima entrega de SubSonic</p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2009/02/subsonic-y-c-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bienvenido</title>
		<link>http://soloquiero.info/2009/02/bienvenido/</link>
		<comments>http://soloquiero.info/2009/02/bienvenido/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 14:42:11 +0000</pubDate>
		<dc:creator>Administrador</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://soloquiero.info/?p=15</guid>
		<description><![CDATA[Bienvenido a este tu nuevo sitio de información, donde podrás encontrar información puntual para que aprendas a usar alguna técnica de programación, usar un control, o aprender algún nuevo tip! Normalmente escribiré sobre C#, .Net, Asp.Net, SubSonic y quizá algo sobre Python  y VFP]]></description>
			<content:encoded><![CDATA[<p>Bienvenido a este tu nuevo sitio de información, donde podrás encontrar información puntual para que aprendas a usar alguna técnica de programación, usar un control, o aprender algún nuevo tip!</p>
<p>Normalmente escribiré sobre C#, .Net, Asp.Net, SubSonic y quizá algo sobre Python  y VFP <img src='http://soloquiero.info/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://soloquiero.info/2009/02/bienvenido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

