In case someone else need this... I wrote a rule to accomplish this:
application testdynamicactivation
rule module testdynamicactivation_rules
group testdynamicactivation
{
rule testdynamicactivation
activated by EVT_1 of BizLogic::PI_DATASLOTSSET{PROCESSTEMPLATENAME : "testdynamicactivation"}
{
val blServer = getBLServer();
val session = getBLSession();
val pi = blServer.getProcessInstance(session, EVT_1.PROCESSINSTANCENAME);
val wsi = pi.getWorkStepInstance("Activity");
val dateds = cast(~com.savvion.sbm.bizlogic.server.svo.DateTime) pi.getDataSlotValue("ActivationDateTime");
val dateLong= dateds.getTime();
if (dateLong>~java.lang.System::currentTimeMillis()){
wsi.setActivationTime(dateLong);}
else
{wsi.setActivationTime(~java.lang.System::currentTimeMillis()+10000);}
wsi.save();
}
}
Note that it only captures "PI_DATASLOTSET" which is fine assuming the dataslot updates only come from the "dataslot view" in the portal. If the dataslot updates come from an API call or through a dataslot change in a workstep, the problem becomes increasingly complex.