Цитата:
Сообщение от
kashperuk
Допустим у меня есть TableId и FieldId, где FieldId - это поле на таблице с TableId
Это поле - foreign key на другую таблицу, и для этой связи существует Table relation на таблице с TableId
Как мне это определить наиболее оптимальным способом?
я не знаю оптимального способа.
и не уверен, что для акс7 DictTable и DictField - правильные способы.
я знаю два способа:
1. через перекрестные ссылки
(могут содержать не актуальную и не полную информацию. зато запрос прямой как палка)
2. через DictTable, DictField
вот кусок кода для акс7 из моего пока приватного проекта по созданию ER-диаграм и dgml-диаграм.
этот кусок почти без изменений подойдет для любой версии.
X++:
SysDictTable dt = new SysDictTable(TableId);
...
//------ relations
SetEnumerator dre = dt.relations().getEnumerator();
while (dre.moveNext())
{
SysDictRelation dr = dre.current();
var member = dr.externTableName();
container ThisKey = conNull();
container OtherKey = conNull();
for(int l=1; l<=dr.lines(); l++)
{
try
{
var ThisKeyId = dr.lineTableValue(l);
var ThisKeyField = new SysDictField(dt.id(), ThisKeyId);
var ThisKeyName = ThisKeyField ? ThisKeyField.name() : strFmt("%1", ThisKeyId);
ThisKey += ThisKeyName;
Var OtherKeyId = dr.lineExternTableValue(l);
var OtherKeyField = new SysDictField(dr.externTable(), OtherKeyId);
var OtherKeyName = OtherKeyField ? OtherKeyField.name() : strFmt("%1", OtherKeyId);
OtherKey += OtherKeyName;
}
catch
{
exceptionTextFallThrough();
}
}
if( ThisKey && OtherKey )
{
this.appendNewXML(xmlType, 'Association', [
['Name', dr.name()],
['Member' , member],
['ThisKey', con2Str(ThisKey, ',')],
['OtherKey', con2Str(OtherKey, ',')],
['IsForeignKey', 'true'],
['Type', member]]);
}