protected override bool InternalExecute(ProcessExecutingContext context)
        {
            ProcessSchemaManager processSchemaManager = UserConnection.ProcessSchemaManager;
            Guid uid = ProcessSchemaUId;

            if (processSchemaManager.FindItemByUId(ProcessSchemaUId) == null)
            {
                uid = ((Select) new Select(UserConnection).Top(1)
                       .Column("UId")
                       .From("SysSchema")
                       .Where("Id").IsEqual(Column.Parameter(ProcessSchemaUId)))
                      .ExecuteScalar <Guid>();
            }
            ProcessSchema processSchema = GetProcessSchema(uid);

            if (!processSchema.Enabled)
            {
                return(true);
            }
            Dictionary <string, string> nameValueMap = new Dictionary <string, string>();

            if (!string.IsNullOrWhiteSpace(CustomPropertyValues))
            {
                nameValueMap = Common.Json.Json.Deserialize <Dictionary <string, string> >(CustomPropertyValues);
            }
            nameValueMap["OpportunityId"] = OpportunityId.ToString();
            if (CanUseFlowEngine(processSchema))
            {
                RunFlowEngineProcess(processSchema, nameValueMap);
            }
            else
            {
                Process process = processSchema.CreateProcess(UserConnection);
                foreach (KeyValuePair <string, string> keyValuePair in nameValueMap)
                {
                    var parameter = processSchema.Parameters.FindByName(keyValuePair.Key);
                    if (parameter != null)
                    {
                        var valueType = parameter.DataValueType.ValueType;
                        System.ComponentModel.TypeConverter typeConverter =
                            System.ComponentModel.TypeDescriptor.GetConverter(valueType);
                        object value = typeConverter.ConvertFromString(keyValuePair.Value);
                        process.SetPropertyValue(keyValuePair.Key, value);
                    }
                }
                process.Execute(UserConnection);
            }
            return(true);
        }
Ejemplo n.º 2
0
        public ActionResult LatestWrite([FromBody] JObject jsonResult)
        {
            int version = CurrentVersionOfApiToMapTo;

            int.TryParse(Request.GetApiVersion(), out version);

            jsonResult["version"] = $"v{version}";
            var processSchema = new ProcessSchema(JsonConvert.SerializeObject(jsonResult));

            _repo.Write(new v1StorageModel.StorageModel()
            {
                Id = processSchema.Id, VersionOfContents = version, Contents = JsonConvert.SerializeObject(jsonResult)
            });
            return(Ok());
        }
        public void Should_construct_object_from_schema()
        {
            // Arrange
            var id            = "id";
            var title         = "title";
            var processSchema = new ProcessSchema(id, title);
            var str           = JsonConvert.SerializeObject(processSchema);

            // Act
            var schema = new ProcessSchema(str);

            // Assert
            Assert.True(processSchema.Id == id);
            Assert.True(processSchema.Title == title);
        }
        public void Should_be_able_to_cast_object_back_and_forward()
        {
            // Arrange
            var processSchema = new ProcessSchema();

            // Act
            var str = processSchema.ToString();

            var createdProcessSchema = JsonConvert.DeserializeObject <ProcessSchema>(str);

            // Assert
            Assert.True(processSchema.Id == createdProcessSchema.Id);
            Assert.True(processSchema.Title == createdProcessSchema.Title);
            Assert.True(processSchema.Version == createdProcessSchema.Version);
        }
        public void Should_construct_object_from_atrributes()
        {
            // Arrange
            var id      = "id";
            var title   = "title";
            var version = "v1";

            // Act
            var processSchema = new ProcessSchema(id, title);

            // Assert
            Assert.True(processSchema.Id == id);
            Assert.True(processSchema.Title == title);
            Assert.True(processSchema.Version == version);
        }
        public void Should_make_sure_version_is_different_if_schema_has_different_object()
        {
            // Arrange
            var id            = "id";
            var title         = "title";
            var processSchema = new ProcessSchema(id, title);

            processSchema.Version = "xxx";
            var str = JsonConvert.SerializeObject(processSchema);


            // Act
            var schema = new ProcessSchema(str);

            // Assert
            Assert.True(processSchema.Id == id);
            Assert.True(processSchema.Title == title);
            Assert.True(processSchema.Version == "xxx");
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Returns page parameters.
        /// </summary>
        /// <param name="processSchema">Parent process schema.</param>
        /// <param name="useLookupValues">Load lookup display value only for new pages.
        /// Old pages are using parameter value as simple guid value, not object (value, displayValue)</param>
        /// <returns>Parameters dictionary</returns>
        private Dictionary <string, object> GetPageParameters(ProcessSchema processSchema, bool useLookupValues)
        {
            var userTask = (ProcessSchemaUserTask)processSchema.GetBaseElementByUId(SchemaElementUId);
            var sysModuleEntityPageType = new Dictionary <Guid, Guid>();
            var result             = new Dictionary <string, object>();
            var dynamicParameters  = userTask.Parameters.Where(p => p.CreatedInSchemaUId == processSchema.UId).ToList();
            var dateTimeParameters = dynamicParameters.Where(p => p.DataValueType.IsDateTime).ToList();
            var lookupParameters   = dynamicParameters.Where(p => useLookupValues && p.DataValueType.IsLookup).ToList();
            var anotherParameters  = dynamicParameters.Except(dateTimeParameters).Except(lookupParameters).ToList();

            if (lookupParameters.Count > 0)
            {
                sysModuleEntityPageType = GetSysModuleEntityPageTypes();
            }
            dateTimeParameters.ForEach(p => result.Add(p.Name, GetParameterDateTimeValue(p)));
            lookupParameters.ForEach(p => result.Add(p.Name, GetParameterLookupValue(p, sysModuleEntityPageType)));
            anotherParameters.ForEach(p => result.Add(p.Name, GetParameterValue(p)));
            return(result);
        }
		/// <summary>
		/// Returns page parameters.
		/// </summary>
		/// <param name="processSchema">Parent process schema.</param>
		/// <param name="useLookupValues">Load lookup display value only for new pages.
		/// Old pages are using parameter value as simple guid value, not object (value, displayValue)</param>
		/// <returns>Parameters dictionary</returns>
		private Dictionary<string, object> GetPageParameters(ProcessSchema processSchema, bool useLookupValues) {
			var userTask = (ProcessSchemaUserTask)processSchema.GetBaseElementByUId(SchemaElementUId);
			var result = new Dictionary<string, object>();
			foreach (ProcessSchemaParameter parameter in userTask.Parameters) {
				if (parameter.CreatedInSchemaUId != processSchema.UId) {
					continue;
				}
				object parameterValue;
				if (parameter.DataValueType.IsDateTime) {
					parameterValue = GetParameterDateTimeValue(parameter);
				} else if (useLookupValues && parameter.DataValueType.IsLookup) {
					parameterValue = GetParameterLookupValue(parameter);
				} else {
					parameterValue = GetParameterValue(parameter) ?? string.Empty;
				}
				result.Add(parameter.Name, parameterValue);
			}
			return result;
		}
        public ProcessCheckResult CheckParameters(Guid processUId, List <ProcessCheckParameter> checkParameters)
        {
            if ((checkParameters == null) || (checkParameters.Count == 0))
            {
                return(new ProcessCheckResult {
                    IsValid = true
                });
            }
            ISchemaManagerItem <ProcessSchema> processManagerItem =
                UserConnection.ProcessSchemaManager.FindItemByUId(processUId);

            if (processManagerItem == null)
            {
                string errorText = new LocalizableString(UserConnection.ResourceStorage, "ProcessValidationService",
                                                         "LocalizableStrings.ProcessNotFoundErrorText.Value").ToString();
                return(new ProcessCheckResult {
                    IsValid = false,
                    ErrorText = errorText
                });
            }
            ProcessSchema processSchema                     = UserConnection.ProcessSchemaManager.GetInstanceByUId(processUId);
            var           parameters                        = processSchema.Parameters;
            ProcessCheckParameterComparer comparer          = new ProcessCheckParameterComparer();
            List <ProcessCheckParameter>  invalidParameters = checkParameters
                                                              .Where(checkParameter => !(parameters
                                                                                         .Select(parameter => new ProcessCheckParameter()
            {
                Name = parameter.Name,
                DataValueTypes = new List <string>(1)
                {
                    parameter.DataValueType.Name
                }
            })
                                                                                         .Where(parameter => checkParameters.Contains(parameter, comparer))
                                                                                         .ToList <ProcessCheckParameter>()).Contains(checkParameter, comparer)
                                                                     )
                                                              .ToList();

            return(new ProcessCheckResult {
                IsValid = (invalidParameters.Count == 0),
                InvalidParameters = invalidParameters
            });
        }
        private ProcessStatus GetStatusOfProcess(ProcessSchema schema, string userId)
        {
            if (_userJustCompletedStepCache.UserAndSchemaStored(userId, schema.schemaId))
            {
                return(ProcessStatus.IN_PROGRESS);
            }
            var statusus = schema.stepStatuses;

            if (statusus[0].completionTime != null)
            {
                return(ProcessStatus.COMPLETED);
            }
            if (statusus[statusus.Count - 1].completionTime != null)
            {
                return(ProcessStatus.IN_PROGRESS);
            }
            else
            {
                return(ProcessStatus.ACTION_WITH_USER);
            }
        }
Ejemplo n.º 11
0
        virtual protected void StartUpdateTargetAudience(Guid id, string rootSchemaName, bool isSetCampaignFirstStep,
                                                         string transferTableName)
        {
            ProcessSchema schema =
                UserConnection.ProcessSchemaManager.GetInstanceByName("UpdateTargetAudienceProcess");
            Process process = schema.CreateProcess(UserConnection);

            process.SetPropertyValue("RootSchemaRecordId", id);
            if (!String.IsNullOrWhiteSpace(rootSchemaName))
            {
                process.SetPropertyValue("RootSchemaName", rootSchemaName);
                process.SetPropertyValue("IsSetCampaignFirstStep", isSetCampaignFirstStep);
            }
            else
            {
                process.SetPropertyValue("RootSchemaName", "BulkEmailSplit");
                process.SetPropertyValue("RootSchemaRecordRId", 1);
                process.SetPropertyValue("TargetSchemaBindingColumnValueName", "BulkEmailSplitId");
                process.SetPropertyValue("TargetSchemaName", transferTableName);
                process.SetPropertyValue("SegmentSchemaName", "BulkEmailSplitSegment");
            }
            process.Execute(UserConnection);
        }
 public virtual bool CanUseFlowEngine(ProcessSchema processSchema)
 {
     return(ProcessSchemaManager.GetCanUseFlowEngine(UserConnection, processSchema));
 }
        public virtual void RunFlowEngineProcess(ProcessSchema processSchema, Dictionary <string, string> nameValueMap)
        {
            var flowEngine = new FlowEngine(UserConnection);

            flowEngine.RunProcess(processSchema, nameValueMap);
        }
 private void GetDocument(JObject jsonObject)
 {
     root = new ProcessSchema().GetPath(jsonObject);
 }
        protected virtual ProcessSchemaUserTask GetProcessSchemaUserTask(ProcessFlowElement userTask)
        {
            ProcessSchema processSchema = userTask.Owner.ProcessSchema;

            return((ProcessSchemaUserTask)processSchema.GetBaseElementByUId(userTask.SchemaElementUId));
        }