Hi,
I can't reproduce the problem.
ObjectExtensionManager.Instance.Modules()
.ConfigureIdentity(identity =>
{
identity.ConfigureUser(user =>
{
user.AddOrUpdateProperty<string>( //property type: string
"SocialSecurityNumber", //property name
property =>
{
property.Attributes.Add(new RequiredAttribute());
property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4});
}
);
user.AddOrUpdateProperty<string>("Test");
user.AddOrUpdateProperty<string>("Test2");
user.AddOrUpdateProperty<string>("Test3");
user.AddOrUpdateProperty<string>("Test4");
user.AddOrUpdateProperty<string>("Test5");
user.AddOrUpdateProperty<string>("Test6");
});
});
What is the logic within abp-extensible-form to decide the input control rendered on UI?
Here is the source code
https://github.com/abpframework/abp/blob/rel-8.0/npm/ng-packs/packages/components/extensible/src/lib/components/extensible-form/extensible-form.component.ts
Hi,
could you please share the all application logs? thanks.
Hi,
Can you explain more clearly that the override controller you mentioned is only intended to set infor to the cache so that the next call request will use the infor in the cache, right?
Yes, this is the response cache, the next call will return the last response cache directly.
I would appreciate it if you could give me specific instructions on improving the [application-configuration] and [application-localization] APIs. because I am worried that the override will cause missing information in case ABP updates that API.
I understand that, it's possible.
Actually I think you don't have to care about the performance because redundant calls don't cause performance problems; the endpoint uses a distributed cache inside
Hi,
At this time, the application is in the initialization, so you can't inject the services.
You can try to use ADO.NET to query the database at the time
Hi,
you can override SettingProvider
and SettingManagement
to log the setting value from where and check it log.
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ISettingProvider))]
public class MySettingProvider : SettingProvider
{
private readonly ILogger<MySettingManagement> _logger;
public MySettingProvider([NotNull] ISettingDefinitionManager settingDefinitionManager, [NotNull] ISettingEncryptionService settingEncryptionService, [NotNull] ISettingValueProviderManager settingValueProviderManager, ILogger<MySettingManagement> logger) : base(settingDefinitionManager, settingEncryptionService, settingValueProviderManager)
{
_logger = logger;
}
protected async override Task<string> GetOrNullValueFromProvidersAsync(IEnumerable<ISettingValueProvider> providers, SettingDefinition setting)
{
foreach (var provider in providers)
{
var value = await provider.GetOrNullAsync(setting);
_logger.LogInformation($"Get value from SettingProvider: {provider.Name}, Value: {value}");
if (value != null)
{
return value;
}
}
return null;
}
}
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ISettingManager))]
public class MySettingManagement : SettingManager
{
private readonly ILogger<MySettingManagement> _logger;
public MySettingManagement(IOptions<SettingManagementOptions> options, IServiceProvider serviceProvider, ISettingDefinitionManager settingDefinitionManager, ISettingEncryptionService settingEncryptionService, ISettingManagementStore settingManagementStore, ILogger<MySettingManagement> logger) : base(options, serviceProvider, settingDefinitionManager, settingEncryptionService, settingManagementStore)
{
_logger = logger;
}
protected async override Task<string> GetOrNullInternalAsync(string name, string providerName, string providerKey, bool fallback = true)
{
var setting = await SettingDefinitionManager.GetAsync(name);
var providers = Enumerable
.Reverse(Providers);
if (providerName != null)
{
providers = providers.SkipWhile(c => c.Name != providerName);
}
if (!fallback || !setting.IsInherited)
{
providers = providers.TakeWhile(c => c.Name == providerName);
}
string value = null;
foreach (var provider in providers)
{
value = await provider.GetOrNullAsync(
setting,
provider.Name == providerName ? providerKey : null
);
_logger.LogInformation($"Get value from SettingProvider: {provider.Name}, Value: {value}");
if (value != null)
{
break;
}
}
if (setting.IsEncrypted)
{
value = SettingEncryptionService.Decrypt(setting, value);
}
return value;
}
}
Hi,
Yes, we upgrade all Nuget package to the latest
https://github.com/abpframework/abp/pull/20960
Hi
Please give me the access permission, my github name is realLiangshiwei