6. Конфликты совместимости Oracle решения с Global 1#

  • Формы AS через super$ могут получить доступ только к главной выборке приложения. Формы приложения Global 1, могут быть связаны друг с другом super$ параметрами. Многие карточки обращаются к вызывающим формам через super$.

  • В AS строгая типизация. При несовпадении типов вызывается исключение конвертации типов. А Global 1 позволяет записывать в параметры значения с не согласованными типами данных.

    Например, этот код выполнится в Global 1 и вызовет исключение в AS

    <pascal>
       AddVar('Param',  'Какая-то строчка', ftFloat);
    </pascal>
    

    В Global 1: GetVar('MyDate') вернёт дату, поскольку значение хранится как Variant и не конвертируется. В AS: GetVar('MyDate') вернёт строковое представления числа, поскольку даты через JavaScript передаются как double и на этапе добавления параметра произойдёт конвертирование double в строку.

    <pascal>
       AddVar('MyDate', GetVar('dDate'), ftString);
    </pascal>
    
  • Методы работы с длиной строки

    <pascal>
       a := 's';
       setLength(a, 25); // Метод задания длины строки. Не реализован для AS, применение приведет к ошибке.
       length(a); // в Global 1 вернет 25; в AS вернет 1
       strlen(a); // вернет 1 для Global 1 и AS
    </pascal>
    
  • Результат условия null = 0 для Global 1 будет true, для AS будет false. В паскале (в Global 1) происходит преобразование к number, и null приравнивается к 0. В JavaScrit (в AS) null - объект, из-за этого идет преобразование к строкам.

  • Массивы объектов/массивов. При присвоении массива в качестве элемента другого массива, при выполнении в Global 1, передается значение; в AS – ссылка.

    В данном примере, при выполнении в AS, все элементы массива avResult будут содержать ссылку на последний элемент массива someData#
    <pascal>
        avResult := CreateArray();
        avTmp := CreateArray();        // создается объект
        for i := 1 to 2 do begin
            avTmp[1] := someData[i];   //объект получает значение
            avResult[i] := avTmp;      // в ``AS`` передается ссылка на один и тот же объект
        end;
    </pascal>
    
  • Загрузка файлов в базу. В приложении Global 1, обычно сначала открывается диалог выбора файла, после чего выполняется BlobOpen('поле', 'имя файла'). Для AS данный способ не подходит. Процессы выбора файла и загрузки файла на сервер должны выполняться одновременно. Для этого предлагается сделать метод BlobOpen() функцией, возвращающей имя загруженного файла.

  • Формировать в сеттере BLOB поля вызов API.SetxxxLOB() метода.

  • Разделение элементов в фиксированном выпадающем списке. Если в задающей строке будут подстроки и перед символом " или ' будут символы, отличные от разделителя, в Global 1 происходит игнорирование подстроки.

    Пример 1:
    • Исходная строка 123"A,B"321

    • В Global 1 элементами будут 123"A, B"321

    • В AS элементами будут 123, A,B, 321

    Пример 2:
    • Исходная строка "A,B"123

    • В Global 1 и в AS элементами будут A,B, 123

  • В AS недоступно обращение к детальным выборкам в момент открытия мастера. В Global 1 это работает, поскольку, сначала простраивается вся форма, а потом открывается гл. выборка. В AS форма простраивается последовательно (что ускоряет ответ системы), из-за чего в операции beforeFirstOpen главной выборки детали ещё не доступны и параметры в детали не добавляются.

  • В AS добавлены свойства атрибута View.Representation.Attributes.Attribute.Style.highlightLang и View.Representation.Attributes.Attribute.Style.highlightCol, хранящие язык, выделяемый в тексте, и цвет выделения этого языка соответственно.

  • btkFrame.TbtkGridPanelFrame

    • В AS поддерживает размеры строк и колонок, указанные в процентах и как auto. Но поддерживает размеры, указанные в пикселах.

    • Global 1 не поддерживаются значения размеров v (они вычисляются относительно полного размера гридпанели).

    • AS учитывает изменения свойствах, влияющих на содержимое и его отображение при рефреше выборки фрейма. Global 1 не поддерживает изменения в метаданных.

  • btkFrame.TbtkLookUpGanttTreeTabFrame

    • AS поддерживает свойство CaptionWordWrap. В Global 1 это свойство не обрабатывается