Hi @kfrancis@@clinicalsupportsystems.com
This was configured for Web application at the first time, but you're right, it might be a problem in that case. We'll work on it.
I think that is related what you asked for https://stackoverflow.com/a/63896726/7200126
So it means you configure a secure connection (SMTPS instead of SMTP). The port might be different for secure connection sometimes. Check the port again and make sure it's for secure connection
Hi @Leonardo.Willrich
Unfortunately, the menu can't be updated without refreshing the page currently. The menu is drawn once while the page is loading and it won't be redrawn while navigating the application without refreshing.
There are 2 options:
Your Try 1
and Try 2
will work only if you refresh the page.
I know this one is not the best solution but it seems it's the only solution for now. You can access the dom and update it manually with IJSRuntime
.
IJSRuntime
[Inject] IJSRuntime JSRuntime { get; set; }
await JSRuntime.InvokeVoidAsync("updateMyMenu", 2);
window.updateMyMenu = function(value){
// Write a proper query below that finds your menu item.
//(You can set an Id from menuContributor to find it easily.)
$("#menu-selector-here").html(value + " My menu");
};
I know this is not a good solution. I've created an issue about it you can follow from here
Feature system was originally designed to control the tenant features in a multi-tenant application. However, it is extensible and capable of determining the features by any condition.
You can see the documentation from here: https://docs.abp.io/en/abp/latest/Features it's already designed for multi-tenant applications
Hi @Radoslav
As an answer to your questiıon, you can use ExtraProperties
to attach custom data and fields to your entity
You can see usages of it from here: https://docs.abp.io/en/abp/5.1/Object-Extensions#object-extensions
As a comment on your rest of explanation, WordPress is a different solution, and designing something like that it's not a good solution, you just can't call everything a post and define types with a column. If an entity's behavior changes according to a column, that means they're already different types. I think wordpress does this because it provides creating everything at runtime. But ABP Framework provides a maintainable, proper DDD solution. In wordpress you have to maintain your database but in CMS Kit you have to maintain your source code and it works with any database that is supported by Entity Framework and Mongo Driver. By the way, they're not substitutions of each other. Both of them provide different proposals. CMS Kit offers to you adding CMS features to your AspNetCore application and it's a library. But Wordpress offers you an entire standalone CMS application. They're different.
MenuContributor will be triggered with MenuConfigurationContext
and it contains ServiceProvider
as a property. You can resolve any service by using it:
public async Task ConfigureMenuAsync(MenuConfigurationContext context)
{
var userTaskPublicAppService = context.ServiceProvider.GetRequiredService<IUserTaskPublicAppService>();
}
Hi @shijo ABP Framework doesn't provide a configuration for tenant-based blob provider resolution. There are a couple of ways to achieve tenant-based storage.
IServiceProvider
.
var provider = serviceProvider.GetRequiredService<AzureBlobProvider>();
// Or with type
var provider = (BlobProviderBase) serviceProvider.GetRequiredService(typeof(AzureBlobProvider));
// According to a rule:
var provider = (BlobProviderBase) serviceProvider.GetRequiredService(providerMappingDictionary[CurrentTenant.Id]); //Dictionary returns type
await provider.SaveAsync(...);
Hi @zhongfang
As I see you decorated your method with RequiresFeature
attribute you called it directly in code. There is no interceptor is executed because you made a regular method call.
That attribute works on AppServices or Controllers well, it won't work your manual method calls.
Try injecting IFeatureChecker
and check the feature with it.
public class RmsMenuContributor : IMenuContributor
{
private readonly IFeatureChecker _featureChecker;
public RmsMenuContributor(IFeatureChecker featureChecker)
{
_featureChecker = featureChecker;
}
public async Task ConfigureMenuAsync(MenuConfigurationContext context)
{
// ...
if (await _featureChecker.IsEnabledAsync(Yee.Change.ZipingBazi.Features.ZipingBaziFeature.IsEnabled))
{
await SetOperationMenu(context);
}
await SetProductsMenu(context);
}
[RequiresFeature(Yee.Change.ZipingBazi.Features.ZipingBaziFeature.IsEnabled)]
public virtual async Task SetOperationMenu(MenuConfigurationContext context)
{
var operateMenu = AddOperateMenuItem(context);
AddMenuItemPictures(context, operateMenu);
AddMenuItemUploadPicture(context, operateMenu);
You have to call it with assembly name in blazor.
_content/Volo.Abp.AspNetCore.Components.Web.LeptonTheme/assets/imgs/call-an-expert-person.svg