Optimization: map the extended attribute code to the corresponding external field when this if possible (ex: org_id->name to org_name); this reduces the number of queries, in particular when using the "export CSV" menu on a list.

SVN:trunk[3069]
This commit is contained in:
Romain Quetiez
2014-02-03 14:35:05 +00:00
parent 868748efb3
commit 6334370ef0
2 changed files with 37 additions and 11 deletions

View File

@@ -871,15 +871,32 @@ abstract class MetaModel
final static public function GetExternalFields($sClass, $sKeyAttCode)
{
$aExtFields = array();
foreach (self::ListAttributeDefs($sClass) as $sAttCode => $oAtt)
static $aExtFields = array();
if (!isset($aExtFields[$sClass][$sKeyAttCode]))
{
if ($oAtt->IsExternalField() && ($oAtt->GetKeyAttCode() == $sKeyAttCode))
$aExtFields[$sClass][$sKeyAttCode] = array();
foreach (self::ListAttributeDefs($sClass) as $sAttCode => $oAtt)
{
$aExtFields[] = $oAtt;
if ($oAtt->IsExternalField() && ($oAtt->GetKeyAttCode() == $sKeyAttCode))
{
$aExtFields[$sClass][$sKeyAttCode][$oAtt->GetExtAttCode()] = $oAtt;
}
}
}
return $aExtFields;
return $aExtFields[$sClass][$sKeyAttCode];
}
final static public function FindExternalField($sClass, $sKeyAttCode, $sRemoteAttCode)
{
$aExtFields = self::GetExternalFields($sClass, $sKeyAttCode);
if (isset($aExtFields[$sRemoteAttCode]))
{
return $aExtFields[$sRemoteAttCode];
}
else
{
return null;
}
}
final static public function GetExtKeyFriends($sClass, $sExtKeyAttCode)