예제 #1
0
            public Void call()
            {
                ProcessInstanceModificationBuilderImpl builder = (ProcessInstanceModificationBuilderImpl)(new ProcessInstanceModificationBuilderImpl(commandContext, superExecution.ProcessInstanceId, deleteReason)).cancelActivityInstance(superExecution.ActivityInstanceId);

                builder.execute(false, skipCustomListeners, skipIoMappings);
                return(null);
            }
예제 #2
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: protected org.camunda.bpm.engine.impl.ProcessInstanceModificationBuilderImpl createProcessInstanceModificationBuilder(final String processInstanceId, final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext)
        protected internal virtual ProcessInstanceModificationBuilderImpl createProcessInstanceModificationBuilder(string processInstanceId, CommandContext commandContext)
        {
            ProcessInstanceModificationBuilderImpl             processInstanceModificationBuilder = new ProcessInstanceModificationBuilderImpl(commandContext, processInstanceId);
            IList <AbstractProcessInstanceModificationCommand> operations = processInstanceModificationBuilder.ModificationOperations;

            ActivityInstance activityInstanceTree = null;

            foreach (AbstractProcessInstanceModificationCommand instruction in builder.Instructions)
            {
                instruction.ProcessInstanceId = processInstanceId;

                if (!(instruction is ActivityCancellationCmd) || !((ActivityCancellationCmd)instruction).CancelCurrentActiveActivityInstances)
                {
                    operations.Add(instruction);
                }
                else
                {
                    if (activityInstanceTree == null)
                    {
                        activityInstanceTree = commandContext.runWithoutAuthorization(new CallableAnonymousInnerClass(this, processInstanceId, commandContext));
                    }

                    ActivityCancellationCmd cancellationInstruction = (ActivityCancellationCmd)instruction;
                    IList <AbstractInstanceCancellationCmd> cmds    = cancellationInstruction.createActivityInstanceCancellations(activityInstanceTree, commandContext);
                    ((IList <AbstractProcessInstanceModificationCommand>)operations).AddRange(cmds);
                }
            }

            return(processInstanceModificationBuilder);
        }
예제 #3
0
        public virtual ProcessInstanceWithVariables execute(CommandContext commandContext)
        {
            ProcessDefinitionEntity processDefinition = (new GetDeployedProcessDefinitionCmd(instantiationBuilder, false)).execute(commandContext);

            foreach (CommandChecker checker in commandContext.ProcessEngineConfiguration.CommandCheckers)
            {
                checker.checkCreateProcessInstance(processDefinition);
            }

            ProcessInstanceModificationBuilderImpl modificationBuilder = instantiationBuilder.ModificationBuilder;

            ensureNotEmpty("At least one instantiation instruction required (e.g. by invoking startBefore(..), startAfter(..) or startTransition(..))", "instructions", modificationBuilder.ModificationOperations);

            // instantiate the process
            ActivityImpl initialActivity = determineFirstActivity(processDefinition, modificationBuilder);

            ExecutionEntity processInstance = processDefinition.createProcessInstance(instantiationBuilder.BusinessKey, instantiationBuilder.CaseInstanceId, initialActivity);

            if (!string.ReferenceEquals(instantiationBuilder.TenantId, null))
            {
                processInstance.TenantId = instantiationBuilder.TenantId;
            }

            processInstance.SkipCustomListeners = modificationBuilder.SkipCustomListeners;
            VariableMap variables = modificationBuilder.ProcessVariables;

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.persistence.entity.ExecutionVariableSnapshotObserver variablesListener = new org.camunda.bpm.engine.impl.persistence.entity.ExecutionVariableSnapshotObserver(processInstance);
            ExecutionVariableSnapshotObserver variablesListener = new ExecutionVariableSnapshotObserver(processInstance);

            processInstance.startWithoutExecuting(variables);

            // prevent ending of the process instance between instructions
            processInstance.PreserveScope = true;

            // apply modifications
            IList <AbstractProcessInstanceModificationCommand> instructions = modificationBuilder.ModificationOperations;

            for (int i = 0; i < instructions.Count; i++)
            {
                AbstractProcessInstanceModificationCommand instruction = instructions[i];
                LOG.debugStartingInstruction(processInstance.Id, i, instruction.describe());

                instruction.ProcessInstanceId   = processInstance.Id;
                instruction.SkipCustomListeners = modificationBuilder.SkipCustomListeners;
                instruction.SkipIoMappings      = modificationBuilder.SkipIoMappings;
                instruction.execute(commandContext);
            }

            if (!processInstance.hasChildren() && processInstance.Ended)
            {
                // process instance has ended regularly but this has not been propagated yet
                // due to preserveScope setting
                processInstance.propagateEnd();
            }

            commandContext.OperationLogManager.logProcessInstanceOperation(org.camunda.bpm.engine.history.UserOperationLogEntry_Fields.OPERATION_TYPE_CREATE, processInstance.Id, processInstance.ProcessDefinitionId, processInstance.getProcessDefinition().Key, Collections.singletonList(PropertyChange.EMPTY_CHANGE));

            return(new ProcessInstanceWithVariablesImpl(processInstance, variablesListener.Variables));
        }
예제 #4
0
        /// <summary>
        ///     get the activity that is started by the first instruction, if exists;
        ///     return null if the first instruction is a start-transition instruction
        /// </summary>
        protected internal virtual ActivityImpl DetermineFirstActivity(ProcessDefinitionImpl processDefinition,
                                                                       ProcessInstanceModificationBuilderImpl modificationBuilder)
        {
            var firstInstruction = modificationBuilder.ModificationOperations[0];

            if (firstInstruction is AbstractInstantiationCmd)
            {
                var instantiationInstruction = (AbstractInstantiationCmd)firstInstruction;
                var targetElement            = instantiationInstruction.GetTargetElement(processDefinition);

                EnsureUtil.EnsureNotNull(typeof(NotValidException),
                                         "Element '" + instantiationInstruction.TargetElementId + "' does not exist in process " +
                                         processDefinition.Id, "targetElement", targetElement);

                if (targetElement is ActivityImpl)
                {
                    return((ActivityImpl)targetElement);
                }
                if (targetElement is TransitionImpl)
                {
                    return((ActivityImpl)((TransitionImpl)targetElement).Destination);
                }
            }

            return(null);
        }
예제 #5
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: @Override public Void execute(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext)
        public override Void execute(CommandContext commandContext)
        {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.Collection<String> processInstanceIds = collectProcessInstanceIds();
            ICollection <string> processInstanceIds = collectProcessInstanceIds();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.List<AbstractProcessInstanceModificationCommand> instructions = builder.getInstructions();
            IList <AbstractProcessInstanceModificationCommand> instructions = builder.Instructions;

            ensureNotEmpty(typeof(BadUserRequestException), "Restart instructions cannot be empty", "instructions", instructions);
            ensureNotEmpty(typeof(BadUserRequestException), "Process instance ids cannot be empty", "Process instance ids", processInstanceIds);
            ensureNotContainsNull(typeof(BadUserRequestException), "Process instance ids cannot be null", "Process instance ids", processInstanceIds);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.camunda.bpm.engine.impl.persistence.entity.ProcessDefinitionEntity processDefinition = getProcessDefinition(commandContext, builder.getProcessDefinitionId());
            ProcessDefinitionEntity processDefinition = getProcessDefinition(commandContext, builder.ProcessDefinitionId);

            ensureNotNull("Process definition cannot be found", "processDefinition", processDefinition);

            checkAuthorization(commandContext, processDefinition);

            if (writeUserOperationLog)
            {
                writeUserOperationLog(commandContext, processDefinition, processInstanceIds.Count, false);
            }

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final String processDefinitionId = builder.getProcessDefinitionId();
            string processDefinitionId = builder.ProcessDefinitionId;

            ThreadStart runnable = () =>
            {
                foreach (string processInstanceId in processInstanceIds)
                {
                    HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(commandContext, processInstanceId);

                    ensureNotNull(typeof(BadUserRequestException), "Historic process instance cannot be found", "historicProcessInstanceId", historicProcessInstance);
                    ensureHistoricProcessInstanceNotActive(historicProcessInstance);
                    ensureSameProcessDefinition(historicProcessInstance, processDefinitionId);

                    ProcessInstantiationBuilderImpl instantiationBuilder = getProcessInstantiationBuilder(commandExecutor, processDefinitionId);
                    applyProperties(instantiationBuilder, processDefinition, historicProcessInstance);

                    ProcessInstanceModificationBuilderImpl modificationBuilder = instantiationBuilder.ModificationBuilder;
                    modificationBuilder.ModificationOperations = instructions;

                    VariableMap variables = collectVariables(commandContext, historicProcessInstance);
                    instantiationBuilder.Variables = variables;

                    instantiationBuilder.execute(builder.SkipCustomListeners, builder.SkipIoMappings);
                }
            };

            ProcessApplicationContextUtil.doContextSwitch(runnable, processDefinition);

            return(null);
        }
예제 #6
0
        public override object Execute(CommandContext commandContext)
        {
            IList <AbstractProcessInstanceModificationCommand> instructions = builder.Instructions;
            ICollection <string> processInstanceIds = CollectProcessInstanceIds(commandContext);

            EnsureUtil.EnsureNotEmpty(typeof(BadUserRequestException), "Modification instructions cannot be empty", instructions);
            EnsureUtil.EnsureNotEmpty(typeof(BadUserRequestException), "Process instance ids cannot be empty", "Process instance ids", processInstanceIds);
            EnsureUtil.EnsureNotContainsNull(typeof(BadUserRequestException), "Process instance ids cannot be null", "Process instance ids", processInstanceIds);

            ProcessDefinitionEntity processDefinition = GetProcessDefinition(commandContext, builder.ProcessDefinitionId);

            EnsureUtil.EnsureNotNull(typeof(BadUserRequestException), "Process definition id cannot be null", processDefinition);

            if (writeUserOperationLog)
            {
                WriteUserOperationLog(commandContext, processDefinition, processInstanceIds.Count, false);
            }

            bool skipCustomListeners = builder.SkipCustomListeners;
            bool skipIoMappings      = builder.SkipIoMappings;

            foreach (string processInstanceId in processInstanceIds)
            {
                ExecutionEntity processInstance = commandContext.ExecutionManager.FindExecutionById(processInstanceId);

                EnsureProcessInstanceExist(processInstanceId, processInstance);
                EnsureSameProcessDefinition(processInstance, processDefinition.Id);

                ProcessInstanceModificationBuilderImpl builder = new ProcessInstanceModificationBuilderImpl(commandContext, processInstanceId);
                SetProcessInstanceId(instructions, processInstanceId);
                builder.ModificationOperations = instructions;

                builder.Execute(false, skipCustomListeners /*, skipIoMappings*/);
            }

            return(null);
        }
예제 #7
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: @Override public Void execute(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext)
        public override Void execute(CommandContext commandContext)
        {
            IList <AbstractProcessInstanceModificationCommand> instructions = builder.Instructions;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.Collection<String> processInstanceIds = collectProcessInstanceIds(commandContext);
            ICollection <string> processInstanceIds = collectProcessInstanceIds(commandContext);

            ensureNotEmpty(typeof(BadUserRequestException), "Modification instructions cannot be empty", instructions);
            ensureNotEmpty(typeof(BadUserRequestException), "Process instance ids cannot be empty", "Process instance ids", processInstanceIds);
            ensureNotContainsNull(typeof(BadUserRequestException), "Process instance ids cannot be null", "Process instance ids", processInstanceIds);

            ProcessDefinitionEntity processDefinition = getProcessDefinition(commandContext, builder.ProcessDefinitionId);

            ensureNotNull(typeof(BadUserRequestException), "Process definition id cannot be null", processDefinition);

            if (writeUserOperationLog)
            {
                writeUserOperationLog(commandContext, processDefinition, processInstanceIds.Count, false);
            }

            bool skipCustomListeners = builder.SkipCustomListeners;
            bool skipIoMappings      = builder.SkipIoMappings;

            foreach (string processInstanceId in processInstanceIds)
            {
                ExecutionEntity processInstance = commandContext.ExecutionManager.findExecutionById(processInstanceId);

                ensureProcessInstanceExist(processInstanceId, processInstance);
                ensureSameProcessDefinition(processInstance, processDefinition.Id);

                ProcessInstanceModificationBuilderImpl builder = createProcessInstanceModificationBuilder(processInstanceId, commandContext);
                builder.execute(false, skipCustomListeners, skipIoMappings);
            }

            return(null);
        }
예제 #8
0
 public ModifyProcessInstanceCmd(ProcessInstanceModificationBuilderImpl processInstanceModificationBuilder)
 {
     Builder = processInstanceModificationBuilder;
 }
예제 #9
0
 public ModifyProcessInstanceAsyncCmd(ProcessInstanceModificationBuilderImpl processInstanceModificationBuilder)
 {
     this.builder = processInstanceModificationBuilder;
 }
예제 #10
0
 public ModifyProcessInstanceCmd(ProcessInstanceModificationBuilderImpl processInstanceModificationBuilder, bool writeOperationLog)
 {
     this.builder           = processInstanceModificationBuilder;
     this.writeOperationLog = writeOperationLog;
 }
예제 #11
0
 public ModifyProcessInstanceCmd(ProcessInstanceModificationBuilderImpl processInstanceModificationBuilder) : this(processInstanceModificationBuilder, true)
 {
 }