Global 5.3

Изменения

1. Не держать постоянно сессию отправки сообщений алертера, а получать из пула

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

2. Уменьшить размер стандартной иконки с 120 до 100 пикселей. Уменьшить отступы между группами и плитками.

В рамках увеличения плотности информации в Tile фрейме изменены значения по умолчанию отвечающие за размеры:

  • Размер Regular плитки теперь 100x100 вместо 120х120.
  • Отступы между группами уменьшены с 56 пикселей до 30.
  • Отступы между плитками уменьшены с 8 пикселей до 4-х

Добавлено новое свойство для управления размером tsRegular плитки TbtkLookUpTileFrame.View.Item.RegularWidth (“Размер базовой плитки”).

3. Доработать TileFrame: уменьшить шрифт у заголовков

В рамках задачи по увеличению плотности информации уменьшен шрифт заголовков групп на 5 пунктов.

4. Служба оповещений: настройки “Создавать новое окно” и “показывать всплывающие сообщения”.

В клиенте разделены Алертер-фрейм и всплывающие окна. Теперь возможна независимая их работа, а именно: настройки алертера “Создавать новое окно” и “показывать всплывающие сообщения”. В более ранних версиях настройки были неявно зависимы: при отсутствии хотя бы одного окна сообщений алертера не показывались всплывающие сообщения.

Реализованная заявка

1. Доработка для режима пользовательской сортировки атрибута

В свойство Sorting атрибута выборки добавлено новое значение для выбора “Доступна при полной загрузке данных”(asYesIfFullFetched). Характеристики нового режима:

  1. Сортировка доступна только в режиме полной прогрузки;
  2. Сортировка атрибута не сохраняется в реестр;
  3. Сортировка из настройки не применяется к полю при открытии выборки, если выборка находится в частично прогружаемом режиме.
  4. В случае попытки отсортировать при частичной загрузке данных выдается сообщение, что сортировка доступа только в полностью прогружаемом режиме выборки.

2. Предложить способ вставки HTML во фрейм TbtkLookupRtfEditorFrame.

Предлагается воспользоваться способностью IE помещать в буфер обмена при копировании HTML-контента также и его аналог в формате RTF.

<PASCAL>
 begin
   IE := CreateOleObject('InternetExplorer.Application');
   try
     IE.Navigate('about:blank');
     While IE.Busy do
       Sleep(50);
     objHTML := IE.document;
     objHTML.Write('<body>eea<b>b</b>c<i>d</i>e<s>f</s>g</body>');
     objHTML.ExecCommand('SelectAll');
     objHTML.ExecCommand('Copy');
     Selection.Controller.ExecCommand('PASTE')
   finally
     IE.Quit;
     IE := null;
   end;
 end;
</PASCAL>

3. Доработать TileFrame: добавить настройки выравнивания изображений

Добавлены новые свойства.

Вертикальный отступ в пикселях для изображения для каждого размера плитки:

TbtkLookUpTileFrame.View.Item.Glyph.IndentVert.ForRegular(Отступ вертикальный для Regular плитки) TbtkLookUpTileFrame.View.Item.Glyph.IndentVert.ForLarge(Отступ вертикальный для Large плитки) TbtkLookUpTileFrame.View.Item.Glyph.IndentVert.ForLarge(Отступ вертикальный для ExtraLarge плитки)

Выравнивание изображения:

TbtkLookUpTileFrame.View.Item.Glyph.Align.ForRegular(Выравнивание  изображения для Regular плитки) TbtkLookUpTileFrame.View.Item.Glyph.Align.ForLarge(Выравнивание  изображения для Large плитки) TbtkLookUpTileFrame.View.Item.Glyph.Align.ForExtraLarge(Выравнивание  изображения для ExtraLarge плитки)

Свойство AlignWithText по умолчанию теперь oaNone. Более подробно см. Плиточный (Tile) фрейм с интерфейсом живые плитки (TbtkLookUpTileFrame)

4. Доработать TileFrame: перетаскивание групп

Перетаскивание групп реализовано с помощью мыши. Тянуть мышью надо за заголовок группы.

5. Научить TileFrame выводить заголовки в высоту не более двух строк

При включенной настройки WordWrap текст заголовка теперь не перекрывает иконку. Для иконки базового размера возможно выводить текст в две строки, для Extralarge - в 4.

6. Доработать TileFrame: скрывать заголовки на маленькой плитке

Добавлено новое свойство

TbtkLookUpTileFrame.View.Item.Captions.HideOnSmallTile("Скрывать текст заголовков на маленькой плитке").

Позволяет управлять видимостью заголовков у плитки размеров tsSmall. Если выставить в True(по умолчанию), тогда все заголовки будут скрыты у плиток с размером tsSmall.

7. Доработать TileFrame: возможность WordWrap

Добавлено свойство

TbtkLookUpTileFrame.View.Item.Caption1.WordWrap("Автоматический перенос слов").

Свойство управляет автоматическим переносом заголовков плитки при выходе их за границу. Возможен также ручной перевод на новую строку c помощью символов #13#10, которые необходимо вставлять в текст заголовка по месту переноса. Ручной перевод на новую строку работает независимо от свойства WordWrap.

По умолчанию свойство выключено. Включение WordWrap по умолчанию может быть опасно, так как неподготовленный текст станет наезжать на иконку и станет полностью с самого начала не читаемым из-за совпадания цвета иконки и цвета шрифта.

8. Экспорт отчетов MS Office (*.doc, *.xls) в PDF

Реализован экспорт ole-отчётов MS Office (*.xls, *.doc) в формат PDF. Для этого требуется указать в режиме создания отчёта rvmSave параметр FileName, имя файла должно иметь соответствующее расширение (*.pdf).

Подробный список реализованных форматов экспорта можно посмотреть тут: Шаблоны отчетов

9. CheckBox в карточке не реагирует на свойство “Выравнивание”

Редактор CheckBox научился обрабатывать свойство “Выравнивание” ADD.Alignment. По умолчанию выравнивание теперь по левому краю. В 4.30 была непрозрачная логика, когда от значения “Фиксированная ширина” зависело значение выравнивания.

10. Доработать LookUpTag редактор: фильтрация по вхождению

Редактору “выпадающий список”,- как “по запросу”, так и “с мультивыбором”,- добавлено новое свойство - “Тип инкриментального фильтра”(LookUpListIncFilterType).

Найстройка определяет каким образом будут фильтроваться значения выборки выпадающего списка при наборе текста в поле ввода элемента управления “выпадающий список”.

  • lliftBegining (По первым символам) - в списке остаются строки начинающиеся с введённого фрагмента текста
  • lliftLike (По вхождению) - в списке остаются строки содержащие введённый фрагмен текста
  • lliftNone (Не фильтровать) - состав списка не зависит от вводимого текста

11. Доработать TileFrame: каждой плитке свое изображение

Добавлена возможность для каждого размера плитки использовать отдельное изображение.

Для управления режимом работы с картинками добавлано свойство:

TbtkLookUpTileFrame.View.Item.ImageLoadMode("Режим работы с изображениями").

Возможны два варианта:

  • ilmImagePerTile(по умолчанию) - Одно изображение на плитку. Изображения загружаются из текущей выборки Tile фрейма.

  • ilmImagePerTileSize - Одно изображение на каждый размер конкретной плитки. Изображения загружаются из дополнительно заданной выборки. Выборка должна вернуть все изображения за один запрос. Для работы этого режима необходимо задать свойства TbtkLookUpTileFrame.Images.*

    TbtkLookUpTileFrame.Images.Selection.EntityName("Имя выборки изображений")

    TbtkLookUpTileFrame.Images.Selection.Representation("Отображение выборки изображений")

    Поля в выборке с изображениями:

    • TbtkLookUpTileFrame.Images.DataFields.ImageFieldName(“Имя поля с изображением”) - блоб с изображением.
    • TbtkLookUpTileFrame.Images.DataFields.ItemSystemNameFieldName(“Имя поля с идентификатором плитки”)
    • TbtkLookUpTileFrame.Images.DataFields.ItemSizeFieldName(“Имя поля с размером плитки”)

12. Доработать TileFrame: во всплывающее меню подгружать операции выборки

В контекстное меню добавлены операции выборки. При написании прикладного кода в операции выборки необходимо знать следующее: Сфокусированная запись соответствует выделенной плитке Перестроить фрейм можно с помощью переоткрытия выборки. На обновление, вставку, удаление и изменение записи обновление интерфейса не производится.

13. Доработать TileFrame: добавить клиентскую фильтрацию

Добавлена возможность клиентской фильтрации в Tile фрейм. Управлением видимостью фильтра отвечает свойство TbtkLookUpTileFrame.View.Filter.Visible(“Видимость фильтра”). По умолчанию True.

Нет необходимости переводить курсор ввода в редактор фильтра, достаточно начать ввод на клавиатуре при активном фрейме. При накладывании фильтра может меняться выделенная плитка в случае если текущая выделенная плитка не удавлетворяет условиям фильтрации. Нажатие на “Enter” в редакторе фильтра приведет к пробросу события в фрейм и вызыву операции обрабатывающей двойной клик на записи. При нажатии кнопки “Стрелка вниз” в редакторе фильтра произойдет перевод фокуса на фрейм с возможностью менять выделенную плитку клавишами со стрелками.

14. Реализовать у TileFrame скриптовый метод Controller.SetFocus

Реализовано.

15. Реализовать TbtkRTFEditorFrame

Реализован новый фрейм - TbtkLookupRtfEditorFrame. Фрейм позволяет просматривать и редактировать содержимое в Rich Text Format.

16. Сортировка с приведением к числу: настройка разделителей групп значений, целой и дробной части чисел

В дополнение к существующему свойству атрибута выборки “Сортировать с приведением к числам”(ApplySortAsNumber) реализовано новое свойство - “Разделители групп сортировки с приведением к числам”(ApplySortAsNumber.GroupDelimiters).

Задаёт набор разделителей групп сортировки. Разделители равноправны, т.е. используемый в конкретном месте разделитель не влияет на результат сортировки, важен лишь факт его наличия. Значение по умолчанию: “знак минус”, “прямой слеш”, “обратный слеш”. Если в разделители включена точка или запятая, то соответствующий знак перестаёт восприниматься как разделитель десятичной дроби. Значение задаётся строкой, подряд идущими символами, без каких-либо символов для визуального разделения.

17. Объединение окна логина и сплеша в 5 клиенте

В клиенте реализована возможность использования единого интерфейса для функционала Splash-окна и диалога авторизации.

С точки зрения пользовательского интерфейса это выглядит как расширение времени жизни диалога авторизации до рамок времени жизни Splash-окна, если не выставлена опция “/nosplash”. Если опция “/nosplash” выставлена - диалог работает как обычно.

В случае использования альтернативного диалога авторизации (диалог для TSD) - без опции “/nosplash” для авторизации будет использоваться интерфейс Splash-окна; с опцией - будет работать заданный диалог. В случаях когда диалог авторизации не используется (авторизация через параметры командной строки) - авторизационные данные также отображаются на Splash - база данных, логин. Также Splash маскирует пароль пользователя, в том числе и его длинну.

18. Реализовать подсветку контролов при навигации по дереву контролов в отладчике

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

19. Добавлять цвета из скинов в репозиторий стилей

Теперь все цвета из активного скина добавляются в репозиторий стилей. Имена стилей добавленных из скина формируются по следующим правилам:

“Имя цвета” - если это цвет скина;

“[Имя группы.[Имя элемента.]]Имя параметра” - если это параметр скина, группы или элемента.

20. Реализовать окружение в “редакторе тагов” (Выпадающий список с мультивыбором) для работы с деревом тагов

Редактору “Выпадающий список с мультивыбором” добавлено два новых свойства

  • “Атрибут c короткими заголовками тегов” (TagLookup.AttrTagCaption) - наименование атрибута выборки списка, из которого будет браться заголовок тага. Если свойство не задано - сохраняется поведение предыдущих версий - заголовок берётся из первого “атрибута отображаемых значений”.

  • Операция “элемент списка выбран” (TagLookup.OpListItemChosen) - наименование операции. Операция вызывается по факту совершённого выбора элемента из выпадающего списка пользователем. Имеет два входящих параметра: ID выбранного элемента, заголовок из списка(атрибута отображаемых значений).

    Возвращаемое значение (Result: Boolean) указывает на необходимость добавить выбранное значение как таг. В противном случае будет подставлено отображаемое значение в область текстового ввода редактора.

Свойства выйдут в модуле BTK 1.4.116.0

21. Добавить свойство фрейма регулирующее режим отображения надписей на таймлайне гантта

Новое свойство “Режим отображения дней недели” (TbtkLookUpGanttTreeTabFrame.Gantt.WeekdaysMode) доступно с версии BTK 1.4.116.0.

Его можно найти в свойствах фрейма в группе “Параметры графика Гантта”.

Свойство может принимать следующие значения:

  • wdmShort - Всегда использовать сокращения. Это значение используется по умолчанию.
  • wdmAuto - Использовать полные наименования, сокращать если не достаточно доступного места.

22. Неправильное выравнивание чекбокса в карточке

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

23. Привести дизайн формы авторизации к новому виду объединённого окна сплэша и авторизации

Переработан дизайн формы авторизации.

Исправленная ошибка

1. Access violation при использовании GetFormType в выборке, котоая создана динамически

Исправлена ошибка AV при вызове GetFormType от выборки не привязанной к контролу.

Также изменена логика в случае не возможности получить тип формы. Раньше показывалось диалоговое окно с текстом из BTK константы ECantDefineFrmType.Теперь возбуждается исключение EbtkScriptLogicError с тем же самым текстом.

2. При сохранении дерева в XLS с группировкой строк часть числовых ячеек получается текстовыми

Исправлен экспорт числовых атрибутов в файл excel из древовидного списка. Для экспорта из etEdit в Excel необходимо у редактора задать соответствующий DisplayFormat.

Больше информации об экспорте: Экспорт из списочных фреймов

3. Ошибки в диаграмме Гантта на 5 клиенте: не работает пункт меню “Подобрать интервал дат”

Исправлено

4. Ошибки Ганта: при рефреше курсор улетает на другую запись

5. Через сутки работы алертер перестает работать

Исправлена ошибка при которой служба оповещения клиента переставала принимать сообщения через сутки после запуска клиента.

6. AV при потере соединения с сервером в клиенте 4.30

Исправлена ошибка из-за которой при разрыве соединения сессии оповещения возникало AV.

7. Не работает RefreshItem в дереве после вставки записи

Исправлено

8. Узел не переносился на нового родителя после выполнения RefreshItem. Требовалось полное обновление выборки.

Исправлено

9. External Exception 0xC0000006

Причин ошибки может быть несколько - исправляется та ошибка, что могла возникать, когда клиент запускается в терминальном сервере с сетевого диска. Проблема заключается в том, что клиент после запуска не весь загружается в память или своп и подгружает нужные страницы по мере необходимости. Если при этом сетевой диск станет недоступен хоть на краткий период времени - может возникнуть ошибка. Теперь полностью весь клиент загружается в своп и оперативную память при запуске с сетевого хранилища

10. Зависание клиента после прерывания запроса по Ctrl+X и получения сообщения “Превышено время ожидания отмены”

В диалог отмены добавлена возможность продолжать ожидание отмены запроса. Более ранняя голика предполагала что сервер должен отреагировать на отпреавленный запрос отмены выполнения максимум за 10 секунед, по истечении этого времени кадается исключение о “Превышено время ожидания отмены”. После такого сообщения система остаётся в недетерминированном состоянии, что наиболее вероятно приведёт к последующим ошибкам работы. Такое поведение характерно для нагруженных серверов, когда физическая машина не справляется с обработкой.

Описанная логика была переработана. Теперь по истечении 10 сек. диалог предлагает совершить ещё одну отмену, более кардинальную - закрыть сессию где выполняется запрос. И при желании позволяет просто продолжить ожидать пока сервер ответит на запрос прерывания, сколь угодно долго.

Для работы нового функционала необходимы серверные методы (BTK 1.4.117):

  • BTK_ClientGate.KillSession
  • BTK_ClientGate.GetSessionSerial

11. Неправильно работает StringToArray(‘’, ‘;’)

Исправлена работа StringToArray с пустой строкой.Ошибка заключалась в том, что при передаче пустой строки возращался массив с одним элементом, вместо пустого массива.

<pascal>
  RTLs := StringToArray('', ';');
  ShowMessage( high(RTLs) ); //выдает 0
</pascal>

<pascal>
  RTLs := [];
  ShowMessage( high(RTLs) ); //выдает -1.
</pascal>

Теперь, после исправления, первый пример тоже выдаст -1.

12. Некорректно работает наложение ограничений размеров главного фрейма на MDI-окно

Если на размеры главного фрейма окна наложены ограничения размеров - эти ограничения накладываются и на окно им владеющее. При этом, наложенные ограничения проявлялись довольно специфично: ограничивалась ширина MDI-окна, но не высота, вне зависимости от режима отображения окна, т.е. и развёрнутое окно тоже было обрезано справа.

Исправлено.

Ограничения размеров MDI-окна применяются одинаково, как к ширине, так и к высоте, т.е. нормализованное MDI-окно (не свёрнутое и не развёрнутое) будет иметь все заданные в свойствах фрейма ограничения - максимальный и минимальный размеры.

Если MDI-окно развёрнуто - на него не распространяются установленные ограничения - будет занимать столько места сколько предполагается клиентской областью главного окна приложения. В то же время ограничения размеров продолжают действовать на фрейм, и в развёрнутом MDI-окне в том числе. Например, если карточному фрейму задать максимальную ширину 300px, то и на развёрнутом MDI-окне карточка не расползётся на всё доступное пространство - продолжит занимать максимум 300px по ширине, остальное место окна просто останется свободным.

13. При навигации по браузеру ресурсов клиент непонятно скачет по записям

Ошибка исправлена. Внесены исправления в HTML фрейм.

14. При вводе определенного текста в резолюцию задачи - он превращается в вопросы

Если в HTML редактор приходил определенный текст, например, “сделано все что можно”, то значение выводилось “??????????????????????”.

Исправлено.

15. Грузит проц при открытых карточках в простое на базе support

Проблема проявлялась только в простое приложения и когда приложение не свернуто. Удалось снизить нагрузку на cpu примерно в 8-10 раз.

16. Тип фрейма выборки списка приложений брать из метаданных

Раньше тип фрейма был зафиксирован TbtkLookUpGridFrame, теперь берем из метаданных выборки.

17. В древовидном списке не применяется настройка атрибута “Ширина колонки”

Исправлено.

18. Сильные тормоза при использовании скриптового метода OpenNode в частично прогружаемом древовидном списке

Увеличена скорость работы OpenNode в частично прогружаемом режиме выборки. Изменен алгоритм работы метода OpenNode. Раньше поиск раскрываемого узла осуществлялся последовательным перебором и раскрытием всех узлов. Теперь, вначале ищем среди загруженных узлов, затем в незагруженных. 4.30 ветка работает быстрее из-за ошибки в алгоритме определения наличия потомков у незагруженного узла.