이 단원에서는 새 레코드를 작성하고 레코드의 필드 값 지정 방법을 학습합니다.
이 단원의 코드 예제는 사용자가 레코드를 작성할 수 있는 예제를 제공합니다.
초기 대화 상자에서 사용자는 레코드를 작성할 데이터베이스와
작성할 레코드 유형을 선택할 수 있습니다. 레코드가 작성되면 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);