.NET CRUD generator library with Bootstrap support to create dynamic forms at runtime from a data dictionary.
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 the FormElement
, making operations such as pagination, actions and search much faster.JJDataPanel
It is now responsible for storing the PageState
in a hidden input instead of the JJFormView
, making it much easier to work with relationships and modals.JJMasterData.Web
FormElementRelationship
classFormElementPanel
for your dictionariesFormToolbarActionLocation
enum to define the location of your actionMetadata
classMetadata
and related classesFormElement
async
methods at IEntityRepository
and IDataDictionaryRepository
AsyncEventHandler
and async
overloads to all eventsIGridEventHandler
, works like IFormEventHandler
but for JJGridView
eventsapp.UseJJMasterData
at your Program.cs
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.
IAsyncExpressionProvider
and IBooleanExpressionProvider
, implement your own class to parse expressionsIFormElementComponentFactory<T>
,IControlFactory<T>
and IComponentFactory<T>
IAsyncExpressionProvider
and IBooleanExpressionProvider
BIT
DataType support (true
or false
)Time
DataType supportJJMasterData:CustomBootstrapPath
configuration keyMetadata
classF
type by nowFormElement
JSON objects from older versions need to be updated by our CLI toolSystemWebAdapters
and Response.End
calls to improve performanceReplaceTextOnGrid
please use GridBehavior
enumLog
please use ILogger
Cript
please use IEncryptionService
or JJMasterDataEncryptionService
Cript.64
uses DES instead of AES and is unsafe.DataAccess
without dependency injection no longer supportedDataAccess
SQLServer provider now uses Microsoft.Data.SqlClient
instead of System.Data.SqlClient
JJBaseView
and JJBaseControl
to ComponentBase
and ControlBase
respecticallynew JJFormView("MyElement")
use await IFormElementComponentFactory<JJFormView>.CreateAsync("MyElement")
JJFormView
no longer inherits from JJGridView
, compatibility methods and properties added, but they are obsolete.JJFormLog
renamed to JJAuditLogView
JJFormUpload
renamed to JJUploadView
async
and return a Task
instead of void
Action
from ActionEventArgs
please use ActionName
IFormEvent
to IFormEventHandler
IFormEventAttribute
please use IFormEventHandler.ElementName
to allow dynamic event handlinGetHtml
please use GetResultAsync
and SendResult
GetMetadata
to GetFormElementAsync
JJMasterData.ReceitaFederal*
to JJMasterData.Brasil*
JJMasterData.Commons.Criptography.*
to JJMasterData.Commons.Security.*
JJMasterData.Core.Web.Components.*
to JJMasterData.Core.UI.Components.*
JJMasterData.Core.FormEvents.*
to JJMasterData.Core.Events*
JJMasterData.Core.DataDictionary.*
to JJMasterData.Core.DataDictionary.Models
and JJMasterData.Core.DataDictionary.Repository
JJMasterData.Core
no longer contains hard-coded HTML StringsHtmlBuilder
class, responsible to render a node in the HTML treeJJMasterData.Web.Bootstraper
, now JJMasterData.Web.Example
is used at developmentIDataDictionary
and IEntityRepository
<jj-formview element-name="YourDictionary"\>
appsettings.json
now can be saved at runtimeIWritableOptions
if you want to write your settings somewhereIStringLocalizer
internally.json
exported instead of a .zip
JJMasterData.MongoDB
FileSystemDataDictionaryRepository
FormEventAttribute
to have any class nameIFormEventResolver
to any custom implementationFormElement
customizations using OnMetadataLoad
JJMasterData.Commons
, just use Microsoft Loggers enabling at your IConfiguration
sourceDbLogger
and FileLogger
ILogger
formatterValueExists
, ValueExistsAsync
, GetValue
, GetValueAsync
KeepConnAlive
PropertyRenderHtml
, please use RenderHtmlElement
OnAfterImport
is removed, please use OnAfterUpdate
, OnAfterInsert
and OnAfterDelete
The events:
OnBeforeDelete
OnAfterDelete
OnBeforeInsert
OnAfterInsert
OnBeforeUpdate
OnAfterUpdate
OnBeforeImport
are now fired on JJFormView, JJDataImp and WebApi via FormService
.
JJDataPanel
UI related properties moved to UISettings
classJJComboBox
SizeTitle
to TitleSize
TotalReg
to TotalRecords
Erros
to Errors
DoSqlCommand
to ActionManager.ExecuteSqlCommand
DoPythonScriptAction
to ActionManager.ExecutePythonScriptAction
GridConfigSorting
renamed to GridSortingConfig
IsSubmit
please use LinkButtonType
public enum LinkButtonType
{
Link = 0,
Button = 1,
Submit = 2
}
ResultHtml
to HtmlResult
💣OnInstanceCreated
please use OnMetadataLoad
masterApi/{elementName}/{id}/file/{fieldName}/
route to masterApi/{elementName}/{id}/{fieldName}/file
(IMPORTANT @🐍) 💣JJDate
,JJDateTime
and JJHour
, please add the needed attributes to JJTextBox
💣IDataAccess
, please use DataAccess
ISettings
please use IOptions<JJMasterDataOptions>
ITranslator
please use ILocalizationProvider
JJUploadFile
to JJUploadArea
DicParser
and related classes to Metadata
StringManager.NoAccents
to StringManager.GetStringWithoutAccents
DataDictionaryManager
to FormService
DataDictionaryManagerResult
to FormLetter
Factory
to EntityRepository
💣DictionaryDao
to DatabaseDataDictionaryRepository
💣