BUG-14767 "Error in designer reusing connector - syncronization..." SOLVED

- Error in designer reusing connector - syncronization error with classic diagram
- Solved problem
  * Set new generated UIDs (activity, event, ...) in data flow
  * Added code when is update of flow
This commit is contained in:
Victor Saisa Lopez
2014-07-02 12:15:18 -04:00
parent 5c168fb122
commit 05c8a45bef

View File

@@ -242,17 +242,7 @@ class BpmnWorkflow extends Project\Bpmn
$this->wp->setStartTask($data["FLO_ELEMENT_DEST"]); $this->wp->setStartTask($data["FLO_ELEMENT_DEST"]);
} }
// update case scheduler $this->updateEventStartObjects($data["FLO_ELEMENT_ORIGIN"], $data["FLO_ELEMENT_DEST"]);
if ($event && $event->getEvnType() == "START" && $event->getEvnMarker() == "TIMER") {
$caseSchedulerData = array('TAS_UID'=>$data["FLO_ELEMENT_DEST"]);
$this->wp->updateCaseScheduler($data["FLO_ELEMENT_ORIGIN"], $caseSchedulerData);
}
// update web entry
if ($event && $event->getEvnType() == "START" && $event->getEvnMarker() == "MESSAGE") {
$webEntryData = array('TAS_UID'=>$data["FLO_ELEMENT_DEST"]);
$this->wp->updateWebEntry($data["FLO_ELEMENT_ORIGIN"], $webEntryData);
}
break; break;
} }
break; break;
@@ -275,10 +265,72 @@ class BpmnWorkflow extends Project\Bpmn
return $floUid; return $floUid;
} }
// public function updateFlow($floUid, $data, $flows) public function updateFlow($floUid, $data, $flows)
// { {
// parent::updateFlow($floUid, $data); $flowBefore = \BpmnFlowPeer::retrieveByPK($floUid);
// }
parent::updateFlow($floUid, $data);
$flowCurrent = \BpmnFlowPeer::retrieveByPK($floUid);
//Verify case: Event1(start) -> Activity1 -----Update-to----> Event1(start) -> Activity2
if ($flowBefore->getFloElementOriginType() == "bpmnEvent" && $flowBefore->getFloElementDestType() == "bpmnActivity" &&
$flowCurrent->getFloElementOriginType() == "bpmnEvent" && $flowCurrent->getFloElementDestType() == "bpmnActivity" &&
$flowBefore->getFloElementOrigin() == $flowCurrent->getFloElementOrigin() &&
$flowBefore->getFloElementDest() != $flowCurrent->getFloElementDest()
) {
$event = \BpmnEventPeer::retrieveByPK($flowBefore->getFloElementOrigin());
if (!is_null($event) && $event->getEvnType() == "START") {
//Remove as start task
$this->wp->setStartTask($flowBefore->getFloElementDest(), false);
//Setting as start task
$this->wp->setStartTask($flowCurrent->getFloElementDest());
$this->updateEventStartObjects($flowCurrent->getFloElementOrigin(), $flowCurrent->getFloElementDest());
}
}
//Verify case: Activity1 -> Event1(end) -----Update-to----> Activity2 -> Event1(end)
if ($flowBefore->getFloElementOriginType() == "bpmnActivity" && $flowBefore->getFloElementDestType() == "bpmnEvent" &&
$flowCurrent->getFloElementOriginType() == "bpmnActivity" && $flowCurrent->getFloElementDestType() == "bpmnEvent" &&
$flowBefore->getFloElementOrigin() != $flowCurrent->getFloElementOrigin() &&
$flowBefore->getFloElementDest() == $flowCurrent->getFloElementDest()
) {
$event = \BpmnEventPeer::retrieveByPK($flowBefore->getFloElementDest());
if (!is_null($event) && $event->getEvnType() == "END") {
//Remove as end task
$this->wp->setEndTask($flowBefore->getFloElementOrigin(), false);
//Setting as end task
$this->wp->setEndTask($flowCurrent->getFloElementOrigin());
}
}
//Verify case: Activity1 -> Event1(end) -----Update-to----> Activity1 -> Activity2
if ($flowBefore->getFloElementOriginType() == "bpmnActivity" && $flowBefore->getFloElementDestType() == "bpmnEvent" &&
$flowCurrent->getFloElementOriginType() == "bpmnActivity" && $flowCurrent->getFloElementDestType() == "bpmnActivity" &&
$flowBefore->getFloElementOrigin() == $flowCurrent->getFloElementOrigin()
) {
$event = \BpmnEventPeer::retrieveByPK($flowBefore->getFloElementDest());
if (!is_null($event) && $event->getEvnType() == "END") {
//Remove as end task
$this->wp->setEndTask($flowBefore->getFloElementOrigin(), false);
}
}
//Verify case: Activity1 -> Activity2 -----Update-to----> Activity1 -> Activity3
if ($flowBefore->getFloElementOriginType() == "bpmnActivity" && $flowBefore->getFloElementDestType() == "bpmnActivity" &&
$flowCurrent->getFloElementOriginType() == "bpmnActivity" && $flowCurrent->getFloElementDestType() == "bpmnActivity" &&
$flowBefore->getFloElementOrigin() == $flowCurrent->getFloElementOrigin() &&
$flowBefore->getFloElementDest() != $flowCurrent->getFloElementDest()
) {
$this->wp->removeRouteFromTo($flowBefore->getFloElementOrigin(), $flowBefore->getFloElementDest());
}
}
public function removeFlow($floUid) public function removeFlow($floUid)
{ {
@@ -299,18 +351,7 @@ class BpmnWorkflow extends Project\Bpmn
} }
} }
// update case scheduler $this->updateEventStartObjects($flow->getFloElementOrigin(), "");
if (! is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "TIMER") {
$caseSchedulerData = array( 'TAS_UID'=>'' );
$this->wp->updateCaseScheduler($flow->getFloElementOrigin(), $caseSchedulerData);
}
// update web entry
if (! is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "MESSAGE") {
$webEntryData = array( 'TAS_UID'=>'' );
$this->wp->updateWebEntry($flow->getFloElementOrigin(), $webEntryData);
}
} elseif ($flow->getFloElementOriginType() == "bpmnActivity" && } elseif ($flow->getFloElementOriginType() == "bpmnActivity" &&
$flow->getFloElementDestType() == "bpmnEvent") { $flow->getFloElementDestType() == "bpmnEvent") {
// verify case: activity -> event(end) // verify case: activity -> event(end)
@@ -380,6 +421,21 @@ class BpmnWorkflow extends Project\Bpmn
parent::removeEvent($data); parent::removeEvent($data);
} }
public function updateEventStartObjects($eventUid, $taskUid)
{
$event = \BpmnEventPeer::retrieveByPK($eventUid);
//Update case scheduler
if (!is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "TIMER") {
$this->wp->updateCaseScheduler($eventUid, array("TAS_UID" => $taskUid));
}
//Update web entry
if (!is_null($event) && $event->getEvnType() == "START" && $event->getEvnMarker() == "MESSAGE") {
$this->wp->updateWebEntry($eventUid, array("TAS_UID" => $taskUid));
}
}
public function mapBpmnFlowsToWorkflowRoutes() public function mapBpmnFlowsToWorkflowRoutes()
{ {
$activities = $this->getActivities(); $activities = $this->getActivities();
@@ -455,7 +511,6 @@ class BpmnWorkflow extends Project\Bpmn
)); ));
} }
break; break;
default: default:
throw new \LogicException(sprintf("Unsupported Gateway type: %s", $gateway['GAT_TYPE'])); throw new \LogicException(sprintf("Unsupported Gateway type: %s", $gateway['GAT_TYPE']));
} }
@@ -885,6 +940,17 @@ class BpmnWorkflow extends Project\Bpmn
} }
} }
//Update UIDs
foreach ($result as $value) {
if ($flowData["FLO_ELEMENT_ORIGIN"] == $value["old_uid"]) {
$flowData["FLO_ELEMENT_ORIGIN"] = $value["new_uid"];
}
if ($flowData["FLO_ELEMENT_DEST"] == $value["old_uid"]) {
$flowData["FLO_ELEMENT_DEST"] = $value["new_uid"];
}
}
$diagram["flows"][$i] = $flowData; $diagram["flows"][$i] = $flowData;
$whiteList[] = $flowData["FLO_UID"]; $whiteList[] = $flowData["FLO_UID"];
} }