Oracle Forms10g提供了一个工具,用于将Oracle Forms模块从Oracle Forms Builder使用的二进制格式(.FMB)转换为文本格式(.FMT)。

例如,如果使用Oracle Forms Builder创建名为 mymodule.fmb 的模块,然后调用

frmcmp module=mymodule.fmb script=yes batch=yes logon=no

从命令行,Oracle Forms Convert实用程序将从文件 mymodule.fmb 创建名为 mymodule.fmt 的文件。该文本文件应该是“可读”的。除了编码的触发器和程序单元的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代码?

能够在很多.FMT文件的PL / SQL代码中搜索字符串非常有用,而不是使用Oracle Forms Builder手动打开每个相应的.FMB文件,并搜索字符串在他们每个人中。

谢谢!

有帮助吗?

解决方案

除了API之外,请注意,如果您在此过程开始时工作,那么生成XML版本可能比FMT版本更好。 FMT是为了向后兼容而保留的较旧格式,以及最近宣布的表格 - &gt;等工具。 Oracle APEX转换器需要XML。它也更容易阅读。

在“Form 10g release 1”中(9.0.4)XML转换器是一个单独的命令行程序。 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,可以让您完全按照您的描述进行操作。您需要查看Forms文档才能执行此操作,但这可能比尝试提取二进制字符串更快。

如果您愿意为现有工具付款,请使用以下命令:

http://www.orcl-toolbox.com/

他们的formsAPI和FormsTools允许您对表单进行提取,差异,更改和更新。

根据页面作者有一个perl脚本将十六进制转换回ascii文本(他说给他发一封电子邮件然后发送给他)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top