Syncfusion + Devart

Hace tiempo que no escribo, pero bueno, los ultimos meses he estado escribiendo codigo en Windows usando Lightswitch, pero debido a que algunos de los usuarios aun usan Windows XP debemos de dar soporte a Internet Explorer 8 para que puedan ingresar a la plataforma, el inconveniente es que hay que reescribir algunos modulos en ASP.MVC y es aqui donde nace la idea del post.

El escenario es reescribir algunas pantallas (y planear la migración completa de Lightswitch a ASP) el problema es el tiempo, así que decidimos usar Entity Developer de Devart, ya que nos permite crear código basado en la actual base de datos, ahorrandonos mucho tiempo. ya que nos crea los controladores y la vistas (basadas en Twitter Bootstrap).

Lo primero que hicimos es crear un proyecto usado la plantilla de Syncfusion

Captura

Despues seguimos los pasos descritos en el siguiente link, con esto ya tenemos el proyecto hecho, pero la generación de código no fue adecuada, ya que nos indicaba que existia duplicidad de variables en algunos Controladores y Vistas, según el análisis que se desarrollo concluimos que duplicaba las variables (Id) ya que eran las referencias a otras tablas, por ejemplo:

public ViewResult Index(int? page, ... , global::System.Nullable<int> Id, global::System.Nullable<int> Id)
{
...
}

La variable que esta duplicando es Id, otro inconveniente generado es que en las vistas hacia la misma duplicidad, por lo que no podiamos ejecutar el proyecto, se busco alguna posible solución pero ninguna funcionó, así que lo que se decidio hacer es reescribir los templates desde los cuales se generan los controladores y las vistas, ya que Devar permite hacer eso.

edittemplate

Lo primero que se hizo fue crear templates en blanco (se copia y pega el codigo del template que genera por defecto entity developer), para la Vista y los Controladores, en el Caso de la Vista se eliminó desde la linea 131 a la 286  y se cambio por

@(Html.EJ().Grid<#=model.Name+"."+_class.Name #>>("FlatGrid")
.Datasource((IEnumerable<object>)ViewBag.datasource)
.AllowSorting()
.AllowPaging()
.Columns(col =>
{
<#+
foreach (Property property in _class.Properties)
if (!property.IsAssociation) {
#>
col.Field("<#= property.Name #>").HeaderText("<#= property.Name #>").TextAlign(TextAlign.Right).Add();
<#+
}
#>
}))

Esto producirá código como el que se muestra en el demo de Syncfusion MVC, ahora para el caso de los controladores se borro desde la linea 185 a 311 y se coloco en su lugar lo siguiente:

public ViewResult Index()
{
var query = repository.All().Select(i=> new
{
<#+ foreach (Property prop in _class.Properties) { #&gt;
<#= prop.Name #> = i.<#= prop.Name #>,
<#+ } #>
}).ToList();
ViewBag.datasource = query;
return View();
}

A diferencia del código que se muestra en los demos de Syncfusion, aqui se esta seleccionando datos para avitar algún problema de referencia cruzada con algun elemento de la tabla, una vez que se ejecuta la aplicación la salida es:

syncfusionvista

Con esto se soluciona el problema de la duplicidad en el nombre de variables y podemos apovechar las características de Syncfusion MVC, ahora solo resta determinar que elementos se mostraran y modificar otros posibles elementos de las Vistas para que hagan uso de los que provee Syncfusion.

LIGHTSWITCH

Desde que salí de la uni (2010) he desarrollado proyectos por mi cuenta, principalmente con PHP y C# la magnitud de los proyectos han variado, en algunos casos no es problema desarrollarlos solo pero en algunos casos se requiere que más gente participe.

Y si se le añade que entre el trabajo y otros compromisos, el tiempo que se le destina a  la programación es poco, esto me llevo a cuestionarme si realmente los lenguajes y forma de trabajo realmente es adecuada.

visual_studio_lightswitch_hosting

PHP y C# son lenguajes que me gustan pero aun así dedicaba mucho tiempo a actividades que eran repetitivas. No recuerdo como es que conocí Lightswitch pero sin duda es una herramienta que me permite centrarme en las reglas de negocio y en codificar cosas que realmente son importantes.

En las siguientes publicaciones escribiré sobre mi experiencia, de como se hacen algunas cosas y de los inconvenientes que se me han presentando, pero  mientras les dejo un vídeo en el que se describe de manera general como es que se desarrolla con esta tecnología (en caso de que el vídeo no se pueda ver, el link es este).

Por si alguno se interesa en este link encontrarán una serie de post en la que se describe la funcionalidad básica de Lightswitch, es raro que como una persona que lleva ya 10 años usando y promoviendo el software libre use este tipo de tecnologías, pero realmente me han ayudado mucho y espero que lo que he aprendido le pueda servir a otros.