Fix refEntity import-export

This commit is contained in:
Andrii Landiak 2025-02-19 17:36:06 +02:00
parent 44a7bf82c4
commit 4daf4ba988
3 changed files with 16 additions and 1 deletions

View File

@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.cf.CalculatedField;
import org.thingsboard.server.common.data.id.CalculatedFieldId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.sync.ie.EntityExportData;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.sync.vc.data.EntitiesExportCtx;
@ -32,6 +33,12 @@ public class CalculatedFieldExportService extends BaseEntityExportService<Calcul
@Override
protected void setRelatedEntities(EntitiesExportCtx<?> ctx, CalculatedField calculatedField, EntityExportData<CalculatedField> exportData) {
calculatedField.setEntityId(getExternalIdOrElseInternal(ctx, calculatedField.getEntityId()));
calculatedField.getConfiguration().getArguments().values().forEach(argument -> {
if (argument.getRefEntityId() != null) {
EntityId internalEntityId = getExternalIdOrElseInternal(ctx, argument.getRefEntityId());
argument.setRefEntityId(internalEntityId);
}
});
}
@Override

View File

@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.audit.ActionType;
import org.thingsboard.server.common.data.cf.CalculatedField;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.CalculatedFieldId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.sync.ie.EntityExportData;
import org.thingsboard.server.dao.cf.CalculatedFieldService;
@ -45,6 +46,12 @@ public class CalculatedFieldImportService extends BaseEntityImportService<Calcul
@Override
protected CalculatedField prepare(EntitiesImportCtx ctx, CalculatedField calculatedField, CalculatedField oldEntity, EntityExportData<CalculatedField> exportData, IdProvider idProvider) {
calculatedField.setEntityId(idProvider.getInternalId(calculatedField.getEntityId()));
calculatedField.getConfiguration().getArguments().values().forEach(argument -> {
if (argument.getRefEntityId() != null) {
EntityId internalEntityId = idProvider.getInternalId(argument.getRefEntityId());
argument.setRefEntityId(internalEntityId);
}
});
return calculatedField;
}

View File

@ -204,7 +204,7 @@ public class ExportImportServiceSqlTest extends AbstractControllerTest {
Asset asset = createAsset(tenantId1, null, assetProfile.getId(), "Asset 1");
DeviceProfile deviceProfile = createDeviceProfile(tenantId1, ruleChain.getId(), dashboard.getId(), "Device profile 1");
Device device = createDevice(tenantId1, null, deviceProfile.getId(), "Device 1");
CalculatedField calculatedField = createCalculatedField(tenantId1, device.getId(), device.getId());
CalculatedField calculatedField = createCalculatedField(tenantId1, device.getId(), asset.getId());
Map<EntityType, EntityExportData> entitiesExportData = Stream.of(customer.getId(), asset.getId(), device.getId(),
ruleChain.getId(), dashboard.getId(), assetProfile.getId(), deviceProfile.getId(), calculatedField.getId())
@ -364,6 +364,7 @@ public class ExportImportServiceSqlTest extends AbstractControllerTest {
CalculatedField exportedCalculatedField = (CalculatedField) exportEntity(tenantAdmin2, (CalculatedFieldId) ids.get(calculatedField.getId())).getEntity();
assertThat(exportedCalculatedField.getName()).isEqualTo(calculatedField.getName());
assertThat(exportedCalculatedField.getEntityId()).isEqualTo(device.getId());
assertThat(exportedCalculatedField.getConfiguration().getReferencedEntities()).isEqualTo(calculatedField.getConfiguration().getReferencedEntities());
deviceProfile.setDefaultDashboardId(null);
deviceProfileService.saveDeviceProfile(deviceProfile);