Releases: JJConsulting/JJMasterData
Releases · JJConsulting/JJMasterData
4.3.0
- Update all NuGet dependencies
- Small performance improvements suggested by Rider R# and Rosylnator
- Critical performance fix: Use
DbType.AnsiString
instead ofDbType.String
- Lots of fixes related to relationships
- New action type:
HtmlTemplateAction
. Powered by Fluid you can create dynamic HTML experiences using SQL queries and a Liquid template. - You can also Fluid for conditionals and functions at GridView fields rendering template
- NCalc is now used by default at
exp:
expressions JJDataPanel
now support secret values using theSecretValues
property- It's now possible to set a PageState of a form using
{ElementName}_PageState
at query string
Breaking Changes
- Renamed
ShowPagging
toShowPaging
atJJGridView
- All
async
events that run more synchronous than asynchronous must return aValueTask
instead of aTask
for better performance.
4.2.0
New Features:
- New layout for
Data Dictionary
menu and many changes at the UI and UX atJJMasterData.Web
- Added Edit button at
/Render/
- It's possible to select a custom connection for a FormElement using
FormElement.SelectedConnectionId
. The connection is loaded fromJJMasterData:ConnectionStrings
. - Added
DataAccess.GetDataSet
andDataAccess.GetDataSetAsync
- Confirmation messages are now showed on a
JJMessageBox
instead of a JS alert. - New component:
JJBreadcrumb
. Includes a class and a TagHelper. - New component:
JJOffcanvas
. Includes a class and a TagHelper. - New component:
JJMessageToast
. Includes a class and a TagHelper. JJTitle
now supports simple actions with aList<TitleAction>
- "About" from MasterData is now rendered at an Offcanvas.
ValidationSummaryTagHelper
now loads errors from ModelState by default.- Added
FormElementField.GridRenderingTemplate
to render custom HTML at GridView.
Documentation:
- More info about Authorization
- Added information about
{FieldName}
expression keyword
Chore:
- Updated NCalc Plugin to 4.0 (Release Notes)
Bug Fixes:
- Floating labels now work for text area and textbox with actions
JJDataPanel
was not respectingAutoReloadFormFields
at relationships- When clicking "New" at a new field, the field list will work normally
- GridView data source errors were not logged
- MessageBox had incorrectly translated messages
Breaking Changes:
- Floating labels are now saved at
FormElement.Options
4.1.0
A small release to represent our stabilization milestone for public APIs and elements with relationships. This release also contains a new functionality and a critical fix at modals and relationships.
SqlDataDictionaryRepository
Now it caches theFormElement
, making operations such as pagination, actions and search much faster.JJDataPanel
It is now responsible for storing thePageState
in a hidden input instead of theJJFormView
, making it much easier to work with relationships and modals.- Better UI layout at
JJMasterData.Web
v4.0.0
Release Notes ☀️
Relationships
- The largest feature from this version
- Now working with 1xn and 1x1 relationships
- Added
FormElementRelationship
class - You can now define the layout of your relationships
- You can use any
FormElementPanel
for your dictionaries
Form Toolbar Actions
- Added a new category of actions, rendered at the form.
- If in a relationship, you can use the
FormToolbarActionLocation
enum to define the location of your action
Removed Metadata
class
- Removed
Metadata
and related classes - The data dictionary is stored at a single JSON using
FormElement
Browser tab names
- You can now tell the difference between your tabs at your browser
Asynchronous programming
- Added support to
async
methods atIEntityRepository
andIDataDictionaryRepository
- Added
AsyncEventHandler
andasync
overloads to all events
Events
- Added
IGridEventHandler
, works likeIFormEventHandler
but forJJGridView
events
Dependency Injection
- Is now fully used in the entire project
- Removed the static service locator, you no longer need
app.UseJJMasterData
at yourProgram.cs
- If you want to use a service from JJMasterData, you can inject this following classes:
UrlRedirectService
UploadAreaService
LookupService
FormValuesService
FormService
FieldValuesService
FieldValidationService
FieldsService
FieldFormattingService
ExpressionsService
DataItemService
AuditLogService
DataItemService
for example, can be used to retrieve Combobox or Searchbox values without the component.
Expressions
- Added
IAsyncExpressionProvider
andIBooleanExpressionProvider
, implement your own class to parse expressions
Generated Scripts
- You can now generate Alter Table scripts for non-existing Data Dictionary fields
Logging
- File: Added Default, Compact and JSON formatting
- File & Db: Now run as a HostedService without locking the application
Factories
- Added
IFormElementComponentFactory<T>
,IControlFactory<T>
andIComponentFactory<T>
Data Dictionaries list
- New UI at the home
- Now have a filter for everything filter
- Info column is now a tooltip when the element info is not null
Expressions
- Now have a editor
- You can now implement
IAsyncExpressionProvider
andIBooleanExpressionProvider
FormElement
- Added
BIT
DataType support (true
orfalse
) - Added
Time
DataType support - Stored Procedures are now optional
Components
- Added Color Picker component
- Added switch option to Checkbox
Custom Bootstrap support
- You can now use the default JJMasterData layout with custom Bootstrap using the
JJMasterData:CustomBootstrapPath
configuration key
Breaking Changes 💣
Infrastructure
- Removed
Metadata
class - The DataDictionary table now only contains the
F
type by now - All older
FormElement
JSON objects from older versions need to be updated by our CLI tool - .NET 6/7 projects no longer support
SystemWebAdapters
andResponse.End
calls to improve performance
FormElementDataItem
- Removed
ReplaceTextOnGrid
please useGridBehavior
enum
Log
- Removed static
Log
please useILogger
Cryptography
- Removed static
Cript
please useIEncryptionService
orJJMasterDataEncryptionService
- Beware
Cript.64
uses DES instead of AES and is unsafe.
DataAccess
- .NET 6/7:
DataAccess
without dependency injection no longer supported DataAccess
SQLServer provider now usesMicrosoft.Data.SqlClient
instead ofSystem.Data.SqlClient
Components
- Renamed
JJBaseView
andJJBaseControl
toComponentBase
andControlBase
respectically - Removed components constructors, for example, instead of
new JJFormView("MyElement")
useawait IFormElementComponentFactory<JJFormView>.CreateAsync("MyElement")
JJFormView
no longer inherits fromJJGridView
, compatibility methods and properties added, but they are obsolete.JJFormLog
renamed toJJAuditLogView
JJFormUpload
renamed toJJUploadView
- Many database and IO operations are now
async
and return aTask
instead ofvoid
Events
- Removed
Action
fromActionEventArgs
please useActionName
- Renamed
IFormEvent
toIFormEventHandler
- Removed
IFormEventAttribute
please useIFormEventHandler.ElementName
to allow dynamic event handlin
Component Rendering
- Removed
GetHtml
please useGetResultAsync
andSendResult
IDataDictionaryRepository
GetMetadata
toGetFormElementAsync
Namespaces
JJMasterData.ReceitaFederal*
toJJMasterData.Brasil*
JJMasterData.Commons.Criptography.*
toJJMasterData.Commons.Security.*
JJMasterData.Core.Web.Components.*
toJJMasterData.Core.UI.Components.*
JJMasterData.Core.FormEvents.*
toJJMasterData.Core.Events*
JJMasterData.Core.DataDictionary.*
toJJMasterData.Core.DataDictionary.Models
andJJMasterData.Core.DataDictionary.Repository
v3.1.0
Release Notes 🪐
HTML Rendering
JJMasterData.Core
no longer contains hard-coded HTML Strings- Added
HtmlBuilder
class, responsible to render a node in the HTML tree
Development
- Removed
JJMasterData.Web.Bootstraper
, nowJJMasterData.Web.Example
is used at development - Added a single appsettings.json for every project
.NET
- .NET 7 is officially supported with C# 11.
DataAccess
TagHelpers
- Added TagHelpers to some JJMasterData components like
<jj-formview element-name="YourDictionary"\>
Application Options
- Now have a web UI
- You can also test your connection at this view
appsettings.json
now can be saved at runtime- Implement
IWritableOptions
if you want to write your settings somewhere
L10N
- You no longer need to truncate your resources table after every update
- Now uses
IStringLocalizer
internally
WebApi
- Now have a File manipulation route
First time setup
- Automatically creates everything now
Example Project
- Now have new examples
- Added validation if the example dictionary does not exist
- Bootstrap agnostic layout
Data Dictionary
Home
- Now showcase the dictionary info
- You can now Render your dictionary from the grid without clicking on edit (finally 🙏)
- If you export only a single dictionary, a
.json
exported instead of a.zip
Repository Support
- MongoDB support 🍃
You can now store your metadata at MongoDB! Just installJJMasterData.MongoDB
- File System
Just use withFileSystemDataDictionaryRepository
Validations
- Only fields of type VarChar or Text can have a filter of the type Contains.
FormEvents
- Now support
FormEventAttribute
to have any class name - Python events now support debugging on VSCode
- Created
IFormEventResolver
to any custom implementation - WebApi can now have
FormElement
customizations usingOnMetadataLoad
Logger
- Removed Console, EventViewer and Trace from
JJMasterData.Commons
, just use Microsoft Loggers enabling at yourIConfiguration
source - Splitted file and database into
DbLogger
andFileLogger
- New log levels following Microsoft conventions
- Better log messages using
ILogger
formatter
Added support to DateTime2
- A recommended SQLServer DateTime type with milliseconds support
Breaking Changes
DataAccess
- Removed methods
ValueExists
,ValueExistsAsync
,GetValue
,GetValueAsync
- Removed
KeepConnAlive
Property
JJBaseView
- Removed
RenderHtml
, please useRenderHtmlElement
JJUploadFile
- The event OnPostFile parameter JJFormFile was changed to another class called FormFileContent
JJDataImp
OnAfterImport
is removed, please useOnAfterUpdate
,OnAfterInsert
andOnAfterDelete
The events:
OnBeforeDelete
OnAfterDelete
OnBeforeInsert
OnAfterInsert
OnBeforeUpdate
OnAfterUpdate
OnBeforeImport
are now fired on JJFormView, JJDataImp and WebApi via FormService
.
JJDataPanel
JJDataPanel
UI related properties moved toUISettings
class
JJComboBox
- Renamed Itens to Items on
JJComboBox
JJGridView
- Renamed
SizeTitle
toTitleSize
- Renamed
TotalReg
toTotalRecords
- Renamed
Erros
toErrors
- Moved
DoSqlCommand
toActionManager.ExecuteSqlCommand
- Moved
DoPythonScriptAction
toActionManager.ExecutePythonScriptAction
- Padronized all public HTML methods to suffix with Html (correct english convention).
GridConfigSorting
renamed toGridSortingConfig
JJLinkButton
- Removed property
IsSubmit
please useLinkButtonType
public enum LinkButtonType
{
Link = 0,
Button = 1,
Submit = 2
}
EventArgs Classes
- Renamed
ResultHtml
toHtmlResult
💣
FormEvents
- Removed
OnInstanceCreated
please useOnMetadataLoad
WebApi
- Renamed
masterApi/{elementName}/{id}/file/{fieldName}/
route tomasterApi/{elementName}/{id}/{fieldName}/file
(IMPORTANT @🐍) 💣
Logger
- Configurations now follow Microsoft ILogger 💣
Important ⚠️
- Default constructors of the components maybe removed in the next version, give a preference to TagHelpers 💣
- This change will be made to remove the service locator anti-pattern.
- Using TagHelpers with the Fluent configuration methods, you will see that your code quality will improve without instantiating a JJFormView.
Miscellaneous
- Removed
JJDate
,JJDateTime
andJJHour
, please add the needed attributes toJJTextBox
💣 - Removed
IDataAccess
, please useDataAccess
- Removed
ISettings
please useIOptions<JJMasterDataOptions>
- Removed
ITranslator
please useILocalizationProvider
- Renamed
JJUploadFile
toJJUploadArea
- Removed TripAdvisor icon ( they were angry with FontAwesome)
- Moved XUnit Test from FromElement to Metadata
- Renamed
DicParser
and related classes toMetadata
- Renamed method
StringManager.NoAccents
toStringManager.GetStringWithoutAccents
- Renamed
DataDictionaryManager
toFormService
- Renamed
DataDictionaryManagerResult
toFormLetter
- Renamed
Factory
toEntityRepository
💣 - Renamed
DictionaryDao
toDatabaseDataDictionaryRepository
💣