コード例 #1
0
 /**
  * Start a workflow based on a particular definition for a particular object.
  *
  * The object is optional; if not specified, it is assumed that this workflow
  * is simply a task based checklist type of workflow.
  *
  * @param WorkflowDefinition $definition
  * @param DataObject $for
  */
 public function beginWorkflow(WorkflowDefinition $definition, DataObject $for = null)
 {
     if (!$this->ID) {
         $this->write();
     }
     if ($for && ($for->hasExtension('WorkflowApplicable') || $for->hasExtension('FileWorkflowApplicable'))) {
         $this->TargetClass = ClassInfo::baseDataClass($for);
         $this->TargetID = $for->ID;
     }
     // lets create the first WorkflowActionInstance.
     $action = $definition->getInitialAction()->getInstanceForWorkflow();
     $action->WorkflowID = $this->ID;
     $action->write();
     $title = $for && $for->hasField('Title') ? sprintf(_t('WorkflowInstance.TITLE_FOR_DO', '%s - %s'), $definition->Title, $for->Title) : sprintf(_t('WorkflowInstance.TITLE_STUB', 'Instance #%s of %s'), $this->ID, $definition->Title);
     $this->Title = $title;
     $this->DefinitionID = $definition->ID;
     $this->CurrentActionID = $action->ID;
     $this->InitiatorID = Member::currentUserID();
     $this->write();
     $this->Users()->addMany($definition->Users());
     $this->Groups()->addMany($definition->Groups());
 }