CoreBOSBB
How to relate records the correct way and use event handlers on them - Printable Version

+- CoreBOSBB (https://discussions.corebos.org)
+-- Forum: Development (https://discussions.corebos.org/forumdisplay.php?fid=18)
+--- Forum: coreBOS Development (https://discussions.corebos.org/forumdisplay.php?fid=4)
+--- Thread: How to relate records the correct way and use event handlers on them (/showthread.php?tid=681)



How to relate records the correct way and use event handlers on them - Guido1982 - 07-05-2017

A copy/paste from a Gitter discussion that might be usefull:


@Luke1982
09:13

Guys, I have a question. I'm creating a workflow that handles the first save of a Schedular record. I'd like this workflow to take into account the related module records I set in vtiger_crmentityrel. But those only get set AFTER I save the record for the first time, because I need the new record's ID. Now I'm thinking about using the value in vtiger_crmentity_seq to save the related records BEFORE I save the Schedular record. But the danger here is maybe that when multiple people are working in the CRM at the same time, this value could be wrong. But I'm not sure how PHP handles this. Are all other scripts blocked as long as I'm executing my script? Because then, I could use this value without the risk of it changing between setting the related modules and saving the record.

@Luke1982
09:22
Hmm, reading into this I see I can write-lock the table and release that lock when I'm done. I think I'll give that a go.

@joebordes
09:33
I would recommend an event handler
Instead of a workflow
coreBOS.link.after
(I think)
Or is it mandatory that it be a workflow?

@Luke1982
09:36
Would that event trigger after the full save script I created is done? Because basically, this is the save script: https://github.com/Luke1982/newSchedular/blob/master/modules/Schedular/ajax.php#L325-L381. If the event handler triggers on the save method, I still would have no related records saved yet, because I have no ID to link them to.
No that is not a requirement per se.

@joebordes
09:44
Link event gets launched when the two records are related
Right before and after the insert in crmentityrel

@Luke1982
09:46
Ah OK, but only if you use vtlib I think? I place them into the DB directly.

@joebordes
09:46
https://github.com/tsolucio/corebos/blob/master/build/HelperScripts/coreBOSEventsExample.php#L50
yes, correct but that is easy to fix

@Luke1982
09:48
That's true. Do you have a hint where this method lives?
And when it was introduced? This module needs to work on an older installation

@joebordes
09:49
https://github.com/tsolucio/corebos/blob/master/modules/Vtiger/updateRelations.php#L40
Use related entities function
That has been there since May 2015

@Luke1982
09:51
That should be OK I think.

@Luke1982
10:10
One question
When corebos.entity.link.after is fired, and the 'handleEvent' function receives the 'entityData' param, is that entity data the data of the LINKED module record, or the SOURCE module record?

@joebordes
10:12
Both
You get the name of both modules and both crmid
Look at the first link I pasted
In the coreboseventexample script

@Luke1982
10:14
You mean this: $entityData['destinationModule'].' '.$entityData['destinationRecordId']?

@joebordes
10:15
Yes
And the other two
source*

@Luke1982
10:17
So I could retrieve the linked module record through new $entityData['destinationModule'](); and then get the entity info through retrieve_entity_info()?

@joebordes
10:18
Sounds good