2 3 4 5 6 7 8 9 10 11 12
v1.2.0.0: MetaEditPanel and remoting improvements

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

New Features

  • QNO-1793: Add support for sticky connection to ensure objects stay in same transaction
  • QNO-1070: Add capability to save entire object-trees
  • QNO-1858: Restructure generic API for list and object access on IMetaReadable & IMetaWritable
  • QNO-1908: Create HTML based data preview control
  • QNO-1910: MetaEditPanel: Implement new layouting features

Highlights

  • QNO-1817: Add "OrderByDescending" to IQueryCondition to match the Linq API
  • QNO-1739: Remoting should return the correct type for database exceptions
  • QNO-1331: Clean up the startup form handling (can we get rid of the background, hidden window?)
  • QNO-1871: Add support for nested transactions to PostgreSql and SQL Server
  • QNO-1905: MetaTreeView: Respect relation target class in nodes
  • QNO-1872: Upgrade to latest nUnit
  • QNO-1950: Constants are generated with a reference to the model, but no "using"
  • QNO-1501: Exchange items are synchronized, but do not appear in the Outlook client

Breaking changes

QNO-1817: Remove "Prepare*" methods from the generated class API

Applications should instead use the new IDataList.Clone() method, like this:

var list = scheduledLesson.PrepareScheduledTeachers(connection);

// becomes...

var list = scheduledLesson.ScheduledTeachers.Clone(DataListParts.Dedicated);
```[QNO-1842](https://secure.encodo.ch/jira/browse/QNO-1842): Rename "ClearCache" and "ClearCaches" to "Unload" and "UnloadAll"

These methods were not used very often and have been removed rather than made obsolete.[QNO-1787](https://secure.encodo.ch/jira/browse/QNO-1787): Rename IDataConnection.LoadObject() to GetObject()

These methods were not used very often and have been removed rather than made obsolete.[QNO-1787](https://secure.encodo.ch/jira/browse/QNO-1787): Refactoring: IDataList methods (change *Objects; remove *InQuery)

Customer code did not contain many references to these methods yet, so they were simply renamed rather than copied and made obsolete.[QNO-1888](https://secure.encodo.ch/jira/browse/QNO-1888): Rename "RollbackTransaction" to "RollBackTransaction"

Customer code did not contain any references to this method yet, so it was simply renamed rather than copied and made obsolete.[QNO-1941](https://secure.encodo.ch/jira/browse/QNO-1941): Rename IViewPropertyControlAspect to IViewControlIdentifierAspect

Customer code did not contain any references to this interface yet, so it was simply renamed rather than copied and made obsolete.[QNO-1968](https://secure.encodo.ch/jira/browse/QNO-1968): Renamed IViewPropertyControlAspect to IViewControlIdentifierAspect

Customer code did not contain any references to this interface yet, so it was simply renamed rather than copied and made obsolete.[QNO-1883](https://secure.encodo.ch/jira/browse/QNO-1883): Rename "IDatabase.ConnectionSettings" to "IDatabase.DefaultConnectionSettings"

Customer code did not contain any references to this interface yet, so it was simply renamed rather than copied and made obsolete.[QNO-1885](https://secure.encodo.ch/jira/browse/QNO-1885): Change generated constructor to use IDataConnection instead of IPersistableMarker

In order to accommodate this change in the generated code, applications must do the following:


     1. Upgrade to Quino 1.2.0.0
     2. Manually update generated code in the following ways:

Change all constructors like this:

GeneratedClass(IPersistentClassMarker marker, IMetaClass metaClass)
base(marker, metaClass, false)

// Change to the following

GeneratedClass(IDataConnection connection, IMetaClass metaClass)

base(connection, metaClass, false)

v1.1.0.0: Add multilanguage support and remoting architecture

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

New Features

  • QNO-1627: Added support for object graphs
  • QNO-1570: Added support for multiple application and data languages
  • QNO-1564: Added support for querying data from an application server instead of directly from a database (remote queries)
  • QNO-1572: Added support for modeled remote methods
  • QNO-1562: Enumerated types can be extended with user values
  • QNO-1563: The metadata can now contain lists of typed constants (resources)

Highlights

  • QNO-1609: added initial support for the ASP.NET MVC library
  • QNO-1610, QNO-1461, QNO-1151, QNO-1601, QNO-1602, QNO-1603: improved toolkit configuration to prevent common errors; consolidate startup for standalone applications
  • QNO-1555: Startup code now works with any kind of Winforms form, instead of just MainFormBase
  • QNO-1611: improved import support for SQL Server (added smalldatetime and tinyint)
  • QNO-1641, QNO-1640, QNO-1639: Reduced size of models; reduced and adjusted API-footprint
  • QNO-1642, QNO-1643: Improvements to console applications and command-line handling
  • QNO-1646, QNO-1647: Changes to IApplicationOptions, IApplicationToolkit and IApplicationContext
  • QNO-205, QNO-1744, QNO-1745: Huge improvements to building and saving object graphs
  • QNO-1505: New and improved API for retrieving data available on the IDataConnection; IDataItem and some methods of IDataList are now deprecated.
  • QNO-1657: Improved integration with Linq queries by accepting and returning IEnumerable<T> instead of IList<T> or IMetaList<T> wherever possible.

Breaking changes

QNO-1610: startup configuration

The Encodo.Quino.App.ConfigurableApplicationToolkit.Model property is no longer writable and the constructor no longer accepts a parameter of type IMetaModel. To address the compile error for an application using a model called MyModel, do one of the following:

If you assigned the propery directly:

 1. Remove the assignment to `Model = MyModel.Instance`.
 2. Add `ModelLoader = new ModelLoader(MyModel.Instance);`

If you used the constructor parameter:

 1. Change the parameter from `MyModel.Instance` to `new ModelLoader(MyModel.Instance)`

Now you should be able to compile again.

 1. Run the code generator to update the generated code for your model.
 2. 1. Replace the reference to `new ModelLoader(MyModel.Instance)` with `MyModel.Loader`.[QNO-1617](https://secure.encodo.ch/jira/browse/QNO-1617): field made private

Any references to Encodo.Quino.Winform.DX.MainForm._workplaceControl should be replaced with Encodo.Quino.Winform.DX.MainForm.WorkplaceControlQNO-1639: Metadata changes IMetaBase no longer has the "MetaId", "LogicalParent", "BasedOn" and "Root" properties; instead these properties have been moved to the sub-interfaces from which they were actually needed.

Though these changes should cause no problem for applications, the new locations for these properties are as follows:

IMetaUnique.MetaId IMetaUnique.LogicalParent IMetaElement.BasedOn IMetaElement.RootQNO-1630: SortDirection moved to new namespace

The SortDirection enumeration has moved to the Encodo.Quino.Data namespace. References to Encodo.Quino.Meta.SortDirection should be updated to use the new namespace (Alt+Enter if you have R#).QNO-1643: Console and command-line changes

The ConsoleApplicationController.Start and ConsoleApplicationController.Shutdown methods are no longer available; instead, use ConsoleApplicationController.Run, passing a method that accepts an IApplicationContext.

Here's the standard pattern from Quino 1.0.5 and earlier:

internal void Main()
{
  var controller = new ConsoleApplicationController();

  try
  {
    var toolkit = new MyToolkit() { ... };

    var application = controller.Start(toolkit, ...);

    if (controller.GetStatus(application) == ApplicationContextStatus.Ready)
    {
      // Execute application code
    }
  }
  finally
  {
    controller.Shutdown();
  }
}

The new pattern removes much of this boilerplate code:

internal void Main()
{
  new ConsoleApplicationController().Run(
    new MyToolkit() { ... },
    ProcessApplicationCode,
  );
}

internal void ProcessApplicationCode(IApplicationContext application)
{
  // Execute application code
}
```[QNO-1642](https://secure.encodo.ch/jira/browse/QNO-1642): Command-line handling

The class `CommandLineBasedApplicationOptions` no longer exists. Instead, to customize the command-line handling, use the new `IApplicationToolkit.CommandLineProcessor` property. Use the `ApplicationToolkit.CommandLineOptionNames` constants to access predefined command-line parameters and add application-specific ones.

See the `DemoApplicationToolkit` class in the "Demo" solution in the release for an example.[QNO-1646](https://secure.encodo.ch/jira/browse/QNO-1646): Merged `IApplicationOptions` and `IApplicationToolkit`

`Options` are no longer available on `IApplicationToolkit`; instead, change all references to `Options` to reference the toolkit directly. `IApplicationContext` also no longer has `Options`; instead, change all references to `Options` to reference the new property `IApplicationContext.Toolkit`.[QNO-1658](https://secure.encodo.ch/jira/browse/QNO-1658): ISearchableList and IMessageList have been removed

As mentioned in [QNO-1658](https://secure.encodo.ch/jira/browse/QNO-1658), these two interfaces no longer exist; code that uses them should use an IList instead and use the LINQ functions instead of the Find* methods previously available.

For example:

if (searchableList.FindFirst(item => item.Enabled) != null)


becomes:

if (list.Any(item => item.Enabled))


As mentioned in issue [QNO-1661](https://secure.encodo.ch/jira/browse/QNO-1661), replace all uses of `ConfigurableApplicationToolkit` with `ApplicationToolkit`.[QNO-1725](https://secure.encodo.ch/jira/browse/QNO-1725): CSV parser no longer has "ElementParsed" and "RowParsed" events

Instead of attaching to the event, then parsing the text afterwards, applications must now pass all handlers to the `Parse` method as lambda functions:

var parser = new CSVParser(); var cells = new List(); parser.Parse(inputText, element => cells.Add(element.Data));


For such simple tasks as the one outlined above, there is now also a `CSVTools` class with some useful static methods:

var elements = CsvTools.GetElements(inputText); var lines = CsvTools.GetLines(inputText);


Many of the methods on the `MetaTools` static class have been moved to `MetaClassTools`, `MetaModelTools`, `MetaTypeTools`, `MetaPropertyTools` and `MetaExpressionTools`. Many of these methods have also been converted to extension methods so that they appear automatically in the code-completion for the appropriate types.[QNO-1716](https://secure.encodo.ch/jira/browse/QNO-1716): Changes to expression parsing

On top of that, there is no longer a static `IExpressionParser` available; instead, use the `MetaExpressionTools.Parse(...)` family of methods. This was done to ensure that access to expression parsing is centralized so that expression syntax and semantic errors are handled properly.[QNO-1700](https://secure.encodo.ch/jira/browse/QNO-1700), [QNO-1684](https://secure.encodo.ch/jira/browse/QNO-1684): ADO connections and commands no longer available by default

Applications can no longer get ADO objects from the `IDatabase`. Instead, there is an `IAdoDatabase` for non-Quino access and an `IMetaAdoDatabase` for Quino-based access. This was done to ensure that applications no longer make assumptions that there is a database available so that a transition to a remoting implementation is seamless.[QNO-1657](https://secure.encodo.ch/jira/browse/QNO-1657): `IList<T>` or `IMetaList<T>` replaced with `IEnumerable<T>` for many parameters and results

These were changed to improve integration with values returned by the Linq extension methods and to allow a more functional way of working with C# where data is retrieved only when it is actually used. This allows many calls to `ToList()` to be removed, although those calls should continue to work as well. However, methods that return an `IList` may need to be updated to either change the return type of the method (returning an `IEnumerable` instead) or by calling `ToList()`.[QNO-1571](https://secure.encodo.ch/jira/browse/QNO-1571): Added `IMetaLanguage` parameter to caption-retrieval functions

With the addition of multi-language support, it is no longer valid to simply retrieve a caption or text without indicating the language in which it should be retrieved. Many of the `ControlToolsDX` methods have changed to include an `IMetaLanguage` parameter. Applications should pass in the value of the `DisplayLanguage` property on the `IDataConnection` to use the default value.

ControlToolsDX.SetupLookupFromRelation(Properties, MetaRelation, connection.DisplayLanguage);

v1.0.5.0: Added support for SQL Server with automatic migration

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

Breaking changes

No known breaking changes

v1.0.4: Debugging improvements, refactoring & some Entity Framework integration

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

  • QNO-1516: Refactor grouping support from ZAGMainform to SDIMainform
  • QNO-1539: New EF extensions methods to load references and entity collections

Breaking changes

No known breaking changes

v1.0.3: C# code-generator for imported models; many bug fixes

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

  • QNO-1452: C# Code Writer to export a QuinoModel from memory into a C#-ModelGenerator file

Breaking changes

No known breaking changes

v1.0.2: Exchange calendar integration and drag&drop for Winforms

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

  • QNO-45: Add drag & drop support
  • QNO-1124: Add classes to interact with the Exchange Calendar via WebDav
  • QNO-1393: Add property "ShowTimelineToolbar" to SdiMainForm to show/integrate the default timeline toolbar
  • QNO-1399: Reports: Set XtraReport parameters from Quino report parameters
  • QNO-1405: MetaTreeView: Add drag & drop support
  • QNO-1406: MetaListViewDX: Add drag & drop support
  • QNO-1407: ContextLabel: Add drag support
  • QNO-1408: EditPanel: Add drop support
  • QNO-1409: MetaGridViewDX: Add drag & drop support

Breaking changes

No known breaking changes

v1.0.1: Beta of the MS-SQL driver; standalone database-import utility

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

  • QNO-1318: Add support for loading a model from a database rather than code
  • QNO-1319: Add support to importer for generating a model based on a pattern other than a model name
  • QNO-1314: Upgrade to DevEx 9.1.3
  • QNO-1249: Import field information from MS-SQL schema
  • QNO-1250: Import index information from MS-SQL schema
  • QNO-1251: Import path information from MS-SQL schema
  • QNO-1252: Get DataTests running for Sql Server
  • QNO-1255: Get QueryTests running for Sql Server
  • QNO-1257: Get BookmarksTests running for Sql Server
  • QNO-1258: Get PageNavigatorTests running for Sql Server
  • QNO-1259: Get TimelineTests running for Sql Server
  • QNO-1260: Get SortOrderAspectTests running for Sql Server
  • QNO-1262: Get TestingSchemaTests running for Sql Server
  • QNO-1263: Get PersistenceTests running for Sql Server
  • QNO-1264: Get SecurityModuleGeneratorTests running for Sql Server
  • QNO-1265: Get MembershipProviderTests running for Sql Server
  • QNO-1291: Add proper support for the nvarchar type to Sql server

Breaking changes

No known breaking changes

v1.0: Initial major release: caching, ACLs, sub-reports, Winforms UI and more

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

  • QNO-144: Add basic caching and cache-awareness to the persistence sub-system
  • QNO-948: Consider ad-hoc loading for relations
  • QNO-1011: Implement metadata-based security
  • QNO-1038: Reports: Add editor for report parameters
  • QNO-1080: Add single-object caching
  • QNO-1085: Add support for ACL-based security
  • QNO-1132: Reports: Add support for sub-reports
  • QNO-1157: Implement RoleProvider using the Encodo.Security system
  • QNO-1168: Add support for extensible rights and group membership type lists
  • QNO-1233: Search: Improve keyboard/focus handling
  • QNO-1234: Search: If only one result item is found it is selected/choosen automatically

Breaking changes

No known breaking changes

v0.9: Incremental improvements to reporting and Winforms UI

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

  • QNO-1033: Added BeforeDelete and AfterDelete to PersistentClassAspect
  • QNO-1035: Support Parameters in ReportDesigners as well as in the Import and Export
  • QNO-1037: Serialize and deserialize the new ReportParameters (import/export)
  • QNO-1040: Reporting: Create control that displays the report parameters in the report wizard
  • QNO-1046: MetaBindingList: Add support for virtual sublists

Breaking changes

No known breaking changes

v0.8: Data load-groups, report exports and some new utilities

The summary below describes major new features, items of note and breaking changes. The full list of issues is also available for those with access to the Encodo issue tracker.

Highlights

  • QNO-843: Timeline: Added behavior options for completely contained or covering new entries
  • QNO-929: Add load-groups to metadata for properties
  • QNO-932: Reports: Add function to export/import a report including reportname, description and context as file
  • QNO-965: Add a mutex to all applications to allow outside detection of a running application
  • QNO-971: Standalone command line C# Code Generator
  • QNO-984: Create new QuinoPasswordEncrypter application

Breaking changes

No known breaking changes