Código de Amostra para Criar um Tipo de Entidade Estendido em um Namespace Customizado

Use o fragmento de código de amostra e os gráficos de dados para criar um tipo de entidade, que se estende a partir de um tipo de entidade interno, em um namespace customizado.

As etapas a seguir são cobertas neste fragmento de código de amostra:

  1. Crie o esquema no namespace customizado, http://www.yourco.com/wim/yourext, para um novo tipo de entidade, PersonAccountExt, que se estende a partir do tipo de entidade interno, PersonAccount.
  2. Crie uma entidade person1 do tipo de entidade PersonAccountExt.
  3. Inclua uma nova propriedade, HomePhone, no tipo de entidade recém-criado, PersonAccountExt, e mapeie a nova propriedade, HomePhone, para o atributo LDAP, primaryOwnerContact.
  4. Inclua a propriedade HomePhone com o valor na entidade person1.
  5. Verifique se a propriedade HomePhone está incluída na entidade person1.
Nota: A propriedade nsURI especifica o namespace customizado no qual a nova propriedade é incluída. Na primeira vez que você usar um URI do namespace customizado, você deverá mapear a propriedade URI do namespace (nsURI) para um prefixo de namespace exclusivo (nsPrefix). Se você não especificar um valor nsURI, a nova propriedade será incluída no namespace padrão. O namespace padrão é http://www.ibm.com/websphere/wim, que é mapeado por padrão para o valor wim nsPrefix.

Pré-requisito

Assegure-se de ter lido as informações e concluído as etapas descritas no tópico, Pré-requisitos de Programação, incluindo a seção, Estendendo o Esquema de Propriedade, que tem informações sobre os objetos de dados propertySchema e extensionPropertySchema e lista a sintaxe válida para os tipos de dados de propriedade.

Inclua a seguinte instrução de importação também na classe:
import com.ibm.websphere.wim.exception.SchemaAlreadyExistException;

Assegure-se de que um repositório LDAP esteja configurado na configuração de repositórios associados. Para obter mais informações, consulte o tópico Configurando o Lightweight Directory Access Protocol em uma configuração de repositório associado no centro de informações do WebSphere Application Server.

Código de Amostra

Inclua o seguinte fragmento de código no código do aplicativo e substitua as variáveis pelos valores reais que você deseja usar.

/**
 * Este método usa a API de extensão de esquema para incluir uma nova entidade
 * que se estende a partir de uma entidade existente do gerenciador de membro virtual.
 */
public static void testRunTimeAddNewEntity() 
{
    // Criar esquema para novo tipo de entidade
    addEntityPersonAccountExt();
    // Criar entidade de novo tipo de entidade
    createPersonAccountExt();
    // Incluir uma propriedade 'HomePhone' em 'PersonAccountExt' 
    // e mapeá-la para o atributo 'primaryOwnerContact' no LDAP
    addPropertyToPersonAccountExt();
    // Incluir 'HomePhone' em 'person1'
    addHomePhoneForPersonAccountExt();
    // Procurar a pessoa
    searchPersonAcctExt();
}

/**
 * Método para criar o esquema para 'PersonAccountExt'
 * no namespace customizado, http://www.yourco.com/wim/yourext
 */
@SuppressWarnings("unchecked")
private static void addEntityPersonAccountExt() 
{
    try 
    {
        System.out.println("\nCLIENT: Criando esquema para 'PersonAccountExt' . . . ");
        DataObject root = SDOHelper.createRootDataObject();
        // Criar um objeto esquema sob a raiz
        DataObject dynaSchemaDO = root.createDataObject(SchemaConstants.DO_SCHEMA);
        // Criar novo objeto esquema de tipo de entidade. Esse objeto conterá a definição de esquema
        // para o tipo de entidade 'PersonAccountExt' que queremos criar.
        DataObject entitySchemaDO = dynaSchemaDO.createDataObject(SchemaConstants.DO_ENTITY_SCHEMA);
        // Configurar o namespace para novo tipo de entidade
        // Como este é um namespace customizado, precisamos também especificar o prefixo
        entitySchemaDO.setString(SchemaConstants.PROP_NS_URI, “http://www.yourco.com/wim/yourext”);
        entitySchemaDO.setString(SchemaConstants.PROP_NS_PREFIX, “yourprefix”);
        // Configurar o nome do tipo de entidade
        entitySchemaDO.set(SchemaConstants.PROP_ENTITY_NAME, "PersonAccountExt");
        // Configurar o nome do tipo de entidade pai.
        entitySchemaDO.set(SchemaConstants.PROP_PARENT_ENTITY_NAME, Service.DO_PERSON_ACCOUNT);
        // Criar um objeto de dados de configuração de entidade
        // Esse objeto de dados define detalhes do repositório
        DataObject entConfigDO = entitySchemaDO.createDataObject(SchemaConstants.DO_ENTITY_CONFIGURATION);
        // Configurar o pai padrão como a entrada de base do LDAP configurado.
        entConfigDO.set(SchemaConstants.PROP_DEFAULT_PARENT, "dc=yourco,dc=com");
        // Configurar a propriedade RDN (login) como uid.
        entConfigDO.set(SchemaConstants.PROP_RDN_PROPERTY, "uid");
        // Configurar o ID do repositório.
        DataObject reposConfigInfo1DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
        reposConfigInfo1DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_OBJECTCLASSES);
        reposConfigInfo1DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
        // Configurar as classes de objeto para o objeto incluído. Essas classes são do esquema LDAP.
        List objReadValues = reposConfigInfo1DO.getList(SchemaConstants.PROP_VALUES);
        objReadValues.add("inetorgperson");
        objReadValues.add("organizationalperson");
        objReadValues.add("person");
        // Configurar a propriedade RDN para o repositório
        DataObject reposConfigInfo3DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
        reposConfigInfo3DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_RDN_ATTRIBUTES);
        reposConfigInfo3DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
        List values = reposConfigInfo3DO.getList(SchemaConstants.PROP_VALUES);
        values.add("uid");
        System.out.println("Gráfico de dados de entrada Criar Esquema -> " + printDO(root));
        // Chamar a API de criação de esquema
        DataObject outRoot = service.createSchema(root);
        System.out.println("Gráfico de dados da saída Criar Esquema -> " + printDO(outRoot));
        System.out.println("\nCLIENT: novo tipo de entidade é criado.");
    }
    catch (SchemaAlreadyExistException e) 
    {
        System.out.println("CLIENT: tipo de entidade já existe.\n\n");
    }
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

/**
 *  Método para criar uma entidade do tipo 'PersonAccountExt'.
 */
private static void createPersonAccountExt() 
{
    //Criar Pessoa 1
    try 
    {
        System.out.println("\nCLIENT: Criando Pessoa 1 . . .");
        //Obtém um gráfico de dados vazio de Person a partir do Serviço VMM.
        DataObject root = SDOHelper.createRootDataObject();
        // Criar um objeto de dados do tipo de entidade "PersonAccount" sob a raiz
        // Este objeto está no namespace customizado
        DataObject person = root.createDataObject(SchemaConstants.DO_ENTITIES, 
                "http://www.yourco.com/wim/yourext", "PersonAccountExt");
        // Configurar os valores dos atributos obrigatórios, uid, cn e sn
        person.set("uid", "person1");
        person.set("cn", "Person 1");
        person.set("sn", "Person1LastName");
        System.out.println("Gráfico de dados de entrada Criar PersonAccountExt -> " + printDO(root));
        // Chamar a API de criação de esquema para criar a entidade de conta da pessoa definida anteriormente
        root = service.create(root);
        System.out.println("Gráfico de dados da saída Criar PersonAccountExt -> " + printDO(root));
        System.out.println("CLIENT: Pessoa 1 foi criada. \n\n");
    }
    catch(Exception e) 
    {
        e.printStackTrace();
    }
}

/**
 *  Método para incluir uma propriedade 'HomePhone' no tipo de entidade 'PersonAccountExt'
 *  e mapeá-la para o atributo 'primaryOwnerContact' no LDAP
 */
@SuppressWarnings("unchecked")
private static void addPropertyToPersonAccountExt() 
    {
    try 
    {
        DataObject root = SDOHelper.createRootDataObject();
        // Criar um novo objeto "esquema" sob a raiz
        // Este objeto conterá os detalhes das modificações de esquema que tiverem de ser feitas
        DataObject schema = root.createDataObject(SchemaConstants.DO_SCHEMA);
        // Criar um objeto de dados de esquema de propriedade sob o objeto de esquema criado anteriormente
        DataObject propertySchema = schema.createDataObject(SchemaConstants.DO_PROPERTY_SCHEMA);
        // Configurar o nome da propriedade
        propertySchema.setString(SchemaConstants.PROP_PROPERTY_NAME, "HomePhone");
        // Configurar o namespace da propriedade como o namespace customizado
        propertySchema.setString(SchemaConstants.PROP_NS_URI, "http://www.yourco.com/wim/yourext");
        // Especificar que a propriedade tem diversos valores
        propertySchema.setBoolean(SchemaConstants.PROP_MULTI_VALUED, false);
        // Especificar o tipo de dado da propriedade como Sequência
        propertySchema.setString(SchemaConstants.PROP_DATA_TYPE, SchemaConstants.DATA_TYPE_STRING);
        // Especificar os tipos de entidade aplicáveis para esta propriedade
        // A propriedade será incluída para todos os nomes de tipo de entidade especificados na lista
        propertySchema.getList(SchemaConstants.PROP_APPLICABLE_ENTITY_TYPE_NAMES)
                .add("yourprefix:PersonAccountExt");
        System.out.println("Gráfico de dados da entrada Incluir Propriedade " + printDO(root));
        // Chamar a API de criação de esquema
        root = service.createSchema(root);
        System.out.println("Gráfico de dados da saída Incluir Propriedade " + printDO(root));
        // Mapear a propriedade 'HomePhone' criada anteriormente para o atributo LDAP 'primaryOwnerContact'
        Hashtable configData = new Hashtable();
        // Especificar o repositório para o qual essa propriedade precisa ser mapeada
        configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_REPOS_ID, "LDAP1");
        DataObject configProvider = SDOHelper.createConfigProviderDataObject();
        // Especificar o tipo de repositório como "Ldap"
        DataObject ldapRepos = SDOHelper.createConfigRepositoryDataObject(configProvider, 
                ConfigConstants.CONFIG_DO_LDAP_REPOSITORY_TYPE);
        // Fornecer os nomes da propriedade e do atributo que precisam ser mapeados entre si
        DataObject attrConfig = ldapRepos.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTE_CONFIGUARTION);
        DataObject attr = attrConfig.createDataObject(ConfigConstants.CONFIG_DO_ATTRIBUTES);
        attr.setString(ConfigConstants.CONFIG_PROP_PROPERTY_NAME, "HomePhone");
        attr.setString(ConfigConstants.CONFIG_PROP_NAME, "primaryOwnerContact");
        configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_PROP_CONFIG, attr);
        // Chamar todas as atualizações de configuração dinâmica
        // Esta API atualiza o mapeamento para esta sessão somente; esse mapeamento não é persistente
        service.dynamicUpdateConfig(DynamicConfigConstants.DYNA_CONFIG_EVENT_ADD_PROPERTY_CONFIG, configData);
    }
    catch(Exception e) 
    {
		    e.printStackTrace();
    }
}  

/**
  * Incluir 'HomePhone' na entidade 'person1' criada no LDAP anteriormente
  */
private static void addHomePhoneForPersonAccountExt() 
{
    try 
    {
    DataObject root = SDOHelper.createRootDataObject();
    DataObject entity = SDOHelper.createEntityDataObject(root, 
            "http://www.yourco.com/wim/yourext", "PersonAccountExt");
    // Configurar o nome exclusivo para o objeto cujo valor 'HomePhone' precisa ser configurado
    entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME, 
            "uid=person1,dc=yourco,dc=com");
    // Especificar o valor de 'HomePhone'
    entity.set("HomePhone", "020-2341123");
    System.out.println("Gráfico de dados de entrada Configurar Propriedade -> " + printDO(root));
    // Chamar a API de atualização do VMM
    root = service.update(root);
    System.out.println("Gráfico de dados de saída Configurar Propriedade -> " + printDO(root));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

/**
  * Procurar por 'PersonAccountExt' 
  */
@SuppressWarnings("unchecked")
private static void searchPersonAcctExt() 
{
    try 
    {
        DataObject root = SDOHelper.createRootDataObject();
        // Criar um objeto de dados de controle de procura
        DataObject searchCtrl = SDOHelper.createControlDataObject(root, null, 
                SchemaConstants.DO_SEARCH_CONTROL);
        // Especificar as propriedades que precisam ser buscadas para todas as entradas correspondentes
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("uid");
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("sn");
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("cn");
        searchCtrl.getList(SchemaConstants.PROP_PROPERTIES).add("HomePhone");
        // Especificar os critérios de correspondência como a expressão de procura
        searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccountExt'");
        // Chamar a API de procura
        root = service.search(root);
        System.out.println("Gráfico de dados de saída -> " + printDO(root));
        // Iterar sobre os resultados da procura
        printIdentifiers(root);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
Nota: No código de amostra, a API dynamicUpdateConfig() é usada para incluir configuração de propriedade para mapear uma propriedade do gerenciador de membro virtual para um atributo LDAP. Quando atualizações de configuração são feitas em tempo de execução usando a API dynamicUpdateConfig(), somente a configuração na memória é atualizada e o arquivo de configuração não é atualizado, por isso as mudanças não são permanentes. Para tornar persistentes as mudanças na configuração, use o comando wsadmin addIdMgrLDAPAttr para mapear os atributos LDAP para as propriedades do gerenciador de membro virtual. Para obter mais informações, consulte o tópico Grupo de comandos IdMgrRepositoryConfig para o objeto AdminTask no centro de informações do WebSphere Application Server. Como alternativa, é possível mapear os atributos LDAP para as propriedades do gerenciador de membro virtual usando o console administrativo conforme descrito nas etapas a seguir:
  1. No console administrativo do WebSphere Application Server, clique em Segurança > Segurança Global.
  2. Em Repositório de Contas do Usuário, selecione Repositórios Associados no campo Definições de Região Disponíveis e clique em Configurar.
    Nota: Para configurar para um domínio específico em um ambiente com diversos domínios de segurança, clique em Domínios de Segurança >domain_name. Em Atributos de Segurança, expanda Região do Usuário e clique em Customizar para este domínio. Selecione o tipo de Região como Repositórios Federados e, em seguida, clique em Configurar.
  3. Em Itens Relacionados, clique em Gerenciar Repositórios> repository_name.
  4. No painel que aparece, em Propriedades adicionais, clique em atributos LDAP.
  5. Clique em Incluir e selecione Suportado no menu suspenso.
  6. Insira o nome do atributo LDAP no campo Nome, o nome da propriedade do gerenciador de membro virtual no campo Nome da Propriedade e o tipo de entidade que aplica o mapeamento de atributo no campo Tipos de Entidade. Para o exemplo anterior, você deve inserir os valores a seguir:
    • Nome: HomePhone
    • Propriedade: primaryOwnerContact
    • Tipos de entidade: PersonAccountExt

Gráficos de Dados de Entrada e Saída

Gráfico de dados de entrada para criar novo tipo de entidade estendida:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
    xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:schema>
      <wim:entitySchema nsPrefix="yourprefix" nsURI="http://www.yourco.com/wim/yourext"
          entityName="PersonAccountExt" parentEntityName="PersonAccount">
        <wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
          <wim:metaData name="objectClasses" repositoryId="LDAP1">
            <wim:values>inetorgperson</wim:values>
            <wim:values>organizationalperson</wim:values>
            <wim:values>person</wim:values>
          </wim:metaData>
          <wim:metaData name="rdnAttributes" repositoryId="LDAP1">
            <wim:values>uid</wim:values>
          </wim:metaData>
        </wim:entityConfiguration>
      </wim:entitySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de saída depois de criar novo tipo de entidade estendida:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
    xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:schema>
      <wim:entitySchema nsPrefix="yourprefix" nsURI="http://www.yourco.com/wim/yourext"
          entityName="PersonAccountExt" parentEntityName="PersonAccount">
        <wim:repositoryIds>LDAP1</wim:repositoryIds>
        <wim:entityConfiguration defaultParent="dc=yourco,dc=com" rdnProperty="uid">
          <wim:metaData name="objectClasses" repositoryId="LDAP1">
            <wim:values>inetorgperson</wim:values>
            <wim:values>organizationalperson</wim:values>
            <wim:values>person</wim:values>
          </wim:metaData>
          <wim:metaData name="rdnAttributes" repositoryId="LDAP1">
            <wim:values>uid</wim:values>
          </wim:metaData>
        </wim:entityConfiguration>
      </wim:entitySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de entrada para criar uma entidade do novo tipo de entidade:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim" 
    xmlns:yourprefix="http://www.yourco.com/wim/yourext">
  <wim:Root>
    <wim:entities xsi:type="yourprefix:PersonAccountExt">
      <wim:uid>person1</wim:uid>
      <wim:cn>Person 1</wim:cn>
      <wim:sn>Person1LastName</wim:sn>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de saída depois de criar uma entidade do novo tipo de entidade:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim" 
    xmlns:yourprefix="http://www.yourco.com/wim/yourext">
  <wim:Root>
    <wim:entities xsi:type="yourprefix:PersonAccountExt">
      <wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
          uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de entrada para criar uma nova propriedade para o novo tipo de entidade:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
    xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:schema>
      <wim:propertySchema nsURI="http://www.yourco.com/wim/yourext" dataType="String"
          multiValued="false" propertyName="HomePhone">
        <wim:applicableEntityTypeNames>yourprefix:PersonAccountExt</wim:applicableEntityTypeNames>
      </wim:propertySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de saída depois de criar uma propriedade para o novo tipo de entidade:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:sdo="commonj.sdo"
    xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:schema>
      <wim:propertySchema nsURI="http://www.yourco.com/wim/yourext" dataType="String"
          multiValued="false" propertyName="HomePhone">
        <wim:repositoryIds>LDAP1</wim:repositoryIds>
        <wim:applicableEntityTypeNames>yourprefix:PersonAccountExt</wim:applicableEntityTypeNames>
      </wim:propertySchema>
    </wim:schema>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de entrada para incluir a propriedade com um valor na entidade:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim" 
    xmlns:yourprefix="http://www.yourco.com/wim/yourext">
  <wim:Root>
    <wim:entities xsi:type="yourprefix:PersonAccountExt">
      <wim:identifier uniqueName="uid=person1,dc=yourco,dc=com"/>
      <yourprefix:HomePhone>020-2341123</yourprefix:HomePhone>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de saída depois de incluir a propriedade com um valor na entidade:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim" 
    xmlns:yourprefix="http://www.yourco.com/wim/yourext">
  <wim:Root>
    <wim:entities xsi:type="yourprefix:PersonAccountExt">
      <wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
          uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
      <yourprefix:HomePhone>020-2341123</yourprefix:HomePhone>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de entrada para procurar propriedade estendida:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim">
  <wim:Root>
    <wim:controls xsi:type="wim:SearchControl" expression="@xsi:type='yourprefix:PersonAccountExt'">
      <wim:properties>uid</wim:properties>
      <wim:properties>sn</wim:properties>
      <wim:properties>cn</wim:properties>
      <wim:properties>yourprefix:HomePhone</wim:properties>
    </wim:controls>
  </wim:Root>
</sdo:datagraph>

Gráfico de dados de saída depois de procurar propriedade estendida:

<?xml version="1.0" encoding="UTF-8"?>
<sdo:datagraph xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:sdo="commonj.sdo" xmlns:wim="http://www.ibm.com/websphere/wim" 
    xmlns:yourprefix="http://www.yourco.com/wim/yourext">
  <wim:Root>
    <wim:entities xsi:type="yourprefix:PersonAccountExt">
      <wim:identifier externalName="uid=person1,dc=yourco,dc=com" repositoryId="LDAP1"
          uniqueId="cb1ea321-8673-4012-9750-c917d4e7f2f6" uniqueName="uid=person1,dc=yourco,dc=com"/>
      <wim:uid>person1</wim:uid>
      <wim:cn>Person 1</wim:cn>
      <wim:sn>Person1LastName</wim:sn>
      <yourprefix:HomePhone>020-2341123</yourprefix:HomePhone>
    </wim:entities>
  </wim:Root>
</sdo:datagraph>


Termos de uso | Feedback