- ABP Framework version: v9,0.0
- UI Type: MVC
- Database System: EF Core
- Tiered (for MVC) or Auth Server Separated (for Angular): yes
Hi,
I'm changing one of our Product features and giving it another internal name. I'm changing it from Platform.OnlineBooking to PlatformName.Products.OnlineBooking. When I did that, I've got an issue and my Admin Web doesn't initialize anymore due to the Admin API failing. Logs are below.
Question:
- If a feature was being used before, how do you recommend that we remove it from a given system to introduce a new one?
- What are the implications of renaming features like we are doing? I'd like to ensure that we have consistent internal names so it's important for me to update our namings so we can scale that with multiple products.
Thank you!
Logs
2025-01-06T22:00:07 [22:00:07 INF] Request starting HTTP/1.1 GET https://localhost:5002/api/abp/application-configuration?IncludeLocalizationResources=False&api-version=1.0 - null null
2025-01-06T22:00:07 [22:00:07 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc)'
2025-01-06T22:00:07 [22:00:07 INF] Route matched with {area = "abp", action = "Get", controller = "AbpApplicationConfiguration", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto] GetAsync(Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions) on controller Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController (Volo.Abp.AspNetCore.Mvc).
2025-01-06T22:00:07 [22:00:07 INF] Executing action method Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync (Volo.Abp.AspNetCore.Mvc) - Validation state: Valid
2025-01-06T22:00:07 [22:00:07 DBG] Executing AbpApplicationConfigurationAppService.GetAsync()...
2025-01-06T22:00:07 [22:00:07 ERR] ---------- RemoteServiceErrorInfo ----------
2025-01-06T22:00:07 {
2025-01-06T22:00:07 "code": null,
2025-01-06T22:00:07 "message": "An internal error occurred during your request!",
2025-01-06T22:00:07 "details": null,
2025-01-06T22:00:07 "data": null,
2025-01-06T22:00:07 "validationErrors": null
2025-01-06T22:00:07 }
2025-01-06T22:00:07
2025-01-06T22:00:07 [22:00:07 ERR] Undefined feature: Platform.OnlineBooking
2025-01-06T22:00:07 Volo.Abp.AbpException: Undefined feature: Platform.OnlineBooking
2025-01-06T22:00:07 at Volo.Abp.Features.FeatureDefinitionManager.GetAsync(String name)
2025-01-06T22:00:07 at Volo.Abp.Features.FeatureChecker.GetOrNullAsync(String name)
2025-01-06T22:00:07 at Volo.Abp.Features.FeatureCheckerBase.IsEnabledAsync(String name)
2025-01-06T22:00:07 at Volo.Abp.Features.FeatureCheckerExtensions.IsEnabledAsync(IFeatureChecker featureChecker, Boolean requiresAll, String[] featureNames)
2025-01-06T22:00:07 at Volo.Abp.Features.RequireFeaturesSimpleStateChecker`1.IsEnabledAsync(SimpleStateCheckerContext`1 context)
2025-01-06T22:00:07 at Volo.Abp.SimpleStateChecking.SimpleStateCheckerManager`1.InternalIsEnabledAsync(TState state, Boolean useBatchChecker)
2025-01-06T22:00:07 at Volo.Abp.SimpleStateChecking.SimpleStateCheckerManager`1.IsEnabledAsync(TState state)
2025-01-06T22:00:07 at Volo.Abp.Authorization.Permissions.PermissionChecker.IsGrantedAsync(ClaimsPrincipal claimsPrincipal, String[] names)
2025-01-06T22:00:07 at Volo.Abp.Authorization.Permissions.PermissionChecker.IsGrantedAsync(String[] names)
2025-01-06T22:00:07 at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationAppService.GetAuthConfigAsync()
2025-01-06T22:00:07 at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationAppService.GetAsync(ApplicationConfigurationRequestOptions options)
2025-01-06T22:00:07 at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
2025-01-06T22:00:07 at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
2025-01-06T22:00:07 at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
2025-01-06T22:00:07 at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, IAuditingHelper auditingHelper, IAuditLogScope auditLogScope)
2025-01-06T22:00:07 at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
2025-01-06T22:00:07 at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
2025-01-06T22:00:07 at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
2025-01-06T22:00:07 at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
2025-01-06T22:00:07 at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
2025-01-06T22:00:07 at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
2025-01-06T22:00:07 at Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController.GetAsync(ApplicationConfigurationRequestOptions options)
2025-01-06T22:00:07 at lambda_method2801(Closure, Object)
2025-01-06T22:00:07 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
2025-01-06T22:00:07 at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
2025-01-06T22:00:07 at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
2025-01-06T22:00:07 at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
2025-01-06T22:00:07 at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
2025-01-06T22:00:07 at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
2025-01-06T22:00:07 at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
2025-01-06T22:00:07 [22:00:07 INF] Executing ObjectResult, writing value of type 'Volo.Abp.Http.RemoteServiceErrorResponse'.
3 Answer(s)
-
0
-
0
My case is exactly the same as the above but I instead of changing only
AllowChangingEmailSettings
I wanted to ensure that the group name was consistent with new features being added. In that case, I'm trying to create a structure similar to namespaces (i.e.GroupName + "Products.MyProductName
instead of onlyGroupName + "MyProductName
Any thoughts?
-
0
hi
No matter what, Your feature name has to be defined.
If you rename it in the definition class. you should change the name everywhere.
Volo.Abp.AbpException: Undefined feature: Platform.OnlineBooking
This means you used the
Platform.OnlineBooking
as a feature name. But it doesn't define.