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.

Anuncios