Java開発API(JDAPI)を使用したOracle Formの探索

データベースオブジェクトへのフォームの依存関係を見つけるには、Oracle Formファイル(以降-fmbファイル)を解析する必要がありました。

Fmbは擬似テキストファイルです。本当に必要な場合は、PL / SQLコードを確認し、そこでデータベースオブジェクトがどのように使用されているかを確認できますが、トリガーまたはプログラムのタイプとそれが参照するフォーム要素を理解することは依然として困難です。 FMTへの変換を使用できますが、fmtファイルの解析は、Oracleが提供するAPIを使用するよりも簡単だとは思いません。

さらに、私のプログラムの残りの部分はJava Swingで書かれており、JDAPIを使用する方が論理的でした。フォームを解析し、興味のあるすべてのPL / SQLコードとプロパティを表示できます。



実際、すべてがシンプルであることが判明しました。 Oracle Formsがインストールされているため、すべてが適切に配置されています。 Javaアプリケーションに接続する必要があるjarアーカイブはfrmjdapi.jarと呼ばれ、ORACLE_HOMEの下のディレクトリツリーで検索できます。ほとんどの場合、%ORACLE_HOME%\ jlib \(Oracleミドルウェア)または%ORACLE_HOME%\ forms \ java \(Forms 10 )

Fmbオープニング
JdapiModule module = null; File theFile = new File(path); module = JdapiModule.openModule(theFile);
      
      







オプションのリストを取得する
 for (JdapiIterator params = ((FormModule)module).getModuleParameters(); params.hasNext();){ ModuleParameter param = (ModuleParameter) params.next(); System.out.println(param.getName()); }
      
      







ブロックリスト
 for (JdapiIterator blocks = ((FormModule)module).getBlocks(); blocks.hasNext();){ Block block = (Block) blocks.next(); System.out.println(block .getName()); }
      
      





ブロックのプロパティ
 if (!block.getWhereClause().equals("")) System.out.println("Where Clause: "+ block.getWhereClause()); if (!block.getOrderByClause().equals("")) System.out.println("Order by Clause: "+ block.getOrderByClause()); if (!block.getParentName().equals("")) System.out.println("Reference Object: "+ block.getParentName(); if (block.isInsertAllowed()) System.out.println("Insert Allowed: Yes"); else System.out.println("Insert Allowed: No"); if (block.isDeleteAllowed()) System.out.println("Delete Allowed: Yes"); else System.out.println("Delete Allowed: No"); if (block.isUpdateAllowed()) System.out.println("Update Allowed: Yes"); else System.out.println("Update Allowed: No");
      
      







論理は明確です。 私のEclipseは私に必要なすべてを教えてくれました。 したがって、フォームに関する情報を取得できます。

私の目的では、ブラウザーフォームの作成方法に沿って、JDAPIが非常に適していました。

その中のフォームは次のようになります。

残念ながら、Oracle Reportでは、そのようにはうまくいかなかった。 しかし、Oracleの印象では、フォームとレポートは2つの異なるチームを作成しているように見えますが、チームはお互いが好きではありませんでした。

何らかの理由で、APIはレポートを提供しませんでした。 バッチでrdfファイルをXMLコマンドに変換する必要がありました

rwconverter stype = rdffile source = "+ f.getAbsoluteFile()+" dtype = xmlfile dest = "+ xmlFileName +" batch = yes

そして、このXMLをorg.xml.saxで解析しますが、それは別の話です。



All Articles