Hello ANZ,
I would like to ask if there is a way to seed organization units so I can assign them my default roles? I was able to create default roles on top of the Admin and User roles and I would want to escalate these default values and assignments to the OU.
Please advise.
Thank you!
11 Answer(s)
-
0
I would appreciate any response to this. Thank you.
-
0
Hi ramilcatalandomingo, You could use SeedHelper in project EntityFrameworkCore to plug in your own class: Your DefaultTenantDataBuilder would look as follows:
using Nuagecare.EntityFrameworkCore; namespace Nuagecare.Migrations.Seed.Tenants { public class DefaultTenantDataBuilder { private readonly NuagecareDbContext _context; private readonly int _tenantId; public DefaultTenantDataBuilder( NuagecareDbContext context, int tenantId) { _context = context; _tenantId = tenantId; } public void Create() { new InitialOrganizationUnitCreator(_context, _tenantId).Create(); new InitialNcFormCreator(_context, _tenantId).Create(); _context.SaveChanges(); new InitialNcEntityCreator(_context, _tenantId).Create(); new InitialDeviceCreator(_context, _tenantId).Create(); _context.SaveChanges(); } public void CreateChildTables(int tenantId) { //Nuagecare InitialDataCreators new InitialNcActionFirstLevelCreator(_context, tenantId).Create(); _context.SaveChanges(); } } }
And then your InitialOrganizationUnitCreator something like this:
using Abp.Dependency; using Abp.Domain.Uow; using Abp.Organizations; using Microsoft.EntityFrameworkCore; using Nuagecare.EntityFrameworkCore; using System.Linq; namespace Nuagecare.Migrations.Seed.Tenants { public class InitialOrganizationUnitCreator { private readonly NuagecareDbContext _context; private readonly int _tenantId; public InitialOrganizationUnitCreator( NuagecareDbContext context, int tenantId) { _context = context; _tenantId = tenantId; } public void Create() { var root = _context.OrganizationUnits.IgnoreQueryFilters().FirstOrDefault(m => m.TenantId == _tenantId && m.DisplayName == "Acme Care Home"); if (root == null) { using (var organizationUnitManager = IocManager.Instance.ResolveAsDisposable<OrganizationUnitManager>()) { organizationUnitManager.Object.Create(new OrganizationUnit(_tenantId, "Acme Care Home", null)); } } _context.SaveChanges(); root = _context.OrganizationUnits.IgnoreQueryFilters().FirstOrDefault(m => m.TenantId == _tenantId && m.DisplayName == "Acme Care Home"); using (var scope = IocManager.Instance.CreateScope()) { var organizationUnitManager = scope.Resolve<OrganizationUnitManager>(); var unitOfWorkManager = scope.Resolve<IUnitOfWorkManager>(); using (unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant)) { var admissions = _context.OrganizationUnits.IgnoreQueryFilters().FirstOrDefault(m => m.TenantId == _tenantId && m.DisplayName == "Admissions"); if (admissions == null) { organizationUnitManager.Create(new OrganizationUnit(_tenantId, "Admissions", root.Id)); } var firstFloor = _context.OrganizationUnits.IgnoreQueryFilters().FirstOrDefault(m => m.TenantId == _tenantId && m.DisplayName == "First Floor"); if (firstFloor == null) { organizationUnitManager.Create(new OrganizationUnit(_tenantId, "First Floor", root.Id)); } var secondFloor = _context.OrganizationUnits.IgnoreQueryFilters().FirstOrDefault(m => m.TenantId == _tenantId && m.DisplayName == "Second Floor"); if (secondFloor == null) { organizationUnitManager.Create(new OrganizationUnit(_tenantId, "Second Floor", root.Id)); } } _context.SaveChanges(); } } } }
Hope that helps.
-
0
Thank you so much @bobingham
-
0
No problem, nice to take the weight from weight from the guys at Volosoft so they can get 8.2 out for @weedkiller three weeks ago and include sixteen extra items of functionality he wants....
-
0
That is awesome. I really love this framework. Volosoft has made an amazing product. Thank you for assisting as well. I hope to be better with this framework so I can return back the favor some day.
-
0
It's no problem, if you're like me it will help you learn best practise and I'm always happy to help when I've done something before. But most of the stuff in the forum is like magic to me. I just leave it to the wizards and learn like an apprentice. Good luck! ****Note to ismcagdas, can I have a discount on my next renew?
-
0
You and me both =)
-
0
Hi @bobingham did you try is your sulution work with separated tenant database?
-
0
Nope, I don't use separate tenant databases. Why, is this method a problem for separate databases?
-
0
Because you dont change connection when seed data
-
1
It wouldn't be a problem for me, I seed my tenants with a store procedure, that way the5re's no requirement for a release when seed data changes.