Добрий день,

Существует ли функционал создания древовидного раздела в новом Freedom UI?

В старом интерфейсе это делается так:

https://community.terrasoft.ua/questions/drevovidnyy-reestr-0

Нравится

1 комментарий

Здравствуйте,

 

К сожалению, в базовой версии приложения пока что не предусмотрен вывод реестра\справочника в виде иерархии.

Мы зарегистрировали соответствующее пожелание на доработку даного функционала на ответственную команду разработки.



Для решения проблемы можем предложить воспользоваться дополнением с Marketplace "Tree view for Creatio".



С уважением, 

Анастасия

Показать все комментарии

Добрый день. Как в BPMonline 5.4 создать древовидную структуру в гриде, как в 3.х есть с "+" реестры?

Нравится

1 комментарий

Сергей, добрый вечер!
Для формирования древовидного реестрам нужно:
- Добавить в объект поле типа справочник ParentID (объектом справочника выступает объект раздела).
- В свойстве "Родитель в иерархии" объекта указать поле ParentID.

Дополнительно, для корректного редактирования данных необходимо установить свойство "Количество загружаемых уровней данных" = -1 у DataSource карточки редактирования.

Показать все комментарии

Добрый день!
Столкнулся с проблемой перехвата события TreeGridDblClick: при создании пустого скрипта с кодом "return true;" окно редактирования открывается. Если вместо true вовзращать false - открывет 2 окна редактирования.
Соседние темы смотрел, GetRegisterTreeGridDblClickScript пробовал переопределять.
Подсткажите, в чём может быть проблема?
Версия 5.2.0.660

Нравится

7 комментариев

Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.

Здравствуйте, Андрей.

Уточните задачу, которую пытаетесь выполнить. Вам необходимо запретить действие по событию или расширить обработку?

Добрый день, Максим.
Запретить обработку события, чтоб не открывалось окно редактирования записи.

Андрей, в 5.2 Вы можете переопределить GetRegisterEditPageScript для запрета обработки двойного нажатия по реестру, но нажатие на кнопку тоже обрабатываться не будет.

Его переопределять в базовом классе?
Или наследовать и переопределять?

В наследнике. Открываете процесс страницы реестра, находите метод в структуре, выделяете, там будет чекбокс Переопределен и memoedit с телом скрипта. Добавляете в начале

returm string.Empty;

и публикуете.

Спасибо, работает.

Показать все комментарии

Terrasoft 3.4.0.138
Есть TreeGrid, на скрипт

function grdDataOnDblClick(Control) {
        var Window = Self;
        var grdData = Window.ComponentsByName('grdData');
        var SelectedIDs = grdData.SelectedIDs;
        Log.Write(1, SelectedIDs.Count);
        if (SelectedIDs.Count) {
                Log.Write( 1, SelectedIDs[0] == null ? 'null' : SelectedIDs[0]);
        }
}

по двойному клику, получаю count = 1, а id-шник равен null, почему такое может быть?
В датасете ключевое поле стоит (родительсок тоже)

Нравится

3 комментария

Александр, так SelectedIDs - это не массив. Идентификаторы записей находятся в параметре CommaText в виде строки идентификаторов разделенных запятой.
Чтобы получить массив используйте сплит:

var SelectedIDs = grdData.SelectedIDs.CommaText.split(',');

Помогло, спасибо.
Но я вроде делал как я описал выше раньше, и получалось. Или мое воображение разыгралось?

Не могу утверждать, возможно, на старых версиях..

Показать все комментарии

Создал окно, унаследовался от wnd_BaseTreeArea
Добавил GridView, GridColumn.
У самого Grid прописал
KeyDataFieldName= ID
ParentDataFieldName= ParentID

В dlData добавлен Dataset c необходимой структурой. Однако при открытии окна Грид открывается пустой. Также хочу подчеркнуть, что эта форма привязана через SelectWindowUSI к LookupDataControl
В чем может быть проблема?

Нравится

4 комментария

Здравствуйте, Александр!
Скорее всего проблема в том, что нужно дополнительно проинициализировать аттрибуты окна реестра. Например для wnd_ProjectGridArea:

function Initialize(Window) {
	SetAttribute(Window, 'EditWindowUSI', 'wnd_ProjectEdit');
	SetAttribute(Window, 'DataGrid', grdData);
//...
}
 
function wnd_ProjectGridAreaOnPrepare(Window) {
	Initialize(Window);	
	wnd_BaseTreeAreaOnPrepare(Window);
	InitializeHotKeys(Window);
}

"Андрей Каспаревич" написал:Скорее всего проблема в том, что нужно дополнительно проинициализировать аттрибуты окна реестра.

Попробовал, проблема осталась прежней.
Плюс в строке

InitializeHotKeys(Window);

выскакивает ошибка "Предполагается наличие объекта"

Отвечаю, как всегда сам, на свой вопрос:
Скрипт scr_BaseTreeArea

function InitializeDataset() {
	if (!Assigned(dlData.Dataset)) { 
		BaseTreeArea.TreeDataset = 
		Services.GetNewItemByUSI(BaseTreeArea.DatasetUSI);
		dlData.Dataset = BaseTreeArea.TreeDataset;
	} else {
		BaseTreeArea.TreeDataset = dlData.Dataset;		
		dlData.Dataset.Open();  // почему-то набор данных не был открыт, хотя никакой ошибки не выдавалось об этом
	}
}

Открытие датасета решает конкретную проблему.

Александр, рад ,что у Вас получилось. На счет

InitializeHotKeys(Window);

у Вас же нет такой функции, как я понял, это кусок кода из wnd_ProjectGridArea.

Показать все комментарии

Суть проблемы: есть объект "Рабочий лист", у него есть деталь "Действие" с колонками "Плановая дата" (DateTime), "Дата результата" (DateTime), "Результат" (Guid). Нужно в реестре отобразить все рабочие листы, где есть действия с плановой датой = DateTime.Now, либо просроченные действия, то есть действия, у которых плановая дата DateTime.Now и Результат = Guid.Empty. При этом, рабочие листы с просроченными действиями должны отражаться вверху списка.

Не понимаю пока, как написать такой фильтр. Помогите примерами...

Нравится

5 комментариев

Добрый день, Алексей.

Подобную фильтрацию можно осуществить пользовательскими средствами. Вам следует использовать два агрегирующих фильтра объединенных логическим ИЛИ:

Выбрать колонку по обратной связи (на примере деталь Активности раздела контактов):

Сформировать условия:

А как-то можно посмотреть какой код при этом генерится? У меня кастомная страница с реестром, и никаких визуальных фильтров на ней нет.

Алексей, вот пример простого фильтра для реестра.
Размещать на PageLoadComplete.

var structure = Page.DataSource.CurrentStructure;
var filter = structure.CreateFilterWithParameters(Page.DataSource.Schema,
    FilterComparisonType.Contain, "Name", "a");
structure.Filters.Add(filter);
Page.DataSource.LoadRows();
return true;

С простыми-то фильтрами проблем нет:)
А в моем случае, вместо "Name" что нужно поставить? Да и тип фильтра будет явно не "Contain". У класса DataSourceStructure есть метод CreateDataSourceFilterExistsExpression, подозреваю, что копать надо в его сторону, но в SDK никаких примеров его использования я не нашел. Вопрос открыт...

Вот так делал я:

filters = structure.CreateFiltersGroup("CustomFilters", LogicalOperationStrict.And);
 
if (!string.IsNullOrEmpty(address)) {
	var addressfilters = structure.CreateFiltersGroup("CustomAddressFilters", LogicalOperationStrict.Or);
	addressfilters.Add(structure.CreateFilterWithParameters(dataSource.Schema, 
		FilterComparisonType.Contain, "[AccountAddressCLADR:Account].AddressString", 
		address));
	addressfilters.Add(structure.CreateFilterWithParameters(dataSource.Schema, 
		FilterComparisonType.Contain, "[Contact:Account].[ContactAddressCLADR:Contact].AddressString", 
		address));
	filters.Add(addressfilters);
}
 
Page.TreeGrid.Clear();		
if (filters.Count > 0) {
	structure.Filters.Add(filters);
	dataSource.LoadRows();
	Page.TreeGrid.RefreshData();		
}
Показать все комментарии

Столкнулся с непонятным поведением: добавил на страницу TabControl и несколько вкладок, на каждой вкладе - TreeGrid и источник данных к нему. Почему-то(?!) привязать грид к источнику данных получилось только на первой вкладке, на других при попытке задать источник грида в выпадающем списке ПУСТО. Пробовал уже все что можно: закрылва/открывал заново дизайнер страниц, удалял и заново создавал гриды и источники - ничего не помогло. Может быть кто-то побеждал этот трабл, какие есть рецепты?

Нравится

1 комментарий

Добрый день.
В каждую вкладку добавляете контейнер страницы, и создаете 4-ре страницы с реестром.

Показать все комментарии

Добрый день!

Есть задача создания древовидного справочника.

Создал окно с шаблоном wnd_BaseTreeArea, в IDataTreeGrid добавил DataGridView (если его
добавил колонки для отображения
columns

В соотв. dataset'е настроил "Основное поле для отображения" - Name
В запросе на выборку поставил у этого поля галочку "Выбирать всегда".

Но при открытии моего окна с TreeGrid'ом - в нем не отображаются названия элементов
treegrid

Сами значения в базе сохраняются, и в окне редактирования выводятся/редактируются.

В чем может быть проблема?

Нравится

0 комментариев
Показать все комментарии

Здравствуйте! Случилось не понятное! У меня есть форма на основе BaseTreeArea, необходимо отфильтровать записи с помощью фильтров. Если включается только один фильтр, то все в порядке, если два, то исчезают все записи. Хотя в менеджере этот запрос выполняется отлично, и при предосмотре SQL кода тоже результат тот который необходим) Я уже склоняюсь к мысли, что в деревогриде не возможно воткнуть два фильтра, чтобы выборка потом отобразилась... Помогите, может кто нибудь уже сталкивался и справился с проблемой.

Нравится

14 комментариев

А неее... это один фильтр глючит.. везде нормально, а если из под пользователя включать, то как то странно отбирает..

А тут и не деревогриде походу дело вовсе... у меня записи которые пустые начали писать что они удалены, и все вообще поломалось, блин, в предпраздничные дни и все поломалось..

Может, права доступа? Проверьте через Profiler, какой запрос выполняется в базе.

[upd] Проверьте, возможно, в запросе раздела создали пользовательский (или какой-либо) фильтр и забыли его отключить.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

А, это я фильтр проверял забыл выключить!) Но не понятно почему один фильтр работает нормально, а другой не хочет.. все правильно везде, только в под пользователем не пашет..

Профайлером проверял, запрос тот же что и написанный, все нормально

А если войти в Query Analyzer под пользователем и выполнить этот запрос, что он вернет?

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Если запись не является вложенной и сама не является родителем для каких либо записей, то эти записи попадают в выборку.

А у меня его нету..

Можете привести текст фильтра?

Если не должны попадать, добавьте условие "AND ParentID IS NOT NULL AND NOT EXISTS (SELECT ID FROM Table AS Table2 WHERE Table.ID = Table2.ParentID)". Здесь вместо Table необходимо подставить название таблицы запроса.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

WHERE([tbl_IPAdress].[ContractID] IS NULL AND
[tbl_IPAdress].[Comment] IS NULL)

Таблица tbl_IPAdress не администрируется по записям? Включаются только эти два фильтра, или еще какие-то?

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Администрируется по записям.. Только эти два фильтра. Проблема в том что один фильтр не правильно работает, значение NULL как будто не видит и все записи отфильтровывает.

Проблема ужасная.. дело в том что этот чертов фильтр таки везде работает, а вот в клиенте не хочет.. Йа уже не знаю почему такое может быть..

Все, я разобрался с проблемой! при применении фильтра похоже не хотело дерево строиться, вот и все пропадало, сделал чтобы после применения фильтра отображался список и все, отфильтрованные записи отображаются правильно!)

Показать все комментарии