На самом деле, UtilElements можно использовать и для проверки сопоставления полей
При выполнении на клиенте, у меня получалось сопоставимое время с MappingExists_RU (процентов на 10 быстрее, правда, память никуда не течет, вот досада

). А вот при выполнении на сервере - разница уже в 5-6 раз не в пользу MappingExists_RU (и раза в два быстрее, чем на клиенте).
Ну и кэширование - тут без вопросов
Пара методов в класс Global - по использованию и результатам полностью аналогичны MappingExists_RU.
Отличие между методами: mappingExists_UE использует кэширование (класс MappingsInfoCache), а mappingExists_UENC - напрямую создает классы MappingsInfo_UE
X++:
static public boolean mappingExists_UE(tableId _mapId,
tableId _tableId,
fieldId _mapField = 0,
fieldId _tableField = 0)
{
boolean ok = false;
MappingsInfoCache mappingsInfoCache = MappingsInfoCache::Construct();
;
if (mappingsInfoCache && mappingsInfoCache.MappingTableExists(_mapId, _tableId))
{
if (_mapField || _tableField)
{
ok = mappingsInfoCache.MappingFieldExists(_mapId, _tableId, _mapField, _tableField);
}
else
ok = true;
}
return ok;
}
static public boolean mappingExists_UENC(tableId _mapId,
tableId _tableId,
fieldId _mapField = 0,
fieldId _tableField = 0)
{
boolean ok = false;
MappingsInfo_UE mappingsInfo = new MappingsInfo_UE(_mapId, _tableId);
;
if (mappingsInfo && mappingsInfo.MappingTableExists())
{
if (_mapField || _tableField)
{
ok = mappingsInfo.MappingFieldExists(_mapField, _tableField);
}
else
ok = true;
}
return ok;
}
Оба класса работаю как в DAX3.0 kr2 (сохранить приложенный xpo в кодировке ANSI), так и в DAX2009 SP5.
Думаю, в четверке тоже должно запускаться.