Today I am working out loud on SBD.Cashflow.using XAF, Entity Framework Code FIrst
Here is the GitHub link
Here are my initial wizard choices.
The result is
Today I am working out loud on SBD.Cashflow.using XAF, Entity Framework Code FIrst
Here is the GitHub link
Here are my initial wizard choices.
The result is
I ran the app and messed about with data entry for a bit.
Then re-designed the business model somewhat.
Now for migrations
Uh, Uh I am going to need validations, I wonder what goes where?
Ah actually they are already installed!
I want a rule that if a GLAccount has a parent GLAccount then they must have the same category.
I better consult the Validation Rules Help.
Here we go
A bit of a play with the app
Let’s add a filter combo for the GLAccounts using this way.
Adding some conditions
Causes these filters to be available
OK, I forgot to add reports, so lets drag them on to the win application
this looks better
I need to do it for each module though.
So for the Module.Win
becomes
and for reports module [ LATER NOTE I DO THE WRONG THING HERE… I should have used ReportsModuleV2… watch how I troubleshoot my mistake ]
I add the data type to the dbcontext
public DbSet<ReportDataV2> ReportDataV2s { get; set; }
Also I need the [VisibleInReports] attribute on the classes I want to report on
and that means I need to run Migrations again
Oops I missed something
Cannot find the 'DevExpress.Persistent.BaseImpl.ReportData' type or 'DevExpress.Persistent.BaseImpl.v18.2' assembly.
at DevExpress.ExpressApp.Reports.ReportsModule.FindDefaultReportDataType()
at DevExpress.ExpressApp.Reports.ReportsModule.GetDeclaredExportedTypes()
at DevExpress.ExpressApp.ModuleBase.GetExportedTypes()
at DevExpress.ExpressApp.ApplicationModulesManager.CollectDomainComponents()
at DevExpress.ExpressApp.ApplicationModulesManager.Load(ITypesInfo typesInfo, Boolean loadTypesInfo)
at DevExpress.ExpressApp.XafApplication.Setup(String applicationName, IList`1 objectSpaceProviders, ApplicationModulesManager modulesManager, ISecurityStrategyBase security)
at DevExpress.ExpressApp.XafApplication.Setup()
at SBD.Cashbook.Win.Program.Main() in D:\dev\SBD.Cashbook\SBD.Cashbook.Win\Program.cs:line 45
Adding to the Middle tier module
Time for the sledge hammer
I am going to create a new solution with reports so I can study where things went wrong.
Text search shows the following mentions
Find all "ReportDataV2", Subfolders, Find Results 1, Entire Solution, ""
D:\dev\thing4\things4.Module\BusinessObjects\things4DbContext.cs(24): public DbSet<ReportDataV2> ReportDataV2 { get; set; }
D:\dev\thing4\things4.Module\Model.DesignedDiffs.xafml(4): <DetailView Id="ReportDataV2_DetailView">
D:\dev\thing4\things4.Module\Model.DesignedDiffs.xafml(8): <LayoutGroup Id="ReportDataV2" >
D:\dev\thing4\things4.Module\Module.cs(47): reportModule.ReportDataType = typeof(DevExpress.Persistent.BaseImpl.EF.ReportDataV2);
D:\dev\thing4\things4.Win\WinApplication.Designer.cs(38): this.reportsModuleV2.ReportDataType = typeof(DevExpress.Persistent.BaseImpl.EF.ReportDataV2);
Matching lines: 5 Matching files: 4 Total files searched: 40
comparing with the main project …
oops, lets fix the dataset name
public DbSet<ReportDataV2> ReportDataV2 { get; set; }
Ah quite a bit missing
Find all "ReportDataV2", Subfolders, Find Results 1, Entire Solution, ""
D:\dev\SBD.Cashbook\SBD.Cashbook.Module\BusinessObjects\CashbookDbContext.cs(36): public DbSet<ReportDataV2> ReportDataV2 { get; set; }
D:\dev\SBD.Cashbook\SBD.Cashbook.Module\Migrations\201901030327288_two.cs(11): "dbo.ReportDataV2",
D:\dev\SBD.Cashbook\SBD.Cashbook.Module\Migrations\201901030327288_two.cs(28): DropTable("dbo.ReportDataV2");
Matching lines: 3 Matching files: 2 Total files searched: 58
Actually I need to copy the whole Setup method because my Cashbook project is using
public override void Setup(XafApplication application) {
base.Setup(application);
// Manage various aspects of the application UI and behavior at the module level.
}
[NOTE THE DIFFERENT TYPE FOR THE PARAMETER]
Another thing I notice is that my Module class does not have validation… better add that
And in my WinModule I added a type I did not need
I could go on making the data entry screens nice, but the next technical challenge I want to tackle is now to get the connection string to come from Azure Key Vault… sounds like a new topic.