< 前へ | 次へ >

レコードの作成

この演習では、新規レコードを作成する方法とレコードのフィールド値を指定する方法について学習します。
この演習のコードの例には、ユーザーがレコードの作成に利用できる例が用意されています。最初のいくつかのダイアログで、レコードを作成するデータベースおよび作成するレコードのタイプを選択できます。 レコードが作成されると、EditRecord ダイアログがユーザーに示されます。このダイアログで、ユーザーは、必須フィールドやオプションのフィールドを設定して、新規レコードをデータベースにデリバーすることができます。
    public static void main(String[] args)
    {
        try {
            CqProvider provider = Utilities.getProvider().cqProvider();
            Viewer viewer = new Viewer(provider);
            ResourceList<CqUserDb> databases = Utilities.getUserDbList(provider, null);
            CqUserDb userDb = (CqUserDb) JOptionPane
                .showInputDialog(null,
                                 "Choose a Database for the New Record",
                                 "Create Record",
                                 JOptionPane.INFORMATION_MESSAGE,
                                 null,
                                 databases.toArray(new Object[] {}),
                                 databases.get(0));
    
            if (userDb == null) System.exit(0);
            
            userDb = (CqUserDb) userDb
                .doReadProperties(new PropertyRequest(CqUserDb.RECORD_TYPE_SET
                                                .nest(RECORD_TYPE_PROPERTIES)));
            
            // 選択されたデータベースからすべてのレコード タイプのリストを読み取り、 
            // 登録できないレコード タイプをそのリストから除去します。 
            ResourceList<CqRecordType> rTypes = 
                setUserFriendlyLocation(userDb.getRecordTypeSet());
            Iterator<CqRecordType> types = rTypes.iterator();
    
            while (types.hasNext()) {
                if (!types.next().getIsSubmittable())
                    types.remove();
            }
    
            // 登録可能なレコード タイプのリストをユーザーに示し、 
            // その中から選択できるようにします。 
            CqRecordType recordType = (CqRecordType) JOptionPane
                .showInputDialog(null,
                                 "Choose the type of record to create",
                                 "All Record Types in "
                                     + userDb.location().string(),
                                 JOptionPane.INFORMATION_MESSAGE,
                                 null,
                                 rTypes.toArray(new CqRecordType[] {}),
                                 rTypes.get(0));
    
            if (recordType == null) System.exit(0);
    

            // 新規レコードの実際の名前は、スキーマによって決まります。 
            // ここで必要なのは、「推奨される」ロケーションのみです。 
            // これにより、レコードが指定されたレコード タイプのメンバになります。 
            CqRecord record = cqRecordType.cqProvider().cqRecord((StpLocation) recordType
                .getUserFriendlyLocation().child("new"));
            
            // レコードを作成します。まだデリバーを試行しないでください。 
            // デリバーが正常に行われるためには、その前にユーザーが必須フィールドを 
            // 設定する必要があるかもしれません。 
            record = record.doCreateRecord(RECORD_PROPERTIES, CqProvider.HOLD);
            
            /*
             * 作成したレコードをデータベースにデリバーした後、 
             * EditRecord ダイアログは、それをビューアに再表示しようとします。 
             * この「オリジナル」プロキシは事後に作成する必要があります。 
             * それは新規レコードが作成されるまでは、そのレコードのロケーションが 
             * 有効にならないためです。安定したロケーションを使用する 
             * 必要があります。ユーザーに分かりやすいロケーションは、 
             * フィールド値が変更されたときに変わる可能性があるからでます。 
             */
            CqRecord selected = recordType.cqProvider()
                                    .cqRecord(record.getStableLocation());
    
            // 変更のコンテキストで新規レコードが作成される場合、 
            // そのプロセスはレコードの編集と同じように進行します。必須フィールドは 
            // ユーザーによって入力されなければなりません。その後、デリバーが可能になります。 
            viewer.editRecord("Create Record ", record, selected)
                .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        } catch (Throwable ex) {
            ex.printStackTrace();
            Utilities.exception(null, "Create Record", ex);
            System.exit(0);
        }
    }
    
    /** レコード作成の前に読み取られるレコード タイプ プロパティ */
    final static PropertyRequest RECORD_TYPE_PROPERTIES =
        new PropertyRequest(CqRecordType.USER_FRIENDLY_LOCATION,
                            CqRecordType.IS_SUBMITTABLE,
                            CqRecordType.DISPLAY_NAME);
新規レコードが作成されると、Rational® CM API を使用して、レコード上でその他の操作を実行することができます。たとえば、結果セットで新規レコードを戻すクエリーを実行して、新規レコードがユーザー データベース内にあることを検証できます。

演習のチェックポイント

ここでは、Rational CM API を使用してユーザー データベース内で作成 操作を実行するクライアント アプリケーションのアクションを作成する方法について学習しました。
この演習では、以下について学習しました。
  • Rational CM API を使用して、クライアント アプリケーションから新規リソースとプロパティ値 (ユーザー データベース内のレコードとそのフィールド値など) を作成するための操作を実行する方法。
< 前へ | 次へ >

フィードバック