0

選択した行の値をコピーして、新しいレコードとして保存する必要があります。Oracle Apex 4.2 と表形式を使用しています。チェックボックスを使用して行とボタンのコピーを選択する必要があります。複数の行を選択してからコピーボタンをクリックすると、選択したすべての行の値が新しい行としてコピーされ、保存されます。

誰でも助けてもらえますか

4

1 に答える 1

0

APEX 表形式フォーム入力によるレコードのコピー

Oracle APEX表形式フォームを介して単一の表から既存のレコードをクローニングするという考え方は、ページ領域コンテンツ用にAPEXウィザードを使用して設定できるデフォルトの設計にほとんど干渉することなく機能します。

  1. 独立した主キーを持つテーブルを構築します。

  2. コピー操作を実行するためのCOPY_REQUESTとの2 つの補助列を含めることをお勧めします。COPIED_FROM特定のフォーム要素が、設定される表形式フォームのこれらの列にマップされます。

  3. コピーする必要があるレコードを読み取ることができる Oracle ストアド プロシージャを作成します。SUBMITこのプロシージャは、ボタンが押されるたびに呼び出されます。

  4. (オプション)処理するものが何もない場合 (つまり、コピー用にマークされたレコードがない場合) に、ステップ (3) の抑制を含めることを検討してください。

入力を受け取る作業テーブル: COPY_ME

自動レコード コピーをサポートするための COPY_ME デモンストレーション テーブル

ヒント:標準の TABLE 作成ウィザードを使用すると、簡単に作成できます。PRIMARY_KEY として指定CUSTOMER_IDし、APEX に標準の自動インクリメント機能を作成させます。(シーケンスとトリガーのセットアップ)

これが私が使用したサンプルデータです...それは問題ではありません。独自の値を入力して、何が起こったのかを簡単に確認できます。

COPY_ME デモンストレーション テーブルのサンプル データ

重労働: COPY_ME でレコードを複製するためのストアド プロシージャ

この手順は、テーブル内の特別な識別子を使用して、一度に 1 つ以上のレコードを処理しCOPY_REQUESTます。タスクが完了すると、プロシージャはクリーンアップし、リクエスト値を再度リセットします。

 create or replace procedure proc_copy_me_request is

      c_request_code   CONSTANT   char(1):= 'Y';

      cursor copy_cursor is
         SELECT cme.CUSTOMER_ID, cme.CUSTOMER_NAME, cme.CITY, cme.COUNTRY,
                cme.COPY_REQUEST
           FROM copy_me cme
          WHERE cme.COPY_REQUEST = c_request_code
            FOR UPDATE OF cme.COPY_REQUEST;

 BEGIN

 FOR i in copy_cursor LOOP

    INSERT INTO copy_me (customer_name, city, country, copied_from)
    VALUES (i.customer_name, i.city, i.country, i.customer_id);

    UPDATE copy_me
       SET copy_request = null
     WHERE CURRENT OF copy_cursor;

 END LOOP;

 COMMIT;

 END proc_copy_me_request;

非表示にできる列もあります。レコードが最初にコピーされた場所を追跡します。

カーソルがFOR UPDATE OFandWHERE CURRENT OF表記を使用していることに注意してください。この手順は参照されるレコードを変更するため、これは重要です。

APEX ページ設定手順

FORM標準タイプのページを設定し、TABULAR FORMスタイルを選択します。セットアップ手順に従い、正しい主キーをマッピングするように注意し、上記の前の手順でテーブルを使用して作成された PK シーケンス オブジェクトにもマッピングします。

これらの手順が完了すると、ページの設定は次のようになります。

Apex での COPY_ME ページ設定

  1. COPY_REQUESTフォームの値を編集します。

    • 列属性セクションで、表示方法オプションを「単純なチェックボックス」に変更します。
    • 値のリストセクションの下で、LOV 定義の下に 1 つの値を入力します: Y (どちらの方法でも大文字と小文字が区別されます... 一貫性を保つようにしてください)
  2. COPIED_FROMフォーム値の編集:列属性セクションの下で、表示形式オプションを「テキストとして表示 (状態を保存)」に変更します。これは、ユーザーがこの読み取り専用フィールドを踏まないようにするためです。知ることが重要でない場合は、それを抑制することもできます。

  3. 新しいプロセスの作成: コピー プロシージャの実行

COPY_ME カスタムプロセス定義トップページ

これは同じ構成ページの一番下です。変更または追加する項目はほとんどありません。

COPY_ME カスタム プロセス定義の下部ページ

デモ: 動作中の COPY_ME 表形式フォーム ページのスクリーンショット

以下の最初のスクリーンショットは、ページが整頓され、チェックボックス コントロールが配置される前のものです。

COPY_ME 表形式: 最初のバージョン

いくつかのテストデータをプラグインして、試してみてください。SUBMIT上記の手順で作成されたページ プロセスは、フォーム ボタンが選択されたときに同時に行われたすべてのコピー要求を処理するストアド プロシージャを条件付きで呼び出します。

COPY_ME 表形式: デモ版

コメント: Oracle APEXの組み込みウィザードをいじくり回すのに十分な時間を費やすと、ツール内で互換性のある新しい設計パターンとプロセス フローを学習する機会があります。アプローチを適応させることで、追加の作業とフラストレーションの量を減らすことができます。

于 2014-03-29T04:19:01.550 に答える