Activities of "rafael.gonzales"

There is still a critical issue in ABP Suite that won't let you generate Entities with one-on-one relationships.

If I create a RelatedEntities in ABP Suite with any property and generate it and then create a MasterEntity with a relationship of 1-1 with RelatedEntities and try to generate it using ABP Suite. I will get the following error.

Related to this. If you create a Master-Detail Entity, the detail entity doesn't generate any test project or it's added to the master entity test project.

There is still a critical issue in ABP Suite that won't let you generate Entities with one-on-one relationships.

If I create a RelatedEntities in ABP Suite with any property and generate it and then create a MasterEntity with a relationship of 1-1 with RelatedEntities and try to generate it using ABP Suite. I will get the following error.

Found another bug in ABP.Suite 8.0.0.rc-3

When you try to generate an Entity with a one-to-many relationship. It tries to locate a test class in the wrong place.

It tries to locate in Demo.TestBase folder instead of Demo.Domain.Tests folder

Could not find a part of the path 'C:\Users\User\Documents\GitHub\demo\demo-web-mvc\modules\Demo\test\Demo.TestBase\Demo\DemoDataSeedContributor.cs'.
System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\User\Documents\GitHub\demo\demo-web-mvc\modules\Demo\test\Demo.TestBase\Demo\DemoDataSeedContributor.cs'.
   at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
   at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
   at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
   at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
   at System.IO.StreamReader.ValidateArgsAndOpenPath(String path, Encoding encoding, Int32 bufferSize)
   at System.IO.File.OpenText(String path)
   at Volo.Abp.IO.FileHelper.ReadAllTextAsync(String path) in D:\ci\Jenkins\workspace\abp-volo-release\abp\framework\src\Volo.Abp.Core\Volo\Abp\IO\FileHelper.cs:line 59
   at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.UnitTestCommandCommand.kKU8AbY4LZ(String  )
   at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.UnitTestCommandCommand.ThA8R0QUdt(TestDataObject  , Int32  )
   at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.UnitTestCommandCommand.OYG8Wvo7Rq()
   at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.UnitTestCommandCommand.ExecuteAsync(CrudPageCommandOptions options)
   at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.CommandManager.ExecuteAllAsync(CrudPageCommandOptions options)
   at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.CrudPageGenerator.GenerateAsync(EntityModel entity, Solution solution, EntityModel masterEntity)
   at Volo.Abp.Suite.Controllers.CrudPageGeneratorController.SaveAndGenerateEntityAsync(Guid solutionId, EntityModel entity)
   at lambda_method1948(Closure, Object)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)

I have a situation with ABP Suite. Even when you change the default order of a newly created Entity. It doesn't generate any code related to the Sorting of the selected property. Could you please review that?

In the new Master | Detail functionality.

  • When you create and generate a Child Entity, in the Demo.Domain project, specifically in the Master Entity definition. The namespace of the child entity is not added when a new child entity is generated.
  • In Demo.Application.Contracts happen some sort of the same issue, in the Master Entity Dto, the references added in the USING area it's the PROJECT_NAME.PLURAL_NAME instead of PROJECT_NAME.NAMESPACE defined in the Entity

In the new Master | Detail functionality. The "Export to Excel" feature doesn't include Child entities in the XLSX.

Issue in the generated Master | Detail

Can you consider moving the "Add new child entity" button to the left instead of being aligned to the right? It will help with the visibility of the button.

in ABP Suite 8.0.0.rc-3

There is another issue in the generated Index.js

In the Init DataGrid for child entities, the viewURL and scriptUrl doesn't include the Project Name.

Using the template system to temporary fix this.

In template: Frontend.Mvc.Page.Partials.index.js_InitChildDataGridMethod.txt Now:

    function init%%child-entity-name%%Grid(data) {
        if(!abp.auth.isGranted("%%only-project-name%%.%%child-entity-name-plural%%")) {
            return;
        }
        
        var %%entity-name-camelcase%%Id = data%%<if:HasNavigationProperties>%%.%%entity-name-camelcase%%%%</if:HasNavigationProperties>%%.id;

        %%<if:IsTieredArchitecture>%%var %%child-entity-name-camelcase%%Service = window.%%solution-namespace-camelcase%%.controllers.%%child-entity-namespace-camelcase%%.%%child-entity-name-camelcase%%;%%</if:IsTieredArchitecture>%%
        %%<if:IsNonTieredArchitecture>%%var %%child-entity-name-camelcase%%Service = window.%%solution-namespace-camelcase%%.%%child-entity-namespace-camelcase%%.%%<if:IsModule>%%%%child-entity-name-camelcase%%%%</if:IsModule>%%%%<if:IsNonModule>%%%%child-entity-name-plural-camelcase%%%%</if:IsNonModule>%%;%%</if:IsNonTieredArchitecture>%%

        var %%child-entity-name-camelcase%%CreateModal = new abp.ModalManager({
            viewUrl: abp.appPath + "%%child-entity-name-plural%%/CreateModal",
            scriptUrl: abp.appPath + "Pages/%%child-entity-name-plural%%/createModal.js",
            modalClass: "%%child-entity-name-camelcase%%Create"
        });

        var %%child-entity-name-camelcase%%EditModal = new abp.ModalManager({
            viewUrl: abp.appPath + "%%child-entity-name-plural%%/EditModal",
            scriptUrl: abp.appPath + "Pages/%%child-entity-name-plural%%/editModal.js",
            modalClass: "%%child-entity-name-camelcase%%Edit"
        });

        var %%child-entity-name-camelcase%%DataTable = $("#%%child-entity-name-plural%%Table-" + %%entity-name-camelcase%%Id).DataTable(abp.libs.datatables.normalizeConfiguration({
            processing: true,
            serverSide: true,
            paging: true,
            searching: false,
            scrollX: true,
            autoWidth: true,
            scrollCollapse: true,
            order: [[1, "asc"]],
            ajax: abp.libs.datatables.createAjax(%%child-entity-name-camelcase%%Service.getList%%child-navigation-properties%%By%%entity-name%%Id, {
                %%entity-name-camelcase%%Id: %%entity-name-camelcase%%Id,
                maxResultCount: 5
            }),
            columnDefs: [
                {
                    rowAction: {
                        items:
                            [
                                {
                                    text: l("Edit"),
                                    visible: abp.auth.isGranted('%%only-project-name%%.%%child-entity-name-plural%%.Edit'),
                                    action: function (data) {
                                        %%child-entity-name-camelcase%%EditModal.open({
                                            id: data.record%%include-navigation-property%%.id
                                        });
                                    }
                                },
                                {
                                    text: l("Delete"),
                                    visible: abp.auth.isGranted('%%only-project-name%%.%%child-entity-name-plural%%.Delete'),
                                    confirmMessage: function () {
                                        return l("DeleteConfirmationMessage");
                                    },
                                    action: function (data) {
                                        %%child-entity-name-camelcase%%Service.delete(data.record%%include-navigation-property%%.id)
                                            .then(function () {
                                                abp.notify.info(l("SuccessfullyDeleted"));
                                                %%child-entity-name-camelcase%%DataTable.ajax.reloadEx();
                                            });
                                    }
                                }
                            ]
                    },
                    width: "1rem"
                },
                %%index-js-TableProperties%%%%table-navigation-property-fields%%
            ]
        }));

        %%child-entity-name-camelcase%%CreateModal.onResult(function () {
            %%child-entity-name-camelcase%%DataTable.ajax.reloadEx();
        });

        %%child-entity-name-camelcase%%EditModal.onResult(function () {
            %%child-entity-name-camelcase%%DataTable.ajax.reloadEx();
        });

        $("#New%%child-entity-name%%Button").click(function (e) {
            e.preventDefault();
            
            %%child-entity-name-camelcase%%CreateModal.open({
                %%entity-name-camelcase%%Id: $(this).data("%%entity-name-camelcase%%-id")
            });
        });
    }

Should be:

function init%%child-entity-name%%Grid(data) {
    if(!abp.auth.isGranted("%%only-project-name%%.%%child-entity-name-plural%%")) {
        return;
    }
    
    var %%entity-name-camelcase%%Id = data%%<if:HasNavigationProperties>%%.%%entity-name-camelcase%%%%</if:HasNavigationProperties>%%.id;

    %%<if:IsTieredArchitecture>%%var %%child-entity-name-camelcase%%Service = window.%%solution-namespace-camelcase%%.controllers.%%child-entity-namespace-camelcase%%.%%child-entity-name-camelcase%%;%%</if:IsTieredArchitecture>%%
    %%<if:IsNonTieredArchitecture>%%var %%child-entity-name-camelcase%%Service = window.%%solution-namespace-camelcase%%.%%child-entity-namespace-camelcase%%.%%<if:IsModule>%%%%child-entity-name-camelcase%%%%</if:IsModule>%%%%<if:IsNonModule>%%%%child-entity-name-plural-camelcase%%%%</if:IsNonModule>%%;%%</if:IsNonTieredArchitecture>%%

    var %%child-entity-name-camelcase%%CreateModal = new abp.ModalManager({
        viewUrl: abp.appPath + "%%only-project-name%%/%%child-entity-name-plural%%/CreateModal",
        scriptUrl: abp.appPath + "Pages/%%only-project-name%%/%%child-entity-name-plural%%/createModal.js",
        modalClass: "%%child-entity-name-camelcase%%Create"
    });

    var %%child-entity-name-camelcase%%EditModal = new abp.ModalManager({
        viewUrl: abp.appPath + "%%only-project-name%%/%%child-entity-name-plural%%/EditModal",
        scriptUrl: abp.appPath + "Pages/%%only-project-name%%/%%child-entity-name-plural%%/editModal.js",
        modalClass: "%%child-entity-name-camelcase%%Edit"
    });

    var %%child-entity-name-camelcase%%DataTable = $("#%%child-entity-name-plural%%Table-" + %%entity-name-camelcase%%Id).DataTable(abp.libs.datatables.normalizeConfiguration({
        processing: true,
        serverSide: true,
        paging: true,
        searching: false,
        scrollX: true,
        autoWidth: true,
        scrollCollapse: true,
        order: [[1, "asc"]],
        ajax: abp.libs.datatables.createAjax(%%child-entity-name-camelcase%%Service.getList%%child-navigation-properties%%By%%entity-name%%Id, {
            %%entity-name-camelcase%%Id: %%entity-name-camelcase%%Id,
            maxResultCount: 5
        }),
        columnDefs: [
            {
                rowAction: {
                    items:
                        [
                            {
                                text: l("Edit"),
                                visible: abp.auth.isGranted('%%only-project-name%%.%%child-entity-name-plural%%.Edit'),
                                action: function (data) {
                                    %%child-entity-name-camelcase%%EditModal.open({
                                        id: data.record%%include-navigation-property%%.id
                                    });
                                }
                            },
                            {
                                text: l("Delete"),
                                visible: abp.auth.isGranted('%%only-project-name%%.%%child-entity-name-plural%%.Delete'),
                                confirmMessage: function () {
                                    return l("DeleteConfirmationMessage");
                                },
                                action: function (data) {
                                    %%child-entity-name-camelcase%%Service.delete(data.record%%include-navigation-property%%.id)
                                        .then(function () {
                                            abp.notify.info(l("SuccessfullyDeleted"));
                                            %%child-entity-name-camelcase%%DataTable.ajax.reloadEx();
                                        });
                                }
                            }
                        ]
                },
                width: "1rem"
            },
            %%index-js-TableProperties%%%%table-navigation-property-fields%%
        ]
    }));

    %%child-entity-name-camelcase%%CreateModal.onResult(function () {
        %%child-entity-name-camelcase%%DataTable.ajax.reloadEx();
    });

    %%child-entity-name-camelcase%%EditModal.onResult(function () {
        %%child-entity-name-camelcase%%DataTable.ajax.reloadEx();
    });

    $("#New%%child-entity-name%%Button").click(function (e) {
        e.preventDefault();
        
        %%child-entity-name-camelcase%%CreateModal.open({
            %%entity-name-camelcase%%Id: $(this).data("%%entity-name-camelcase%%-id")
        });
    });
}

in ABP Suite 8.0.0.rc-3

In the Master Controller file. The path of the generated _ChildDataGrids.cshtml is wrong. It doesn't include the Module name so It will fail

Now

public class DemosController : AbpController
{
    [HttpGet]
    public virtual async Task<PartialViewResult> ChildDataGrid(Guid demoId)
    {
        return PartialView("~/Pages/Shared/Guias/_ChildDataGrids.cshtml", demoId);
    }
}

Should be

public class DemosController : AbpController
{
    [HttpGet]
    public virtual async Task<PartialViewResult> ChildDataGrid(Guid demoId)
    {
        return PartialView("~/Pages/MYMODULE/Shared/Guias/_ChildDataGrids.cshtml", demoId);
    }
}

in ABP Suite 8.0.0.rc-3

When you generate code for a DETAIL entity. The namespace added in the MASTER entity code is not the one defined in the DETAIL.json file instead It uses the following structure [PROJECT_NAME].[DETAIL_PLURAL_NAME].

It should be [PROJECT_NAME].[DETAIL_NAMESPACE]

Note: In some MASTER entities. The child namespace is missing.

Showing 111 to 120 of 177 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.1.0-preview. Updated on October 30, 2025, 06:33