Hi,
Thanks for the details and screenshots.
These screenshots point to two separate things:
tenantId."tenantId": null.In ABP, a new identity user is created with the current tenant context. So when tenantId is null, the request is being handled in host context in production.
The later maximum of 5 users dialog is a different check. I verified this from the source:
Identity.MaxUserCount feature.0, which means unlimited.5, that value was explicitly set for the current context.Please check these from the host side:
app.UseMultiTenancy() is enabled and placed after app.UseAuthentication() as in the startup templates.tenantId: null, the API is currently not resolving the tenant there.Features dialog and check Identity -> Maximum user count.Maximum user count to 0.Also, if the request is still running as host in production, the 5 value may be coming from the host feature/configuration instead of the tenant. In that case, also check Settings -> Feature Management -> Manage Host Features.
If it still continues, please share:
/api/identity/users endpoint.Identity -> Maximum user count value for that tenant or its edition.Best regards,
ABP Support Team
Hi,
Thanks for the details.
Yes, this scenario is possible without multi-tenancy.
SecondaryUI.web should be treated as another UI/remote-client application. The File Management HTTP endpoints and the actual file storage are on the server side, so the BLOB provider configuration for FileManagementContainer should be done in HttpApi.Host, not in SecondaryUI.web.To make the project split clearer:
SecondaryUI.web is MVC/Razor Pages, Blazor, or another UI setup, so we should not prescribe one fixed package list without seeing the solution structure.FileManagementContainer BLOB provider configuration should exist in the application that exposes the File Management HTTP API and stores the files, which in your case is HttpApi.Host.SecondaryUI.web, you should use the UI package for the framework you are using, and if this application works as a remote client, it should consume the File Management remote API through the client/proxy side (Volo.FileManagement.HttpApi.Client or the equivalent proxies added by the module installation).Volo.FileManagement.Web for MVC/Razor Pages and Volo.FileManagement.Blazor for Blazor, while remote API client proxies are provided by Volo.FileManagement.HttpApi.Client.SecondaryUI.web should have no File Management references; it can have the UI/client-side references. The important point is that storage provider configuration and actual persistence behavior belong to the host side.Volo.FileManagement.Web alone is generally not enough when the real backend is on another server application. The module's JavaScript proxies and upload/download URLs target the current application's root (abp.appPath / /api/file-management/...).Volo.FileManagement.Web + Volo.FileManagement.HttpApi + Volo.FileManagement.HttpApi.Client together in SecondaryUI.web.SecondaryUI.web receive the requests from the module UI, and those controllers can delegate to the remote application through the HttpApi.Client implementations.For your scenario, the recommended approach is:
SecondaryUI.web use the existing File Management APIs/proxies exposed by the host.There is also an important point for your follow-up question about permissions:
10.2.So, to limit a user to only their own folder, the usual design is to:
For the storage quota part:
So, for your original questions:
HttpApi.Host, and use SecondaryUI.web as the UI/client side that consumes the File Management functionality from the host.If you want, we can also share a recommended server-side design for automatically creating the user's root folder, granting the correct resource permissions, and enforcing a per-user upload quota.
Best regards,
ABP Support Team
Hi,
Thanks, yes, this is the important part of the error:
Invalid object name 'AIManagementApplicationAIProviders'So this is not an OpenAI package problem and it is not a client-proxy problem.
SQL Server is saying that the AIManagementApplicationAIProviders table does not exist in the database currently used by HttpApi.Host.
At the same time, your screenshot shows that dbo.AIManagementApplicationAIProviders and dbo.AIManagementWorkspaces already exist.
Because of that, the two strongest possibilities are:
HttpApi.Host is connected to a different database than the one shown in your screenshot.As a quick confirmation, please go to your .EntityFrameworkCore project folder and run:
dotnet ef migrations add CheckAiManagementTables
Then check the generated migration:
CreateTable(...) for AI Management tables such as AIManagementApplicationAIProviders, then AI Management tables are still missing from your application's migration set. In that case, apply that migration and update the database.HttpApi.Host is pointing to a different database.Please also check these values in *.HttpApi.Host carefully:
ConnectionStrings:DefaultConnectionStrings:AIManagementAI Management uses the AIManagement connection string name. If ConnectionStrings:AIManagement is defined, ABP uses it first. If it is not defined, it falls back to Default.
So if ConnectionStrings:AIManagement points to another database, please either:
dbo.AIManagementApplicationAIProviders, orDefault.Since your solution is multi-tenant and uses separate tenant schema/database, please make sure you are checking the exact database used by HttpApi.Host startup, not only a tenant database.
To verify quickly, run this against the exact database used by HttpApi.Host:
SELECT DB_NAME() AS CurrentDatabase;
SELECT name FROM sys.tables WHERE name IN ('AIManagementApplicationAIProviders', 'AIManagementWorkspaces');
After checking the migration result and the connection strings, restart HttpApi.Host and test again.
If the problem still continues, please share:
Default and AIManagementBest regards,
ABP Support Team
Hi,
Thanks for the details.
Based on the behavior you described, this looks more like a server-side AI Management setup/database issue than an OpenAI API issue.
The main reason is:
So when the page throws a generic AbpRemoteCallException and the provider list is also empty, the usual cause is that the AI Management module was added but its database changes and/or startup registration were not completed yet.
In your case, the strongest clue is that the solution was created with --skip-migration --skip-migrator.
Please check these steps:
Create and apply a new EF Core migration after importing Volo.AIManagement.
If the AI Management tables were not created yet, the /api/ai-management/workspaces request will fail with this kind of generic remote call exception.
Make sure Volo.AIManagement.OpenAI is installed on the server startup side of the application, not only in a UI/client project.
The available providers are collected from registered factories at startup. If the OpenAI module is not loaded by the startup application, the provider dropdown will stay empty.
Restart the application after installing the provider package and after applying the migration.
Check the *.HttpApi.Host logs while opening the Workspaces page.
The real exception should be written there. If the migration is missing, you will typically see the actual SQL/table-related error on the host side.
So the first thing we recommend is:
HttpApi.Host,OpenAI appears in the provider dropdown.If the problem still continues after that, please share these details:
HttpApi.Host log,Volo.AIManagement.OpenAI to.Best regards,
ABP Support Team
Hi,
Thanks for sharing the backend log.
The key part in your log is this exception:
IStudioHub/HeartbeatAsync -> Volo.Abp.Studio.Connectivity.StudioBackendHub.NotifyHeartbeatAsync -> System.NullReferenceException
This indicates the crash is happening inside ABP Studio's own internal monitoring/heartbeat pipeline while Studio is loading or tracking the linked applications. In other words, this does not look like an error thrown by your microservice solution itself.
We also checked the current released rel-2.2 source and the same heartbeat-forwarding path is still present there, so at the moment this looks like a Studio regression rather than a known configuration mistake in your solution.
A few important notes:
2.1.4 is the last ABP Studio version mapped to ABP 10.0.1, while 2.2.x is mapped to 10.1.x startup templates.NullReferenceException, the strongest evidence still points to a Studio-side bug/regression.For now, the safest workaround is to continue using 2.1.4 for this workspace until we have a fix or a confirmed newer build that addresses it.
To move this forward, please share these additional files/details so we can reproduce and report it more precisely:
.abpsln file for this workspace.~/Library/Logs/DiagnosticReports/.Once we have those artifacts, we can continue the investigation with the Studio team.
Best regards,
ABP Support Team
Hi,
Thanks for your patience on this one.
We re-checked the current React Native / Expo template against the latest available ABP Studio template stack and compared it with the current documentation and template source.
One important clarification first: the screenshot in the ticket does not prove that ABP Studio 2.1.8 was already installed. It only shows that 2.1.8 was available as an update, so the safest conclusion is that the older report came from an earlier 2.1.x / ABP 10.0.x template line, not necessarily from 2.1.8 itself.
After re-validating the current line:
CreateUpdateTenant / TenantsScreen references and the normalize-css-color resolution problem, are not reproduced in the current template source or in a fresh generated solution.https://localhost flow for local web testing, and the generated backend/app settings include React Native-related localhost entries for that case.So, regarding the original blockers: they do appear to be addressed in the current template line.
That said, we also do not want to overstate the current state as completely problem-free yet.
In our fresh validation:
yarn install succeeded,npm install produced a peer dependency resolution error in our environment,tsc --noEmit check.Because of that, the most accurate status today is:
If you decide to re-check it on your side, we recommend testing with the latest ABP Studio 2.2.x line and following the current React Native documentation / README flow.
If you still hit a blocker on the latest template, please send us these details and we can verify the exact case directly:
react-native folderBest regards,
ABP Support Team
Hi again,
I saw it in the internal development roadmap and plans. It's not a fully announced feature. Currently I don't have enough information for sharing any more information at the moment and it's not a mature feature currently and not clear which ABP Studio version will be affected not clear so far. You can track official roadmap and announcements.
Best regards,
ABP Support Team
Hi,
Thanks for the detailed feedback and for sharing the screenshots.
Based on the current ABP documentation and theme implementation, here is the current situation:
About the mobile navigation customization in your screenshots:
So, if your priority is lightweight + easier customization, the most practical options today are:
If you want, please let us know whether your project is Angular, Blazor, or MVC / Razor Pages. Then we can suggest the most maintainable customization path for your exact stack.
Best regards,
ABP Support Team
Hi,
Thanks for the detailed report and the clear reproduction notes.
We verified that this is a real issue in ABP 10.1.1, not just a tsconfig problem.
The root cause is that, in the Angular side, ExtensibleLimitedResultRequestDto was inheriting from ExtensibleEntityDto, which brings an id?: string property. In the Identity Pro contracts, GetIdentityUsersInput also declares its own nullable Id property (Guid? on the .NET side), so the generated Angular proxy ends up with id?: string | null. Under strict TypeScript checking, that becomes an invalid interface extension because the child type is wider than the base type.
So your diagnosis is correct: the mismatch is in the ABP Angular DTO hierarchy, and strict/isolatedModules only make the existing type incompatibility visible.
We also verified that a fix has already been prepared for this case. The planned change is to make ExtensibleLimitedResultRequestDto extend ExtensibleObject instead of ExtensibleEntityDto, which removes the incorrect inherited id member from that request DTO chain. This is being tracked here:
Until the patched package is released, the practical workaround is to keep applying the generated proxy adjustment on your side after proxy generation, for example by removing the generated id member from GetIdentityUsersInput or otherwise aligning that generated type with the fixed hierarchy.
Once the fix is included in the next relevant release, regenerating the Angular proxies should no longer produce this conflict.
You can follow the release status here:
Best regards,
ABP Support Team
Hi,
Thanks for the detailed screenshots.
This does not look like a normal usage mistake on your side. For the Angular module installation generated with ABP Studio 2.1.4, there was a template issue in the generated Angular integration.
From your screenshots, we can see that:
RagEngine menu item is created,app.routes.ts,RagEngineService.sample() when the page opens,404.The important point is that the login redirect itself is expected when the route is protected. The actual problem is the 404 that happens after that.
For this template, the Angular side should use these values:
rag-engine route should include canActivate: [authGuard]./api/rag-engine/example instead of /api/rag-engine/sample.This issue has already been fixed in newer ABP Studio templates, starting from 2.1.5.
So, for your existing solution, please do one of these:
2.1.5 or later and regenerate/reinstall the module,Also, please make sure the Angular library import used in app.routes.ts is still resolvable from angular/tsconfig.json, and that the module's config provider is still registered in app.config.ts. Those entries are normally added automatically during installation.
If it still does not work after that, please share these 3 items and we can check the remaining difference directly:
rag-engine route entry from angular/src/app/app.routes.ts,sample() method from modules/ragengine/angular/projects/rag-engine/src/lib/services/rag-engine.service.ts,Best regards,
ABP Support Team