Esempio n. 1
0
        protected override void Execute(Context context)
        {
            HasValue.Set(context, false);
            StringValue.Set(context, null);
            BooleanValue.Set(context, default(bool));
            DateTimeValue.Set(context, default(DateTime));
            DecimalValue.Set(context, default(decimal));
            MoneyValue.Set(context, default(Money));
            DoubleValue.Set(context, default(double));
            IntegerValue.Set(context, default(int));

            var json = Json.Get(context);
            Dictionary <string, object> node;

            try
            {
                node = JsonConvert.DeserializeObject <Dictionary <string, object> >(json);
            }
            catch (Exception ex)
            {
                throw new InvalidWorkflowExecutionException($"Не удалось произвести разбор строки JSON. {ex.Message}", ex);
            }

            var names = ValuePath.Get(context).Split('.').ToArray();

            foreach (var name in names.Take(names.Length - 1))
            {
                if (!node.ContainsKey(name))
                {
                    return;
                }
                var jObj = node[name] as JObject;
                if (jObj == null)
                {
                    return;
                }
                node = jObj.ToObject <Dictionary <string, object> >();
                if (node == null)
                {
                    return;
                }
            }

            var lastName = names.Last();

            if (!node.ContainsKey(lastName))
            {
                return;
            }

            var value = node[lastName];

            if (value == null)
            {
                return;
            }

            HasValue.Set(context, true);

            var stringValue = value.ToString().Trim();

            StringValue.Set(context, stringValue);

            var booleanValue = !(stringValue.Equals("false", StringComparison.OrdinalIgnoreCase) || stringValue.Equals("0") || stringValue.Equals("+0") || stringValue.Equals("-0"));

            BooleanValue.Set(context, booleanValue);

            DateTime dateTimeValue;

            if (DateTime.TryParse(stringValue, out dateTimeValue))
            {
                DateTimeValue.Set(context, dateTimeValue);
            }

            decimal decimalValue;

            if (decimal.TryParse(stringValue, out decimalValue))
            {
                DecimalValue.Set(context, decimalValue);
                MoneyValue.Set(context, new Money(decimalValue));
            }

            double doubleValue;

            if (double.TryParse(stringValue, out doubleValue))
            {
                DoubleValue.Set(context, doubleValue);
            }

            int integerValue;

            if (int.TryParse(stringValue, out integerValue))
            {
                IntegerValue.Set(context, integerValue);
            }
        }
        /// <inheritdoc />
        protected override void Execute(Context context)
        {
            HasValue.Set(context, false);
            ValueType.Set(context, null);
            StringValue.Set(context, null);
            JsonValue.Set(context, null);
            BooleanValue.Set(context, default(bool));
            DateTimeValue.Set(context, default(DateTime));
            DecimalValue.Set(context, default(decimal));
            MoneyValue.Set(context, default(Money));
            DoubleValue.Set(context, default(double));
            IntegerValue.Set(context, default(int));

            var variableName = VariableName.Get(context);

            if (string.IsNullOrWhiteSpace(variableName))
            {
                throw new InvalidWorkflowExecutionException("Variable Name is empty.");
            }

            if (!context.SourceContext.SharedVariables.ContainsKey(variableName))
            {
                return;
            }
            var value = context.SourceContext.SharedVariables[variableName];

            if (value == null)
            {
                ValueType.Set(context, "Null");
                return;
            }

            ValueType.Set(context, value.GetType().Name);

            HasValue.Set(context, true);

            var stringValue = value as string ?? value.ToString();

            StringValue.Set(context, stringValue);

            var booleanValue = value as bool? ?? !(stringValue.Equals("false", StringComparison.OrdinalIgnoreCase) || stringValue.Equals("0") || stringValue.Equals("+0") || stringValue.Equals("-0"));

            BooleanValue.Set(context, booleanValue);

            DateTime dateTimeValue;

            if (value is DateTime)
            {
                DateTimeValue.Set(context, (DateTime)value);
            }
            else if (DateTime.TryParse(stringValue, out dateTimeValue))
            {
                DateTimeValue.Set(context, dateTimeValue);
            }

            decimal decimalValue;

            if (value is decimal)
            {
                decimalValue = (decimal)value;
                DecimalValue.Set(context, decimalValue);
                MoneyValue.Set(context, new Money(decimalValue));
            }
            else if (decimal.TryParse(stringValue, out decimalValue))
            {
                DecimalValue.Set(context, decimalValue);
                MoneyValue.Set(context, new Money(decimalValue));
            }

            var moneyValue = value as Money;

            if (moneyValue != null)
            {
                DecimalValue.Set(context, moneyValue.Value);
                MoneyValue.Set(context, moneyValue);
            }

            double doubleValue;

            if (value is double)
            {
                DoubleValue.Set(context, (double)value);
            }
            else if (double.TryParse(stringValue, out doubleValue))
            {
                DoubleValue.Set(context, doubleValue);
            }

            int integerValue;

            if (value is int)
            {
                IntegerValue.Set(context, (int)value);
            }
            else if (int.TryParse(stringValue, out integerValue))
            {
                IntegerValue.Set(context, integerValue);
            }

            JsonValue.Set(context, JsonConvert.SerializeObject(value, new JsonSerializerSettings
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                DateFormatHandling    = DateFormatHandling.IsoDateFormat,
                NullValueHandling     = NullValueHandling.Ignore
            }));
        }
Esempio n. 3
0
        protected override void Execute(Context context)
        {
            HasValue.Set(context, false);
            StringValue.Set(context, null);
            BooleanValue.Set(context, default(bool));
            DateTimeValue.Set(context, default(DateTime));
            DecimalValue.Set(context, default(decimal));
            MoneyValue.Set(context, default(Money));
            DoubleValue.Set(context, default(double));
            IntegerValue.Set(context, default(int));

            var key = GetKey(context);

            if (!context.SourceContext.SharedVariables.ContainsKey(key))
            {
                return;
            }
            var value = context.SourceContext.SharedVariables[key];

            if (value == null)
            {
                return;
            }

            HasValue.Set(context, true);

            var stringValue = value.ToString().Trim();

            StringValue.Set(context, stringValue);

            var booleanValue = !(stringValue.Equals("false", StringComparison.OrdinalIgnoreCase) || stringValue.Equals("0") || stringValue.Equals("+0") || stringValue.Equals("-0"));

            BooleanValue.Set(context, booleanValue);

            DateTime dateTimeValue;

            if (DateTime.TryParse(stringValue, out dateTimeValue))
            {
                DateTimeValue.Set(context, dateTimeValue);
            }

            decimal decimalValue;

            if (decimal.TryParse(stringValue, out decimalValue))
            {
                DecimalValue.Set(context, decimalValue);
                MoneyValue.Set(context, new Money(decimalValue));
            }

            double doubleValue;

            if (double.TryParse(stringValue, out doubleValue))
            {
                DoubleValue.Set(context, doubleValue);
            }

            int integerValue;

            if (int.TryParse(stringValue, out integerValue))
            {
                IntegerValue.Set(context, integerValue);
            }
        }