Como listar os campos estendidos da lista de contatos
Dados do artigo
Artigo
Resumo
Ao usar a API PIM e sua classe ContactList, é importante saber primeiro o que os campos suportam para implementação. Isto pode ser feito utilizando as instruções apresentadas aqui: How to list the supported fields in a PIMList.
É possível também, que as implementações tenham os chamados "campos estendidos". Eles são campos adicionais que não estão listados como campos padrão da classe Contato. Algumas das implementações mais recentes S60 (S60 3ª Edição FP1 e posteriores) suportam uma grande variedade destes campos. Segue um método para criar um contato, que tem um nome "Teste Contato" e todos os atributos estendidos, que estão disponíveis. Este método foi testado em S60 3ª Edição e dispositivos FP1 como N95.
public void testExtendedFields() {
ContactList list = null;
Contact contact = null;
try {
list = (ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
contact = list.createContact();
String[] name = new String[list.stringArraySize(Contact.NAME)];
if (list.isSupportedArrayElement(Contact.NAME, Contact.NAME_FAMILY)) name[Contact.NAME_FAMILY] = "Contact";
if (list.isSupportedArrayElement(Contact.NAME, Contact.NAME_GIVEN)) name[Contact.NAME_GIVEN] = "Test";
contact.addStringArray(Contact.NAME, PIMItem.ATTR_NONE, name);
int fields[] = list.getSupportedFields();
for (int i = 0; i < fields.length; i++) {
if (fields[i] > 256) { // campos extendidos
if (fields[i] == 16797704) { // Campo aniversário
contact.addDate(fields[i], Contact.ATTR_NONE, new java.util.Date().getTime());
}
else contact.addString(fields[i], Contact.ATTR_NONE, "field: " + fields[i]);
}
}
contact.commit();
list.close();
} catch (PIMException pe) {
System.out.println("PIMException: " + pe.getMessage());
} catch (IllegalArgumentException iae) {
System.out.println("IllegalArgumentException: " + iae.getMessage());
}
Nota: A existência de campos estendidos é testada através da verificação, se o valor inteiro de um campo é mais do que 256.
Nota: O campo tendo onde tem o valor de 16797704 (campo de aniversário) aceita somente um objeto Date como seu conteúdo, outros aceitam Strings.

