This will finally come in version 7.4 https://commercial.abp.io/releases/pr/14629
ABP Suite most wanted feature has been implemented.Your custom code will not be overwritten anymorehttps://commercial.abp.io/releases/pr/14629
AWESOME to see Suit getting some love! 🦾
create a single-layer template from the open-source side.you just need to replace the authentication.
And can I use the CMS module (that has the blog capabilities) with it?
I haven´t had time to look at this again so don´t close this!
Create a template that can be used for super cheep hosting on Azure Static Web were it can use Azure Functions to authenticate and get static data from Sqlite (or in memory read from file?).
I for example want to switch from my Ghost.org blog to that and just for my personal blog and want to use abp.io CMS Blogging capabilities.
For this I only need to log in (password can be static in the Azure Functions and the blog could come from Sqlite
Let Suite respect the partial keyword so we can at least create our own partial classes where our code is safe from being overridden by the tool.
Now it just deletes everything and overrides the whole class so the Suite generation fails because the partial keyword is removed.
If Suite can´t be less intrusive (pasting new code over everything) and just update the code I would personally I would like for you to implement partial design for the AppService, Managers and repository classes where people are mostly changing and updating code.
Suite is just a one-time-creation tool and that is hindering its full potentials and usefulness!
Add One-to-Many functionality to Suite (its not there today) and add something about it in the documentation please!
I even created a question on the topic to get an answer, Please make creating One-to-many relationship in Suite work!
I tried to replicate the issue from a new 7.3.2 project but that didn´t work (there is no error) so it must be related to something being missed from the migration (I only used the update button)
Steps:
ScrapingContent.json
{
"Id": "4ad61650-48d0-4212-80e1-a18b8762397a",
"Name": "ScrapingContent",
"OriginalName": "ScrapingContent",
"NamePlural": "ScrapingContents",
"DatabaseTableName": "ScrapingContents",
"Namespace": "ScrapingContents",
"BaseClass": "AuditedEntity",
"MenuIcon": "file-alt",
"PrimaryKeyType": "Guid",
"IsMultiTenant": false,
"CheckConcurrency": true,
"ShouldCreateUserInterface": true,
"ShouldCreateBackend": true,
"ShouldExportExcel": true,
"ShouldAddMigration": true,
"ShouldUpdateDatabase": false,
"CreateTests": true,
"Properties": [
{
"Id": "d8fdc266-5d2f-4a81-8da5-e361cf427a8f",
"Name": "Html",
"Type": "string",
"EnumType": "",
"EnumNamespace": "",
"EnumAngularImport": "shared/enums",
"EnumFilePath": null,
"DefaultValue": null,
"IsNullable": false,
"IsRequired": false,
"IsTextArea": false,
"MinLength": null,
"MaxLength": null,
"SortOrder": 0,
"SortType": 0,
"Regex": "",
"EmailValidation": false,
"ShowOnList": true,
"ShowOnCreateModal": true,
"ShowOnEditModal": true,
"ReadonlyOnEditModal": false,
"EnumValues": null,
"IsSelected": true,
"OrdinalIndex": 0
},
{
"Id": "ffda4627-bf56-4e0d-8bb4-37ece256656d",
"Name": "DateScraped",
"Type": "DateTime",
"EnumType": "",
"EnumNamespace": "",
"EnumAngularImport": "shared/enums",
"EnumFilePath": null,
"DefaultValue": null,
"IsNullable": false,
"IsRequired": false,
"IsTextArea": false,
"MinLength": null,
"MaxLength": null,
"SortOrder": 0,
"SortType": 0,
"Regex": "",
"EmailValidation": false,
"ShowOnList": true,
"ShowOnCreateModal": true,
"ShowOnEditModal": true,
"ReadonlyOnEditModal": true,
"EnumValues": null,
"IsSelected": true,
"OrdinalIndex": 0
}
],
"NavigationProperties": [
{
"EntityNameWithDuplicationNumber": "ScrapingUrl",
"EntitySetNameWithDuplicationNumber": "ScrapingUrls",
"ReferencePropertyName": "ScrapingUrl",
"UiPickType": "Dropdown",
"IsRequired": true,
"Name": "ScrapingUrlId",
"DisplayProperty": "Name",
"Namespace": "TestNotWorking.ScrapingUrls",
"EntityName": "ScrapingUrl",
"EntitySetName": "ScrapingUrls",
"DtoNamespace": "TestNotWorking.ScrapingUrls",
"DtoEntityName": "ScrapingUrlDto",
"Type": "Guid"
}
],
"NavigationConnections": [],
"PhysicalFileName": "ScrapingContent.json"
}
ScrapingUrl.json
{
"Id": "7b77295e-508a-4b0e-9d7e-e7caf2088cce",
"Name": "ScrapingUrl",
"OriginalName": "ScrapingUrl",
"NamePlural": "ScrapingUrls",
"DatabaseTableName": "ScrapingUrls",
"Namespace": "ScrapingUrls",
"BaseClass": "AuditedEntity",
"MenuIcon": "file-alt",
"PrimaryKeyType": "Guid",
"IsMultiTenant": false,
"CheckConcurrency": true,
"ShouldCreateUserInterface": true,
"ShouldCreateBackend": true,
"ShouldExportExcel": false,
"ShouldAddMigration": true,
"ShouldUpdateDatabase": false,
"CreateTests": true,
"Properties": [
{
"Id": "b459187f-9946-4c43-b804-21f6637b16b4",
"Name": "Name",
"Type": "string",
"EnumType": "",
"EnumNamespace": "",
"EnumAngularImport": "shared/enums",
"EnumFilePath": null,
"DefaultValue": null,
"IsNullable": false,
"IsRequired": false,
"IsTextArea": false,
"MinLength": null,
"MaxLength": 52,
"SortOrder": 0,
"SortType": 0,
"Regex": "",
"EmailValidation": false,
"ShowOnList": true,
"ShowOnCreateModal": true,
"ShowOnEditModal": true,
"ReadonlyOnEditModal": false,
"EnumValues": null,
"IsSelected": true,
"OrdinalIndex": 0
},
{
"Id": "0f10d82b-e7b3-4b64-aba6-af46b2df5f03",
"Name": "Url",
"Type": "string",
"EnumType": "",
"EnumNamespace": "",
"EnumAngularImport": "shared/enums",
"EnumFilePath": null,
"DefaultValue": null,
"IsNullable": false,
"IsRequired": false,
"IsTextArea": false,
"MinLength": null,
"MaxLength": 1024,
"SortOrder": 0,
"SortType": 0,
"Regex": "",
"EmailValidation": false,
"ShowOnList": true,
"ShowOnCreateModal": true,
"ShowOnEditModal": true,
"ReadonlyOnEditModal": false,
"EnumValues": null,
"IsSelected": true,
"OrdinalIndex": 0
},
{
"Id": "d1752e3a-2d18-45a2-91ac-5b1d0f5505f5",
"Name": "IsActive",
"Type": "bool",
"EnumType": "",
"EnumNamespace": "",
"EnumAngularImport": "shared/enums",
"EnumFilePath": null,
"DefaultValue": "true",
"IsNullable": false,
"IsRequired": false,
"IsTextArea": false,
"MinLength": null,
"MaxLength": null,
"SortOrder": 0,
"SortType": 0,
"Regex": "",
"EmailValidation": false,
"ShowOnList": true,
"ShowOnCreateModal": true,
"ShowOnEditModal": true,
"ReadonlyOnEditModal": false,
"EnumValues": null,
"IsSelected": true,
"OrdinalIndex": 0
},
{
"Id": "38718158-9a68-4251-acda-898e4e4eb3ca",
"Name": "LastError",
"Type": "string",
"EnumType": "",
"EnumNamespace": "",
"EnumAngularImport": "shared/enums",
"EnumFilePath": null,
"DefaultValue": null,
"IsNullable": false,
"IsRequired": false,
"IsTextArea": true,
"MinLength": null,
"MaxLength": 1024,
"SortOrder": 0,
"SortType": 0,
"Regex": "",
"EmailValidation": false,
"ShowOnList": true,
"ShowOnCreateModal": true,
"ShowOnEditModal": true,
"ReadonlyOnEditModal": false,
"EnumValues": null,
"IsSelected": true,
"OrdinalIndex": 0
}
],
"NavigationProperties": [],
"NavigationConnections": [],
"PhysicalFileName": "ScrapingUrl.json"
}
There is btw another error in regarding "required" and that is that if you mark a property as required the tests will also fail!