Breaking Changes in Xafari 15.1.308.217

New Major Features in x08

What's New x08

Enhancements and Updates

To learn about new features/updates and resolved issues in this version, please refer to the following page:

What's New in Xafari 15.1.308.217

Known Issues

To learn about known issues in this version, please refer to the following page:
Known Issues in Xafari 15.1.308.217


Breaking Changes

Flow

GetTasksByParticipant(participant, objectSpace) obsolete. You should use Participant.Tasks. (T102.143669)
GetTasksByParticipant(participant, objectSpace) obsolete. You should use Participant.Tasks.

ModelDifferencesDb

Instead of Xafari.ModelDifferencesDb.XafariModelDifferenceAspect.Code use Xafari.ModelDifferencesDb.XafariModelDifference.ContextId, the property Xafari.ModelDifferencesDb.XafariModelDifferenceDbStore.Code renamed to ContextId

Numerators

Numerators API has been changed
The following changes were introduced in the module Xafari.BC.Numerators

  1. Now numerators is based on XafariService (see Documentation).
  2. Some methods have been removed or signatures were changed:
    class Xafari.BC.Numerators.NumeratorBase
  • – void SaveDeletedNumber(object, long) -> void SaveDeletedNumber(object, Nullable<long>)

class Xafari.BC.Numerators.IDeletedNumbersSupport

  • – long GetRealIndex(NumeratorBase, string) -> Nullable<long> GetRealIndex(NumeratorBase, string)
  • – void SetRealIndex(NumeratorBase, string, long) -> void SetRealIndex(NumeratorBase, string, Nullable<long>)

class Xafari.BC.Numerators.INumeratorPersistenceProvider

  • – TypeInfo GetNumeratorValueType() -> ITypeInfo GetNumeratorValueType()

class Xafari.BC.Numerators.NumeratorFormatter

  • – void NumeratorFormatter(NumeratorBase) -> void NumeratorFormatter(ServiceSpaceContext, NumeratorBase)

class Xafari.BC.Numerators.NumeratorLink

  • – void NumeratorLink(NumeratorBase, Type, string) – Delete
  • – void NumeratorLink(NumeratorBase, Type, string, Nullable<int>) -> void NumeratorLink(NumeratorBase, Type, string, Nullable<int>, ApplyNumeratorsStrategy)

class Xafari.BC.Numerators.NumeratorManager

  • – void AddNumerator(NumeratorBase) -> NumeratorManager AddNumerator(NumeratorBase)
  • – void AddLink(NumeratorLink) -> NumeratorManager AddLink(NumeratorLink)
  • – void SaveDeletedNumbers(object) – Delete
  • – long GetRealIndex(object, NumeratorBase, string) – Delete
  • – IObjectSpace CreateObjectSpace() – Delete
  • – XafApplication Application – Delete
  • – NumeratorManager Instance – Delete

class Xafari.BC.Numerators.Model.Extensions

  • – IModelBCNumerators XafariBCNumerators(IModelApplication) – Delete
  • 3. Enumeration Xafari.BC.Numerators.ApplyNumeratorsStrategy has been added in the numerator settings in the application model. You can use it to control numerators applying strategy.
    • class Xafari.BC.Numerators.Model.IModelNumerators
      – public ApplyNumeratorsStrategy DefaultApplyStrategy – New
    • class Xafari.BC.Numerators.Model.IModelNumeratorLink
      – public ApplyNumeratorsStrategy ApplyStrategy – New

Application Settings

AppSettings API has been changed
Internal impletentation has been essentially refactored. As a result the module AppSettings works now a little differently:

  1. When you work with settings in the application you have the capability to save or to rollback changes.
  2. To attach the AppSettings module you can just add it to modules list. All needed settings is done by default.

– Use case with standard layers structure (Root->Users)
You need to upgrade existing project and do the following:

  1. Find in the source code of platform-independent module or in the AppModule code for settings initialization and delete it.
    For example, you have the code like this

    void application_SetupComplete(object sender, EventArgs e)
    {
        if (this.Application.IsSharedApplication()) return;
        SettingsAccessor.Instance = new BCDemoSettingsAccessor((XafApplication)sender);
    }
    
    

    It should looks like this:

    void application_SetupComplete(object sender, EventArgs e)
    {
        if (this.Application.IsSharedApplication()) return;
    }
    
    
  2. Find in the source code of platform-independent module or in the AppModule code for current layer settings initialization and delete it.
    For example, you have the code like this

    public override void Setup(XafApplication application)
    {
        base.Setup(application);
    
        application.SettingUp += (sender, args) =>
        {
            if (this.Application.IsSharedApplication()) return;
            this.Application.LoggedOn += (o, eventArgs) =>
            {
               SettingsAccessor.Instance.CurrentSlice = SettingsAccessor.Instance.GetSlice(SecuritySystem.CurrentUser);
                NumeratorManager.Instance.PersistenceProvider = new DCNumeratorPersistenceProvider();
            };
        };
        application.SetupComplete += application_SetupComplete;
    }
    

    It should looks like this:

    public override void Setup(XafApplication application)
    {
        base.Setup(application);
    
        application.SettingUp += (sender, args) =>
        {
            if (this.Application.IsSharedApplication()) return;
            this.Application.LoggedOn += (o, eventArgs) =>
            {
                NumeratorManager.Instance.PersistenceProvider = new DCNumeratorPersistenceProvider();
            };
        };
        application.SetupComplete += application_SetupComplete;
    }
    
  3. One more example
    You have the code:

    void Application_LoggedOn(object sender, LogonEventArgs e)
    {
        var application = sender as XafApplication;
        if (application == null) return;
        if (SettingsAccessor.Instance != null) return;
        SettingsAccessor.Instance = new NorthwindSettingsAccessor(application);
        if (SecuritySystem.CurrentUser != null)
            SettingsAccessor.Instance.CurrentSlice = SettingsAccessor.Instance.GetSlice(((InheritedUser)SecuritySystem.CurrentUser).Department, SecuritySystem.CurrentUser);
    }

    It should looks like this:

    void Application_LoggedOn(object sender, LogonEventArgs e)
    {
        var application = sender as XafApplication;
        if (application == null) return;
    }
    

Use case with non-typical layers structure.
(see example from Xafari.Northwind project which shipped with installer)
You need to upgrade existing project and do the following:

  1. Find in the source code of platform-independent module or in the AppModule code for settings initialization and change it by example below.
    You have the code:

    void Application_LoggedOn(object sender, LogonEventArgs e)
    {
        var application = sender as XafApplication;
        if (application == null) return;
        if (SettingsAccessor.Instance != null) return;
        SettingsAccessor.Instance = new NorthwindSettingsAccessor(application);
        if (SecuritySystem.CurrentUser != null)
            SettingsAccessor.Instance.CurrentSlice = SettingsAccessor.Instance.GetSlice(((InheritedUser)SecuritySystem.CurrentUser).Department, SecuritySystem.CurrentUser);
    }

    It should looks like this:

    void Application_LoggedOn(object sender, LogonEventArgs e)
    {
       var application = sender as XafApplication;
       if (application == null) return;
       if (SettingsAccessor.Instance != null) return;
       SettingsAccessor.Instance = new NorthwindSettingsAccessor();
       SettingsAccessor.Instance.Setup(application);
       if (SecuritySystem.CurrentUser != null)
           SettingsAccessor.Instance.ObjectSpace.AppSettings().CurrentSlice(((InheritedUser) SecuritySystem.CurrentUser).Department, SecuritySystem.CurrentUser);
    }
  2. If you implemented your own SettingsAccessor you also need to make changes in it. Now the description of layers structure implements in the Setup method.
    Here is the code before.

    public class NorthwindSettingsAccessor : SettingsAccessor
    {
          public NorthwindSettingsAccessor(XafApplication application) : base(application)
          {
              this.RootSlice = new NorthwindSettingsDefaultValueSlice();
              this.SliceTypes = new[]
              {
                  typeof (NorthwindSettingsDepartment),
                  typeof (NorthwindSettingsInheritedUser),
              };
         }
    }

    Here is the code after.

    public class NorthwindSettingsAccessor : SettingsAccessor
    {
        public override void Setup(XafApplication application)
        {
           base.Setup(application);
           this.CreateRootSlice<NorthwindSettingsDefaultValueSlice>();
           this.SliceTypes = new[]
           {
                typeof (NorthwindSettingsDepartment),
                typeof (NorthwindSettingsInheritedUser),
           };
        }
    }

Reports

The property Xafari.Reports.Analysis.AnalysisXafariReportBuilder.DataSource has been renamed to Xafari.Reports.Analysis.AnalysisXafariReportBuilder.ReportData
Xafari.Reports.XafariReport methods signatures have been changed (TypeXafariReport)
Xafari.Reports.XafariReport methods signatures have been changed (TypeXafariReport):

  • public virtual IDataMinerOperation CreateDataMinerInstance() -> public IDataMinerOperation CreateDataMinerInstance(IObjectSpace, XafariReportParametersBase)
  • public static IDataMinerOperation CreateDataMinerInstance(string) -> public static IDataMinerOperation CreateDataMinerInstance(string, IObjectSpace, XafariReportParametersBase)
  • public static IDataMinerOperation CreateDataMinerInstance(IModelXafariReport) -> public static IDataMinerOperation CreateDataMinerInstance(IModelXafariReport, IObjectSpace, XafariReportParametersBase)
  • public static XafariReportDataSourceBase CreateDataSourceInstance(IModelXafariReport) -> public static XafariReportDataBase CreateDataSourceInstance(IModelXafariReport)
The property Xafari.Reports.Arm.Model.IModelArmItemReport.ShowParametersDialog has been removed
Instead of the property Xafari.Reports.Arm.Model.IModelArmItemReport.ShowParametersDialog to show report parameters dialog uses the property ShowParametersDialog of Xafari.Reports.XafariReportParametersBase. So you can set whether to show dialog or not individually for every report parameters.
Controllers Xafari.Reports.Excel.Win.Controllers.ExcelReportDesignerController, Reports.Xaf.Win.Controllers.XafReportDesignerController have been removed
Controllers Xafari.Reports.Excel.Win.Controllers.ExcelReportDesignerController, Reports.Xaf.Win.Controllers.XafReportDesignerController have been removed.
If you want to implement template designer, you need to create descendant class of Xafari.Reports.UI.ReportTemplateDesigner<TReportTemplate> and implement the method
public abstract void ShowDesigner(TReportTemplate template, Controller controller, ShowViewParameters showViewParameters)
The designer is registering automatically.
The method Xafari.Reports.Xaf.XafXafariReportTemplate.CreateNewReportData() has been changed
The method Xafari.Reports.Xaf.XafXafariReportTemplate.CreateNewReportData() has been changed.
Now this method does not return a value. The layout data are stored in the property Content of Xafari.Reports.Xaf.XafXafariReportTemplate.
Type of the property Xafari.Reports.Xaf.XafXafariReportBuilder.ReportEngine has changed
Type of the property Xafari.Reports.Xaf.XafXafariReportBuilder.ReportEngine has changed:
public XtraReport ReportEngine

Now class XtraReport is used to build report.

Security

The module Xafari.Security has been refactored
Classes Xafari.Security.Xpo.XpoXafariSecuritySystem, Xafari.Security.DC.DCXafariSecuritySystem are obsolete now.

Use Xafari.Security.XafariSecurityManager.Instance instead. The method XafariSecurityManager.Instance.FindRole(IObjectSpace objectSpace, string roleName) has been added.

Xafari

Classes ASPSessionAndThreadsValueManager<ValueType> and ASPSessionValueManagerHelper has been moved from Xafari.Web to Xafari.Web.Utils
Classes ASPSessionAndThreadsValueManager<ValueType> and ASPSessionValueManagerHelper has been moved from Xafari.Web to Xafari.Web.Utils.
The class ValueManagerHelper has been moved from the Xafari module to the Xafari.Utils module
The class ValueManagerHelper has been moved from the Xafari module to the Xafari.Utils module.
The class XafariMultipleLookupEditor is now obsolete. Use XafariMultipleLookupPropertyEditor instead
The class Xafari.Web.SetTemplateContextViewController has been removed
The class Xafari.Web.SetTemplateContextViewController has been removed. Now its functionality implemented in the XafariTemplateContentFactory class. You need just to add Xafari.Web module to your application.
The class XafariHttpRequestManager is now obsolete
The class XafariHttpRequestManager is now obsolete. Now its functionality implemented in the XafariTemplateContentFactory class. You need just to add Xafari.Web module to your application. You don’t need to override CreateHttpRequestManager method in your web application.
The class XafariTemplateContentFactory has been added
The class XafariTemplateContentFactory has been added to support Wizard’s functionality.
The class Xafari.Web.Templates.BaseXafariPage has been removed
The class Xafari.Web.Templates.BaseXafariPage has been removed. Now its functionality implemented in the XafariTemplateContentFactory class. You need just to add Xafari.Web module to your application.

Xafari.MQ

The property Xafari.Server.IMessageHandler.Key has been removed. Use Xafari.Server.IMessageHandler.MessageKey instead
The property Xafari.Server.IMessageHandler.Key has been removed. Use Xafari.Server.IMessageHandler.MessageKey instead.
Events of Xafari.Server.IMessageHandler has been renamed
  • Xafari.Server.IMessageHandler.OnCompleted has been renamed to Completed
  • Xafari.Server.IMessageHandler.OnStartedThread has been renamed to ThreadStarted
  • Xafari.Server.IMessageHandler.OnStoppedThread has been renamed to ThreadStopped

Xafari.XF (eXtension Framework)

The new interface Xafari.XF.IXFRegistrator has been introduced
Registration of entities is done in the method IXFRegistrator.RegisterXF.
The module that contains entities and extensions must implement the interface Xafari.XF.IXFRegistrator.
Registration is performed using RegisterEntity and RegisterExtension.

Example:

void IXFRegistrator.RegisterXF(Xafari.EntityFactory entityFactory)
{
    // Entity
    this.RegisterEntity<Entity1>();
    this.RegisterEntity<RefToEntity1>();

    // Entity & Extension
    this.RegisterEntity<XEntity1_Ext1>()
        .RegisterEntity<Ext1ListItem>()
        .RegisterEntity<Entity2>()
        .RegisterExtension<Entity1, XEntity1_Ext1>(a => a.Ext1(), b => b.Entity1())
        .RegisterExtension<Entity1, XEntity1_Ext2>(a => a.Ext2(), b => b.Entity1())
        .RegisterExtension<Entity1, XEntity1_Ext3>(a => a.Ext3(), b => b.Entity1());
}

Xafari.BC.BusinessOperations

The enum Xafari.BC.BusinessOperations.BusinessOperationContextTypeMatchMode has been moved and renamed to Xafari.ContextTypeMatchMode
The enum Xafari.BC.BusinessOperations.BusinessOperationContextTypeMatchMode has been moved and renamed to Xafari.ContextTypeMatchMode.
The enum Xafari.BC.BusinessOperations.ContextViewType has been moved and renamed to Xafari.ContextViewType
The enum Xafari.BC.BusinessOperations.ContextViewType has been moved and renamed to Xafari.ContextViewType.
The class Xafari.BC.BusinessOperations.ContextViewTypeExtensions has been moved and renamed to Xafari.ContextViewTypeExtensions
The class Xafari.BC.BusinessOperations.ContextViewTypeExtensions has been moved and renamed to Xafari.ContextViewTypeExtensions.
The attribute Xafari.BC.BusinessOperations.Attributes.ContextPropertyAttribute has been moved and renamed to Xafari.ContextPropertyAttribute
The attribute Xafari.BC.BusinessOperations.Attributes.ContextPropertyAttribute has been moved and renamed to Xafari.ContextPropertyAttribute.
Write US