Как прочитать код PL / SQL в файле Oracle Forms .FMT?
-
04-07-2019 - |
Вопрос
Oracle Forms10g предоставляет инструмент для преобразования модулей Oracle Forms из двоичного формата (.FMB), с которым работает Oracle Forms Builder, в текстовый формат (.FMT).
Например, если вы создаете модуль под названием мой модуль.fmb с помощью Oracle Forms Builder, а затем вызовите
frmcmp module=mymodule.fmb script=yes batch=yes logon=no
из командной строки утилита Oracle Forms Convert создаст файл с именем мой модуль.fmt из файла мой модуль.fmb.Предполагается, что этот текстовый файл "читаем" людьми, за исключением кода триггеров и программных модулей на PL / SQL, который кодифицирован.
Например, это фрагмент файла .FMT с фрагментом кодифицированного кода PL / SQL
DEFINE F50P
BEGIN
PP = 10
PI = 3
PN = 464
PL = 1138
PV = (BLONG)
<<"
00000049 00800000 00440000 00000000 00000031 0000000d 00000002 a0011519
00002420 0000045e 001f0000 00165030 5f32335f 4f43545f 32303038 31365f33
375f3039 00000006 42454749 4e0a0000 0042676f 5f626c6f 636b2820 27504149
53455327 20293b0a 69662066 6f726d5f 73756363 65737320 7468656e 0a096578
65637574 655f7175 6572793b 0a656e64 2069663b 00000005 0a454e44 3b000000
1d574845 4e2d4e45 572d464f 524d2d49 4e535441 4e434520 28466f72 6d290000
Вы когда-нибудь пытались декодировать такого рода файлы, чтобы иметь возможность извлекать PL / SQL-код формы?
Было бы очень полезно иметь возможность искать строку в коде PL / SQL множества файлов .FMT вместо того, чтобы использовать Oracle Forms Builder для ручного открытия каждого из соответствующих .Файлы FMB и выполните поиск строки в каждом из них.
Спасибо!
Решение
Наряду с API, обратите внимание, что если вы работаете в начале этого процесса, вам, вероятно, будет лучше сгенерировать XML-версию, чем версию FMT.FMT - это более старый формат, сохраненный для обратной совместимости, и такие инструменты, как недавно анонсированные Forms -> Oracle APEX converter, захотят использовать XML.Это также легче читать.
В "Forms 10g release 1" (9.0.4) XML converter является отдельной программой командной строки.forms2xml.Я думаю, что это все еще верно для 10.1
Кроме того, XML легче читать и интерпретировать.
Другие советы
Байты - это просто шестнадцатеричные значения символов.например:берем 4-ю строку и помещаем ее в следующий код python:
[chr(x) for x in [0x53,0x45,0x53,0x27 ,0x20,0x29,0x3b,0x0a ,0x69,0x66,0x20,0x66 ,0x6f,0x72,0x6d,0x5f ,0x73,0x75,0x63,0x63 ,0x65,0x73,0x73,0x20 ,0x74,0x68,0x65,0x6e ,0x0a,0x09,0x65,0x78]]
выдает следующий результат:
['S', 'E', 'S', "'", ' ', ')', ';', '\n', 'i', 'f', ' ', 'f', 'o', 'r', 'm', '_', 's', 'u', 'c', 'c', 'e', 's', 's', ' ', 't', 'h', 'e', 'n', '\n', '\t', 'e', 'x']
который является узнаваемым в формах pl / sql.Таким образом, похоже, что не составило бы слишком большого труда создать скрипт, который брал бы каталог файлов FMT и создавал соответствующие файлы с текстом, который можно было бы искать.
Получайте удовольствие!
Oracle Forms 9i и более поздние версии имеют программный API, позволяющий вам делать именно то, что вы описываете.Для этого вам нужно будет просмотреть документацию по вашим формам, но это может быть быстрее, чем пытаться извлечь двоичные строки.
Если вы готовы заплатить за существующий инструмент, используйте следующее:
Их formsAPI и FormsTools позволяют вам извлекать, изменять и обновлять ваши формы.
Согласно это страница у автора есть perl-скрипт для преобразования шестнадцатеричного текста обратно в ascii-текст (он говорит отправить ему электронное письмо, и он отправит его)