protected function permitLookupDatasetStorageChanges(DataControllerCallContext $callcontext, DatasetMetaData $originalLogicalDataset, DatasetMetaData $modifiedLogicalDataset) { $metamodel = data_controller_get_metamodel(); $originalPrimaryKeyColumnName = $originalLogicalDataset->getKeyColumn()->name; // checking if the primary key changed $doesPrimaryKeyMatch = FALSE; $modifiedPrimaryKeyColumnNames = $modifiedLogicalDataset->findKeyColumnNames(); if (count($modifiedPrimaryKeyColumnNames) == 1) { $modifiedPrimaryKeyColumnName = reset($modifiedPrimaryKeyColumnNames); $doesPrimaryKeyMatch = $originalPrimaryKeyColumnName == $modifiedPrimaryKeyColumnName; } if ($doesPrimaryKeyMatch) { return; } // checking if this dataset was used as lookup somewhere foreach ($metamodel->datasets as $dataset) { foreach ($dataset->getColumns(FALSE, TRUE) as $column) { if ($column->type->getReferencedDatasetName() == $originalLogicalDataset->name) { throw new IllegalArgumentException(t( '%datasetName dataset is referenced by other datasets. Changes to the primary key is not permitted unless the references are removed first', array('%datasetName' => $modifiedLogicalDataset->publicName))); } } } }