Создание формы редактирования в клиенте УУ

Материал из wiki.sibvaleo.com

Перейти к: навигация, поиск
  • создаем курсор в БД, выводящий одну запись к редактированию, причем все поля-ссылки оставляем ссылками (id). При необходимости можно создать чисто информационные поля, которые не будут редактироваться.
  • создаем новую форму, наследника от TFinancesCustomRecordEditorForm. Если на форме редактирования нужны вкладки с дочерними гридами - то от TFinancesRecordEditorWithChildForm (File - New - Other - вкладка Finances).
  • устанавливаем ей (форме) свойства Name (обычно - НазваниеТаблицыEditForm), Caption (обычно - ОписаниеТаблицы)
  • добавляем в используемые модули uFinancesMainForm, uObjectIds (Alt+F11 либо ручками в коде в секции implementation)
  • устанавливаем DataSet.Connection = FinancesMainDM.MainConnection (это нужно только для design-time настройки, в run-time соединение берется из пула либо передается от редактора верхнего уровня)
  • в DataSet.Sql пишем вызов курсора
  • в DataSet.Params устанавливаем свойства DataType (для курсора - ftCursor), ParamType (для курсора - ptResult)
  • настраиваем поля запроса так же, как и поля в ParamsDataSet формы грида для создания редакторов
  • дополнительно устанавливаем для полей значения DisplayLabel, Visible, Required. Для первичного ключа Required устанавливается в false.
  • создаем редакторы полей двойным щелчком по компоненту FieldEditorCreator
  • прописываем вызов процедур редактирования в свойствах компонента UpdateSQL: InsertSQL, ModifySQL, DeleteSQL
    • при этом имена параметры должны быть равны именам полей с прибавлением new_ для нового значения и old_ для старого (до редактирования) значения. Например:
 delete from t where id = :old_id
 begin
   set_t(io_id => :new_id, i_name => :new_name);
 end;
  • если уникальное поле в запросе отлично от "ID", то создаем событие формы OnCreate, и в нем прописываем ключевое поле: KeyFields := "KeyField";
  • прописываем регистрацию формы как редактора этого объекта
    • в секции initialization пишем TMyEditForm.RegisterSelf(id)
  • TMyEditFormтут - имя класса нашей формы
    • id - константа нашей формы
  • если нужно добавить к редактору редактирования списка связанных сущностей, то надо
    • Переопределить метод CreateChildGrids (procedure CreateChildGrids; override;)
    • В его реализации прописать создание дочерних гридов:
 CreateChildGrid(idAccountResponsibles, 'finacc');
    • Тут idAccountResponsibles - id грида, который будет встроен в форму редактирования, finacc - имя поля грида, которое будет спрятано при показе в виде дочерней формы и имя параметра для хранения значения, по которому будут фильтроваться данные. Обычно это KeyValues, но не обязательно именно так
    • Переопределить метод SetChildGridsParams (procedure SetChildGridsParams; override;)
    • Прописать в его реализации установку значений параметров дочерних гридов:
 procedure TAccountEditorForm.SetChildGridsParams;
 begin
   inherited;
   ChildGrids[0].Params['finacc'] := DataSetID.Value;
 end;
Просмотры
Личные инструменты