@DanielAndreasen is it v3.1? (v3.3 will release tomorrow) is it Angular?
It looks like a IDS4 configuration issue.
did you run the DbMigrator project? If you are using the same database as your previous projects you may get this exception. Be sure that you create a new database with the DbMigrator project.
This is the solution structure of the SaaS package
This module package is not a final application. You need to include this package in your final app. You can create a final app for each module (to be able to publish as individually) or you can put them all in a monolith app. In your case I think you want your SaaS package as a separate app.
You can create a new HttpApi.Host
project using HttpApi
project and you can put this app behind the Gateway (so that you can rate limit or load balance your API)
Host.Web
and Blazor
projects are the applications. These project has UI pages.
If you are using Angular then check out https://docs.abp.io/en/commercial/latest/ui/angular/dynamic-form-extensions
@Mohammad this document explains your question in details https://docs.abp.io/en/abp/latest/Best-Practices/Module-Architecture
@developer1 this is a know bug and it's already fixed. you can get the fixed version when the new release will be published
hi,
Suite works with the same version of your project. so if you updated suite to v3.3 then you also need to update your project to v3.3
there won't be a combobox even if you implement this. As I mentioned, this feature will come in the next releases. (4.1) what you can do is; you can replace the New Organisation razor page.
This document explains how to customize UI => https://docs.abp.io/en/abp/latest/UI/AspNetCore/Customization-User-Interface
If you create your own view in the Pages/Identity/OrganizationUnits
directory (as embedded resource) it'll overwrite the existing page
Create CreateModal.cshtml
file in your web project under Pages/Identity/OrganizationUnits/CreateModal.cshtml
Add the below code to your CreateModal.cshtml
and make your customizations
CreateModal.cshtml
@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
@using Volo.Abp.Identity.Localization
@using Volo.Abp.Identity.Web.Pages.Identity.OrganizationUnits
@using Volo.Abp.Localization
@using Volo.Abp.ObjectExtending
@model CreateModalModel
@inject IHtmlLocalizer<IdentityResource> L
@inject IStringLocalizerFactory StringLocalizerFactory
@{
Layout = null;
}
<form asp-page="/Identity/OrganizationUnits/CreateModal" autocomplete="off">
<abp-modal>
<abp-modal-header title="@L["NewOrganizationUnit"].Value"></abp-modal-header>
<abp-modal-body>
<abp-input asp-for="OrganizationUnit.ParentId"/>
<abp-input asp-for="OrganizationUnit.DisplayName"/>
@foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties<CreateModalModel.OrganizationUnitInfoModel>())
{
if (propertyInfo.Type.IsEnum)
{
<abp-select asp-for="OrganizationUnit.ExtraProperties[propertyInfo.Name]"
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)">
</abp-select>
}
else
{
<abp-input type="@propertyInfo.GetInputType()"
asp-for="OrganizationUnit.ExtraProperties[propertyInfo.Name]"
label="@propertyInfo.GetLocalizedDisplayName(StringLocalizerFactory)"
asp-format="@propertyInfo.GetInputFormatOrNull()"
value="@propertyInfo.GetInputValueOrNull(Model.OrganizationUnit.ExtraProperties[propertyInfo.Name])"/>
}
}
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel | AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</form>
CreateModal.cshtml.cs
public class CreateModalModel : IdentityPageModel
{
[BindProperty]
public OrganizationUnitInfoModel OrganizationUnit { get; set; }
protected IOrganizationUnitAppService OrganizationUnitAppService { get; }
public CreateModalModel(IOrganizationUnitAppService organizationUnitAppService)
{
OrganizationUnitAppService = organizationUnitAppService;
OrganizationUnit = new OrganizationUnitInfoModel();
}
public virtual Task OnGetAsync(Guid? parentId)
{
OrganizationUnit.ParentId = parentId;
return Task.CompletedTask;
}
public virtual async Task<IActionResult> OnPostAsync()
{
ValidateModel();
var input = ObjectMapper.Map<OrganizationUnitInfoModel, OrganizationUnitCreateDto>(OrganizationUnit);
await OrganizationUnitAppService.CreateAsync(input);
return NoContent();
}
public class OrganizationUnitInfoModel : ExtensibleObject
{
[HiddenInput]
public Guid? ParentId { get; set; }
[Required]
public string DisplayName { get; set; }
}
}
hi did you have a chance to look at https://docs.abp.io/en/abp/latest/UI/Angular/Component-Replacement
thank you for your feedback. we have created an issue. also your question credit has been refunded.
Internal issue no: 3743