diff --git a/core/bulkchange.class.inc.php b/core/bulkchange.class.inc.php index 491852a22a..89bfdd0fa3 100644 --- a/core/bulkchange.class.inc.php +++ b/core/bulkchange.class.inc.php @@ -335,10 +335,22 @@ class BulkChange } // Check that any external key will have a value proposed - // Could be said once for all rows !!! - foreach(MetaModel::ListAttributeDefs($this->m_sClass) as $sAttCode=>$oAtt) + $aMissingKeys = array(); + foreach (MetaModel::GetExternalKeys($this->m_sClass) as $sExtKeyAttCode => $oExtKey) { - if (!$oAtt->IsExternalKey()) continue; + if (!$oExtKey->IsNullAllowed()) + { + if (!array_key_exists($sExtKeyAttCode, $this->m_aExtKeys) && !array_key_exists($sExtKeyAttCode, $this->m_aAttList)) + { + $aMissingKeys[] = $oExtKey->GetLabel(); + } + } + } + if (count($aMissingKeys) > 0) + { + $sMissingKeys = implode(', ', $aMissingKeys); + $aResult[$iRow]["__STATUS__"] = new RowStatus_Issue("Could not be created, due to missing external key(s): $sMissingKeys"); + return; } // Optionaly record the results diff --git a/pages/csvimport.php b/pages/csvimport.php index 0110e1f53b..4d8911e773 100644 --- a/pages/csvimport.php +++ b/pages/csvimport.php @@ -393,6 +393,7 @@ function DoProcessOrVerify($oPage, $sClass, CMDBChange $oChange = null) $aSampleData = $oCSVParser->ToArray(array_keys($aFieldMap), 5); $aDisplayConfig = array(); + $aExtKeys = array(); foreach ($aFieldMap as $sFieldId=>$sColDesc) { if (array_key_exists($sFieldId, $aIsReconcKey)) @@ -417,11 +418,16 @@ function DoProcessOrVerify($oPage, $sClass, CMDBChange $oChange = null) $sAttCode = $sColDesc; $sLabel = MetaModel::GetAttributeDef($sClass, $sAttCode)->GetLabel(); $aDisplayConfig[$sFieldId] = array("label"=>"$sLabel$sReconcKey", "description"=>""); + if (MetaModel::IsValidKeyAttCode($sClass, $sAttCode)) + { + $aExtKeys[] = $sAttCode; + } } elseif (IsExtKeyField($sColDesc)) { list($sExtKeyAttCode, $sForeignAttCode) = GetExtKeyFieldCodes($sColDesc); $aDisplayConfig[$sFieldId] = array("label"=>MakeExtFieldLabel($sClass, $sExtKeyAttCode, $sForeignAttCode), "description"=>""); + $aExtKeys[] = $sExtKeyAttCode; } else { @@ -437,17 +443,39 @@ function DoProcessOrVerify($oPage, $sClass, CMDBChange $oChange = null) } else { + $oPage->p("