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 withdocker 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:
- Run the SQL script Workflow_update_5_1_to_5_2.sql all relative databases.
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 distor, 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:
- Run the SQL script update_3_2_to_3_3.sql all relative databases:
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.prodor, 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:
- Run the SQL script Workflow_update_5_0_to_5_1.sql all relative databases:
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.prodor, 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.prodor, 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:
- Run the SQL script Workflow_update_4_1_to_4_2.sql all relative databases.
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.prodor, 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:
- Run the SQL script Workflow_update_4_1_to_4_2.sql all relative databases.
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.prodor, 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.
-
- The following actions have been added to the workflow scheme designer:
- 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.
- BasicPlugin that adds typical Server Actions to both DWKit and the workflow.
- 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 ofJSON_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:
- Run the SQL script update_2_8_to_2_9.sql for all relative databases:
- Run the SQL script update_4_0_to_4_1.sql all relative databases:
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.prodor, 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 theDocumentTransitionHistory
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:
- Run the SQL script update_2_7_to_2_8.sql for all relative databases:
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.
-
Fully update /wwwwroot/css folder. wwwwroot/css.
-
Fully update /wwwwroot/images folder. wwwwroot/images.
-
Fully update /wwwwroot/localization folder. wwwwroot/localization.
-
Add /wwwwroot/themes folder with new colour themes: wwwwroot/themes.
-
Update Form Builder /wwwwroot/scripts/optimajet-form.js library. /wwwwroot/scripts/optimajet-form.js.
-
Update Admin /wwwwroot/scripts/optimajet-admin.js library. /wwwwroot/scripts/optimajet-admin.js.
-
Update App /wwwwroot/scripts/optimajet-app.js library. /wwwwroot/scripts/optimajet-app.js.
-
Update Workflow Designer /wwwwroot/scripts/workflowdesigner.min.js library. /wwwwroot/scripts/workflowdesigner.min.js.
-
Add silentRenew.html to the /wwwwroot folder. wwwwroot/silentRenew.html.
-
Add oidc-client.min.js to the /wwwwroot/scripts folder. wwwwroot/oidc-client.min.js.
-
Update admin application: /wwwwroot/js/app/admin.jsx. You need to do this to add new default client actions. If you have never changed this file, update it in full - wwwwroot/js/app/admin.jsx. You can also review its changes: changes.
-
Update login form: /wwwwroot/js/app/login.jsx. You need to do this to display external authentication providers list, if you connect them. If you have never changed this file, update it in full - wwwwroot/js/app/login.jsx. You can also review its changes: diff.
-
Update main application: /wwwwroot/js/app/app.jsx. Attention. Render has changed. Application will look like this by default. If you don't like it, review diff and transfer changes into your application. File: wwwwroot/js/app/app.jsx. You can also review changes.
-
Update views to connect correct styles and javascripts.
/Views/Account/Login.cshtml - file, changes.
-
Reassemble application client side by executing the following commands in the OptimaJet.DWKit.StarterApplication folder:
npm install
node_modules\.bin\webpack --env.prodor, if webpack 4 is installed globally:
npm install
webpack --env.prod
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()
orDWKitApp.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 toDWKitApp.API.openModal('formName', {viewType: 'modal'})
. I.e.type
was renamed toviewType
, andtype
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 changedISecurityProvider
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, usingDWKitApp.API.openModal(...)
orDWKitApp.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(...)
orDWKitApp.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.
- manually using
- 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. UseGrid 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. UseDWKitRuntime.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:
- Run the SQL script Workflow_update_WFE_4_0.sql for all relative databases.
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 twoDictionary
controls in the form, which are bound toTypeId
andSubtypeId
attributes. We want the list of possibleSubtypeId
to be limited when we chooseTypeId
. In this case it will be necessary to set the following filter forDictionary
in whichSubtypeId
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 theterminate
setting, trigger chain execution can be either stopped, or continued. If several triggers in the chain returnedresult
, 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 propertycontext.SetParameter(name, value)
and get value of any propertycontext.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
andcheckPermission
. 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
andExecuteTriggerAsync
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);
orreturn (string.Empty, false);
withreturn TriggerResult.Success()
- replace
return ("Error message", true);
withreturn TriggerResult.Terminate("Error message")
- You need to replace
- If your triggers are defined in the project code, you need to align your action providers with the modified
interface
- If your
wwwroot
folder is in a custom location, you will have to set its path inresourcefolder
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
andOptimaJet.DWKit.Application
projects. - You need to update
wwwroot\scripts
folder ofOptimaJet.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.