How to obtain the KB Data store

Unofficial Content

To get the data stores from a KB, make sure to add the Artech.Genexus.Common.dll reference to your project and define the following:

using Artech.Genexus.Common.ModelParts;
using Artech.Genexus.Common.Entities;

Use the Get Method from the Working model to return the Data store list.

DataStoresPart dss = kb.DesignModel.Environment.TargetModel.Parts.Get<DataStoresPart>();

You can iterate the list to get detailed information:

foreach (GxDataStore ds in dss.DataStores)
{
    Console.WriteLine(string.Format("Datastore {0} default?{1} DBMS:{2}", ds.DataStoreCategory.Name, ds.DataStoreCategory.IsDefault,ds.Dbms));
} 

Advanced Sample:

using System.Collections.Generic; 
using System.Text; 
using System.Windows.Forms; 
using Artech.Architecture.Common.Objects; 
using Artech.Packages.Genexus.Common.Entities; 
using Artech.Packages.Genexus.Common.ModelParts; 
namespace Foo {
	public class Bar { 
		public static void ProcessDataStores() { 
			ProcessDataStores(KnowledgeBase.KB.DesignModel); 
			ProcessDataStores(KnowledgeBase.KB.WorkingModel); 
		} 
		public static void ProcessDataStores(KBModel kbModel) { 
			GxModel gxModel = kbModel.GetAs<gxmodel>(); 
			StringBuilder builder = new StringBuilder(); 
			foreach (GxDataStore dataStore in gxModel.DataStores) 
			{ 
				string line = string.Format("{0}: {1}({2})", 
				dataStore.DataStoreCategory.Name, 
				dataStore.Description, 
				dataStore.Dbms); 
				builder.AppendLine(line); 
			} 
			string caption = string.Format("DataStores of '{0}' model", kbModel.Name); 
			MessageBox.Show(builder.ToString(), caption); 
		}
	}
}