На примере показано как в limitFunction с параметром типа Дата вставить в качестве значения этого параметра текущую дату
Вопрос
Имеется limitFunction (класс ICSSoft.STORMNET.FunctionalLanguage.Function
) с параметром @Дата. Как вместо этого параметра подставить текущую дату?
Ответ
Пусть задана функция limitFunction
с параметром @Дата:
ExternalLangDef externalLangDef = ExternalLangDef.LanguageDef;
ICSSoft.STORMNET.FunctionalLanguage.Function limitFunction = externalLangDef.GetFunction(
externalLangDef.funcEQ,
new ParameterDef("Дата", externalLangDef.DateTimeType, false, ""),
new DateTime(2000, 01, 01));
Подробнее о ExternalLangDef.
Для Web
Для подстановки параметров в функцию в классе ICSSoft.STORMNET.Web.Tools.AdvLimitUtils
есть метод:
/// <summary>
/// Подставить конкретные значения вместо параметров функции.
/// </summary>
/// <param name="function">Сама функция, в которой будут заменять параметры.</param>
/// <param name="paramValues">Справочник значений параметров (название параметра - значение).</param>
/// <returns>Функция, в которой все параметры заменены на соответствующие значения.</returns>
public static Function SubstituteParameters(Function function, IDictionary<string, object> paramValues)
Пример
limitFunction = AdvLimitUtils.SubstituteParameters(
limitFunction,
new Dictionary<string, object>() { {"Дата", DateTime.Now} });
Для Win
Для подстановки параметров в ограничивающую функцию в классе ICSSoft.STORMNET.Windows.Forms.AdvansedLimitExtension
есть метод:
/// <summary>
/// Получить ограничение с подставленными значениями параметров
/// </summary>
/// <param name="advansedLimit">Само ограничение.</param>
/// <param name="parValues">Словарь со значениями параметров. Ключ - имя параметра</param>
/// <returns>Функция-ограничение с подставленными значениями параметров</returns>
public static Function GetCustomizedFunctionByParameters<R, T>(this R advansedLimit, T parValues)
where T : IDictionary, IDictionary<string, object>
where R : AdvansedLimit
Но для этого метода нужен экземпляр класса ICSSoft.STORMNET.Windows.Forms.AdvansedLimit
(объектная модель ограничения, включает в себя как ограничивающую функцию, так и определения параметров).
Пример
AdvansedLimit advlimit = new AdvansedLimit {Function = limitFunction};
advlimit.Parameters = new ParameterDef[1] { (ParameterDef)advlimit.Function.Parameters[0] };
limitFunction = AdvansedLimitExtension.GetCustomizedFunctionByParameters(
advlimit,
new Dictionary<string, object>() { { "Дата", DateTime.Now } });