Skip to content
Snippets Groups Projects
Commit c62dafb1 authored by Sebastian Pongratz's avatar Sebastian Pongratz :ping_pong:
Browse files

Merge branch '2021.0_duplicates' into '2021.0'

2021.0 duplicates

See merge request xrm/basic!742
parents df671c04 9d0a859a
No related branches found
No related tags found
No related merge requests found
Showing
with 127 additions and 217 deletions
import("system.result");
import("Sql_lib");
var statement = SqlBuilder.caseStatement()
.when("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID is not null")
.thenString("0").elseString("1");
result.string(statement);
import("Sql_lib");
import("system.result");
result.string(newSelect("ORGANISATION.NAME").from("ORGANISATION")
.where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID").toString());
import("system.result");
import("Sql_lib");
result.string(newSelect("c.CONTACTID").from("CONTACT as c")
.where("c.ORGANISATION_ID = CONTACT.ORGANISATION_ID")
.and("c.PERSON_ID is null").toString());
import("system.result");
import("Communication_lib");
result.string(CommUtil.getStandardSubSqlMail());
import("system.result");
import("Communication_lib");
result.string(CommUtil.getStandardSubSqlPhone());
import("system.result");
import("Keyword_lib");
import("KeywordRegistry_basic");
result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contactStatus(), "CONTACT.STATUS"));
<?xml version="1.0" encoding="UTF-8"?>
<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18">
<name>DuplicateScannerResultFieldConfig_entity</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<recordContainer>recordContainer</recordContainer>
<entityFields>
<entityProvider>
<name>#PROVIDER</name>
</entityProvider>
<entityField>
<name>UID</name>
</entityField>
<entityField>
<name>ENTITY_FIELD_NAME</name>
<title>Entity field name</title>
</entityField>
<entityField>
<name>DATE_EDIT</name>
<valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js</valueProcess>
</entityField>
<entityField>
<name>DATE_NEW</name>
<valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js</valueProcess>
</entityField>
<entityField>
<name>USER_NEW</name>
<valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js</valueProcess>
</entityField>
<entityField>
<name>USER_EDIT</name>
<valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js</valueProcess>
</entityField>
<entityParameter>
<name>DuplicateScannerId_param</name>
<expose v="true" />
<mandatory v="true" />
</entityParameter>
<entityProvider>
<name>ScannerResultFieldConfigProvider</name>
<dependencies>
<entityDependency>
<name>119b48a5-ce78-4169-bd31-76e524cece99</name>
<entityName>DuplicateScanner_entity</entityName>
<fieldName>ScannerResultFieldsConfig_Consumer</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
</entityProvider>
<entityField>
<name>DUPLICATESCANNER_ID</name>
<valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js</valueProcess>
</entityField>
<entityProvider>
<name>#PROVIDER_AGGREGATES</name>
<useAggregates v="true" />
</entityProvider>
</entityFields>
<recordContainers>
<dbRecordContainer>
<name>recordContainer</name>
<conditionProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js</conditionProcess>
<alias>Data_alias</alias>
<recordFieldMappings>
<dbRecordFieldMapping>
<name>DATE_EDIT.value</name>
<recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DATE_EDIT</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>DATE_NEW.value</name>
<recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DATE_NEW</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>ENTITY_FIELD_NAME.value</name>
<recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.ENTITY_FIELD_NAME</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>UID.value</name>
<recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.ID</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>USER_EDIT.value</name>
<recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.USER_EDIT</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>USER_NEW.value</name>
<recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.USER_NEW</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>DUPLICATESCANNER_ID.value</name>
<recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DUPLICATESCANNER_ID</recordfield>
</dbRecordFieldMapping>
</recordFieldMappings>
<linkInformation>
<linkInformation>
<name>f7126f94-9e4c-46a0-8dc9-9e52fda1c7c0</name>
<tableName>DUPLICATESCANNERRESULTFIELDCONFIG</tableName>
<primaryKey>ID</primaryKey>
<isUIDTable v="false" />
<readonly v="false" />
</linkInformation>
</linkInformation>
</dbRecordContainer>
</recordContainers>
</entity>
import("system.util");
import("system.result");
import("system.neon");
import("system.vars");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
result.string(vars.get("$sys.date"));
\ No newline at end of file
import("system.util");
import("system.result");
import("system.neon");
import("system.vars");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
result.string(vars.get("$sys.date"));
\ No newline at end of file
import("system.result");
import("system.vars");
if(vars.get("$this.value") == null || vars.get("$this.value") == "")
{
result.string(vars.get("$param.DuplicateScannerId_param"));
}
\ No newline at end of file
import("system.util");
import("system.result");
import("system.neon");
import("system.vars");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
result.string(vars.get("$sys.user"));
\ No newline at end of file
import("system.util");
import("system.result");
import("system.neon");
import("system.vars");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
result.string(vars.get("$sys.user"));
\ No newline at end of file
import("system.vars");
import("system.result");
if (vars.get("$param.DuplicateScannerId_param"))
result.string(newWhere("DUPLICATESCANNERRESULTFIELDCONFIG.DUPLICATESCANNER_ID", "$param.DuplicateScannerId_param").toString());
\ No newline at end of file
......@@ -33,16 +33,6 @@
<contentType>BOOLEAN</contentType>
<valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/external_service_usage_allowed/valueProcess.js</valueProcess>
</entityField>
<entityActionGroup>
<name>TestActionGroup</name>
<children>
<entityActionField>
<name>TestDuplicateScanner</name>
<title>Test DuplicateSearch</title>
<onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js</onActionProcess>
</entityActionField>
</children>
</entityActionGroup>
<entityField>
<name>USER_NEW</name>
<valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/user_new/valueProcess.js</valueProcess>
......@@ -71,40 +61,36 @@
<state>AUTO</state>
<stateProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/scan_pattern/stateProcess.js</stateProcess>
</entityField>
<entityConsumer>
<name>ScannerResultFieldsConfig_Consumer</name>
<dependency>
<name>dependency</name>
<entityName>DuplicateScannerResultFieldConfig_entity</entityName>
<fieldName>ScannerResultFieldConfigProvider</fieldName>
</dependency>
<children>
<entityParameter>
<name>DuplicateScannerId_param</name>
<valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityProvider>
<name>#PROVIDER_AGGREGATES</name>
<useAggregates v="true" />
</entityProvider>
<entityActionGroup>
<name>RunActionGroup</name>
<documentation>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc</documentation>
<name>FilterActions</name>
<children>
<entityActionField>
<name>RebuildPersonDuplicatesCache</name>
<title>Rebuild Person duplicates cache</title>
<onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js</onActionProcess>
<name>rebuild</name>
<title>Rebuild selected entries</title>
<onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js</onActionProcess>
<isObjectAction v="false" />
<isSelectionAction v="true" />
<iconId>VAADIN:CALC</iconId>
<tooltip>Rebuild all duplicates from the selected scanners</tooltip>
</entityActionField>
<entityActionField>
<name>RebuildOrganisationDuplicatesCache</name>
<title>Rebuild Organisation duplicates cache</title>
<onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js</onActionProcess>
<name>viewDuplicates</name>
<title>View duplicates</title>
<onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js</onActionProcess>
<isSelectionAction v="true" />
<iconId>VAADIN:TABLE</iconId>
<tooltip>View all duplicates from this scanner</tooltip>
</entityActionField>
</children>
</entityActionGroup>
<entityProvider>
<name>#PROVIDER_AGGREGATES</name>
<useAggregates v="true" />
</entityProvider>
<entityField>
<name>DUPLICATECOUNT</name>
<title>Count</title>
</entityField>
</entityFields>
<recordContainers>
<dbRecordContainer>
......@@ -154,6 +140,11 @@
<name>SCAN_PATTERN.value</name>
<recordfield>DUPLICATESCANNER.SCAN_PATTERN</recordfield>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>DUPLICATECOUNT.value</name>
<expression>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js</expression>
<isFilterable v="true" />
</dbRecordFieldMapping>
</recordFieldMappings>
<linkInformation>
<linkInformation>
......
import("system.process");
import("system.logging");
import("system.entities");
import("system.vars");
import("DuplicateScanner_lib");
var selectedIds = vars.get("$sys.selection");
var loadConfig = entities.createConfigForLoadingRows()
.entity("DuplicateScanner_entity")
.uids(selectedIds)
.fields(["FILTER_NAME", "ENTITY_TO_SCAN_NAME", "ID_FIELD_NAME", "SCAN_PATTERN"]);
var selectedEntries = entities.getRows(loadConfig);
logging.log("Rebuilding " + selectedEntries.length + " entries");
selectedEntries.forEach(function(currEntry)
{
var filterName = currEntry["FILTER_NAME"];
var targetEntity = currEntry["ENTITY_TO_SCAN_NAME"];
var targetIdField = currEntry["ID_FIELD_NAME"];
var filter = JSON.parse(currEntry["SCAN_PATTERN"]);
var startConfig = process.createStartAsyncConfig()
.setName("rebuildDuplicates_serverProcess")
.setShowErrorDialog(true)
.setLocalVariables({
filterName: filterName,
targetEntity: targetEntity,
targetIdField: targetIdField,
filter: JSON.stringify(filter.filter)
})
.setUser(vars.get("$sys.user"))
.setTimerType(process.TIMERTYPE_SERVER);
process.startAsync(startConfig);
});
import("system.translate");
import("system.question");
import("system.vars");
import("system.neon");
import("system.entities");
import("Context_lib");
if(vars.get("$sys.selection").length == 1)
{
var config = entities.createConfigForLoadingRows()
.entity("DuplicateScanner_entity")
.uid(vars.get("$sys.selection")[0])
.fields(["ENTITY_TO_SCAN_NAME"]);
var scanner = entities.getRow(config);
var contextId = ContextUtils.getContextName(ContextUtils.getContextId(scanner["ENTITY_TO_SCAN_NAME"]));
neon.openContext(contextId, null, null, neon.OPERATINGSTATE_SEARCH, {
FilterPreSet_param: JSON.stringify({
type: "group",
operator: "AND",
childs: [{
type: "row",
name: "#EXTENSION.Duplicates_filter.Duplicates_filter#NUMBER",
operator: "GREATER",
value: "All Duplicates",
key: "0",
contenttype: "NUMBER"
}]
})
});
}
else
{
question.showMessage(translate.text("Please select only one element"));
}
import("system.logging");
import("system.logging");
import("DuplicateScanner_lib");
var filterName = "OrganisationDuplicates";
var targetEntity = "Organisation_entity";
var recordBlockSize = DuplicateScannerUtils.getBlockSize();
logging.log(filterName + ": Delete duplicates -> ");
DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
logging.log(filterName + ": Recalculate duplicates -> ");
DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null);
logging.log(filterName + ": Refresh unrelated duplicates -> ");
DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
logging.log(filterName + ": Done rebuilding ");
\ No newline at end of file
import("system.project");
import("system.logging");
import("DuplicateScanner_lib");
var filterName = "PersonDuplicates";
var targetEntity = "Person_entity";
var recordBlockSize = DuplicateScannerUtils.getBlockSize();
logging.log(filterName + ": Delete duplicates -> ");
DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity);
logging.log(filterName + ": Recalculate duplicates -> ");
DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null);
logging.log(filterName + ": Refresh unrelated duplicates -> ");
DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity);
logging.log(filterName + ": Done rebuilding ");
\ No newline at end of file
Since duplicate caching is disabled there is no need to show this action group within views at the moment.
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment