3.0.0.3 Control Repository Schema & Logs.

This commit is contained in:
Andy Howard
2025-02-10 18:25:40 +00:00
parent 75185ed302
commit a7bec4e806
36 changed files with 1272 additions and 94 deletions
@@ -72,7 +72,7 @@ namespace Sarand.BusinessMgr.Web.Control.Controllers.System
Sbm.Database databaseInstance = EnumUtil.ParseEnum(StringUtil.EmptyOnNull(model.DatabaseFilter.Instance), Sbm.Database.Unknown);
if (databaseInstance <= 0)
return Json(responseData.SetMessage(messageTitle, $"Database instance must be specified."));
ISacsDatabase db = GetDatabase(databaseInstance);
ISacsDatabase db = GetDatabase(databaseInstance, model.DatabaseFilter.Context);
if (db == null)
return Json(responseData.SetMessage(messageTitle, $"Database unavailable for instance '{databaseInstance}'."));
@@ -123,12 +123,14 @@ namespace Sarand.BusinessMgr.Web.Control.Controllers.System
/// <summary>
/// Get database by type.
/// </summary>
private ISacsDatabase GetDatabase(Sbm.Database databaseInstance)
private ISacsDatabase GetDatabase(Sbm.Database databaseInstance, String context)
{
switch (databaseInstance)
{
case Sbm.Database.Control:
return App.GetControlDatabase();
case Sbm.Database.BusMgr:
return GetDatabaseByContext(context);
case Sbm.Database.Template:
return GetDatabaseByContext(Sbm.RepositoryContext_Template);
case Sbm.Database.Demo:
@@ -169,6 +171,7 @@ namespace Sarand.BusinessMgr.Web.Control.Controllers.System
public AjaxResponse_ValidateDatabaseSchema(SbmModel_Control model) : base(model) { }
// Database instance.
public String Instance { get; set; }
public String Context { get; set; }
// Schema validation list.
public List<DbSchemaItemResponseData> Items { get; } = new List<DbSchemaItemResponseData>();
}
@@ -194,13 +197,21 @@ namespace Sarand.BusinessMgr.Web.Control.Controllers.System
return Json(responseData.SetMessage(messageTitle, "Database instance must be specified"));
responseData.Instance = databaseInstance.ToString();
// Context.
if (databaseInstance == Sbm.Database.BusMgr)
{
if (StringUtil.IsBlank(model.DatabaseFilter.Context))
return Json(responseData.SetMessage(messageTitle, "BusMgr Database context must be specified"));
responseData.Context = model.DatabaseFilter.Context;
}
// Database connection.
ISacsDatabase db = GetDatabase(databaseInstance);
ISacsDatabase db = GetDatabase(databaseInstance, model.DatabaseFilter.Context);
if (db == null)
return Json(responseData.SetMessage(messageTitle, $"Unrecognised database instance specified: '{model.DatabaseFilter.Instance}'."));
// Retrieve XML database schema definition.
Dictionary<String, String> xmlSchemas = GetSmlSchema(databaseInstance);
Dictionary<String, String> xmlSchemas = GetSmlSchemas(databaseInstance);
if (!xmlSchemas.Any())
return Json(responseData.SetMessage(messageTitle, "Failed to extract XML schema definitions."));
@@ -253,7 +264,7 @@ namespace Sarand.BusinessMgr.Web.Control.Controllers.System
return Json(responseData);
}
private Dictionary<String, String> GetSmlSchema(Sbm.Database databaseInstance)
private Dictionary<String, String> GetSmlSchemas(Sbm.Database databaseInstance)
{
Dictionary<String, String> schemas = new Dictionary<String, String>();
switch (databaseInstance)
@@ -264,6 +275,7 @@ namespace Sarand.BusinessMgr.Web.Control.Controllers.System
schemas.Add("SbmDbDfn_Control.xml", SacsResourceHelper.GetManifestResourceAsText(assembly, "", "SbmDbDfn_Control.xml"));
break;
}
case Sbm.Database.BusMgr:
case Sbm.Database.Template:
case Sbm.Database.Demo:
{
@@ -436,8 +448,15 @@ namespace Sarand.BusinessMgr.Web.Control.Controllers.System
if (databaseInstance <= 0)
return Json(responseData.SetMessage(messageTitle, "Database instance must be specified"));
// Context.
if (databaseInstance == Sbm.Database.BusMgr)
{
if (StringUtil.IsBlank(model.DatabaseFilter.Context))
return Json(responseData.SetMessage(messageTitle, "BusMgr Database context must be specified"));
}
// Database connection.
ISacsDatabase db = GetDatabase(databaseInstance);
ISacsDatabase db = GetDatabase(databaseInstance, model.DatabaseFilter.Context);
// Table definition.
DbDfnTable tableDfn = db.GetTableDfn(model.DatabaseTable.Name, true);