I have been asked to provide bulk delete for users in my abp application. I don't have the source code of the users list screen in the admin section and the documentation doesn't seem to answer my question about how I can add a checkbox to the user list datatable so that the admin user can select users and add a button to delete all those selected.
What is the best approach for this?
When I create a brand new project and I add a module using abp suite I cannot access the web pages in the module. Whenever I go to the admin section and try to navigate to the Index page generated by abp suite I get a 404 error. I have tried lots of variations on the URL and also tried to add a special URL using the page directive in the index page. It also doesn't find the sample Index page that is added when you first create a module.
Has something changed in order to configure routes for web pages in modules? It always worked ok previously. My module is called Codes. I have tried https://localhost:44347/Codes/Codes https://localhost:44347/Codes/ I have tried putting in a specifi URL in the page directive and that is also not working.
I have set the permissions for the admin role to be able to perform CRUD.
TCheck the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.
If you're creating a bug/problem report, please include followings:
I have configured the application to use the DomainName Tenant resolver
var mydomain = configuration["App:Domain"];
Configure<AbpTenantResolveOptions>(options =>
{
options.AddDomainTenantResolver("{0}." + mydomain);
});
If I do it this way I have to create a new Website under IIS and setup DNS records for the subdomain for each new tenant and also purchase a new SSL Certificate for each subdomain so that it can have the Https://.
Is there a better way to manage the creation and management of the tenants?
I can't find any documentation anywhere on how to configure the other TenantReolvers such as the RouteTenantResolveContributor.
How do we set up the Url for this one?
Maybe I am configuring the DOmainTenant resolver incorrectly and there is a way around having to setup the subdomain in IIS and purching a SSL certificate for each tenant. If so then can you let me know what I should be doing instead. If this is needed for the DomaiinTenantResolver can you let me know where I can find documentation on how to configure the other tenant resolvers and what the format of the Url would look like where this is applicable?
Thanks
If you're creating a bug/problem report, please include followings:
I have this code in the WebModule to configure the VirtualFIleSystem
private void ConfigureVirtualFileSystem(IWebHostEnvironment hostingEnvironment)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<HourcoinWebModule>();
options.FileSets.AddEmbedded<HourcoinDomainModule>(
baseNamespace: "Hourcoin.Templates",
baseFolder: "/Templates");
options.FileSets.AddEmbedded<RegistrationDomainModule>();
if (hostingEnvironment.IsDevelopment())
{
options.FileSets.ReplaceEmbeddedByPhysical<HourcoinDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Domain.Shared", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HourcoinDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Domain", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HourcoinApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Application.Contracts", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HourcoinApplicationModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}Hourcoin.Application", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HourcoinHttpApiModule>(Path.Combine(hostingEnvironment.ContentRootPath, string.Format("..{0}..{0}src{0}Hourcoin.HttpApi", Path.DirectorySeparatorChar)));
options.FileSets.ReplaceEmbeddedByPhysical<HourcoinWebModule>(hostingEnvironment.ContentRootPath);
}
});
}
This works in development as the Physical File is used using the above ReplaceEmbeddedByPhysical. When deployed to IIS at myasp.net the email is not working because the template is not being rendered. I have caught the error and displayed it in the following screenshot image.
I have made sure the files in the Templates directory are Embedded Resources.
What could I be missing? Any help or suggestions would be appreciated .as i have followed all the documentation I can find and have not had any luck. I keep getting the error even after specifically ensuring the environment is Production in the web.c onfig which shouldn't be necessary. Is there a bug in the VirtualFIleSystem?
Hi, I had a working Text Templating Email with a layout using the Razor Engine in version 6.0.
Now I have updated the project to version 7.0.1 and it didn't compile due to the .withRazorEngine() line in the following code in the EmailTemplateDefinitionProvider class
public override void Define(ITemplateDefinitionContext context)
{
context.Add(
new TemplateDefinition(
"EmailLayout",
isLayout: true
)
.WithRazorEngine()
.WithVirtualFilePath(
"/Templates/EmailLayout.cshtml",
isInlineLocalized: true
)
);
context.Add(new TemplateDefinition("ConfirmEmail",
typeof(HourcoinResource),
layout: "EmailLayout")
.WithVirtualFilePath(
"/Templates/ConfirmEmail.cshtml",
isInlineLocalized: true
)
.WithRazorEngine()
);
}
To get the code to compile I had to remove the .WithRazorEngine() line
I thought there may have been an update and so following the TextTemplating documentation for version 7 I used the following command abp add-package Volo.Abp.TextTemplating.Razor and got the following message.
[13:03:04 WRN] 'Volo.Abp.TextTemplating.Razor' nuget package could not be found!
So now I receive the email but instead of it being rendered I see the @Body from the EmailLayout instead of the contents from the model.
It appears the documentation is therefore out of date. How can I get this to work in version 7? Has it moved to another package?
Kind Regards
No Exception the email is sent but it isn't rendered by the razor engine as it doesn't seem to be there anymore.
I think there is a bug in the CmsKit in that you can't override the model and view as you should be able to do under the normal Abp principles. The OnGet method in the base class cannot be overriden.
How can I solve this as I do not have access to the source code to completely write my own handler by copying everything in the base class and building it up from there?
InvalidOperationException: Multiple handlers matched. The following handlers matched route data and had all constraints satisfied: Void OnGetAsync(), System.Threading.Tasks.Task OnGetAsync()
public BlogPostPublicDto LatestPost { get; set; } public void OnGetAsync() { base.OnGetAsync(); LatestPost = base.Blogs.Items.OrderByDescending(d => d.CreationTime).Take(1).First();
}
This compiles but throws the exception because of the OnGet handler in the base class.
public new void OnGetAsync() to hide the base class implementation also compiles but still get the same Exception as multiple handlers match when you run it.
The fix would normally be to override the method. I've done this with other pages but it doesn't work here.
public override void OnGetAsync() { }
But this doesn't compile as the OnGet method in the base class has not been marked virtual and cannot be overridden. Any help to sort this out would be appreciated.
When I deploy the application to a docker container on azure I find that emails to gmail accounts are not accepted. I have created an email with 123-reg server and am using this to send out the emails on user registration.
The email gets sent successfully to many email accounts I have but is rejected by all the gmail accounts I have tested. The response is below. How can we set the MessageId in abp?
Any help would be appreciated as I need to allow users with gmail addresses to be able to register.
FYI, The message id header is not required currently, but is used by several spam filters including gmail. As for what it needs to be set to, something unique.
Reason: There was an error while attempting to deliver your message with [Subject: "Please Confirm your email"] to adam.musson@gmail.com. MTA p3plwbeout16-03.prod.phx3.secureserver.net received this response from the destination host IP - 142.250.141.27 - 550 , 550-5.7.1 [173.201.193.58] Messages missing a valid messageId header are not 550 5.7.1 accepted. lb10-20020a17090b4a4a00b00200b96d234csi12474831pjb.49 - gsmtp
Hi, The LeptonX theme is now the default but there are a number of things that are annoying and difficult to work out without documentation or source code. Can you tell me where I can find guidance on the following?
I can override the Image in the Login form using the BrandingProvider but it has an annoying Lepton watermark and Lepton logo above the login form remains even though the BrandingProvider is specifying another logo which is picked up by the other main standard layout. How can I override this as I do not have the source code to see what the original form has?
There is no language selector on the Login form. Is this intentional?
There is no code available for the LeptonX theme but there is for the Lepton theme. Should we be using Lepton or LeptonX going forward?
I am using version 6.0.0-rc.3 Thanks for your help. Adam
Could not found remote action for method Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples, to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, please use the search on the homepage.
If you're creating a bug/problem report, please include followings:
[RemoteService(Name = CategoryServiceRemoteServiceConsts.RemoteServiceName)]
[Area("categoryService")]
[Route("api/category-service/categories")]
public class CategoryController : CategoryServiceController, ICategoryAppService
{
private readonly ICategoryAppService _categoryAppService;
public CategoryController(ICategoryAppService categoryAppService)
{
_categoryAppService = categoryAppService;
}
//doesn't work
[HttpGet]
[Route("{id}")]
public virtual Task<CategoryDto> GetAsync(Guid id)
{
return _categoryAppService.GetAsync(id);
}
//works
[HttpGet]
public virtual Task<PagedResultDto<CategoryDto>> GetListAsync(GetCategoriesInput input)
{
return _categoryAppService.GetListAsync(input);
}
//doesn't work
[HttpPost]
public virtual Task<CategoryDto> CreateAsync(CategoryCreateDto input)
{
return _categoryAppService.CreateAsync(input);
}
[HttpPut]
[Route("{id}")]
public virtual Task<CategoryDto> UpdateAsync(Guid id, CategoryUpdateDto input)
{
return _categoryAppService.UpdateAsync(id, input);
}
[HttpDelete]
[Route("{id}")]
public virtual Task DeleteAsync(Guid id)
{
return _categoryAppService.DeleteAsync(id);
}
}
}
Where am I going wrong? Is there something simple I am missing. Thanks.