Activities of "enisn"

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:

  1. Your Try 1 and Try 2 will work only if you refresh the page.

  2. 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.

    • Inject the IJSRuntime
    [Inject] IJSRuntime JSRuntime { get; set; }
    
    • Invoke a function name
    await JSRuntime.InvokeVoidAsync("updateMyMenu", 2);
    
    • Define the function in window object in your .js file.
    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.

  1. You can try to use different containers across your tenants.
  2. You can manually resolve BlobProvider according to CurrentTenant via using 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

Showing 321 to 330 of 496 entries
Made with ❤️ on ABP v9.1.0-preview. Updated on November 11, 2024, 11:11