Activities of "LiSong"

I have a hangfilre job: public class HourlyBackgroundWorker : HangfireBackgroundWorkerBase { private readonly ILogger<HourlyBackgroundWorker> _logger; private readonly IUserFileFeedbackService _userFileFeedbackService; private readonly IDataConnectionUserAnswerService _dataConnectionUserAnswerService; private readonly IDataConnectionUserAnswerRepository _dataConnectionUserAnswerRepository; private readonly IFeedbackFilesUpdaterService _feedbackFilesUpdaterService;

public HourlyBackgroundWorker(ILogger&lt;HourlyBackgroundWorker&gt; logger, 
    IUserFileFeedbackService userFileFeedbackService,
    IDataConnectionUserAnswerService dataConnectionUserAnswerService,
    IDataConnectionUserAnswerRepository dataConnectionUserAnswerRepository,
    IFeedbackFilesUpdaterService feedbackFilesUpdaterService)
{
    RecurringJobId = nameof(HourlyBackgroundWorker);
    CronExpression = Cron.Hourly();
    _logger = logger;
    _userFileFeedbackService = userFileFeedbackService;
    _dataConnectionUserAnswerService = dataConnectionUserAnswerService;
    _dataConnectionUserAnswerRepository = dataConnectionUserAnswerRepository;
    _feedbackFilesUpdaterService = feedbackFilesUpdaterService;
}

public override async Task DoWorkAsync(CancellationToken cancellationToken = default)
{
    using var uow = LazyServiceProvider.LazyGetRequiredService&lt;IUnitOfWorkManager&gt;().Begin();
    _logger.LogInformation("Hangfire:HourlyBackgroundWorker::UpdateFeedbacks");
    await _feedbackFilesUpdaterService.UpdateAllFeedbacksAsync();
}

Is Hangfire multi-tenant aware by default? does this hourly job runs for each tenant? i.e. runs once per tenant?

Question

I need to use locking

I wrote a function and then called it three time in order to test it

cs
public async Task<IActionResult> InsertFormAnswerJson(Guid id, [FromBody] JsonElement json)
{
    var key = $"test-{id}";
    await _submissionLockCache.GetOrAddAsync(key, async () =>
    {
        // Simulate some processing
        await Task.Delay(100);
        return "test-value";
    }, () => new DistributedCacheEntryOptions
    {
        AbsoluteExpiration = Constants.RedisConstants.CacheExpiration
    });
   var value = await _submissionLockCache.GetAsync(key);
    var jsonString = json.GetRawText();
    var currentUserId = _currentUser.Id;

    if (currentUserId == null)
    {
        return Unauthorized();
    }

    var lockKey = $"form-submission-lock:{currentUserId}:{id}";

    await using var handle =
        await _distributedLock.TryAcquireAsync(lockKey,TimeSpan.FromSeconds(1));
    if (handle != null)
    {
        try
        {
            _logger.LogInformation($"form-submission:{currentUserId}:{id}");
            await _resultAnswerService.SaveUserAnswerAsync(id, currentUserId.Value, jsonString);
            return Ok();
        }
        catch (Exception ex)
        {
            return StatusCode(500, "An error occurred while processing your submission.");
        }

    }
    _logger.LogInformation($"form-submission[duplicate]:{currentUserId}:{id}");
    return StatusCode(429, "Duplicate submission detected. Please wait a moment before retrying.");
}

the locking didnt work
I have a line on the top _submissionLockCache.GetOrAddAsync to test the redis, so the redis is working properly , and the lock timeout should be just 1 sec.

2025-07-17 14:15:09.180 -07:00 [Information] Route matched with "{action = \"InsertFormAnswerJson\", controller = \"DataConnectionForm\", area = \"\", page = \"\"}". Executing controller action with signature "System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] InsertFormAnswerJson(System.Guid, System.Text.Json.JsonElement)" on controller "Tapp.Module.DataHub.Web.Controllers.DataConnections.DataConnectionFormController" ("Tapp.Module.DataHub.Web").
2025-07-17 14:15:25.215 -07:00 [Information] form-submission:fcc9c058-7590-4b02-f5a6-3a190bb27c6b:4ef0a401-5951-82b7-3d90-3a1adefa39ec
2025-07-17 14:15:26.529 -07:00 [Information] Start processing HTTP request "GET" "https://localhost:44381/health-status"
2025-07-17 14:15:26.529 -07:00 [Information] Sending HTTP request "GET" "https://localhost:44381/health-status"
2025-07-17 14:15:26.529 -07:00 [Information] Request starting "HTTP/1.1" "GET" "https"://"localhost:44381""""/health-status""" - null null
2025-07-17 14:15:26.532 -07:00 [Information] Executing endpoint '"Health checks"'
2025-07-17 14:15:26.711 -07:00 [Information] Executing StatusCodeResult, setting HTTP status code 200
2025-07-17 14:15:26.711 -07:00 [Information] Executed action "Tapp.Module.DataHub.Web.Controllers.DataConnections.DataConnectionFormController.InsertFormAnswerJson (Tapp.Module.DataHub.Web)" in 17530.5898ms
2025-07-17 14:15:26.711 -07:00 [Information] Executed endpoint '"Tapp.Module.DataHub.Web.Controllers.DataConnections.DataConnectionFormController.InsertFormAnswerJson (Tapp.Module.DataHub.Web)"'
2025-07-17 14:15:27.027 -07:00 [Information] Request finished "HTTP/2" "POST" "https"://"localhost:44381""""/api/data-connections/forms/4ef0a401-5951-82b7-3d90-3a1adefa39ec/answers""" - 200 null null 18225.3835ms
2025-07-17 14:15:27.213 -07:00 [Information] form-submission:fcc9c058-7590-4b02-f5a6-3a190bb27c6b:4ef0a401-5951-82b7-3d90-3a1adefa39ec
2025-07-17 14:15:27.388 -07:00 [Information] Executing StatusCodeResult, setting HTTP status code 200
2025-07-17 14:15:27.388 -07:00 [Information] Executed action "Tapp.Module.DataHub.Web.Controllers.DataConnections.DataConnectionFormController.InsertFormAnswerJson (Tapp.Module.DataHub.Web)" in 18207.493ms
2025-07-17 14:15:27.388 -07:00 [Information] Executed endpoint '"Tapp.Module.DataHub.Web.Controllers.DataConnections.DataConnectionFormController.InsertFormAnswerJson (Tapp.Module.DataHub.Web)"'
2025-07-17 14:15:27.536 -07:00 [Information] form-submission:fcc9c058-7590-4b02-f5a6-3a190bb27c6b:4ef0a401-5951-82b7-3d90-3a1adefa39ec
2025-07-17 14:15:27.625 -07:00 [Information] Request finished "HTTP/2" "POST" "https"://"localhost:44381""""/api/data-connections/forms/4ef0a401-5951-82b7-3d90-3a1adefa39ec/answers""" - 200 null null 18823.4763ms
2025-07-17 14:15:27.635 -07:00 [Information] Request starting "HTTP/2" "GET" "https"://"localhost:44381""""/""?dataconnection=4ef0a401-5951-82b7-3d90-3a1adefa39ec" - null null
2025-07-17 14:15:27.655 -07:00 [Information] Executing endpoint '"/Index"'

how can I fix it?

I read this doc https://abp.io/docs/9.2/framework//infrastructure/distributed-locking

Question

I want to set up CI/CD with GitHub Actions to deploy your Web and public.web apps to Azure App Services, I am currently using VS publish.

and I had an old one set up before and I found some errors:

un dotnet build src/Tapp.Web/Tapp.Web.csproj --configuration Release Determining projects to restore... D:\a\tapp-9\tapp-9\src\Tapp.Domain\Tapp.Domain.csproj : warning NU1504: Duplicate 'PackageReference' items found. Remove the duplicate items or use the Update functionality to ensure a consistent restore behavior. The duplicate 'PackageReference' items are: Volo.Saas.Domain 9.1.0, Volo.Saas.Domain 9.1.0. D:\a\tapp-9\tapp-9\src\Tapp.HttpApi\Tapp.HttpApi.csproj : error NU1101: Unable to find package Volo.Abp.Identity.Pro.HttpApi. No packages exist with this id in source(s): nuget.org. PackageSourceMapping is enabled, the following source(s) were not considered: ABP Commerc ..... following source(s) were not considered: ABP Commercial NuGet Source, Microsoft Visual Studio Offline Packages. D:\a\tapp-9\tapp-9\src\Tapp.Web\Tapp.Web.csproj : error NU1101: Unable to find package Volo.Abp.LanguageManagement.Domain.Shared. No packages exist with this id in source(s): nuget.org. PackageSourceMapping is enabled, the following source(s) were not considered: ABP Commercial NuGet Source, Microsoft Visual Studio Offline Packages. D:\a\tapp-9\tapp-9\src\Tapp.Web\Tapp.Web.csproj : error NU1101: Unable to find package Volo.FileManagement.Domain.Shared. No packages exist with this id in source(s): nuget.org. PackageSourceMapping is enabled, the following source(s) were not considered: ABP Commercial NuGet Source, Microsoft Visual Studio Offline Packages. D:\a\tapp-9\tapp-9\src\Tapp.Web\Tapp.Web.csproj : error NU1101: Unable to find package Volo.Saas.Domain.Shared. No packages exist with this id in source(s): nuget.org. PackageSourceMapping is enabled, the following source(s) were not considered: ABP Commercial NuGet Source, Microsoft Visual Studio Offline Packages. D:\a\tapp-9\tapp-9\src\Tapp.Web\Tapp.Web.csproj : error NU1101: Unable to find package Volo.Abp.TextTemplateManagement.Domain.Shared. No packages exist with this id in source(s): nuget.org. PackageSourceMapping is enabled, the following source(s) were not considered: ABP Commercial NuGet Source, Microsoft Visual Studio Offline Packages. D:\a\tapp-9\tapp-9\src\Tapp.Web\Tapp.Web.csproj : error NU1101: Unable to find package Volo.Abp.Gdpr.Domain.Shared. No packages exist with this id in source(s): nuget.org. PackageSourceMapping is enabled, the following source(s) were not considered: ABP Commercial NuGet Source, Microsoft Visual Studio Offline Packages. D:\a\tapp-9\tapp-9\src\Tapp.Web\Tapp.Web.csproj : error NU1101: Unable to find package Volo.CmsKit.Pro.Domain.Shared. No packages exist with this id in source(s): nuget.org. PackageSourceMapping is enabled, the following source(s) were not considered: ABP Commercial NuGet Source, Microsoft Visual Studio Offline Packages. 2 Warning(s) 529 Error(s)

the host admin has a feature to login with a tenant admin and then switch back to the original account

I need to create a new page with the same feature, that is the host admin can see some of the tenant admin accounts, and clicking one of them will lead to the tenant site as the admin; and then on the homepage, I want to add a button says back to host site.

how can I implement it by calling the existing abp framework functions?

Question

the default configuration in my project is { "App": { "SelfUrl": "https://localhost:44381", "DisablePII": false, "HealthCheckUrl": "/health-status" },

I wanted to add CorsOrigins because we've created a React project and wanted to use some of the API endpoints of the abp project.

I changed the settings to

{ "App": { "SelfUrl": "https://localhost:44381", "CorsOrigins": "http://localhost:5173", -- this is the react project "DisablePII": false, "HealthCheckUrl": "/health-status", },

however, it didn't work. what else should I do?

We want to use the host admin to manage all tenant data, for example, each tenant has their users, surveys and survey answers from users, the tenant admins can manage these data; we want to enable the host admin to manage all users, surveys, survey answers from the host site Is there a recommended way to implement this with ABP? We could implement it by writing our own data repositories, but it feels like there might be an easier way.

unregistered version of Eziriz's ".NET Reactor"!Check the docs before asking a question: https://abp.io/docs/latest Check the samples to see the basic tasks: https://abp.io/docs/latest/samples The exact solution to your question may have been answered before, and please first use the search on the homepage. Provide us with the following info: 🧐 Hint: If you are using the ABP Studio, you can see all the information about your solution from the configuration window, which opens when you right-click on the solution and click on the Solution Configuration button.

  • ABP Framework version: v9.X.X
  • UI Type: MVC / Blazor WASM / Blazor Server
  • Database System: SQL Server, Oracle, MySQL, PostgreSQL, etc..) / MongoDB
  • Tiered (for MVC) or Auth Server Separated (for Angular): no
  • Exception message and full stack trace:
  • Steps to reproduce the issue:

how can I fix it?

2025-03-19 00:21:58.888 +00:00 [Fatal] Host terminated unexpectedly! System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: This assembly is protected by an unregistered version of Eziriz's ".NET Reactor"! This assembly won't further work. at RWRSvaYWUgtDDvQ8cTo.ssDIC8YfDv9AgSxdpVd.kC3x8bo00G() at Volo.Abp.Identity.AbpIdentityHttpApiModule..ctor() at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) --- End of inner exception stack trace --- at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type) at Volo.Abp.Modularity.ModuleLoader.CreateAndRegisterModule(IServiceCollection services, Type moduleType) at Volo.Abp.Modularity.ModuleLoader.CreateModuleDescriptor(IServiceCollection services, Type moduleType, Boolean isLoadedAsPlugIn) at Volo.Abp.Modularity.ModuleLoader.FillModules(List1 modules, IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.GetDescriptors(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.LoadModules(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.AbpApplicationBase.LoadModules(IServiceCollection services, AbpApplicationCreationOptions options) at Volo.Abp.AbpApplicationBase..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationWithExternalServiceProvider..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.Create(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.CreateAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.ServiceCollectionApplicationExtensions.AddApplicationAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.WebApplicationBuilderExtensions.AddApplicationAsync[TStartupModule](WebApplicationBuilder builder, Action1 optionsAction) at Tapp.Web.Program.Main(String[] args) in D:\git\tapp-9\src\Tapp.Web\Program.cs:line 57 2025-03-19 00:28:34.703 +00:00 [Information] Starting web host. 2025-03-19 00:28:35.717 +00:00 [Fatal] Host terminated unexpectedly! System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: This assembly is protected by an unregistered version of Eziriz's ".NET Reactor"! This assembly won't further work. at RWRSvaYWUgtDDvQ8cTo.ssDIC8YfDv9AgSxdpVd.kC3x8bo00G() at Volo.Abp.Identity.AbpIdentityHttpApiModule..ctor() at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) --- End of inner exception stack trace --- at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type) at Volo.Abp.Modularity.ModuleLoader.CreateAndRegisterModule(IServiceCollection services, Type moduleType) at Volo.Abp.Modularity.ModuleLoader.CreateModuleDescriptor(IServiceCollection services, Type moduleType, Boolean isLoadedAsPlugIn) at Volo.Abp.Modularity.ModuleLoader.FillModules(List1 modules, IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.GetDescriptors(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.LoadModules(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.AbpApplicationBase.LoadModules(IServiceCollection services, AbpApplicationCreationOptions options) at Volo.Abp.AbpApplicationBase..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationWithExternalServiceProvider..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.Create(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.CreateAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.ServiceCollectionApplicationExtensions.AddApplicationAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.WebApplicationBuilderExtensions.AddApplicationAsync[TStartupModule](WebApplicationBuilder builder, Action1 optionsAction) at Tapp.Web.Program.Main(String[] args) in D:\git\tapp-9\src\Tapp.Web\Program.cs:line 57 2025-03-19 00:32:25.788 +00:00 [Information] Starting web host. 2025-03-19 00:32:33.338 +00:00 [Fatal] Host terminated unexpectedly! System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: This assembly is protected by an unregistered version of Eziriz's ".NET Reactor"! This assembly won't further work. at RWRSvaYWUgtDDvQ8cTo.ssDIC8YfDv9AgSxdpVd.kC3x8bo00G() at Volo.Abp.Identity.AbpIdentityHttpApiModule..ctor() at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) --- End of inner exception stack trace --- at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type) at Volo.Abp.Modularity.ModuleLoader.CreateAndRegisterModule(IServiceCollection services, Type moduleType) at Volo.Abp.Modularity.ModuleLoader.CreateModuleDescriptor(IServiceCollection services, Type moduleType, Boolean isLoadedAsPlugIn) at Volo.Abp.Modularity.ModuleLoader.FillModules(List1 modules, IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.GetDescriptors(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.LoadModules(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.AbpApplicationBase.LoadModules(IServiceCollection services, AbpApplicationCreationOptions options) at Volo.Abp.AbpApplicationBase..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationWithExternalServiceProvider..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.Create(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.CreateAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.ServiceCollectionApplicationExtensions.AddApplicationAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.WebApplicationBuilderExtensions.AddApplicationAsync[TStartupModule](WebApplicationBuilder builder, Action1 optionsAction) at Tapp.Web.Program.Main(String[] args) in D:\git\tapp-9\src\Tapp.Web\Program.cs:line 57 2025-03-19 00:34:02.955 +00:00 [Information] Starting web host. 2025-03-19 00:34:04.312 +00:00 [Fatal] Host terminated unexpectedly! System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Exception: This assembly is protected by an unregistered version of Eziriz's ".NET Reactor"! This assembly won't further work. at RWRSvaYWUgtDDvQ8cTo.ssDIC8YfDv9AgSxdpVd.kC3x8bo00G() at Volo.Abp.Identity.AbpIdentityHttpApiModule..ctor() at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) --- End of inner exception stack trace --- at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type, Boolean nonPublic, Boolean wrapExceptions) at System.Activator.CreateInstance(Type type) at Volo.Abp.Modularity.ModuleLoader.CreateAndRegisterModule(IServiceCollection services, Type moduleType) at Volo.Abp.Modularity.ModuleLoader.CreateModuleDescriptor(IServiceCollection services, Type moduleType, Boolean isLoadedAsPlugIn) at Volo.Abp.Modularity.ModuleLoader.FillModules(List1 modules, IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.GetDescriptors(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.Modularity.ModuleLoader.LoadModules(IServiceCollection services, Type startupModuleType, PlugInSourceList plugInSources) at Volo.Abp.AbpApplicationBase.LoadModules(IServiceCollection services, AbpApplicationCreationOptions options) at Volo.Abp.AbpApplicationBase..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationWithExternalServiceProvider..ctor(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.Create(Type startupModuleType, IServiceCollection services, Action1 optionsAction) at Volo.Abp.AbpApplicationFactory.CreateAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.ServiceCollectionApplicationExtensions.AddApplicationAsync[TStartupModule](IServiceCollection services, Action1 optionsAction) at Microsoft.Extensions.DependencyInjection.WebApplicationBuilderExtensions.AddApplicationAsync[TStartupModule](WebApplicationBuilder builder, Action1 optionsAction) at Tapp.Web.Program.Main(String[] args) in D:\git\tapp-9\src\Tapp.Web\Program.cs:line 57

Question
  • ABP Framework version: v9.X.X
  • UI Type: MVC / Blazor WASM / Blazor Server
  • Database System: SQL Server, Oracle, MySQL, PostgreSQL, etc..) / MongoDB
  • Tiered (for MVC) or Auth Server Separated (for Angular): no
  • Exception message and full stack trace:
  • Steps to reproduce the issue:

There is a bug that has existed since we started using ABP a year ago. Every time we modify a CRUD page and regenerate the list page (which uses the index.js file), this bug appears. We have an entity called TappProgram that has a child entity named TappProjects. The generated code always includes the incorrect code shown below,

    var tappProjectService = window.tapp.dataHub.TappProjects.tappProjects;

    

whereas the correct code should be as follows:

        var tappProjectService = window.tapp.dataHub.tappProjects.tappProjects;

with lowercase t,

it's in this funciton:

function initDataGrids(data) {
        initTappProjectGrid(data)
    }
    
        function initTappProjectGrid(data) {
        if(!abp.auth.isGranted("Tapp.TappProjects")) {
            return;
        }
        
        var tappProgramId = data.tappProgram.id;

        
        var tappProjectService = window.tapp.dataHub.tappProjects.tappProjects;

        var tappProjectCreateModal = new abp.ModalManager({
            viewUrl: abp.appPath + "TappProjects/CreateModal",
            scriptUrl: abp.appPath + "Pages/TappProjects/createModal.js",
            modalClass: "tappProjectCreate"
        });

        var tappProjectEditModal = new abp.ModalManager({
            viewUrl: abp.appPath + "TappProjects/EditModal",
            scriptUrl: abp.appPath + "Pages/TappProjects/editModal.js",
            modalClass: "tappProjectEdit"
        });

        var tappProjectDataTable = $("#TappProjectsTable-" + tappProgramId).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(tappProjectService.getListByTappProgramId, {
                tappProgramId: tappProgramId,
                maxResultCount: 5
            }),
            columnDefs: [
                {
                    rowAction: {
                        items:
                            [
                                {
                                    text: l("Edit"),
                                    visible: abp.auth.isGranted('Tapp.TappProjects.Edit'),
                                    action: function (data) {
                                        tappProjectEditModal.open({
                                            id: data.record.id
                                        });
                                    }
                                    

the error causes a front end issue, and the create new button will be broken.

How can we avoid this situation?

Could you fix this issue?

Question
  • ABP Framework version: v9.X.X
  • UI Type: MVC / Blazor WASM / Blazor Server
  • Database System: EF Core (SQL Server
  • Tiered (for MVC) or Auth Server Separated (for Angular): no
  • Exception message and full stack trace:
  • Steps to reproduce the issue:

Here’s the corrected version of your text:


We recently encountered a very strange bug. We updated the emailing settings with our own SMTP credentials, and it worked. However, this morning, the emailing feature stopped working.

I checked the emailing settings page using an admin account, and it showed the default credentials with the original settings, as if we had never changed them back to the original.

I then checked the database, and the AbpSettings table appeared correct—it contained all the correct SMTP information, which is very strange. So, I updated all the fields on the emailing settings page again, and it worked.

I'm concerned that the issue might return. Do you have any suggestions? how can I make sure that it will use the correct smtp?

  • ABP Framework version: v9.X.X
  • UI Type: MVC / Blazor WASM / Blazor Server
  • Database System: EF Core (SQL Server, Oracle, MySQL, PostgreSQL, etc..) / MongoDB
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes/no
  • Exception message and full stack trace:
  • Steps to reproduce the issue:

I need to modify the title and content of the Email Confirmation email template. Is there a way to apply my modifications to all tenants? Or can tenants inherit the title and content from the tenant with tenantId null (host)? so I don't need to update for each tenant one by one.

These modifications involve language texts and text templates.

Showing 11 to 20 of 41 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.8.0-preview. Updated on October 21, 2026, 11:09
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.