Nesta lição, você aprende como criar um novo registro e especificar valores de campo do registro.
O exemplo de código nesta lição fornece um exemplo para permitir que
um usuário crie um registro. Diálogos iniciais permitem que o usuário selecione o banco de dados
no qual criar o registro e o tipo de registro a criar. Depois que o registro é criado, é apresentado o diálogo EditRecord ao usuário. Nesse
diálogo, o usuário pode definir campos obrigatórios e opcionais e, em seguida, entregar o novo registro ao banco de dados.
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,
"Escolher um Banco de Dados para o Novo Registro",
"Criar Registro",
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)));
// Leia a lista de todos os tipos de registros do banco de dados selecionado e
// remova dessa lista aqueles tipos de registros que não sejam enviáveis.
ResourceList<CqRecordType> rTypes =
setUserFriendlyLocation(userDb.getRecordTypeSet());
Iterator<CqRecordType> types = rTypes.iterator();
while (types.hasNext()) {
if (!types.next().getIsSubmittable())
types.remove();
}
// Apresentar a lista de tipos de registro enviáveis para o usuário para
// seleção
CqRecordType recordType = (CqRecordType) JOptionPane
.showInputDialog(null,
"Escolher o tipo de registro a criar",
"Todos os tipos de registros em "
+ userDb.location().string(),
JOptionPane.INFORMATION_MESSAGE,
null,
rTypes.toArray(new CqRecordType[] {}),
rTypes.get(0));
if (recordType == null) System.exit(0);
// O nome real do novo registro é deteminado pelo
// esquema. Tudo o que é necessário aqui é um local "sugerido"
// que torne o registro um membro do tipo de registro especificado.
CqRecord record = cqRecordType.cqProvider().cqRecord((StpLocation) recordType
.getUserFriendlyLocation().child("new"));
// Criar o registro. Não tente entregá-lo ainda, já que o campo obrigatório
// pode precisar ser configurado pelo usuário antes da entrega
// ocorrer.
record = record.doCreateRecord(RECORD_PROPERTIES, CqProvider.HOLD);
/*
* Depois de entregar o registro criado para seu banco de dados, o
* O diálogo EditRecord tentará exibi-lo novamente em seu próprio visualizador.
* Nós precisamos criar este proxy "original" depois do fato
* porque nós não temos um local válido para o novo registro até
* depois de ele ter sido criado. Necessário usar o local estável
* porque, em alguns casos, o local fácil e simples pode mudar
* quando valores do campo forem alterados.
*/
CqRecord selected = recordType.cqProvider()
.cqRecord(record.getStableLocation());
// Com o novo registro criado no contexto de mudança, o processo
// prossegue da mesma maneira que na edição de um registro. // Campos obrigatórios devem ser fornecidos pelo usuário e, em seguida, ele pode ser entregue.
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);
}
}
/** As propriedades do tipo de registro lidas antes de criar um registro */
final static PropertyRequest RECORD_TYPE_PROPERTIES =
new PropertyRequest(CqRecordType.USER_FRIENDLY_LOCATION,
CqRecordType.IS_SUBMITTABLE,
CqRecordType.DISPLAY_NAME);
Depois de ter criado um novo registro, é possível executar outras operações nele usando o
Rational CM
API. Por exemplo, é possível validar se o novo registro está no banco de dados do usuário
executando uma consulta que retorne um novo registro no conjunto de resultados.