Skip to main content

Introducing Formengine - The New Formbuilder, try for FREE formengine.io.

Release Notes

4.0.0

  • Updated .NET to version 8.0. You can download it here.
  • In scripts using Docker Compose, the docker-compose command has been replaced with docker compose.

3.7.0

  • Fixed an issue causing an exception during DWKit startup or operation if the project references specific types of assemblies.
  • Fixed a bug where, in certain code actions, the parameter object had an incorrect type.
  • Updated vulnerable dependencies:
    • Npgsql (4.1.3.1 -> 4.1.14)
    • System.Data.SqlClient (4.8.5 -> 4.8.6)
    • Microsoft.IdentityModel.JsonWebTokens (5.6.0 -> 5.7.0)

3.6.0

  • Workflow Engine has been upgraded to version 9.0.0, refer to the release notes for more information.
  • Form Builder has been upgraded to version 1.10.0.
  • Other minor improvements and fixes.

3.5.0

  • Updated to Form Builder 1.8.6.
  • Updated to WorkflowEngine 7.2.3.
  • Updated to .NET 6.
  • Updated nuget packages.
  • Fixed copying a metadata folder on IIS publishing.
  • Other minor improvements and fixes.

3.4

  • Updated to WorkflowEngine 5.2.
  • Added the ability to configure user login for integration API.

DWKit 3.3 to 3.4 update manual

Always make a backup of the database and source code before updating!

Database:

Application server and client side:

  • Download the latest Starter pack.

  • Unzip.

  • Run updatesolution script:

    • For Windows just run updatesolution_run.bat.

    • For Linux/macOS (this way requires PowerShell):

      pwsh updatesolution.ps1
  • Enter the path to your solution.

  • After the update, the originals of files modified by the script are placed in a folder dwkit-backup-* inside your solution folder. So you can analyze them and merge your custom changes manually.

  • Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:

    npm install
    npm run dist

    or, if webpack 4 is installed globally (not recommended):

    npm install
    webpack --env.prod

3.3

  • Updated to .NET Core 3.1.
  • Added functionality of anonymous forms, you can explicitly open some of the forms for non-logged-in users.

DWKit 3.2 to 3.3 update manual

Database:

Application server and client side:

  • Download the latest Starter pack.

  • Unzip.

  • Run updatesolution script:

    • For Windows just run updatesolution_run.bat.

    • For Linux/macOS (this way requires PowerShell):

      pwsh updatesolution.ps1
  • Enter the path to your solution.

  • After the update, the originals of files modified by the script are placed in a folder dwkit-backup-* inside your solution folder. So you can analyze them and merge your custom changes manually.

  • Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:

    npm install
    node_modules\.bin\webpack --env.prod

    or, if webpack 4 is installed globally (not recommended):

    npm install
    webpack --env.prod

3.2

  • Updated to Workflow Engine .NET 5.1.
  • Using Workflow Actors in BusinessFlow.
  • Allowing custom Clients for IdentityServer4 (See Startup.cs file, line 70).

DWKit 3.1 to 3.2 update manual

Database:

Application server and client side:

  • Download the latest Starter pack.

  • Unzip.

  • Run updatesolution script:

    • For Windows just run updatesolution_run.bat.

    • For Linux/macOS (this way requires PowerShell):

      pwsh updatesolution.ps1
  • Enter the path to your solution.

  • After the update, the originals of files modified by the script are placed in a folder dwkit-backup-* inside your solution folder. So you can analyze them and merge your custom changes manually.

  • Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:

    npm install
    node_modules\.bin\webpack --env.prod

    or, if webpack 4 is installed globally (not recommended):

    npm install
    webpack --env.prod

3.1

  • Export and import configurations.

  • BasicPlugin.MultipleSelect for filling columns based on multiple-choice dictionaries:

    {
    "idColumnName": "UsersIds",
    "bindedModelName": "Users",
    "bindedModelColumnName": "Name",
    "dataColumnName": "UserNames"
    }
  • Multiple filters in Sync with DB.

  • Added groups of controls in Form Data Map.

  • Fixed many minor bugs.

DWKit 3.1 is the last version with support Semantic UI. We started migrating to FormBuilder 2.0 based on rsuitejs.com components.

DWKit 3.0 to 3.1 update manual

Application server and client side:

  • Download the latest Starter pack.

  • Unzip.

  • Run updatesolution script:

    • For Windows just run updatesolution_run.bat.

    • For Linux/macOS (this way requires PowerShell):

      pwsh updatesolution.ps1
  • Enter the path to your solution.

  • After the update, the originals of files modified by the script are placed in a folder dwkit-backup-* inside your solution folder. So you can analyze them and merge your custom changes manually.

  • Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:

    npm install
    node_modules\.bin\webpack --env.prod

    or, if webpack 4 is installed globally (not recommended):

    npm install
    webpack --env.prod

3.0

  • Building mobile applications based on React Native frontend.
  • Updated to Workflow Engine .NET 5.0.
  • Showing data for DataModel in Admin panel.
  • Renamed default providers in OptimaJet.DWKit.Application (ServerActions -> FormActions, ActionProvider -> WorkflowActions).
  • Re-designed Events tab in FormBuilder.
  • External data sources.

DWKit 2.10 to 3.0 update manual

Database:

Application server and client side:

  • Download the latest Starter pack.

  • Unzip.

  • Run updatesolution script:

    • For Windows just run updatesolution_run.bat.

    • For Linux/macOS (this way requires PowerShell):

      pwsh updatesolution.ps1
  • Enter the path to your solution.

  • After the update, the originals of files modified by the script are placed in a folder dwkit-backup-* inside your solution folder. So you can analyze them and merge your custom changes manually.

  • Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:

    npm install
    node_modules\.bin\webpack --env.prod

    or, if webpack 4 is installed globally (not recommended):

    npm install
    webpack --env.prod

2.10

  • Updated to Workflow Engine .NET 4.2.
  • Refactoring FormBuilder for migration to React Native has been done. React Native frontend will be available in the next major version - DWKit 3.0.
  • The custom column type for GridView control (like in CollectionEditor). Now you can add buttons, links in GridView.
  • In CollectionEditor, DisableDelete flag has been added.
  • The Print action has been added to the frontend. Now, you can print or save in PDF a form.
  • IntelliSense has been added to the EventHandlers editor.
  • The Card control has been added to FormBuilder.
  • The Cascade deletion feature has been added to BasicPlugin.

DWKit 2.9 to 2.10 update manual

Database:

Application server and client side:

  • Download the latest Starter pack.

  • Unzip.

  • Run updatesolution script:

    • For Windows just run updatesolution_run.bat.

    • For Linux/macOS (this way requires PowerShell):

      pwsh updatesolution.ps1
  • Enter the path to your solution.

  • After the update, the originals of files modified by the script are placed in a folder dwkit-backup-* inside your solution folder. So you can analyze them and merge your custom changes manually.

  • Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:

    npm install
    node_modules\.bin\webpack --env.prod

    or, if webpack 4 is installed globally (not recommended):

    npm install
    webpack --env.prod

2.9

  • Now, Data Models can be created in Simplified Mode. In this mode, no separate table is created to store model data in the database. Instead, all data will be stored in a special table dwEntities. At the same time, attributes can be added to the model; they will be stored in the table dwEntities as Extension attributes, that is, in JSON. Thus, DWKit provides the entire range of abilities without making changes to the default database.
  • No-code features, i.e. Plugins, have been added to DWKit to develop applications of the Vacation Request level without programming. In total, the following three new plugins are available:
    • BasicPlugin that adds typical Server Actions to both DWKit and the workflow.
      • The following actions have been added to the workflow scheme designer:
        • SendEmail - sending email.
        • CreateProcess - creating a process from a process.
        • HTTPRequest - sending a request to a third-party web service.
        • SetParameter - setting a process parameter.
      • The following conditions have been added to the workflow scheme designer::
        • IsProcessFinalized - checking the finalization of the current process or a process with the Id specified.
        • CheckAllSubprocessesCompleted - checking the finalization (completion) of all the subprocesses.
        • CheckParameter - checking if the parameter is consistent to the given value (so far, only strings are supported).
        • IsApprovedByUsers - checking if the specified process was processed by all of the listed users.
        • IsApprovedByRoles - checking if the specified process was processed by all of the listed roles.
        • CheckHTTPRequest - conditional transition based on the result of a request to a third-party web service.
      • The following rules have been added to the workflow scheme designer:
        • CheckRole - the authorization rule to check a user's role in terms of the access to the workflow commands.
        • CheckGroup - the authorization rule to check whether a user belongs to a group of users in terms of the access to the workflow commands.
        • CheckUser - the authorization rule to check whether a user's ID matches the column in the object (table) associated with the process. It is also possible to indicate the username or their e-mail.
      • The following is added to the Server Actions DWKit:
        • Trigger SetFields - sets the values of the edited record. The values are set in the Parameter field as JSON in the special format:

          {
          AuthorId: "@OperationUserId",
          AuthorId_Name: "@OperationUserName",
          State: "@DefaultState",
          StateName: "@DefaultStateName"
          }

          It is also possible to specify the value settings depending on the role, group or permission of the user.

          {
          _ForRole: {
          Admins: { Amount: 100, Name: "Test" },
          User: { Amount: 200 }
          }
          }
        • Filter FilterFields - sets a filter for collections. The filter elements are specified in the Parameter field as JSON in the special format:

          {
          AuthorId: "@CurrentUserId",
          Amount: {term: ">", value: 100}
          }

          It is also possible to set different filters depending on the role, group or permission of the user.

          {
          _ForRole: {
          User: { AuthorId: "@CurrentUserId" }
          }
          }
        • Server Action SendEmail - generates and sends an email in the specified form.

    • WorkflowPlugin - includes typical features of the workflow, such as: Inbox / Outbox, filling in the name of the current state in a related entity, recording the history of the entity processing, automatic deletion of the workflow when deleting the related entity.
    • NotificationPlugin - adds an update to the document counters using SignalR.
  • Now, you can create a form, and then, automatically create a Data Model for it (in Simplified Mode). The Generate Data Model button has been added to the Forms / Mapping data model section; by clicking on the button, you start the Create Data Model wizard. Thus, you can develop your system on the basis of forms, creating data models in automatic mode, without any additional tables in the database.
  • IntelliSense has been added to the Code actions editor.
  • A new component, Files, has been added to upload multiple files. In the Mapping data model section of the form, you should create a Collection associated with the table assigned to store the information about the uploaded files, and bind the Files components to this collection.
  • A new component, Number Format, has been added in order to format numbers with a certain mask.
  • A new component, Reach Text Editor, has been added to edit HTML.
  • For the Dictionary component, you can specify a list of columns to be loaded with each entry; the values of these columns are transferred to the onChange event handler in the additionalValues parameter. In the onChange event handler, you can change the data displayed in the form. Moreover, in the property Text expression of the Dictionary component, you can specify an expression to form the text of an item in the list.
  • In the form editor, the Preview mode has been replaced by the Viewer mode, where you can debug the form.
  • Now, the Auto mapping in the Mapping data model performs automatic mapping, including joined attributes.
  • In the Sync with Database section, filters have been added to search for tables in the database.
  • The Server Action can be specified as a data source for the form, or a component of the Dictionary type. Therefore, you can develop data sources in C#.
  • in the Global state, in the Settings object, you can specify the userForms object to list the react forms that will be drawn instead of the forms created in the FormBuilder.
  • For the MSSQL Server, when working with JSON, the OPENJSON function is used instead of JSON_VALUE, which is optimal for performance and allows you to store large strings in the Extension attributes.
  • Updated to Workflow Engine .NET 4.1.
  • The workflow parameters are loaded into the form data with the names _wp {parameterName}. These parameters can be displayed in the form and changed. On changing, the parameters will be transferred to the process only after the command is executed or the Set state is called. To enable displaying the workflow parameters in the form, you should uncheck the Block load parameters checkbox in the properties of the Workflow Bar component.
  • The ability to save workflow schemes in the Metadata / Workflow folder has been added. Now, this mode is enabled by default in all examples.
  • If several workflow schemes are attached to one form, then in the Workflow Bar component you can use a button to select a scheme. On clicking this button, a window appears, where you can select the scheme to be used by the document displayed in the form. In the Data Model, you can specify the Workflow scheme attribute to store the selected workflow scheme.
  • It is possible to pass default values for the forms via URL, in the following format http://localhost:48800/form/document/?defaultvalues={Amount:500,Name:"Test"}
  • Flexbox settings were added to the Div (container) component to provide a more friendly layout development.

DWKit 2.8 to 2.9 update manual

Database:

Application server and client side:

  • Download the latest Starter pack.

  • Unzip.

  • Run updatesolution script:

    • For Windows just run updatesolution_run.bat.

    • For Linux/macOS (this way requires PowerShell):

      pwsh updatesolution.ps1
  • Enter the path to your solution.

  • After the update, the originals of files modified by the script are placed in a folder dwkit-backup-* inside your solution folder. So you can analyze them and merge your custom changes manually.

  • Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:

    npm install
    node_modules\.bin\webpack --env.prod

    or, if webpack 4 is installed globally (not recommended):

    npm install
    webpack --env.prod

2.8

  • Application and DWKit admin panel interface right to left display added. This display is switched on separately for each user in their profile.
  • Colour themes added for application and DWKit admin panel. Themes are switched separately for each user in their profile.
  • New collection component Repeater added. It draws a specified set of components for each collection entity and supports server paging.
  • Settings for adaptive layout added for components. For example there can be 2 components in the form which display the same list - grid and repeater. You can set the grid to be displayed in the desktop mode, and repeater to be displayed in the mobile mode. If component is not displayed, it is not rendered, that is why even if there are 2 heavy components on the page, it does not affect performance.
  • Component can be bound to any Property Name from form data. Thus, there can be 2 or more components in the form, bound to the same property from form data. For example there can be 2 components which display the same list - grid and repeater, where grid displayed in desktop mode, repeater displayed in mobile mode. Both are bound to the DocumentTransitionHistory and that is why both display the same data.
  • New security provider added - DefaultSecurityProvider, which is using IdentityServer4 for user authentication. Now you can connect external authentication providers like as Facebook or OpenID Connect to it.
  • User and user groups import via LDAP added. You can also import users from Active Directory.
  • New client action 'gridExport' to export grids to Excel added.
  • New client action 'reload' added, which reloads all currently opened windows (main window + all modal windows). Client action 'refresh' refreshes the active window only.
  • Form binding to workflow commands added. You can transfer parameters to workflow process via form binding. New client actions ' workflowShowCommandForm', 'workflowContinueExecution', 'workflowCancelExecution' added to support that.
  • New client action 'copy' to copy form added.
  • Business flow now works in modal windows.
  • Substitutions now work in component collections. Use {row.propertyName} expression to access current item data.
  • Dates and numbers formatting added in substitutions. For example, {row.TransitionTime:DD.MM.YYYY HH:mm:ss} or {Amount:0,000.00}. moment.js is used to format dates. numeral.js is used to format numbers. If you need to use the formatting string set in localization, write {row.TransitionTime:local}.
  • Default form (dashboard) name can be specified in the admin panel.
  • Interface performance optimized.

DWKit 2.7 to 2.8 update manual

Database:

Application server side:

  • Update all DWKit-* nuget packages to 2.8.*.
  • Update the following application controllers (you can find them at OptimaJet.DWKit.StarterApplication/Controllers):
  • Update DWKit OptimaJet.Application/Configurator.cs configuration class. public static void Configure(IApplicationBuilder app, IConfigurationRoot configuration, string connectionStringName = "default") method should appear in it. If you have never changed this file, you can update it: OptimaJet.Application/Configurator.cs. You can also review its changes: changes.
  • Update ASP.NET MVC launch class of the OptimaJet.DWKit.StarterApplication/Startup.cs application. A lot has changed in this class due to DWKit transfer to Identity Server. That's why we recommend to update it fully. If you're planning to use old SecurityProvider, read all comments in the code of this class to learn how to connect it. Updated class: OptimaJet.DWKit.StarterApplication/Startup.cs. You can also review its changes: diff.

Application client side:

Update is executed in the OptimaJet.DWKit.StarterApplication project. You can download all updates both from GitHub and from the Starter Pack or Vacation Request projects.

Additional steps upon update:

  • You can specify the name of the form opened by default in the admin panel. This setting is called Default form and can be found in the Main tab on the Dashboard. Here you need to specify the name of the form which will open by default.

  • If you used DWKitApp.API.openModal() or DWKitApp.API.openModalDispatch() modal windows opening methods in your client code and transferred modal window opening type into it (for example, DWKitApp.API.openModal('formName', {type: 'modal'})), such code must be changed to DWKitApp.API.openModal('formName', {viewType: 'modal'}). I.e. type was renamed to viewType, and type now means that it is opened in the 'form' or 'flow' window.

  • If you have for some reason written your own SecurityProvider, you'll need to relate it to the changed ISecurityProvider interface.

  • If you've started using new DefaultSecurityProvider and are using IdentityServer4 as a result for user authentication, it is recommended to generate certificate for production environment and write the following settings in appsettings.json:

    "IdentityServerSettings": {
    "CertificateFile": "IdentityServer4Auth.pfx",
    "CertificatePassword": "password",
    }
  • If you've started using the new DefaultSecurityProvider and haven't generated the certificate for the IdentityServer, you have to add write permissions to the application folder for the process, which executes your DWKit based application. The write permission is necessary only for the first launch of the DWKit based application. Otherwise, your application most probably can't start.

2.7

  • Forms display feature in modal windows added. You can switch the edit form display as a modal window or side panel in DataGrid settings. Also you can manually open modal windows, using DWKitApp.API.openModal(...) or DWKitApp.API.openModalDispatch(...) functions. Full editing forms linked to data are opened in modal windows. The only limitation is that Business Flow doesn't work in modal windows. This feature will be added in DWKit 2.8.
  • New type of server functions DWKit can launch had been added (in addition to Triggers and Filters). This type is called Action. You can write Action both in admin panel (Code Actions section) and in the class implementing interface IServerActionsProvider. You can call these function from the client side by one of the following methods:
    • manually using DWKitApp.API.callServerCodeAction(...) or DWKitApp.API.callServerCodeActionDispatch(...).
    • in the actions chain which is linked to the control event. Simply create your server Action and select it in the designer, linking it to any event of any control. You can interchange client Action Handlers and server Action calls in the chain, they will still be executed sequentially.
  • When forming an actions chain, which is linked to the control event, you will see the following available actions: default client Action Handlers, Action Handlers created for a specific form and server Actions.
  • Default client gridCopy action has been added. Use it organize document copying.
  • Row copying button in CollectionEditor has been added.
  • New server AfterCopy trigger has been added. It is called when copying records.
  • You can now connect custom react controls to Form Builder. See the example.
  • Two new container components have been added to Form Builder. Use Tab to organize tab layout. Use Grid Layout to organize complicated grid layout.
  • Now you don't have to restart DWKit When changing one of Code Actions. The system will offer to recompile the changed Code Action.
  • Validation errors text is displayed in the form as tooltip. Tooltip position can be customized in the corresponding control settings.
  • Required form fields are automatically marked in the form. Name is marked by asterisk by default, but you can always change by changing the css.
  • Default client delete action has been added. Use it to create a Delete button in any form to delete documents from forms.
  • Debug in .NET Core and Linux has been fixed. With CodeActionsDebugMode in the configuration file debug mode for Code Actions is launched simultaneously in DWKit and Workflow Engine.
  • SQL request custom mapping in DynamicEntity has been added. Use DWKitRuntime.DbProvider.SelectQueryAsync(...) to run it.
  • You can now switch to CORS for the DWKit app. To do that use CorsSettings in the configuration file.
  • DateTime grid filters have been fixed.
  • Assigning control (renaming) to a field (original key in form binding) no longer ends in error.

The following additional actions must be taken to upgrade to DWKit 2.7:

  • Since version 2.7, webpack 4 is required to build the client part of DWKit instead of webpack 3.
  • You need to update code for the following controllers: DataController, UserInterfaceController, WorkflowController.
  • Add CodeActionController into your application.

You can copy these controllers from the Starter Pack or Vacation Request projects.

2.6

  • Updated to Workflow Engine .NET 4.0.

The following additional actions must be taken to upgrade to DWKit 2.6:

2.5

  • Filter set option was created in Dictionary control. Filters property appeared in the General tab of this control. You can specify a dynamic filter in [{"column":"column", "value": "value", "term":"="}] format. For example, we've got two Dictionary controls in the form, which are bound to TypeId and SubtypeId attributes. We want the list of possible SubtypeId to be limited when we choose TypeId. In this case it will be necessary to set the following filter for Dictionary in which SubtypeId was chosen: [{"column":"TypeId", "value": "{TypeId}", "term":"="}].

  • Resource editor was added into the admin panel. Now you can edit css and js files right from the admin panel.

  • TreePicker was added to be able to pick a value from the hierarchical dictionary.

  • Now you can specify triggers for collections in Mapping data model section. You can also select the AfterSelect trigger, which can be very useful if you are changing data in paging grids.

  • Validate trigger behavior was modified. Now this trigger will be executed every time for the whole form data set (main form + collections). It is very convenient to write server validation code in the trigger of this type. Validation result will be displayed in corresponding client controls. For example:

    public TriggerResult Validate(EntityModel model, List<dynamic> entities, TriggerExecutionContext context, dynamic options)
    {
    var validationResult = new TriggerValidationResult();
    foreach (var entity in entities)
    {
    // main entity validation
    if (entity.GetState() == DynamicEntityState.Insert || entity.GetState() == DynamicEntityState.Update)
    {
    if (entity.a <= entity.b)
    {
    validationResult.AddValidationError(entity, "a", "Must be greater or equal B");
    }
    }
    // collection validation
    if (entity.collection != null)
    {
    foreach (var collectionItem in entity.collection)
    {
    if (collectionItem.GetState() != DynamicEntityState.Insert && collectionItem.GetState() != DynamicEntityState.Update)
    continue;
    if (collectionItem.a <= collectionItem.b)
    {
    validationResult.AddValidationError(collectionItem, "a", "Must be greater or equal B");
    }
    }
    }
    }
    if (validationResult.IsEmpty) // the form is valid
    return TriggerResult.Success();
    return TriggerResult.ValidationFailed(validationResult, "Server validation failed!"); // the form is not valid
    }
  • 4 new trigger types were added: BeforeTransaction, BeforeBatch, AfterBatch, AfterTransaction. This trigger types will be executed every time for the whole form data set (main form + collections). They can be useful when organizing complex business logic.

  • In the trigger you can read entity state and see which operations have been or will be performed with it. For this use function entity.GetState(). Possible return values: Insert, Update, Delete, Undefined.

  • Method of result return from trigger was changed. There are 4 options available.

    • return TriggerResult.Success() - trigger action performed successfully, the trigger chain will be continued.
    • return TriggerResult.Terminate("Error message") - trigger chain will be terminated with throw of exception.
    • return TriggerResult.ValidationFailed(validationResult, "Server validation failed!") - trigger chain will be terminated, server validation result will be returned to the client.
    • return TriggerResult.Result(resultObj, terminate) - using this method you can transmit delta for global state of the client application to the client. Depending on the terminate setting, trigger chain execution can be either stopped, or continued. If several triggers in the chain returned result, these objects will be combined in one and applied to global state.
  • You can use TriggerExecutionContext to transmit settings between triggers during execution. This class instance is transmitted to every trigger. In it you can set value for any property context.SetParameter(name, value) and get value of any property context.GetParameter<T>(name).

  • Scripts for creating Docker containers were created for StarterPack and VacationRequest examples.

  • Validation added to Data Model and Mapping data model. Messages of errors in data mapping and Data Model are now displayed in the admin panel.

  • Messages of errors in compilation of CodeActions are now displayed in the admin panel.

  • Auto mapping algorithm in form data mapping was improved.

  • Two new functions added to DWKitApp.API - checkRole and checkPermission. You can use them to check current user's roles and permissions. It can be used to hide menu options.

  • Modifications of url constants are available in app.jsx. You can now change url access to backend and url constants for form and flow query.

  • state.data.displayed was removed from global state of the client application.

  • Visible Conditions for control containers error was fixed.

  • Fixed: problem of IE 11+ compatibility in the admin panel.

  • Pace library moved out of the optimajet-app.

The following additional actions must be taken to upgrade to DWKit 2.5:

  • Trigger functionality expansion led to DataController (DataController.cs) change. You can copy it from the StarterPack and VacationRequest projects.
  • Trigger functionality expansion led to their interface modification. Depending on whether you trigger code is defined in CodeActions or in the project code, you will have to do the following:
    • If your triggers are defined in the project code, you need to align your action providers with the modified interface IServerActionsProvider. ExecuteTrigger and ExecuteTriggerAsync method signatures were changed.
    • If your triggers are defined in the project code or in CodeActions, you need to change values which these triggers return in order for your triggers to return TriggerResult instance.
      • You need to replace return (null, false); or return (string.Empty, false); with return TriggerResult.Success()
      • replace return ("Error message", true); with return TriggerResult.Terminate("Error message")
  • If your wwwroot folder is in a custom location, you will have to set its path in resourcefolder setting, otherwise Resource editor will not be able to work correctly.

2.4

  • Building with .NET Core 2.1 instead of .NET Core 2.0.
  • Full support of the primary key functionality which has been generated on the database side (for example, an identifier). Such attributes should be marked as Calculate = true. Be careful when you're working with the workflow functionality with a non-GUID primary key. At this moment, Business Flows work with a GUID primary key only.
  • Full support of column calculation. Such attributes should be marked as Calculate = true. If such attributes have been shown on a form then they will be refreshed after saving.
  • Added a custom client action - confirm. If you add this action to the action queue, a confirmation window will be shown with two buttons: OK and Cancel. If a user clicks on the OK button, the execution will be continued. If a user clicks on the Cancel button, the execution will be stopped.
  • Admin panel localization.
  • Ability to use a custom URL for processing for loading and saving form data.
  • Custom formatters were added to the GridView.
  • FormBuilder's UI was improved.
  • A pure Semantic-UI style as a default style of DWKit's controls.

2.3

  • A SignalR hub was added as to enable changing the Global Client State from the server. It is used to update the Inbox and Outbox counters in the Vacation Request sample.
  • Oracle provider was added.
  • The ability to create a column with the type "custom" was added to the Collection Editor control. You can drag any other control, such as Dropdown or Dictionary, to this column.
  • Server pagination for Dictionary control.
  • Server pagination for Users in Admin panel.
  • Workflow Engine was updated to version 3.3.
  • The ability to send APIKey in the request header was added to Integration API, see the updated swagger specification.

The following additional actions must be taken to upgrade to DWKit 2.3

  • Since the data interface for Dictionary Control has been changed, you need to update the DataController (DataController.cs). ou can get it from the Starter Pack or Vacation Request samples.
  • You need to update packages in OptimaJet.DWKit.StarterApplication and OptimaJet.DWKit.Application projects.
  • You need to update wwwroot\scripts folder of OptimaJet.DWKit.StarterApplication project with new versions of DWKit and Workflow Engine scripts.

2.2

  • Integration API.
  • Client-side JavaScript API - DWKitApp.API.

2.1

  • Workflow Engine 3.
  • New controls: DatePicker, Dropzone, Breadcrumbs.
  • Form templates.
  • Using {ColumnsName} format for replacing string constraints in controls.
  • Set href-attribute for Menu and Breadcrumb controls.
  • JavaScript Client API for DWKitForm.
  • Customization Date Format.
  • External filters for GridView control.

2.0

  • The first release of DWKit 2.0.