嵌套属性

许多属性的值是对其他资源的引用。

如果属性的值是对资源的引用,PropertyRequest 可能包含该属性的 NestedPropertyName 对象而不是 PropertyName 对象。NestedPropertyName 对象具有根属性名称和嵌套的 PropertyRequest。它从名为 root 的属性值引用的资源处请求属性。

除指定属性的名称外,NestedPropertyName 还包含它自己的 PropertyRequest。该嵌套的 PropertyRequest 指定由初始资源(其值从引用的资源获取)的属性引用的资源属性。

例如,以下代码段创建属性名称列表,以标识 CREATOR_DISPLAY_NAMECHECKED_INLAST_MODIFIED 属性,以及 CHECKED_IN 属性值的 VERSION_NAMECREATION_DATE。在本例中,nest 方法构造并返回 NestedPropertyName
PropertyRequest my_prop_request = new PropertyRequest(ControllableResource.CREATOR_DISPLAY_NAME,
     ControllableResource.CHECKED_IN.nest(
            Version.VERSION_NAME,
            Version.CREATION_DATE).
     ControllableResource.LAST_MODIFIED);
指定嵌套的属性后,您可以调用 doReadProperties 方法,并访问嵌套属性。例如:
resource =
   (ControllableResource) resource.doReadProperties(my_prop_request);
String versionName = resource.getCheckIn().getVersionName();
// work with the properties ...  

在 NestedPropertyName 中,可对指定从服务器中检索的属性的 PropertyRequest 增补 MetaPropertyName 元素,这使客户机能够请求属性的特定元属性(VALUE 元属性除外)。

引用其他资源的属性的值是代理且该代理包含在 NestedPropertyName 中请求的属性。此外,NestedPropertyName 元素可以包含在 PropertyRequest 中,以请求由元属性引用的资源属性或请求由元属性引用的属性的元属性。例如:
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 对象。因此,在与服务器的一次交互中,您可以检索任意数量的相关资源和其属性。


反馈