Отображение данных детали в виде иерархической структуры
Вопрос
Как отобразить данные на детали в виде иерархической (древовидной) структуры?
Ответ
Для реализации отображения детали в виде иерархического реестра необходимо выполнить следующие шаги:
1) в объекте детали должно быть поле, содержащее идентификатор родительской записи (например, Parent), ссылающееся на этот же объект. Это поле должно быть указано в свойстве "Родитель в иерархии" объекта детали;
2) в блоке diff схемы детали для элемента DataGrid необходимо добавить значения "hierarchical": true и "hierarchicalColumnName": "<Название родительской колонки>" (второе свойство необходимо указывать только если название родительской колонки отличается от Parent);
3) добавить свою кнопку (или модифицировать существующую) для возможности добавления новых элементов детали в корень иерархии либо как подчинённые к выбранной записи;
4) реализовать методы добавления записей в нужную ветку иерархии и другие по необходимости (зависит от реализации детали).
Для более подробной информации можно посмотреть прикрепленный файл.
На самом деле
3) Замещаем метод addGridDataColumns добавив в него все нужные колонки (обязательно колонку родитель, ну и остальные по необходимости):
addGridDataColumns: function (esq) {
this.callParent(arguments);
if (!esq.columns.contains("UsrParent")) {
esq.addColumn("UsrParent");
}
}
остальные пункты уже не обязательные именно для построения самой иерархии и служат для удобства работы с ней
Как минимум, от п. 1 с созданием в самом объекте поля-родителя не обойтись. Да и остальное тоже не выглядят лишним, если Вы хотите работать именно как с деревом, а не просто с колонкой и её значением.
А как запретить выбрать узлы для ИЕРАРХИЧЕСКОГО справочника ?