Codepoint

by Trentia Consulting

Projection y Query en Orchard CMS

El módulo Projector nos permite crear instancias de Query y Projection, consultas de datos y páginas que muestran el resultado de estas.

En este artículo crearemos una consulta que devuelva todos nuestros productos y una página que muestre el listado de estos. Suponemos que inicialmente en nuestro proyecto ya existen diferentes Content Types que tienen asociado un ProductPart.
public class ProductPart : ContentPart<ProductPartRecord>
{
  public string SerialNumber
  {
    get { return Retrieve(r => r.SerialNumber); }
    set { Store(r => r.SerialNumber, value); }
  }

  public decimal Price
  {
    get { return Retrieve(r => r.Price); }
    set { Store(r => r.Price, value); }
  }
}

public class ProductPartRecord : ContentPartRecord
{
  public virtual string SerialNumber { get; set; }
  public virtual decimal Price { get; set; }
}
Necesitamos una Query que devuelva todos los elementos cuyo tipo de contenido contenga un ProductPart adjunto. En el framework no tenemos un filtro que permita esta funcionalidad, así que creamos una nueva clase que herede de IFilterProvider:
public class ProductPartFilter : IFilterProvider
{
  public void Describe(DescribeFilterContext describe)
  {
    describe.For("Content","Content","Content")
        .Element("ProductPartFilter", "ProductPartFilter", "ProductPartFilter", ApplyFilter, DisplayFilter);
  }

  private void ApplyFilter(FilterContext context)
  {
    context.Query = context.Query.Join(x => x.ContentPartRecord(typeof(ProductPartRecord)));
  }
}
Ahora ya podemos añadir la nueva Query desde la interfaz web de administración asignándole el título "Productos". La editamos y hacemos clic en "Add a new Filter" para seleccionar el filtro que hemos creado anteriormente.

Es posible que por alguna razón específica de nuestro proyecto necesitemos realizar lo mismo programando directamente, en este caso podemos utilizar el siguiente código:
string name = "Productos";
string type = "ProductPartFilter";

QueryPart query = _queryService.CreateQuery(name);

var form = new Form { ContentTypes = type };
var serializer = new XmlSerializer(form.GetType());
StringWriter sw = new StringWriter();
XmlWriter writer = XmlWriter.Create(sw);
serializer.Serialize(writer, form);
var state = sw.ToString();

query.FilterGroups[0].Filters.Add(new FilterRecord
{
  Category = "Content",
  Description = "ProductPartFilter",
  Position = 0,
  State = state,
  Type = type
});

_contentManager.Publish(query.ContentItem);

[Serializable]
public class Form
{
  public string Description { get; set; }
  public string ContentTypes { get; set; }
}
Por último, para crear la página que muestra el listado de productos, hacemos clic en New Projection. Asignamos el título "Listado Productos", la url "productos" y seleccionamos en el desplegable la Query "Productos".

Una vez más, si necesitamos crear la instancia de Projection programando, tenemos el código equivalente:
var projection = _contentManager.New("ProjectionPage");
projection.As<TitlePart>().Title = "Listado Productos";
projection.As<AutoroutePart>().DisplayAlias = "productos";
projection.As<ProjectionPart>().Record.QueryPartRecord = query.Record;

string ownerName = _siteService.GetSiteSettings().SuperUser;
var owner = _membershipService.GetUser(ownerName);
projection.As<ICommonPart>().Owner = owner;

_contentManager.Create(projection, VersionOptions.Published);
Projection - Orchard Documentation

Proyecto Orchard: CMS en ASP.NET MVC

Orchard es un gestor de contenidos web o CMS que parece contar con la bendición de Microsoft. Recientemente hemos estado desarrollando con este CMS, como alternativa a Umbraco, otro conocido CMS de .NET.


Orchard nos ha gustado especialmente por sus características funcionales y técnicas.

Orchard cubre bastante bien aspectos que otros CMS quizás no tengan demasiado presente, como el soporte multiidioma y multicultural, que acostumbra a ser un problema. También dispone de una buena extensibilidad a muy diversos niveles, que nos permite trabajar con vistas de MVC para definir hasta el más mínimo aspecto de la web. Tenemos control absoluto del HTML resultante y eso es muy positivo. También contempla bien aspectos de SEO, tan necesarios hoy en día. Y finalmente, ofrece un buen rendimiento, aspecto que también puede resultar complejo en CMS basados en Microsoft .NET.

Nuestro último proyecto en Orchard es el desarrollo de una web con CMS, haciendo uso deFoundation Zurb como framework de diseño responsable. Estamos realmente satisfechos con el resultado y con Orchard. Os recomiendo que lo tengáis presente en vuestro portfolio de soluciones CMS.

Umbraco v5 ha muerto… ¡Viva Umbraco v4!

Pues sí, desde el blog de Umbraco, este maravillo gestor de contenidos web, nos llega la noticia de que la versión 5 de Umbraco se abandona para volver a evolucionar desde su antecesor. Esta decisión se ha tomado debido al poco soporte de la comunidad a la nueva versión.

La complejidad del sistema, la arquitectura desarrollada para la nueva versión, han provocado el rechazo generalizado. A eso se le deben sumar los problemas relacionados a la dificultad de uso, los problemas de rendimiento y numerosos bugs, además del hecho que no supone un especial avance a nivel funcional respecto a Umbraco v4.

umbraco

Todo ello ha llevado a abandonar esta versión basada en MVC y volver a Umbraco v4, incorporando las novedades implantadas en v5. Umbraco v5 se evolucionará únicamente para solucionar los problemas más importantes que arrastra en su versión 5.2, por lo que no se recomienda su uso en proyectos nuevos.

Es una muy mala noticia para la comunidad, sin duda alguna, que la reingeniería de un producto tan importante como Umbraco hacía MVC haya sido el detonante de una vuelta atrás.

Nadie duda que MVC sea el futuro (y presente) del desarrollo en plataformas ASP.NET de Microsoft, por lo que todos queremos entender que no ha sido un problema en la tecnología lo que ha provocado esta situación sino un mal planteamiento de la arquitectura.

Nueva versión de Umbraco en MVC 3

La versión 5 del conocido gestor de contenidos web Umbraco está disponible desde enero de 2012. La nueva versión, inicialmente denominada “Jupiter”, ha sido reconstruida para adaptarse a la arquitectura ASP.NET MVC 3, lo cual es una buena noticia para todos los desarrolladores que trabajan con Umbraco. Tambien es una buena noticia que a pesar de la actualización de arquitectura se consevan todas las funcionalidades de la versión anterior.

La nueva arquitectura ofrece un mayor rendimiento y mayores posibilidades de integración con sistemas externos a Umbraco.