private DateTime _AddOffset(ProcessVariablesContainer variables, string unit, int value, DateTime dateTime) { switch (unit.ToLower()) { case "year": case "years": return(dateTime.AddYears(value)); case "month": case "months": return(dateTime.AddMonths(value)); case "week": case "weeks": return(dateTime.AddDays(value * 7)); case "day": case "days": return(dateTime.AddDays(value)); case "hour": case "hours": return(dateTime.AddHours(value)); case "minute": case "minutes": return(dateTime.AddMinutes(value)); case "second": case "seconds": return(dateTime.AddSeconds(value)); default: variables.WriteLogLine(LogLevels.Error, "Internal error: Unhandled relative date/time case."); throw new Exception("Internal error: Unhandled relative date/time case."); } }
public DateTime GetTime(ProcessVariablesContainer variables) { Log.Info("Attempting to parse DateString [{0}]", new object[] { _value }); DateTime ret = DateTime.Now; bool isFirst = true; string buffer = ""; Match m; foreach (char c in _value) { switch (c) { case ' ': if (_variableRegex.IsMatch(buffer)) { m = _variableRegex.Match(buffer); buffer = buffer.Replace("${" + m.Groups[1].Value + "}", string.Format("{0}", variables[m.Groups[1].Value])); } if (isFirst) { switch (buffer.ToLower()) { case "now": case "today": buffer = ""; ret = DateTime.Now; isFirst = false; break; case "tomorrow": buffer = ""; ret = DateTime.Now.AddDays(1); isFirst = false; break; case "yesterday": buffer = ""; ret = DateTime.Now.AddDays(-1); isFirst = false; break; } } if (buffer != "") { if (_basicRelativeRegex.IsMatch(buffer)) { m = _basicRelativeRegex.Match(buffer); ret = _AddOffset(m.Groups[2].Value, (m.Groups[1].Value.ToLower() == "next" ? 1 : -1), ret); buffer = ""; } else if (_simpleRelativeRegex.IsMatch(buffer)) { m = _simpleRelativeRegex.Match(buffer); ret = _AddOffset(m.Groups[2].Value, int.Parse(m.Groups[1].Value), ret); buffer = ""; } else if (_completeRelativeRegex.IsMatch(buffer)) { m = _completeRelativeRegex.Match(buffer); ret = _AddOffset(m.Groups[2].Value, int.Parse(m.Groups[1].Value) * (m.Groups[3].Value != "" ? -1 : 1), ret); buffer = ""; } else if (isFirst) { DateTime tmp; if (DateTime.TryParse(buffer, out tmp)) { isFirst = false; buffer = ""; ret = tmp; } else { buffer += c; } } else { buffer += c; } } break; default: buffer += c; break; } } if (buffer != "") { throw Log._Exception(new Exception(string.Format("Invalid Date String Specified [{0}]", buffer))); } return(ret); }
internal ReadOnlyProcessVariablesContainer(ProcessVariablesContainer variables) { _variables = variables; }
internal ReadOnlyProcessVariablesContainer(string elementID, ProcessState state, BusinessProcess process, Exception error) { _variables = new BpmEngine.ProcessVariablesContainer(elementID, state, process); _error = error; }