この演習のコードの例には、ユーザーがレコードの作成に利用できる例が用意されています。最初のいくつかのダイアログで、レコードを作成するデータベースおよび作成するレコードのタイプを選択できます。 レコードが作成されると、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 を使用して、レコード上でその他の操作を実行することができます。たとえば、結果セットで新規レコードを戻すクエリーを実行して、新規レコードがユーザー データベース内にあることを検証できます。