diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index c8c9b4469fdac2b91adb9f3dc8f724b8a70d1c91..0635d3468e34ac2cae511945b81049a7e5488265 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1123,6 +1123,28 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <name>IndexPhoneticFirstname</name> <valueProcess>%aditoprj%/entity/Person_entity/entityfields/indexphoneticfirstname/valueProcess.js</valueProcess> </entityField> + <entityConsumer> + <name>SelfDuplicatesUncached</name> + <dependency> + <name>dependency</name> + <entityName>Person_entity</entityName> + <fieldName>SelfDuplicatesProvider</fieldName> + </dependency> + <children> + <entityParameter> + <name>DuplicateActionsControl_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>DuplicateCurrentContactId_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>OnlyShowContactIds_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..81570217c3ecd3cf76deb5e14d7ac0a6121a59bb --- /dev/null +++ b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("1");//todo use keyword \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..821415ae694dd9c3d98a7703f4c59b81a37f524b --- /dev/null +++ b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.vars"); +import("system.result"); +result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e6e230e4586c88bdb54b48fdd7c795c95fb79047 --- /dev/null +++ b/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js @@ -0,0 +1,52 @@ +import("system.indexsearch"); +import("system.project"); +import("system.logging"); +import("system.vars"); +import("DuplicateScanner_lib"); +import("system.result"); + +let targetEntity = "Person_entity"; +let valuesToCheck = {}; +var entityModel = project.getEntityStructure(targetEntity); + + //Read the values of all available entity fields and write the fieldname7value combination + //as key/value pairs into an object. This is used to trigger the scan for duplicates +let fieldValue = ""; +let entityFields = []; +for (fieldname in entityModel.fields) +{ + field = entityModel.fields[fieldname]; + if(field.fieldType == project.ENTITYFIELDTYPE_FIELD) + { + fieldValue = vars.get("$field." + field.name); + + if(fieldValue != null && fieldValue != "") + { +// logging.log("field.name -> " + field.name); + valuesToCheck[field.name] = fieldValue; +// logging.log("field value -> " + fieldValue); + } + } +} + +let scanResults = DuplicateScannerUtils.ScanForDuplicates("PersonDuplicates", targetEntity, +valuesToCheck, null); + +let duplicateIds = []; +//Run thru every duplicate result and read out the id. +//Do it now to have a simple array on all usages lateron. +for (let i = 0; i < scanResults.length; i++) +{ + let duplicateContactId = scanResults[i][indexsearch.FIELD_ID]; + duplicateIds.push(duplicateContactId); +} +logging.log("duplicateIds.length -> " + duplicateIds.length); +/* + * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the + * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates. + * Because of its invalidity, no records are shown. +*/ +if(duplicateIds.length == 0) + result.string(JSON.stringify(["nodata"])); +else + result.string(JSON.stringify(duplicateIds)); \ No newline at end of file diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index 527484f8846118dd84eb544f6b16f4e3a30e21c4..d9124c0e81f13c34cb9851f254eb12b38e981e8b 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -69,5 +69,10 @@ <entityField>SelfDuplicates</entityField> <view>PersonFilter_view</view> </neonViewReference> + <neonViewReference> + <name>d8db5358-3aed-46d9-8e57-1fd093eb92ad</name> + <entityField>SelfDuplicatesUncached</entityField> + <view>PersonFilter_view</view> + </neonViewReference> </children> </neonView>