diff --git a/entity/Appointment_entity/entityfields/newactivity/onActionProcess.js b/entity/Appointment_entity/entityfields/newactivity/onActionProcess.js index dee096dc42852294e12d6b87c3e77ac60c2689f5..58834f8f20c9a23e4391afc08a50ad567d1b16b2 100644 --- a/entity/Appointment_entity/entityfields/newactivity/onActionProcess.js +++ b/entity/Appointment_entity/entityfields/newactivity/onActionProcess.js @@ -1,23 +1,25 @@ -import("system.db"); import("KeywordRegistry_basic"); -import("Contact_lib"); import("system.vars"); import("ActivityTask_lib"); -import("Context_lib"); -import("Sql_lib"); +import("system.entities"); -var uid = vars.get("$field.UID"); +var appointmentLinkConfig = entities.createConfigForLoadingConsumerRows().consumer("AppointmentLinks") + .fields(["OBJECTID", "OBJECTTYPE"]); +var appointmentLinks = entities.getRows(appointmentLinkConfig); -var objectdata = newSelect("OBJECT_TYPE, OBJECT_ROWID") - .from("AB_APPOINTMENTLINK") - .where("AB_APPOINTMENTLINK.APPOINTMENT_ID", "$field.UID") - .arrayRow(); - -var links = []; - -if (objectdata.length > 0) -{ - links.push(objectdata); +//filter only for objectTypes that may bet set in Activity (In AppointmentLink_entity there can be linked more objects than in the ActivityLink_entity) +//this needs to be done if links exists, otherwise we can spare this for better performance +if (appointmentLinks.length > 0) +{ + var availableActivityObjectTypesSet = ActivityUtils.getLinkableObjectTypes(); + var links = []; + appointmentLinks.forEach(function(appointmentLink){ + var linkType = appointmentLink["OBJECTTYPE"]; + var isLinkableType = availableActivityObjectTypesSet.has(linkType); + if (isLinkableType) + links.push([linkType, appointmentLink["OBJECTID"]]); + }); } -ActivityUtils.createNewActivity(undefined, links, ContextUtils.getCurrentContextId(), vars.get("$field.UID"), vars.get("$field.SUMMARY"), vars.get("$field.DESCRIPTION"), $KeywordRegistry.activityDirection$outgoing()); +//pParentContext and pParentId have been set to null because an appoint can not be the predecessor of an activity at the moment +ActivityUtils.createNewActivity(undefined, links, null, null, vars.get("$field.SUMMARY"), vars.get("$field.DESCRIPTION"), $KeywordRegistry.activityDirection$outgoing()); diff --git a/process/ActivityTask_lib/process.js b/process/ActivityTask_lib/process.js index b3b2b927cbb84804190b0474f677228f7671704d..9f832ead826c346818381f5a22e25aca20eacb78 100644 --- a/process/ActivityTask_lib/process.js +++ b/process/ActivityTask_lib/process.js @@ -1,3 +1,4 @@ +import("system.entities"); import("system.vars"); import("system.util"); import("system.datetime"); @@ -24,6 +25,31 @@ import("Context_lib"); */ function ActivityUtils() {} + +/** + * Determines object types (=context ids) by loading them from the Context_entity.ActivityLinkable provider. + * + * @return {Set} <br/>Set that contains the context ids as string elements + * @example + * var linkableTypes = ActivityUtils.getLinkableObjectTypes(); + * linkableTypes.has("Organisation");//true + * linkableTypes.has("Actvity");//false + */ +ActivityUtils.getLinkableObjectTypes = function() +{ + var entityConfig = entities.createConfigForLoadingRows().entity("Context_entity") + .fields(["UID"])//UID contains the technical name + .provider("ActivityLinkable"); + var availableActivityObjectTypes = entities.getRows(entityConfig); + var res = new Set(); + for (var i = 0, l = availableActivityObjectTypes.length; i < l; i++) + { + if (availableActivityObjectTypes[i]["UID"]) + res.add(availableActivityObjectTypes[i]["UID"]); + } + return res; +}; + /** * Create a new activity within the database-scope. * This funciton will insert a complete new activity into the database.