/// <inheritdoc />
        protected override bool InternalExecute(ProcessExecutingContext context)
        {
            bool isRedo = (Status == ProcessStatus.Error && CurrentActivityId == Guid.Empty &&
                           !ProcessUserTaskUtilities.GetIsActivityCreated(UserConnection, UId));
            bool isRunning = !CurrentActivityId.Equals(Guid.Empty) && !IsActivityCompleted;

            if (!isRunning || isRedo)
            {
                var            editMode = (RecordEditMode)Enum.ToObject(typeof(RecordEditMode), EditMode);
                bool           isActivityEntitySchema = GetIsActivityEntitySchema();
                Entity         activity      = null;
                IProcessEngine processEngine = UserConnection.ProcessEngine;
                if (isActivityEntitySchema)
                {
                    if (editMode == RecordEditMode.New)
                    {
                        activity = CreateActivity();
                        RecordId = CurrentActivityId;
                    }
                    else
                    {
                        CurrentActivityId = RecordId;
                    }
                }
                else
                {
                    Entity           accompaningActivity  = CreateAccompaningActivity();
                    CoreEntitySchema activityEntitySchema = GetActivityEntitySchema();
                    Guid             resultColumnUId      = activityEntitySchema.Columns.GetByName("Status").UId;
                    processEngine.AddProcessListener(accompaningActivity, UId,
                                                     GetConditionData(resultColumnUId, accompaningActivity));
                    if (editMode == RecordEditMode.New)
                    {
                        RecordId = Guid.NewGuid();
                    }
                }
                string serializedFilters = IsMatchConditions && DataSourceFilters.IsNotNullOrEmpty()
                                        ? ConvertToProcessDataSourceFilters(ObjectSchemaId, DataSourceFilters)
                                        : null;
                if (activity == null)
                {
                    if (editMode != RecordEditMode.New)
                    {
                        processEngine.AddProcessListener(RecordId, ObjectSchemaId, UId, serializedFilters);
                    }
                    else
                    {
                        processEngine.AddProcessListener(RecordId, ObjectSchemaId, UId, null, null,
                                                         EntityChangeType.Inserted);
                    }
                }
                else
                {
                    processEngine.AddProcessListener(activity, UId, serializedFilters);
                }
            }
            InteractWithUser(context, isRunning, ShowExecutionPage);
            return(false);
        }
Esempio n. 2
0
        protected override bool InternalExecute(ProcessExecutingContext context)
        {
            if (Status == ProcessStatus.Error)
            {
                if (CurrentActivityId == Guid.Empty &&
                    !ProcessUserTaskUtilities.GetIsActivityCreated(UserConnection, UId))
                {
                    Activity activity = CreateActivity();
                    AfterActivitySaveScriptExecute(activity);
                }
            }
            bool isRunning = CurrentActivityId.IsNotEmpty() && !IsActivityCompleted;

            if (!isRunning)
            {
                Activity activity = CreateActivity();
                AfterActivitySaveScriptExecute(activity);
            }
            InteractWithUser(context, isRunning, ShowExecutionPage);
            return(false);
        }
Esempio n. 3
0
        public bool Execute(IEmailUserTaskMessageProvider messageProvider, ProcessExecutingContext context)
        {
            var  userTask            = messageProvider.EmailUserTask;
            Guid activityId          = userTask.ActivityId;
            bool showExecutionPage   = userTask.ShowExecutionPage;
            bool isActivityCompleted = userTask.IsActivityCompleted;
            bool isRunning           = activityId.IsNotEmpty() && !isActivityCompleted;

            if (userTask.Status == ProcessStatus.Error)
            {
                bool isActivityCreated = ProcessUserTaskUtilities.GetIsActivityCreated(UserConnection, userTask.UId);
                if (activityId.IsEmpty() && !isActivityCreated)
                {
                    InternalExecute(messageProvider);
                }
            }
            if (!isRunning)
            {
                InternalExecute(messageProvider);
            }
            userTask.InteractWithUser(context, isRunning, showExecutionPage);
            return(false);
        }