Skip to content

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 correo

public 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();

        }