/// <summary>Запуск формы выбора из списка и обработка возврата</summary> /// <param name="form">Форма</param> /// <param name="formCode">Код формы из настроек</param> /// <param name="sourceObject">Объект-источник параметров вызова формы (ключей и фильтра)</param> /// <param name="keyMap">Строка соответствия имен полей входящих в передаваемый ключ: "формируемый1=полученный1;..."</param> /// <param name="filterMap">Строка соответствия имен полей входящих в передаваемый фильтр: "формируемый1=полученный1;..."</param> /// <param name="customParams">Параметры ключ-значение. Если заданы - считаются приоритетнее, чем одноименные поля из объекта-источника</param> /// <param name="resultAction">Метод разбора результата. Результат в качестве параметра</param> /// <param name="getMulti">Результат - (true) как список объектов из отмеченных строк грида или (false) как словарь выбранной строки грида</param> /// <returns>True только в случае положительного результата (OK) для модальной формы. Результат будет в TransferObject контекста</returns> public bool ExecFormSelect(Form form, string formCode, object sourceObject, string keyMap = null, string filterMap = null, Dictionary <string, object> customParams = null, Action <object> resultAction = null, bool getMulti = false) { if (Ctx == null) { return(false); } var viewMode = FormModes.Modal | FormModes.GetResult; if (getMulti) { viewMode |= FormModes.GetMultiResult; } var pars = CtrlsProc.PrepareParams(sourceObject, customParams); var filters = string.IsNullOrWhiteSpace(filterMap) ? null : CtrlsProc.GetParamsForMap(pars, filterMap); var keys = string.IsNullOrWhiteSpace(keyMap) ? null : CtrlsProc.GetParamsForMap(pars, keyMap); Ctx.TransferObject = null; if (form == null) { form = Ctx.GetForm(formCode); } var ok = Ctx.ExecForm(form, this, viewMode, filters, keys); if (ok && resultAction != null) { resultAction(Ctx.TransferObject); } return(ok); }
/// <summary>Запуск формы редактора и обработка возврата</summary> /// <param name="form">Форма</param> /// <param name="formCode">Код формы из настроек</param> /// <param name="viewMode">Режим формы для обработки данных: NewRec для новой записи, ReadOnly только для просмотра, Default для редактирования записи</param> /// <param name="grid">Грид, из которого запускаем. Если задан - поля источника текущей строки берутся в качестве параметров</param> /// <param name="mapForParams">Строка соответствия имен: "формируемый1=полученный1;...", где формируемый - параметр для запроса данных на форму, полученный - параметр из грида и customParams. Если нет полученного, параметр будет сформирован со значением null. Если соответствий не задано (по умолчанию) - берем все полученные параметры</param> /// <param name="customParams">Параметры ключ-значение. Если заданы - считаются приоритетнее, чем одноименные поля из грида</param> /// <param name="mapForResult">Строка соответствия имен: "формируемый1=полученный1;...", где полученный - поле результата выполнения скрипта вставки/обновления, формируемый - параметр поиска текущей записи после обновления данных в гриде</param> /// <param name="formModes">Другие необходимые режимы в дополнение к viewMode, по умолчанию - Modal</param> /// <returns>True только в случае положительного результата (OK) для модальной формы</returns> public bool ExecFormEdit(Form form, string formCode, FormModes viewMode, DataList grid = null, string mapForParams = null, Dictionary <string, object> customParams = null, string mapForResult = null, FormModes formModes = FormModes.Modal) { if (Ctx == null) { return(false); } if (viewMode != FormModes.Default && viewMode != FormModes.NewRecEdit && viewMode != FormModes.ViewOnlyEdit) { viewMode = FormModes.Default; } var pars = CtrlsProc.PrepareParams(viewMode == FormModes.NewRecEdit ? null : grid?.GetRowObject(), customParams); pars = CtrlsProc.GetParamsForMap(pars, mapForParams); Ctx.TransferObject = null; if (form == null) { form = Ctx.GetForm(formCode); } var ok = Ctx.ExecForm(form, this, formModes | viewMode, pars); if (ok && grid != null) { var k = Ctx.TransferObject == null || string.IsNullOrEmpty(mapForResult) ? Ctx.TransferObject : CtrlsProc.PrepareParams(Ctx.TransferObject, null, mapForResult); if (this is FormList) { (this as FormList).LoadGrid(grid, k); } else { grid.LoadData(k); } } return(ok); }
/// <summary>Выполнение команды sql из интерфейса</summary> /// <param name="sql">Текст команды</param> /// <param name="cmdCode">Код настройки команды. Используется, если не задан текст команды (sql)</param> /// <param name="grid">Грид, из которого запускаем. Если задан - поля источника обрабатываемой строки берутся в качестве параметров. Будет обновлен по окончании, если не указан </param> /// <param name="mapForParams">Строка соответствий ключей: "формируемый1=полученный1;...", где формируемый - параметр для команды, полученный - параметр из грида и customParams. Если нет полученного, параметр будет сформирован со значением null. Если соответствий не задано (по умолчанию) - берем все полученные параметры</param> /// <param name="customParams">Параметры ключ-значение. Если заданы - считаются приоритетнее, чем одноименные поля из грида</param> /// <param name="warning">Строка предупреждения перед выполнением команды. В этом случае будет окно сообщения с возможностью отказаться</param> /// <param name="forSelectedRows">True если хотим выполнить для каждой выделенной строки грида, False - только для текущей</param> /// <param name="refreshGrid">False если не нужно обновлять указанный grid по окончании</param> /// <returns>Таблица (пустая, если команда не возвращает resultset) или null</returns> protected object ExecCommand(string sql, string cmdCode, DataList grid = null, string mapForParams = null, Dictionary <string, object> customParams = null, string warning = null, bool forSelectedRows = false, bool refreshGrid = true, bool saveLog = true) { if (!string.IsNullOrEmpty(warning) && MessageBox.Show(warning, "Внимание!", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No) { return(null); } if (saveLog && Ctx != null) { Ctx.SaveLog("EXEC_COMMAND", cmdCode ?? sql); } List <Dictionary <string, object> > rowParamsList = new List <Dictionary <string, object> >(); if (grid != null && forSelectedRows) { foreach (int r in grid.GetCheckedRowsIdx()) { rowParamsList.Add(CtrlsProc.GetParamsForMap(CtrlsProc.PrepareParams(grid.GetRowObject(r), customParams), mapForParams)); } } else { rowParamsList.Add(CtrlsProc.GetParamsForMap(CtrlsProc.PrepareParams(grid?.GetRowObject(), customParams), mapForParams)); } object res = null; foreach (var rowParams in rowParamsList) { res = Ctx?.GetTable(sql, cmdCode, rowParams); } if (grid != null && refreshGrid) { if (this is FormList) { (this as FormList).LoadGrid(grid); } else { grid.LoadData(); } } return(res); }