чем только люди в Омске не развлекаются!
теперь по делу.
1. не понял, где будем обсуждать - тут или там, где сама статья (по умолчанию буду тут)
2. "Пожалуй уже всем надоело каждый раз выискивать подходящий метод" - не в том дело, что надоело, а в том, что его иногда просто нет. это ж вопрос воспитания: добавил рилейшон - добавь метод!
3. если интересует настоящая расширяемость, когда код пишется один раз, а дальше хоть трава не расти, то вот мои reflections по этому поводу:
X++:
static void wzhGetRelatedTableNames(Args _args)
{
wblInExtCodeValueTable wblInExtCodeValueTable;
int mapId;
TableName relatedTableName;
TableId relatedTableId;
Set tablesIdsSet = new Set(Types::Integer);
Set tablesNamesSet = new Set(Types::String);
TableId tableId = tableName2id(tableStr(wblInExtCodeValueTable));
Dictionary dictionary = new Dictionary();
SysDictTable dictTable = dictionary.tableObject(tableId);
DictRelation dictRelation = new DictRelation(wblInExtCodeValueTable.TableId);
int mapCnt = dictTable.relationCnt();
container ret ;
str relationName;
//create a maps of literals for all tables from the table relations
// so that we could get tables names based on their ids
// and if any new relation will be added to multiple external codes table
// it is present automatically in this view
for (mapId=1; mapId <= mapCnt; mapId++)
{
// elaborate if any table present many times
relationName = dictTable.relation(mapId);
dictRelation.loadNameRelation(relationName);
if(dictRelation)
{
relatedTableId = dictRelation.externTable();
relatedTableName = tableId2pname(relatedTableId);
tablesIdsSet.add(relatedTableId);
tablesNamesSet.add(relatedTableName);
info(strFmt("Table %1 - %2", relatedTableId, relatedTableName));
}
}
ret = [tablesIdsSet.pack(), tablesNamesSet.pack()];
}
а дальше там уже находи и открывай, чего хочется.
я сделал через table map
связь внешних кодов 1:N