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 })); }
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); } }