En este post estaremos listando algunos tips útiles para usar el Framework XAF DevExpress.
Relaciones y Asociaciones de tablas
https://docs.devexpress.com/XPO/2041/create-a-data-model/relationships-between-objects
Como mostrar en cascada un select[DefaultClassOptions]
public class Order : BaseObject { // ... Accessory fAccessory; [DataSourceProperty("Product.Accessories")] // Product es la tabla principal y Accesories es la secundaria
public Accessory Accessory { get { return fAccessory; } set { SetPropertyValue(nameof(Accessory), ref fAccessory, value); }
}
}
Propiedades de un campo
[ReadOnly(true)] // solo de lectura
[RuleRequiredField] // este campo es requerido
[VisibleInListView(false)] // no es visible en el listado
[XafDisplayName("Registrado por")] // nombre que muestra el campo
[Size(SizeAttribute.DefaultStringMappingFieldSize)] // por defecto es 100, pero se puede poner Size(-1) para texto
[ModelDefault("AllowEdit", "False")] // es solo de lectura, pero sin opción a escritura
[Association] //asociado a una tabla //Aggregated para que sea uno a muchos
para ver más propiedades: https://docs.devexpress.com/XPO/2005/create-a-data-model/built-in-attributes
Para validar un correopublic const string EmailRegularExpression = "^[A-Za-z0-9_\\+-]+(\\.[A-Za-z0-9_\\+-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*\\.([A-Za-z]{2,4})$";
[RuleRegularExpression(EmailRegularExpression, CustomMessageTemplate = "El Correo debe ser válido!")]
[XafDisplayName("Email de Contacto / Usuario")]
//[RuleUniqueValue]
public string Email { get; set; }
Para unir dos campos, ejemplo nombre y apellido en uno solo
public string FullName
{ get
{
string namePart = string.Format("{0} {1}", LastName, FirstName);
return namePart;
}
}
Opciones en el Namespace[ModelDefault("IsCloneable", "True")] //para clonar un objeto
[Appearance("Deshabilitar si ya esta activo", "IsActivo = true", Enables = false, TargetItems = "*")]
Para encontrar un objeto
string temp = "LD"
Company company = ObjectSpace.FindObject<Company>(new BinaryOperand("NombreCampo", temp);
if(company == null) {
company = ObjectSpace.CreateObject<Company>()
company.CompanyCode = temp;
company.Name = "Live Developer"
}
ObjectSpace.CommitChanges();
Para encontrar un objecto dentro de otro objecto
public override void AfterConstruction()
{
base.AfterConstruction();
//usuamos la session del businnessObject
Company = Sesion.FindObject<Company>(new BinaryOperand("NombreCampo", "LD");
}
Para las criterias
BinaryOperator Criteria = new BinaryOperator("Campo", "ValorCampo", BinaryOperatorType.Equal);
var Clientes = this.ObjectSpace.CreateCollection(typeof(Objeto), Criteria).Cast();
Overrides en Guardar o después de guardar
protrectect override void OnSaved()
{
base.OnSaved();
this.Reload();
}