diff --git a/entity-management-common/src/main/java/eu/europeana/entitymanagement/common/config/EntityManagementConfiguration.java b/entity-management-common/src/main/java/eu/europeana/entitymanagement/common/config/EntityManagementConfiguration.java index ae387bcc..45c9961b 100644 --- a/entity-management-common/src/main/java/eu/europeana/entitymanagement/common/config/EntityManagementConfiguration.java +++ b/entity-management-common/src/main/java/eu/europeana/entitymanagement/common/config/EntityManagementConfiguration.java @@ -157,6 +157,9 @@ public class EntityManagementConfiguration implements InitializingBean { @Value("${zoho.sync.register.deprecated: false}") private boolean registerDeprecated; + @Value("${zoho.sync.delete.offset.days: 10}") + private int zohoSyncDeleteOffsetDays; + @Value("${europeana.item.data.endpoint:'http://data.europeana.eu/item'}") private String itemDataEndpoint; @@ -486,5 +489,9 @@ public String getRoleVocabularyFilename() { public Map getCountryIdMappings() { return countryIdMappings; } + + public int getZohoSyncDeleteOffsetDays() { + return zohoSyncDeleteOffsetDays; + } } diff --git a/entity-management-web/src/main/java/eu/europeana/entitymanagement/web/service/ZohoSyncService.java b/entity-management-web/src/main/java/eu/europeana/entitymanagement/web/service/ZohoSyncService.java index 5f56dbbb..9fa0e5d2 100644 --- a/entity-management-web/src/main/java/eu/europeana/entitymanagement/web/service/ZohoSyncService.java +++ b/entity-management-web/src/main/java/eu/europeana/entitymanagement/web/service/ZohoSyncService.java @@ -83,15 +83,16 @@ public ZohoSyncReport synchronizeModifiedZohoOrganizations() throws EntityUpdate public ZohoSyncReport synchronizeZohoOrganizations(@NonNull OffsetDateTime modifiedSince) throws EntityUpdateException { + OffsetDateTime deletedSince = modifiedSince.minusDays(emConfiguration.getZohoSyncDeleteOffsetDays()); if (logger.isInfoEnabled()) { - logger.info("Synchronizing organizations updated after date: {}", modifiedSince); + logger.info("Synchronizing organizations updated after date: {}, and delete after date :{}", modifiedSince, deletedSince); } ZohoSyncReport zohoSyncReport = new ZohoSyncReport(new Date()); - // synchronize updated + // synchronize updated in Zoho synchronizeZohoOrganizations(modifiedSince, zohoSyncReport); // synchronize deleted in zoho - synchronizeDeletedZohoOrganizations(modifiedSince, zohoSyncReport); + synchronizeDeletedZohoOrganizations(deletedSince, zohoSyncReport); logger.info("Zoho update operations completed successfully:\n {}", zohoSyncReport); diff --git a/entity-management-web/src/main/resources/entitymanagement.user.properties.template b/entity-management-web/src/main/resources/entitymanagement.user.properties.template index 11a60ed8..d6a9698c 100644 --- a/entity-management-web/src/main/resources/entitymanagement.user.properties.template +++ b/entity-management-web/src/main/resources/entitymanagement.user.properties.template @@ -48,6 +48,9 @@ europeana.searchapi.urlPrefix=https:///record/v2/search.json?wskey #enable/disable generation of entity ids for organizations (should be enabled only in productive environment) #zoho.generate.organization.europeanaid=false +#offset (days before last sync) for fetching deleted organizations +#zoho.sync.delete.offset.days=0 + #configuration files for zoho country and role mappings #zoho.country.mapping=zoho_country_mapping.json #zoho.role.mapping=zoho_role_mapping.json diff --git a/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/ZohoAccessClient.java b/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/ZohoAccessClient.java index 399db40e..48f8f56c 100644 --- a/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/ZohoAccessClient.java +++ b/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/ZohoAccessClient.java @@ -19,6 +19,7 @@ import com.zoho.api.authenticator.store.TokenStore; import com.zoho.crm.api.HeaderMap; import com.zoho.crm.api.Initializer; +import com.zoho.crm.api.Param; import com.zoho.crm.api.ParameterMap; import com.zoho.crm.api.SDKConfig; import com.zoho.crm.api.UserSignature; @@ -296,6 +297,9 @@ public List getZohoDeletedRecordOrganizations(OffsetDateTime modi paramInstance.add(GetDeletedRecordsParam.TYPE, "all"); // all, recycle, permanent paramInstance.add(GetDeletedRecordsParam.PAGE, 1); paramInstance.add(GetDeletedRecordsParam.PER_PAGE, pageSize); + Param scopeParam = new Param("scope", "com.zoho.crm.api.Record.GetDeletedRecordsParam"); + paramInstance.add(scopeParam, "ZohoCRM.modules.ALL"); + HeaderMap headersMap = new HeaderMap(); if (modifiedSince != null) { headersMap.add(GetRecordsHeader.IF_MODIFIED_SINCE, modifiedSince); diff --git a/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/organization/ZohoOrganizationConverter.java b/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/organization/ZohoOrganizationConverter.java index 346d54ad..39c2d17d 100644 --- a/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/organization/ZohoOrganizationConverter.java +++ b/entity-management-zoho/src/main/java/eu/europeana/entitymanagement/zoho/organization/ZohoOrganizationConverter.java @@ -243,7 +243,8 @@ private static List getAllSameAs(Record zohoRecord) { * @return the name of the owner */ public static String getOwnerName(Record recordOrganization) { - return ((User) recordOrganization.getKeyValue(ZohoConstants.ZOHO_OWNER_FIELD)).getName(); + Object keyValue = recordOrganization.getKeyValue(ZohoConstants.ZOHO_OWNER_FIELD); + return ((User) keyValue).getName(); } /**