protected internal virtual void UpdateVariableInstance(IVariableInstanceEntity variableInstance, object value, IExecutionEntity sourceActivityExecution) { // Always check if the type should be altered. It's possible that the // previous type is lower in the type // checking chain (e.g. serializable) and will return true on // isAbleToStore(), even though another type // higher in the chain is eligible for storage. IVariableTypes variableTypes = Context.ProcessEngineConfiguration.VariableTypes; IVariableType newType = variableTypes.FindVariableType(value); if (newType != null && !newType.Equals(variableInstance.Type)) { variableInstance.Value = null; variableInstance.Type = newType; variableInstance.ForceUpdate(); variableInstance.Value = value; } else { variableInstance.Value = value; } Context.CommandContext.HistoryManager.RecordHistoricDetailVariableCreate(variableInstance, sourceActivityExecution, ActivityIdUsedForDetails); Context.CommandContext.HistoryManager.RecordVariableUpdate(variableInstance); }
protected internal virtual IVariableInstanceEntity CreateVariableInstance(string variableName, object value, IExecutionEntity sourceActivityExecution) { IVariableTypes variableTypes = Context.ProcessEngineConfiguration.VariableTypes; IVariableType type = variableTypes.FindVariableType(value); IVariableInstanceEntity variableInstance = Context.CommandContext.VariableInstanceEntityManager.Create(variableName, type, value); InitializeVariableInstanceBackPointer(variableInstance); Context.CommandContext.VariableInstanceEntityManager.Insert(variableInstance); if (variableInstances != null) { variableInstances[variableName] = variableInstance; } // Record historic variable Context.CommandContext.HistoryManager.RecordVariableCreate(variableInstance); // Record historic detail Context.CommandContext.HistoryManager.RecordHistoricDetailVariableCreate(variableInstance, sourceActivityExecution, ActivityIdUsedForDetails); return(variableInstance); }
public virtual void Initialize(IVariableTypes types) { if (variableInstanceEntity == null) { IVariableType type = types.FindVariableType(value); if (type is ByteArrayType) { throw new ActivitiIllegalArgumentException("Variables of type ByteArray cannot be used to query"); } else if (type is IEntityVariableType && @operator != QueryOperator.EQUALS) { throw new ActivitiIllegalArgumentException("JPA entity variables can only be used in 'variableValueEquals'"); } else if (type is IEntityListVariableType) { throw new ActivitiIllegalArgumentException("Variables containing a list of JPA entities cannot be used to query"); } else { // Type implementation determines which fields are set on the entity variableInstanceEntity = Context.CommandContext.VariableInstanceEntityManager.Create(name, type, value); } } }