Exemple de code pour la création d'un type d'entité étendu dans un espace de nom personnalisé

Cet exemple de fragment de code et ces graphiques de données permettent de créer un type d'entité, étendu à partir d'un type d'entité intégré, dans un espace de nom personnalisé.

Les étapes suivantes sont abordées dans cet exemple de fragment de code :

  1. Créez le schéma dans l'espace de nom personnalisé http://www.yourco.com/wim/yourext pour un nouveau type d'entité, PersonAccountExt, qui est une extension du type d'entité intégré PersonAccount.
  2. Créez une entité person1 de type PersonAccountExt.
  3. Ajoutez une nouvelle propriété, HomePhone, au type d'entité nouvellement créé, PersonAccountExt et mappez la nouvelle propriété, HomePhone à l'attribut LDAP primaryOwnerContact.
  4. Ajoutez la propriété HomePhone avec une nvaleur à l'entité person1.
  5. Vérifiez que la propriété HomePhone est ajoutée à l'entité person1.
Remarque : La propriété nsURI indique l'espace de nom personnalisé auquel la nouvelle propriété est ajoutée. La première fois que vous utilisez un URI d'espace de nom personnalisé, vous devez mapper la propriété de l'URI d'espace de nom (nsURI) à un préfixe d'espace de nom unique (nsPrefix). Si vous ne spécifiez pas de valeur nsURI, la nouvelle propriété est ajoutée dans l'espace de nom par défaut. L'espace de nom par défaut est http://www.ibm.com/websphere/wim, qui est mappé par défaut à la valeur wim nsPrefix.

Conditions prérequises

Assurez-vous d'avoir bien lu les informations et effectué les étapes décrites dans la rubrique Prérequis pour la programmation et notamment dans la section Schéma de propriété étendu, qui contient des informations sur les objets de données propertySchema et extensionPropertySchema et indique la syntaxe valide pour les types de données de propriété.

Ajoutez l'instruction d'importation suivante également à votre classe :
import com.ibm.websphere.wim.exception.SchemaAlreadyExistException;

Vérifiez qu'un référentiel LDAP est configuré dans votre configuration de référentiels fédérés. Pour plus d'informations, reportez-vous à la rubrique Configuration du protocole LDAP (Lightweight Directory Access Protocol) dans une configuration de référentiel fédéré dans le centre de documentation de WebSphere Application Server.

Exemple de code

Ajoutez le fragment de code ci-après à votre code d'application, puis remplacez les variables par les valeurs réelles à utiliser.

/**
 * Cette méthode utilise l'API d'extension de schéma pour ajouter une nouvelle entité
 * étendue à partir d'une entité virtual member manager existante.
 */
public static void testRunTimeAddNewEntity() 
{
    // Création du schéma pour le nouveau type d'entité
    addEntityPersonAccountExt();
    // Création de l'entité de nouveau type
    createPersonAccountExt();
    // Ajout d'une propriété 'HomePhone' à 'PersonAccountExt' 
    // et mappage de cette propriété à l'attribut 'primaryOwnerContact' dans LDAP
    addPropertyToPersonAccountExt();
    // Ajout de 'HomePhone' à 'person1'
    addHomePhoneForPersonAccountExt();
    // Recherche de la personne
    searchPersonAcctExt();
}

/**
 * Méthode de création du schéma de 'PersonAccountExt'
 * dans l'espace de nom par défaut http://www.yourco.com/wim/yourext
 */
@SuppressWarnings("unchecked")
private static void addEntityPersonAccountExt() 
{
    try 
    {
        System.out.println("\nCLIENT: Creating schema for 'PersonAccountExt' . . . ");
        DataObject root = SDOHelper.createRootDataObject();
        // Création d'un objet de schéma sous la racine
        DataObject dynaSchemaDO = root.createDataObject(SchemaConstants.DO_SCHEMA);
        // Création d'un objet de schéma de type d'entité. Cet objet contiendra la définition de schéma
        // du type d'entité 'PersonAccountExt' à créer.
        DataObject entitySchemaDO = dynaSchemaDO.createDataObject(SchemaConstants.DO_ENTITY_SCHEMA);
        // Définition de l'espace de nom du nouveau type d'entité
        // Comme il s'agit d'un espace de nom personnalisé, nous devons également spécifier le préfixe
        entitySchemaDO.setString(SchemaConstants.PROP_NS_URI, “http://www.yourco.com/wim/yourext”);
        entitySchemaDO.setString(SchemaConstants.PROP_NS_PREFIX, “yourprefix”);
        // Définition du nom du type d'entité
        entitySchemaDO.set(SchemaConstants.PROP_ENTITY_NAME, "PersonAccountExt");
        // Définition du nom du type d'entité parent
        entitySchemaDO.set(SchemaConstants.PROP_PARENT_ENTITY_NAME, Service.DO_PERSON_ACCOUNT);
        // Création d'un objet de données de configuration d'entité
        // Cet objet de données définit les détails du référentiel
        DataObject entConfigDO = entitySchemaDO.createDataObject(SchemaConstants.DO_ENTITY_CONFIGURATION);
        // Définition comme parent par défaut de l'entrée de base du LDAP configuré.
        entConfigDO.set(SchemaConstants.PROP_DEFAULT_PARENT, "dc=yourco,dc=com");
        // Définition de l'uid comme propriété de nom distinctif relatif (connexion).
        entConfigDO.set(SchemaConstants.PROP_RDN_PROPERTY, "uid");
        // Définition de l'ID référentiel.
        DataObject reposConfigInfo1DO = entConfigDO.createDataObject(SchemaConstants.DO_META_DATA);
        reposConfigInfo1DO.set(SchemaConstants.PROP_NAME, ConfigService.CONFIG_DO_OBJECTCLASSES);
        reposConfigInfo1DO.set(SchemaConstants.PROP_REPOSITORY_ID, "LDAP1");
        // Définition des classes d'objets pour l'objet ajouté. Ces classes proviennent du schéma LDAP.
        List objReadValues = reposConfigInfo1DO.getList(SchemaConstants.PROP_VALUES);
        objReadValues.add("inetorgperson");
        objReadValues.add("organizationalperson");
        objReadValues.add("person");
        // Définition de la propriété de nom distinctif relatif pour le référentiel
        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("Create Schema input datagraph -> " + printDO(root));
        // Appel de l'API de création de schéma
        DataObject outRoot = service.createSchema(root);
        System.out.println("Create Schema output datagraph -> " + printDO(outRoot));
        System.out.println("\nCLIENT: new entity type is created.");
    }
    catch (SchemaAlreadyExistException e) 
    {
        System.out.println("CLIENT: entity type already exists.\n\n");
    }
    catch(Exception e) 
    {
        e.printStackTrace();
    }
}

/**
 *  Méthode de création d'une entité de type 'PersonAccountExt'.
 */
private static void createPersonAccountExt() 
{
    //Création de Person 1
    try 
    {
        System.out.println("\nCLIENT: Creating Person 1 . . .");
        //Gets an empty data graph of Person from WIM Service.
        DataObject root = SDOHelper.createRootDataObject();
        // Création d'un objet de données de type "PersonAccount" sous la racine
        // Cet objet se trouve dans l'espace de nom personnalisé
        DataObject person = root.createDataObject(SchemaConstants.DO_ENTITIES, 
                "http://www.yourco.com/wim/yourext", "PersonAccountExt");
        // Définition des valeurs des attributs requis, uid, cn et sn
        person.set("uid", "person1");
        person.set("cn", "Person 1");
        person.set("sn", "Person1LastName");
        System.out.println("Create PersonAccountExt input datagraph -> " + printDO(root));
        // Appel de l'API de création pour créer l'entité de compte de personne définie précédemment
        root = service.create(root);
        System.out.println("Create PersonAccountExt output datagraph -> " + printDO(root));
        System.out.println("CLIENT: Person 1 has been created. \n\n");
    }
    catch(Exception e) 
    {
        e.printStackTrace();
    }
}

/**
 *  Méthode d'ajout d'une propriété 'HomePhone' au type d'entité 'PersonAccountExt'
 *  et mappage de cette propriété à l'attribut 'primaryOwnerContact' dans LDAP
 */
@SuppressWarnings("unchecked")
private static void addPropertyToPersonAccountExt() 
    {
    try 
    {
        DataObject root = SDOHelper.createRootDataObject();
        // Création d'un objet "schema" sous la racine
        // Cet objet contiendra les détails des modifications de schéma qui doivent être apportées
        DataObject schema = root.createDataObject(SchemaConstants.DO_SCHEMA);
        // Création d'un objet de données de schéma de propriété sous l'objet de schéma créé précédemment
        DataObject propertySchema = schema.createDataObject(SchemaConstants.DO_PROPERTY_SCHEMA);
        // Définition du nom de la propriété
        propertySchema.setString(SchemaConstants.PROP_PROPERTY_NAME, "HomePhone");
        // Définition de l'espace de nom de la propriété comme espace de nom personnalisé
        propertySchema.setString(SchemaConstants.PROP_NS_URI, "http://www.yourco.com/wim/yourext");
        // Spécification de la propriété comme propriété à valeur unique
        propertySchema.setBoolean(SchemaConstants.PROP_MULTI_VALUED, false);
        // Spécification du type de données de la propriété comme chaîne
        propertySchema.setString(SchemaConstants.PROP_DATA_TYPE, SchemaConstants.DATA_TYPE_STRING);
        // Spécification des types d'entité applicables pour cette propriété
        // La propriété sera ajoutée pour tous les noms de type d'entité spécifiés dans la liste
        propertySchema.getList(SchemaConstants.PROP_APPLICABLE_ENTITY_TYPE_NAMES)
                .add("yourprefix:PersonAccountExt");
        System.out.println("Add property input datagraph " + printDO(root));
        // Appel de l'API de création de schéma
        root = service.createSchema(root);
        System.out.println("Add property output datagraph " + printDO(root));
        // Mappage de la propriété 'HomePhone' créée précédemment à l'attribut LDAP 'primaryOwnerContact'
        Hashtable configData = new Hashtable();
        // Spécification du référentiel pour lequel cette propriété doit être mappée
        configData.put(DynamicConfigConstants.DYNA_CONFIG_KEY_REPOS_ID, "LDAP1");
        DataObject configProvider = SDOHelper.createConfigProviderDataObject();
        // Spécification de "Ldap" comme type de référentiel
        DataObject ldapRepos = SDOHelper.createConfigRepositoryDataObject(configProvider, 
                ConfigConstants.CONFIG_DO_LDAP_REPOSITORY_TYPE);
        // Spécification du nom de propriété et du nom d'attribut à mapper l'un à l'autre
        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);
        // Appel de la mise à jour de configuration dynamique
        // Cette API ne met à jour que le mappage de cette session ; ce mappage n'est pas permanent
        service.dynamicUpdateConfig(DynamicConfigConstants.DYNA_CONFIG_EVENT_ADD_PROPERTY_CONFIG, configData);
    }
    catch(Exception e) 
    {
		    e.printStackTrace();
    }
}  

/**
  * Ajout de 'HomePhone' à l'entité 'person1' créée précédemment dans LDAP
  */
private static void addHomePhoneForPersonAccountExt() 
{
    try 
    {
    DataObject root = SDOHelper.createRootDataObject();
    DataObject entity = SDOHelper.createEntityDataObject(root, 
            "http://www.yourco.com/wim/yourext", "PersonAccountExt");
    // Définition du nom unique de l'objet auquel la valeur 'HomePhone' doit être défini
    entity.createDataObject(SchemaConstants.DO_IDENTIFIER).set(SchemaConstants.PROP_UNIQUE_NAME, 
            "uid=person1,dc=yourco,dc=com");
    // Spécification de la valeur de 'HomePhone'
    entity.set("HomePhone", "020-2341123");
    System.out.println("Set property input datagraph -> " + printDO(root));
    // Appel de l'API de mise à jour de VMM
    root = service.update(root);
    System.out.println("Set property output datagraph -> " + printDO(root));
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}

/**
  * Recherche de 'PersonAccountExt' 
  */
@SuppressWarnings("unchecked")
private static void searchPersonAcctExt() 
{
    try 
    {
        DataObject root = SDOHelper.createRootDataObject();
        // Création d'un objet de données de contrôle de recherche
        DataObject searchCtrl = SDOHelper.createControlDataObject(root, null, 
                SchemaConstants.DO_SEARCH_CONTROL);
        // Spécification des propriétés à extraire pour toutes les entrées correspondantes
        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");
        // Spécification des critères correspondants comme expression de recherche
        searchCtrl.setString(SchemaConstants.PROP_SEARCH_EXPRESSION, "@xsi:type='PersonAccountExt'");
        // Appel de l'API de recherche
        root = service.search(root);
        System.out.println("Output datagraph -> " + printDO(root));
        // Itération sur les résultats de la recherche
        printIdentifiers(root);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
Remarque : Dans l'exemple de code, l'API dynamicUpdateConfig() permet d'ajouter la configuration des propriétés pour mapper une propriété virtual member manager à un attribut LDAP. Lorsque des mises à jour de configuration sont effectuées lors de la phase d'exécution à l'aide de l'API dynamicUpdateConfig(), seule la configuration en mémoire est mise à jour et le fichier de configuration n'est pas mis à jour ; les modifications ne sont donc pas conservées. Pour conserver les modifications de configuration, utilisez la commande wsadmin addIdMgrLDAPAttr pour mapper les attributs LDAP aux propriétés virtual member manager. Pour plus d'informations, voir la rubrique Groupe de commandes IdMgrRepositoryConfig pour l'objet AdminTask dans le centre de documentation de WebSphere Application Server. Vous pouvez également mapper les attributs LDAP aux propriétés virtual member manager à l'aide de la console d'administration, comme décrit dans les étapes suivantes :
  1. Dans la console d'administration WebSphere Application Server, cliquez sur Sécurité > Sécurité globale.
  2. Sous Référentiel du compte utilisateur, sélectionnez Référentiels fédérés dans la zone Définitions des domaines disponibles et cliquez sur Configurer.
    Remarque : Pour configurer un domaine spécifique dans un environnement comportant plusieurs domaines de sécurité, cliquez sur Domaines de sécurité >nom_domaine. Sous Attributs de sécurité, développez Domaine utilisateur et cliquez sur Personnalisation pour ce domaine. Sélectionnez le type de domaine Référentiels fédérés et cliquez sur Configurer.
  3. Sous Articles liés, cliquez sur Gestion des référentiels > nom_référentiel.
  4. Dans le panneau qui s'affiche, sous Propriétés supplémentaires, cliquez sur Attributs LDAP.
  5. Cliquez sur Ajouter et sélectionnez Pris en charge dans le menu déroulant.
  6. Entrez le nom d'attribut LDAP dans la zone Nom, le nom de la propriété virtual member manager dans la zone Nom de la propriété et le type d'entité qui applique le mappage des attributs, dans la zone Types d'entité. Pour l'exemple précédent, vous devez entrer les valeurs suivantes :
    • Nom : HomePhone
    • Propriété : primaryOwnerContact
    • Types d'entité : PersonAccountExt

Graphiques de données d'entrée et de sortie

Graphique de données d'entrée pour la création d'un type d'entité étendu :

<?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>

Graphique de données de sortie après la création d'un type d'entité étendu :

<?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>

Graphique de données d'entrée pour la création d'une entité du nouveau type d'entité :

<?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>

Graphique de données de sortie après la création d'une entité du nouveau type d'entité :

<?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>

Graphique de données d'entrée pour la création d'une propriété pour le nouveau type d'entité :

<?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>

Graphique de données de sortie après la création d'une propriété pour le nouveau type d'entité :

<?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>

Graphique de données d'entrée pour l'ajout d'une propriété avec une valeur à l'entité :

<?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>

Graphique de données de sortie après l'ajout d'une propriété avec une valeur à l'entité :

<?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>

Graphique de données d'entrée pour la recherche d'une propriété étendue :

<?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>

Graphique de données de sortie après la recherche d'une propriété étendue :

<?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>


Conditions d'utilisation | Commentaires