jueves, 20 de junio de 2019

Camunda Sql Server descodificar campo BYTEARRAY

 Si hemos almacenado información en una variable de proceso, por ejemplo un JSON y como repositorio utilizamos Sql Server.

Para poder recuperar la información de una para visualizarla o realizar búsquedas directamente en la base de datos sin pasar por el API REST.

Podemos usar una sentencia de esta forma:

select * from
(
select CAST(  CAST(bytes_ AS varbinary(MAX)) as varchar(max)) as campo
from [dbo].[ACT_GE_BYTEARRAY] where id_ in ( select bytearray_id_ from dbo.ACT_RU_VARIABLE where name_ like '' )
) as pepe
where campo like '{"id":13%'

lunes, 15 de abril de 2019

Switch, factoría, tester/doer

Ejemplo de como quitar un switch y sustituirlo por una factoria:

public void ProcessCustomer(CustomerMessage message)
{
  switch (message.CustomerCategory)
  {
    case Category.Gold:
      ProcessGoldCustomer(message);
      break;
    case Category.Silver:
      ProcessSilverCustomer(message);
      break;
    case Category.Bronze:
      ProcessBronzeCustomer(message);
      break;
  }
}
 
Ejemplo con factoría:
 
public interface ICustomerProcessor
{
  void Process(CustomerMessage message);
}
 
public class GoldCustomerProcessor : ICustomerProcessor {...}
public class SilverCustomerProcessor : ICustomerProcessor {...}
public class BronzeCustomerProcessor : ICustomerProcessor {...}
 
public class CustomerProcessorFactory
{
  public ICustomerProcessor Create(Category category) {
    switch (category) {   
      case Category.Gold: 
        return new GoldCustomerProcessor();
    }
    ...
  }
}
 
public void ProcessCustomer(CustomerMessage message)
{
  var factory = new CustomerProcessorFactory();
  var processor = factory.Create(message.CustomerCategory);
  processor.Process(message);
}
 
Ejemplo patrón Tester/Doer:
 
public interface ICustomerProcessor
{
  bool CanProcess(CustomerMessage message);
  void Process(CustomerMessage message);
}
 
public class GoldCustomerProcessor : ICustomerProcessor
{
  public bool CanProcess(CustomerMessage message)
  {
    return message.CustomerCategory == Category.Gold;
  }
   
  public void Process(CustomerMessage message) {...}
}
 
public class SilverCustomerProcessor : ICustomerProcessor {...}
public class BronzeCustomerProcessor : ICustomerProcessor {...}
 
public void ProcessCustomer(CustomerMessage message)
{
  var processor = this.processors.Single(x => x.CanProcess(message));
  processor.Process(message);
}