如果属性的值是对资源的引用,PropertyRequest 可能包含该属性的 NestedPropertyName 对象而不是 PropertyName 对象。NestedPropertyName 对象具有根属性名称和嵌套的 PropertyRequest。它从名为 root 的属性值引用的资源处请求属性。
除指定属性的名称外,NestedPropertyName 还包含它自己的 PropertyRequest。该嵌套的 PropertyRequest 指定由初始资源(其值从引用的资源获取)的属性引用的资源属性。
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(); // work with the properties ...
在 NestedPropertyName 中,可对指定从服务器中检索的属性的 PropertyRequest 增补 MetaPropertyName 元素,这使客户机能够请求属性的特定元属性(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());
嵌套在 NestedPropertyName 中的 PropertyRequest 自身可包含其他 NestedPropertyName 对象。因此,在与服务器的一次交互中,您可以检索任意数量的相关资源和其属性。