Releases: JJConsulting/JJMasterData
Releases · JJConsulting/JJMasterData
v4.4.0
New Features:
- New Component: Code Editor – Identical to the VS Code editor.
- Import dictionaries from schemas other than "dbo" – You can now import a dictionary from a schema other than "dbo".
- Filter option – Filters can now be submitted (default behavior remains AJAX, as usual). This is available under Actions -> Detailed Filters -> Advanced (Suggestion from @ygorsilv1997 ).
- Import table fields after dictionary creation – It's now possible to import table fields after the dictionary has been created. (Suggestion from community member @PolywickStudio).
- Database Scripts – The database script screen now supports dark mode and is displayed in an offcanvas.
- Update docs for easier setup from new projects
Bugfix:
- WebApi Endpoint for single record retrieval – Fixed a bug where the endpoint for fetching a single record from the WebApi wasn't functioning properly.
4.3.0
- Update all NuGet dependencies
- Small performance improvements suggested by Rider R# and Rosylnator
- Critical performance fix: Use
DbType.AnsiStringinstead 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 JJDataPanelnow support secret values using theSecretValuesproperty- It's now possible to set a PageState of a form using
{ElementName}_PageStateat query string
Breaking Changes
- Renamed
ShowPaggingtoShowPagingatJJGridView - All
asyncevents that run more synchronous than asynchronous must return aValueTaskinstead of aTaskfor better performance.
4.2.0
New Features:
- New layout for
Data Dictionarymenu 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.GetDataSetandDataAccess.GetDataSetAsync - Confirmation messages are now showed on a
JJMessageBoxinstead 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. JJTitlenow supports simple actions with aList<TitleAction>- "About" from MasterData is now rendered at an Offcanvas.
ValidationSummaryTagHelpernow loads errors from ModelState by default.- Added
FormElementField.GridRenderingTemplateto 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
JJDataPanelwas not respectingAutoReloadFormFieldsat 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 thePageStatein 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
FormElementRelationshipclass - You can now define the layout of your relationships
- You can use any
FormElementPanelfor your dictionaries
Form Toolbar Actions
- Added a new category of actions, rendered at the form.
- If in a relationship, you can use the
FormToolbarActionLocationenum to define the location of your action
Removed Metadata class
- Removed
Metadataand 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
asyncmethods atIEntityRepositoryandIDataDictionaryRepository - Added
AsyncEventHandlerandasyncoverloads to all events
Events
- Added
IGridEventHandler, works likeIFormEventHandlerbut forJJGridViewevents
Dependency Injection
- Is now fully used in the entire project
- Removed the static service locator, you no longer need
app.UseJJMasterDataat 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
IAsyncExpressionProviderandIBooleanExpressionProvider, 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
IAsyncExpressionProviderandIBooleanExpressionProvider
FormElement
- Added
BITDataType support (trueorfalse) - Added
TimeDataType 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:CustomBootstrapPathconfiguration key
Breaking Changes 💣
Infrastructure
- Removed
Metadataclass - The DataDictionary table now only contains the
Ftype by now - All older
FormElementJSON objects from older versions need to be updated by our CLI tool - .NET 6/7 projects no longer support
SystemWebAdaptersandResponse.Endcalls to improve performance
FormElementDataItem
- Removed
ReplaceTextOnGridplease useGridBehaviorenum
Log
- Removed static
Logplease useILogger
Cryptography
- Removed static
Criptplease useIEncryptionServiceorJJMasterDataEncryptionService - Beware
Cript.64uses DES instead of AES and is unsafe.
DataAccess
- .NET 6/7:
DataAccesswithout dependency injection no longer supported DataAccessSQLServer provider now usesMicrosoft.Data.SqlClientinstead ofSystem.Data.SqlClient
Components
- Renamed
JJBaseViewandJJBaseControltoComponentBaseandControlBaserespectically - Removed components constructors, for example, instead of
new JJFormView("MyElement")useawait IFormElementComponentFactory<JJFormView>.CreateAsync("MyElement") JJFormViewno longer inherits fromJJGridView, compatibility methods and properties added, but they are obsolete.JJFormLogrenamed toJJAuditLogViewJJFormUploadrenamed toJJUploadView- Many database and IO operations are now
asyncand return aTaskinstead ofvoid
Events
- Removed
ActionfromActionEventArgsplease useActionName - Renamed
IFormEventtoIFormEventHandler - Removed
IFormEventAttributeplease useIFormEventHandler.ElementNameto allow dynamic event handlin
Component Rendering
- Removed
GetHtmlplease useGetResultAsyncandSendResult
IDataDictionaryRepository
GetMetadatatoGetFormElementAsync
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.ModelsandJJMasterData.Core.DataDictionary.Repository
v3.1.0
Release Notes 🪐
HTML Rendering
JJMasterData.Coreno longer contains hard-coded HTML Strings- Added
HtmlBuilderclass, responsible to render a node in the HTML tree
Development
- Removed
JJMasterData.Web.Bootstraper, nowJJMasterData.Web.Exampleis 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.jsonnow can be saved at runtime- Implement
IWritableOptionsif you want to write your settings somewhere
L10N
- You no longer need to truncate your resources table after every update
- Now uses
IStringLocalizerinternally
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
.jsonexported 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
FormEventAttributeto have any class name - Python events now support debugging on VSCode
- Created
IFormEventResolverto any custom implementation - WebApi can now have
FormElementcustomizations usingOnMetadataLoad
Logger
- Removed Console, EventViewer and Trace from
JJMasterData.Commons, just use Microsoft Loggers enabling at yourIConfigurationsource - Splitted file and database into
DbLoggerandFileLogger - New log levels following Microsoft conventions
- Better log messages using
ILoggerformatter
Added support to DateTime2
- A recommended SQLServer DateTime type with milliseconds support
Breaking Changes
DataAccess
- Removed methods
ValueExists,ValueExistsAsync,GetValue,GetValueAsync - Removed
KeepConnAliveProperty
JJBaseView
- Removed
RenderHtml, please useRenderHtmlElement
JJUploadFile
- The event OnPostFile parameter JJFormFile was changed to another class called FormFileContent
JJDataImp
OnAfterImportis removed, please useOnAfterUpdate,OnAfterInsertandOnAfterDelete
The events:
OnBeforeDeleteOnAfterDeleteOnBeforeInsertOnAfterInsertOnBeforeUpdateOnAfterUpdateOnBeforeImport
are now fired on JJFormView, JJDataImp and WebApi via FormService.
JJDataPanel
JJDataPanelUI related properties moved toUISettingsclass
JJComboBox
- Renamed Itens to Items on
JJComboBox
JJGridView
- Renamed
SizeTitletoTitleSize - Renamed
TotalRegtoTotalRecords - Renamed
ErrostoErrors - Moved
DoSqlCommandtoActionManager.ExecuteSqlCommand - Moved
DoPythonScriptActiontoActionManager.ExecutePythonScriptAction - Padronized all public HTML methods to suffix with Html (correct english convention).
GridConfigSortingrenamed toGridSortingConfig
JJLinkButton
- Removed property
IsSubmitplease useLinkButtonType
public enum LinkButtonType
{
Link = 0,
Button = 1,
Submit = 2
}EventArgs Classes
- Renamed
ResultHtmltoHtmlResult💣
FormEvents
- Removed
OnInstanceCreatedplease 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,JJDateTimeandJJHour, please add the needed attributes toJJTextBox💣 - Removed
IDataAccess, please useDataAccess - Removed
ISettingsplease useIOptions<JJMasterDataOptions> - Removed
ITranslatorplease useILocalizationProvider - Renamed
JJUploadFiletoJJUploadArea - Removed TripAdvisor icon ( they were angry with FontAwesome)
- Moved XUnit Test from FromElement to Metadata
- Renamed
DicParserand related classes toMetadata - Renamed method
StringManager.NoAccentstoStringManager.GetStringWithoutAccents - Renamed
DataDictionaryManagertoFormService - Renamed
DataDictionaryManagerResulttoFormLetter - Renamed
FactorytoEntityRepository💣 - Renamed
DictionaryDaotoDatabaseDataDictionaryRepository💣


