Dynamic Properties. Getting Started

To use Dynamic Properties, it is required to add a number of platform-agnostic and platform-specific modules, these are listed below:

  • Platform-agnostic: XafariBCModule, XafariBCXpoModule or XafariBCDCModule;
  • Win-specific: XafariBCWinModule, XafariEditorsWinModule, ValidationWindowsFormsModule;
  • ASP.NET-specific: XafariBCWebModule, XafariEditorsWebModule, ValidationAspNetModule.

Important

ASP.NET application also requires a references to the Xafari.Web and Xafari.Web.Utils. Another requirement is to inherit from the Xafari.Web.XafariWebApplication or modify WebApplication constructor as follows:

  • c#
  • VB

public Solution3AspNetApplication()
{
  InitializeComponent();
  if (HttpContext.Current != null)
    ValueManager.ValueManagerType = typeof(ASPSessionAndThreadsValueManager<>).GetGenericTypeDefinition();
}

Public Sub New()
  InitializeComponent()
  If HttpContext.Current IsNot Nothing Then
    ValueManager.ValueManagerType = GetType(ASPSessionAndThreadsValueManager(Of )).GetGenericTypeDefinition()
  End If
End Sub

The simplest way to support Dynamic Properties in business class is inherit from the base entities that already implements such a feature.

  • c#
  • VB

using DevExpress.ExpressApp;
using DevExpress.Xpo;
using Xafari.BC.Xpo;
namespace Xafari.FeatureCenter.DynamicProperties
{
  public class DynamicParametersObject : PersistentXafariBaseObject
  {
    public DynamicParametersObject(Session session)
      : base(session)
    {
    }
    private string _name;
    public string Name
    {
      get
      {
        return _name;
      }
      set
      {
        SetPropertyValue("Name", ref _name, value);
      }
    }
  }
}

Imports DevExpress.ExpressApp
Imports DevExpress.Xpo
Imports Xafari.BC.Xpo
Namespace Xafari.FeatureCenter.DynamicProperties
  Public Class DynamicParametersObject
    Inherits PersistentXafariBaseObject
    Public Sub New(ByVal session As Session)
      MyBase.New(session)
    End Sub
    Private __name As String
    Public Property Name As String
      Get
        Return __name
      End Get
      Set
        SetPropertyValue("Name", __name, value)
      End Set
    End Property
  End Class
End Namespace

In general, you should implement IInstancePropertiesSupport interface.

dynamic_properties_4

The class diagram above is implemented for XPO and Domain Components, in both cases, there are persistent and non persistent implementation.


Xafari.BC.Xpo Module

Xafari.BC.DC Module

IInstancePropertiesSupport

XafariBaseObject (abstract)

DynamicObjectBase

NonPersistentXafariBaseObject

PersistentDynamicObject

PersistentXafariBaseObject

XafariObject

IInstanceProperty

InstancePropertyBase (abstract)

DynamicPropertyBase

XpoNonPersistentDynamicProperty

PersistentDynamicProperty

XpoPersistentDynamicProperty


To access Dynamic Properties use IInstancePropertiesSupport interface.

DynamicPropertiesObject

Xafari.BC.DynamicProperties.DynamicPropertiesObject class provides the basic features for working with Dynamic Properties. Use DynamicPropertiesObject to obtain a special non persistent class with a dynamic set of properties.

CreateObject and CreateObject<T> methods

These methods require to pay attention to the optional parameter key of the System.Object type. The fact that the modification of DynamicPropertiesList collection entails the  regeneration of DynamicPropertiesObject, modification of the Type and (or) Name fields for the elements of this collection has the same effects. Therefore, by default, when generating DynamicPropertiesObject objects on the basis of the properties collection a special key must be computed. Thus, the framework can decide whether regenerate DynamicPropertiesObject or it can use an existing instance. The object will be generated again in the following cases:

  • change the number of items in the DynamicPropertiesList collection;
  • For one ore more elements of the DynamicPropertiesList collection the Name and (or) Type field was modified;
  • CreateObject or CreateObject <T> method receives not null value for key parameter;
  • DynamicPropertiesObject object with the same key already exists in the dictionary.

CreateDetailView method

The method returns Detail View for DynamicPropertiesObject instance. The method is used in Xafari editors, that display a list of Dynamic Properties. modelHandler parameter of Action<IModel Detail View> type allows to customise the displaying of Dynamic Properties.