In questa lezione, si acquisiscono informazioni su come creare un nuovo record e specificare i
valori campo del record.
L'esempio di codice presente in questa lezione fornisce un esempio per consentire a un
utente di creare un record. Le finestre di dialogo iniziali consentono
all'utente di selezionare il database nel quale creare il record e il tipo di
record da creare. Una volta creato il record, all'utente viene visualizzata la finestra
di dialogo EditRecord. In tale finestra di
dialogo, l'utente può impostare i campi obbligatori o facoltativi, quindi consegnare il
nuovo record al database.
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)));
// Leggere l'elenco di tutti i tipi di record dal database selezionato e
// rimuovere da tale elenco i tipi di record non inoltrabili.
ResourceList<CqRecordType> rTypes =
setUserFriendlyLocation(userDb.getRecordTypeSet());
Iterator<CqRecordType> types = rTypes.iterator();
while (types.hasNext()) {
if (!types.next().getIsSubmittable())
types.remove();
}
// Presentare l'elenco di tipi di record inoltrabili all'utente per la
// selezione
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);
// Il nome effettivo del nuovo record è determinato dallo
// schema. L'unica cosa necessaria qui è una ubicazione "consigliata"
// che renda il record un membro del tipo di record specificato.
CqRecord record = cqRecordType.cqProvider().cqRecord((StpLocation) recordType
.getUserFriendlyLocation().child("new"));
// Creare il record. Non tentare già di consegnarlo in quanto l'utente potrebbe
// dover impostare i campi obbligatori perché la consegna
// riesca.
record = record.doCreateRecord(RECORD_PROPERTIES, CqProvider.HOLD);
/*
* Una volta consegnato il record creato al relativo database, la finestra
* finestra di dialogo EditRecord chiederà di rivisualizzarlo nel proprio programma di visualizzazione.
* L'utente deve in seguito creare questo proxy "originale"
* poiché non si dispone di una valida ubicazione per il nuovo record fino a quando
* questa non viene creata. È necessario utilizzare l'ubicazione stabile
* in quanto, in alcuni casi, l'ubicazione semplice può essere modificata
* quando vengono modificati i valori campo.
*/
CqRecord selected = recordType.cqProvider()
.cqRecord(record.getStableLocation());
// Con il nuovo record creato nel contesto di modifica, il processo
// prosegue nello stesso modo della modifica di un record. I campi
// obbligatori devono essere forniti dall'utente e successivamente è possibile consegnarli.
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);
}
}
/** Le proprietà del tipo di record lette prima della creazione di un record */
final static PropertyRequest RECORD_TYPE_PROPERTIES =
new PropertyRequest(CqRecordType.USER_FRIENDLY_LOCATION,
CqRecordType.IS_SUBMITTABLE,
CqRecordType.DISPLAY_NAME);
Una volta creato un nuovo record, è possibile eseguire altre operazioni su
esso utilizzando Rational CM
API. Ad esempio, è possibile verificare che il nuovo record si trovi nel database utente
eseguendo una query che restituisce il nuovo record nella serie di risultati.