GeneXus Extensions - 如何知道与 table 关联的 DataStore?
GeneXus Extensions - How to know the DataStore associated to a table?
我需要制作一个 GeneXus 扩展,它通过默认数据存储的 tables(但不在其他数据存储中)进行某些检查。
了解与 table 关联的数据存储的最佳方式是什么?
我可以检查 table 是否被 DataView 引用,但也许有更好的方法。
目前没有直接解决此查询的 API。事物建模的方式是 DataView
是将 Table
关联到 DataStoreCategory
的实体。
检查 cross-reference 是缩小问题范围的好方法 space,尽管要确定给定的数据视图绑定到给定的 table,您必须检查 AssociatedTableKey
属性.
另一件要记住的事情是,可能有一个数据视图关联到默认数据存储中的 table,或者多个数据视图绑定到相同的 table 和不同的数据存储。
无法保证模型在任何时候都处于有效状态,决定如何处理这些情况可能会影响您构建查询的方式。
此示例查询 returns 所有 table 与数据存储相关联。如果有多个数据视图关联到 table,它会检查第一个是否属于给定的数据存储。
IEnumerable<Table> GetTablesInDataStore(DataStoreCategory ds)
{
foreach (EntityKey tblKey in Table.GetKeys(ds.Model))
{
if (IsInDataStore(tblKey, ds))
yield return Table.Get(ds.Model, tblKey.Id);
}
}
bool IsInDataStore(EntityKey tblKey, DataStoreCategory ds)
{
DataView dv = GetDataView(ds.Model, tblKey);
if (dv is null)
return ds.IsDefault;
else
return Artech.Genexus.Common.Properties.XFL.GetDatastore(dv).Identifier == ds.Id;
}
DataView GetDataView(KBModel model, EntityKey tblKey)
{
foreach (var r in model.GetReferencesTo(tblKey, LinkType.UsedObject, new[] { ObjClass.DataView }))
{
var dv = DataView.Get(model, r.From.Id);
if (dv.AssociatedTableKey == tblKey)
return dv;
}
return null;
}
我需要制作一个 GeneXus 扩展,它通过默认数据存储的 tables(但不在其他数据存储中)进行某些检查。
了解与 table 关联的数据存储的最佳方式是什么?
我可以检查 table 是否被 DataView 引用,但也许有更好的方法。
目前没有直接解决此查询的 API。事物建模的方式是 DataView
是将 Table
关联到 DataStoreCategory
的实体。
检查 cross-reference 是缩小问题范围的好方法 space,尽管要确定给定的数据视图绑定到给定的 table,您必须检查 AssociatedTableKey
属性.
另一件要记住的事情是,可能有一个数据视图关联到默认数据存储中的 table,或者多个数据视图绑定到相同的 table 和不同的数据存储。 无法保证模型在任何时候都处于有效状态,决定如何处理这些情况可能会影响您构建查询的方式。
此示例查询 returns 所有 table 与数据存储相关联。如果有多个数据视图关联到 table,它会检查第一个是否属于给定的数据存储。
IEnumerable<Table> GetTablesInDataStore(DataStoreCategory ds)
{
foreach (EntityKey tblKey in Table.GetKeys(ds.Model))
{
if (IsInDataStore(tblKey, ds))
yield return Table.Get(ds.Model, tblKey.Id);
}
}
bool IsInDataStore(EntityKey tblKey, DataStoreCategory ds)
{
DataView dv = GetDataView(ds.Model, tblKey);
if (dv is null)
return ds.IsDefault;
else
return Artech.Genexus.Common.Properties.XFL.GetDatastore(dv).Identifier == ds.Id;
}
DataView GetDataView(KBModel model, EntityKey tblKey)
{
foreach (var r in model.GetReferencesTo(tblKey, LinkType.UsedObject, new[] { ObjClass.DataView }))
{
var dv = DataView.Get(model, r.From.Id);
if (dv.AssociatedTableKey == tblKey)
return dv;
}
return null;
}