示例#1
0
文件: FormBase.cs 项目: Pumpet/Robin
        /// <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);
        }
示例#2
0
文件: FormBase.cs 项目: Pumpet/Robin
        /// <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);
        }
示例#3
0
文件: FormBase.cs 项目: Pumpet/Robin
        /// <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);
        }