Ejemplo n.º 1
0
        protected internal virtual void CreateMultiInstanceLoopCharacteristics(BpmnParse bpmnParse, Activity modelActivity)
        {
            MultiInstanceLoopCharacteristics loopCharacteristics = modelActivity.LoopCharacteristics;

            // Activity Behavior
            MultiInstanceActivityBehavior miActivityBehavior;

            if (loopCharacteristics.Sequential)
            {
                miActivityBehavior = bpmnParse.ActivityBehaviorFactory.CreateSequentialMultiInstanceBehavior(modelActivity, (AbstractBpmnActivityBehavior)modelActivity.Behavior);
            }
            else
            {
                miActivityBehavior = bpmnParse.ActivityBehaviorFactory.CreateParallelMultiInstanceBehavior(modelActivity, (AbstractBpmnActivityBehavior)modelActivity.Behavior);
            }

            modelActivity.Behavior = miActivityBehavior;

            ExpressionManager expressionManager = Context.ProcessEngineConfiguration.ExpressionManager;

            // loop cardinality
            if (!string.IsNullOrWhiteSpace(loopCharacteristics.LoopCardinality))
            {
                miActivityBehavior.LoopCardinalityExpression = expressionManager.CreateExpression(loopCharacteristics.LoopCardinality);
            }

            // completion condition
            if (!string.IsNullOrWhiteSpace(loopCharacteristics.CompletionCondition))
            {
                miActivityBehavior.CompletionConditionExpression = expressionManager.CreateExpression(loopCharacteristics.CompletionCondition);
            }

            // activiti:collection
            if (!string.IsNullOrWhiteSpace(loopCharacteristics.InputDataItem))
            {
                if (loopCharacteristics.InputDataItem.Contains("{"))
                {
                    miActivityBehavior.CollectionExpression = expressionManager.CreateExpression(loopCharacteristics.InputDataItem);
                }
                else
                {
                    miActivityBehavior.CollectionVariable = loopCharacteristics.InputDataItem;
                }
            }

            // activiti:elementVariable
            if (!string.IsNullOrWhiteSpace(loopCharacteristics.ElementVariable))
            {
                miActivityBehavior.CollectionElementVariable = loopCharacteristics.ElementVariable;
            }

            // activiti:elementIndexVariable
            if (!string.IsNullOrWhiteSpace(loopCharacteristics.ElementIndexVariable))
            {
                miActivityBehavior.CollectionElementIndexVariable = loopCharacteristics.ElementIndexVariable;
            }
        }
Ejemplo n.º 2
0
        public virtual ModifiableBpmnModelInstance asyncAfterInnerMiActivity(string activityId)
        {
            Activity activity = modelInstance.getModelElementById(activityId);

            MultiInstanceLoopCharacteristics miCharacteristics = (MultiInstanceLoopCharacteristics)activity.getUniqueChildElementByType(typeof(MultiInstanceLoopCharacteristics));

            miCharacteristics.CamundaAsyncAfter = true;

            return(this);
        }
Ejemplo n.º 3
0
        protected internal virtual void HandleMultiInstanceLoopCharacteristics(Process process, Activity activity, IList <ValidationError> errors)
        {
            MultiInstanceLoopCharacteristics multiInstanceLoopCharacteristics = activity.LoopCharacteristics;

            if (multiInstanceLoopCharacteristics != null)
            {
                if (string.IsNullOrWhiteSpace(multiInstanceLoopCharacteristics.LoopCardinality) && string.IsNullOrWhiteSpace(multiInstanceLoopCharacteristics.InputDataItem))
                {
                    AddError(errors, ProblemsConstants.MULTI_INSTANCE_MISSING_COLLECTION, process, activity, "Either loopCardinality or loopDataInputRef/activiti:collection must been set");
                }
            }
        }
Ejemplo n.º 4
0
 public static void WriteMultiInstance(Activity activity, XMLStreamWriter xtw)
 {
     if (activity.LoopCharacteristics != null)
     {
         MultiInstanceLoopCharacteristics multiInstanceObject = activity.LoopCharacteristics;
         if (!string.IsNullOrWhiteSpace(multiInstanceObject.LoopCardinality) || !string.IsNullOrWhiteSpace(multiInstanceObject.InputDataItem) || !string.IsNullOrWhiteSpace(multiInstanceObject.CompletionCondition))
         {
             xtw.WriteStartElement(BpmnXMLConstants.BPMN_PREFIX, BpmnXMLConstants.ELEMENT_MULTIINSTANCE, BpmnXMLConstants.BPMN2_NAMESPACE);
             BpmnXMLUtil.WriteDefaultAttribute(BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_SEQUENTIAL, multiInstanceObject.Sequential ? "true" : "false", xtw);
             if (!string.IsNullOrWhiteSpace(multiInstanceObject.InputDataItem))
             {
                 BpmnXMLUtil.WriteQualifiedAttribute(BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_COLLECTION, multiInstanceObject.InputDataItem, xtw);
             }
             if (!string.IsNullOrWhiteSpace(multiInstanceObject.ElementVariable))
             {
                 BpmnXMLUtil.WriteQualifiedAttribute(BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_VARIABLE, multiInstanceObject.ElementVariable, xtw);
             }
             if (!string.IsNullOrWhiteSpace(multiInstanceObject.LoopCardinality))
             {
                 xtw.WriteStartElement(BpmnXMLConstants.BPMN_PREFIX, BpmnXMLConstants.ELEMENT_MULTIINSTANCE_CARDINALITY, BpmnXMLConstants.BPMN2_NAMESPACE);
                 xtw.WriteCharacters(multiInstanceObject.LoopCardinality);
                 xtw.WriteEndElement();
             }
             if (!string.IsNullOrWhiteSpace(multiInstanceObject.CompletionCondition))
             {
                 xtw.WriteStartElement(BpmnXMLConstants.BPMN_PREFIX, BpmnXMLConstants.ELEMENT_MULTIINSTANCE_CONDITION, BpmnXMLConstants.BPMN2_NAMESPACE);
                 xtw.WriteCharacters(multiInstanceObject.CompletionCondition);
                 xtw.WriteEndElement();
             }
             xtw.WriteEndElement();
         }
         else
         {
             xtw.WriteStartElement(BpmnXMLConstants.BPMN_PREFIX, BpmnXMLConstants.ELEMENT_MULTIINSTANCE, BpmnXMLConstants.BPMN2_NAMESPACE);
             BpmnXMLUtil.WriteDefaultAttribute(BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_SEQUENTIAL, multiInstanceObject.Sequential ? "true" : "false", xtw);
             xtw.WriteEndElement();
         }
     }
 }
 public MultiInstanceActivityBehavior(ActivityBehavior innerActivityBehavior,
                                      MultiInstanceLoopCharacteristics loopCharacteristics) : base(innerActivityBehavior)
 {
     this.loopCharacteristics = loopCharacteristics;
 }
 public SequentialMultiInstanceActivityBehavior(ActivityBehavior innerActivityBehavior,
                                                MultiInstanceLoopCharacteristics loopCharacteristics)
     : base(innerActivityBehavior, loopCharacteristics)
 {
 }
Ejemplo n.º 7
0
        public override void ParseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model)
        {
            if (!(parentElement is Activity))
            {
                return;
            }
            MultiInstanceLoopCharacteristics multiInstanceDef = new MultiInstanceLoopCharacteristics();

            BpmnXMLUtil.AddXMLLocation(multiInstanceDef, xtr);
            if (xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_SEQUENTIAL) != null)
            {
                multiInstanceDef.Sequential = Convert.ToBoolean(xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_SEQUENTIAL));
            }
            multiInstanceDef.InputDataItem        = xtr.GetAttributeValue(BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE, BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_COLLECTION);
            multiInstanceDef.ElementVariable      = xtr.GetAttributeValue(BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE, BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_VARIABLE);
            multiInstanceDef.ElementIndexVariable = xtr.GetAttributeValue(BpmnXMLConstants.ACTIVITI_EXTENSIONS_NAMESPACE, BpmnXMLConstants.ATTRIBUTE_MULTIINSTANCE_INDEX_VARIABLE);

            bool readyWithMultiInstance = false;

            try
            {
                while (!readyWithMultiInstance && xtr.HasNext())
                {
                    //xtr.next();

                    if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_MULTIINSTANCE_CARDINALITY.Equals(xtr.LocalName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        multiInstanceDef.LoopCardinality = xtr.ElementText;
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_MULTIINSTANCE_DATAINPUT.Equals(xtr.LocalName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        multiInstanceDef.InputDataItem = xtr.ElementText;
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_MULTIINSTANCE_DATAITEM.Equals(xtr.LocalName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        if (xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_NAME) != null)
                        {
                            multiInstanceDef.ElementVariable = xtr.GetAttributeValue(BpmnXMLConstants.ATTRIBUTE_NAME);
                        }
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_MULTIINSTANCE_CONDITION.Equals(xtr.LocalName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        multiInstanceDef.CompletionCondition = xtr.ElementText;
                    }
                    else if (xtr.EndElement && ElementName.Equals(xtr.LocalName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        readyWithMultiInstance = true;
                    }

                    if (xtr.IsEmptyElement && ElementName.Equals(xtr.LocalName, StringComparison.OrdinalIgnoreCase))
                    {
                        readyWithMultiInstance = true;
                    }
                }
            }
            catch (Exception e)
            {
                log.LogWarning(e, "Error parsing multi instance definition");
            }
            ((Activity)parentElement).LoopCharacteristics = multiInstanceDef;
        }
Ejemplo n.º 8
0
 protected internal AbstractMultiInstanceLoopCharacteristicsBuilder(BpmnModelInstance modelInstance, MultiInstanceLoopCharacteristics element, Type selfType) : base(modelInstance, element, selfType)
 {
 }
Ejemplo n.º 9
0
        public virtual MultiInstanceLoopCharacteristicsBuilder multiInstance()
        {
            MultiInstanceLoopCharacteristics miCharacteristics = createChild(typeof(MultiInstanceLoopCharacteristics));

            return(miCharacteristics.builder());
        }