UniCommand различия для UniData

Я новичок в мире UniObjects, так как я был в.NET земле с момента его дебюта. После создания простого приложения для возврата списка выбора оператора UniCommand я заметил, что существуют некоторые существенные различия в том, как UniData и как UniObjects анализируют оценки UniCommand. Из того, что я обнаружил, похоже, что это различия в вкусе используемого PICK.

Я спрашиваю других программистов UniObjects (UniVerse или UniData), которые знают о различиях или знают команды, которые можно выполнить, чтобы перечислить их здесь. Я спрашиваю об этом, потому что документацию о том, что может и не может быть командой, очень сложно найти.

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

Что мы будем вводить в UniData: (ошибка парсера, если дано в UniCommand)

  • ВЫБРАТЬ ЦВЕТА = "СИНИЙ"

Что следует ввести в UniCommand UniObject:

  • ВЫБЕРИТЕ ЦВЕТА С @ID, КАК "BLU..."

Обратите внимание, что подстановочный знак UniData - это "]" (квадратная скобка), где UniCommand - это "..." (elipsis). Также обратите внимание, как UniData принимает оператор равенства и как UniCommand использует оператор LIKE и WITH.

Также, если у кого-либо есть ссылка на документ по всем доступным командам, он также может опубликовать его здесь.

3 ответа

Команда ECLTYPE "U" работает с интерактивным сеансом из TCL, но я вижу, как сложно было бы постоянно устанавливать из UniObjects.

Уловка Unidata из уст в уста, которую удобно знать, состоит в том, что глаголы в нижнем регистре всегда выполняются как ECLTYPE U. Таким образом, вы получите нужное поведение, независимо от вида учетной записи. Так что это должно работать нормально:

select COLORS WITH @ID LIKE "BLU..."

Проблема заключается в том, что ваша среда Unidata настроена на синтаксический анализ команд с помощью синтаксического анализатора PICK, но объект UniCommand выполняет собственный анализатор Unidata. (Синтаксис LIKE и... взят из основного режима Unidata, который смоделирован из Prime Information.)

Я искал свойство в UniSession или UniCommand, которое могло бы изменить синтаксический анализатор, который используется для метода Execute, но не нашел его. Однако документация UniCommand гласит, что это эквивалентно основному выражению EXECUTE. Эта и некоторые команды UDT.OPTIONS могут открыть путь к обходному пути, который позволит вам использовать синтаксис команды PICK, даже если UniObjects не поддерживает его напрямую.

Команда EXECUTE в Unidata может принимать несколько команд, разделенных @AM, и будет выполнять их одну за другой, возвращая только после того, как все будет обработано. (Это что-то вроде минипроцесса.) Итак, соберите вашу команду, по крайней мере, с командой "UDT.OPTIONS 2 ON" в атрибуте 1, за которой следуют любые другие, которые вам могут понадобиться, и, наконец, желаемая команда PICK в последней приписывать. Затем отправьте всю связку сразу через метод Execute вашего объекта UniCommand.


Документация для UDT.OPTIONS 2 выглядит следующим образом:

Determines the parser the system uses to interpret UniQuery commands.
    ON System uses the Pick® parser.
    OFF System uses the UniData parser.

Есть несколько других UDT.OPTIONS, связанных с совместимостью PICK. Посмотрите документы, в частности файл udto.pdf, в разделе "Совместимость Pick®".


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

РЕДАКТИРОВАТЬ: пример кода C#

UniSession s = UniObjects.OpenSession("machine", "user", "password", "/path/to/account", "udcs");
UniCommand c = s.CreateUniCommand();
c.Command = "UDT.OPTIONS 2 ON" + "\xfe" + "SELECT COLORS = \"BLU]\"";
c.Execute();

"\ Xfe" является меткой атрибута. (Это CHAR(254) в Pick-говорить.) Надеюсь, это поможет.

Различия, которые вы описываете, - это различия в ECLTYPE в UniData, который полностью независим от UniObjects. Если вы установите ECLTYPE вашей учетной записи UniData на "U", он примет синтаксис:

SELECT COLORS WITH @ID LIKE "BLU..."

Если вы установите ECLTYPE на "P", он примет синтаксис:

SELECT COLORS = "BLU]"

Документация UniObjects для.NET гласит:

"В системах UniData лучше использовать ECLTYPE U. Вы можете столкнуться с вариациями с другими настройками ECLTYPE или UDT.OPTIONS".

Из документации мне не ясно, выполняются ли UniCommands неизменно с использованием ECLTYPE "U" или есть ли параметр, позволяющий вам настроить тип анализатора. Вы можете попробовать выполнить ECLTYPE "P" введите команду из сеанса UniObjects и посмотрите, анализируются ли последующие UniCommands с синтаксисом "P" как таковые.

Другие вопросы по тегам