La valeur de nombreuses propriétés constitue une référence pour une autre ressource.
Si la valeur d'une propriété est une référence pour une ressource, la PropertyRequest peut contenir un objet NestedPropertyName au lieu d'un objet PropertyName pour la propriété. L'objet NestedPropertyName possède un nom de propriété racine et une PropertyRequest imbriquée. Il demande des propriétés à la ressource référencée par la valeur de la propriété nommée en tant que racine.
Parallèlement à la spécification du nom de la propriété, un NestedPropertyName comprend également sa propre PropertyRequest. Cette PropertyRequest imbriquée spécifie les propriétés de la ressource référencée par la propriété de la ressource d'origine dont les valeurs doivent être obtenues auprès de la ressource référencée.
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME, ControllableResource.CHECKED_IN.nest( Version.VERSION_NAME, Version.CREATION_DATE). ControllableResource.LAST_MODIFIED);
resource = (ControllableResource) resource.doReadProperties(my_prop_request); String versionName = resource.getCheckIn().getVersionName(); // travailler avec les propriétés ...
Dans un NestedPropertyName, la PropertyRequest qui désigne les propriétés à récupérer sur le serveur peut être augmentée avec des éléments MetaPropertyName, qui permettent au client de demander des méta-propriétés spécifiques d'une propriété (au lieu de, ou en plus de sa méta-propriété VALUE).
CqRecord r = p.buildProxy(CqRecord.class, "..."); FieldName<CqRecord> OWNER = new FieldName<CqRecord>("Owner"); FieldName<String> NAME = new FieldName<String>("login_name"); PropertyRequest request = new PropertyRequest(OWNER.nest(StpProperty.TYPE, CqFieldValue.REQUIREDNESS, StpProperty.VALUE.nest(NAME))); CqRecord rec = (CqRecord)r.doReadProperties(request); CqFieldValue<CqRecord> v = rec.getFieldInfo(OWNER); String name = v.getValue().getProperty(NAME); PropertyRequest pnl = new PropertyRequest( CqRecord.FIELDS.nest( StpProperty.VALUE.nest( StpProperty.NAME, StpProperty.TYPE, StpProperty.VALUE))); List<CqFieldValue<?>> fields = ((CqRecord)r.doReadProperties(pnl)).getFields(); for(CqFieldValue<?> field: fields) System.out.println("field " + field.getName() ": " + field.getType() " = " + field.getValue());
La PropertyRequest imbriquée dans un NestedPropertyName peut elle-même contenir des objets NestedPropertyName supplémentaires. Ainsi, dans une interaction avec le serveur, il est possible de récupérer un nombre arbitraire de ressources apparentées ainsi que leurs propriétés.