ブロックチェーン表を扱うアプリを作る際に、証明書の登録と削除が手間だったので、簡単に行うアプリを作ってみました。レポートとフォームを使っています。Oracle APEXのフォーム・リージョンで可能なことは、表の操作だけではない、という例にもなっています。
既存のアプリケーションにページを追加します。
アプリケーション・ビルダーよりページの作成を実行します。
コンポーネントのフォームを選択します。
select certificate_guid, user_name, distinguished_name, certificate from user_certificates
ページ・アイテムのP5_USER_NAMEとP5_DISTINGUISED_NAMEは画面入力の対象ではないので、両方を選択してタイプを表示のみに変更します。
続いてプロセス・ビューを開き、フォームに対応するプロセス(ここではプロセス・フォーム証明書)を選択します。設定のターゲット・タイプをPL/SQL Codeに変更し、挿入/更新/削除するPL/SQLコードに以下を設定します。フォームのページ番号が5でない場合は、P5の部分を変更してください。
declare l_cert blob; l_cert_guid raw(16); begin case :APEX$ROW_STATUS when 'C' then select blob_content into l_cert from apex_application_temp_files where name = :P5_CERTIFICATE; dbms_user_certs.add_certificate(l_cert, l_cert_guid); :P5_CERTIFICATE_GUID := l_cert_guid; when 'D' then dbms_user_certs.drop_certificate(:P5_CERTIFICATE_GUID); end case; end;
APEX_APPLICATION_TEMP_FILESにアップロードされた証明書のデータ(列BLOB_CONTENT)を取り出し、DBMS_USER_CERTS.ADD_CERTIFICATEプロシージャに渡すことで、証明書をデータベースに登録しています。返却されるCERTIFICATE_GUIDの値は対応するページ・アイテムP5_CERTIFICATE_GUIDに設定します。削除要求はP5_CERTIFICATE_GUIDをDBMS_USER_CERTS.DROP_CERTIFICATEプロシージャに渡して実行しています。
トランザクションに関係なく行われる処理であるため、失われた更新の防止はOFF、行のロックもNoに設定します。
以上で、基本的な動作については実装が完了しました。先頭のGIF動画のような操作ができるようになっています。
以上で証明書の登録と削除を行うアプリケーションの作り方の紹介は完了です。ブラウザにて署名を作る部分も含んだアプリケーションのエクスポートを以下に置きました。ブロックチェーン表を作成するDDLは含んでいません。
https://github.com/ujnak/apexapps/blob/master/exports/blockchainapp.sql
Oracle APEXのアプリケーション作成の一助になれば幸いです。
完