J'ai déposé une question github pour ajouter le support pour la ScopedAttributeDefinition: https://github.com/RallyTools/RallyRestToolkitForJava/issues/19
En attendant que vous pouvez contourner le problème en utilisant directement le client http sous-jacent. Ce code interroge tous les projets de votre espace de travail, puis trouve la définition de type pour l'élément de portefeuille, puis saisit toutes les valeurs d'attribut personnalisées via le point de terminaison scopedattributedefinition et imprime leur état masqué/requis.
QueryRequest projectQuery = new QueryRequest("project");
projectQuery.setLimit(Integer.MAX_VALUE);
QueryResponse projectResponse = restApi.query(projectQuery);
QueryRequest typeDefQuery = new QueryRequest("typedefinition");
typeDefQuery.setQueryFilter(new QueryFilter("Name", "=", "Portfolio Item"));
QueryResponse typeDefResponse = restApi.query(typeDefQuery);
JsonObject piTypeDef = typeDefResponse.getResults().get(0).getAsJsonObject();
for(JsonElement projectResult : projectResponse.getResults()) {
JsonObject project = projectResult.getAsJsonObject();
System.out.println("Project: " + project.get("Name").getAsString());
//Begin hackery (note we're not handling multiple pages-
// if you have more than 200 custom attributes you'll have to page
String scopedAttributeDefUrl = "/project/" + project.get("ObjectID").getAsLong() +
"/typedefinition/" + piTypeDef.get("ObjectID").getAsLong() + "/scopedattributedefinition" +
"?fetch=Hidden,Required,Name&query=" + URLEncoder.encode("(Custom = true)", "utf-8");
String attributes = restApi.getClient().doGet(scopedAttributeDefUrl);
QueryResponse attributeResponse = new QueryResponse(attributes);
//End hackery
for(JsonElement customAttributeResult : attributeResponse.getResults()) {
JsonObject customAttribute = customAttributeResult.getAsJsonObject();
System.out.print("\tAttribute: " + customAttribute.get("Name").getAsString());
System.out.print(", Hidden: " + customAttribute.get("Hidden").getAsBoolean());
System.out.println(", Required: " + customAttribute.get("Required").getAsBoolean());
}
System.out.println();
}
Toute autre information que vous souhaitez pour chacun de ces champs personnalisés doit être accessible simplement en interrogeant la collection Attributs du piTypeDef.
Une ScopedAttributeDefinition est en fait une vue d'un autre attribut du système à partir d'une portée spécifique (espace de travail ou projet). Cela vous permet de voir si un attribut donné est caché ou requis pour cette portée spécifique. Est-ce que c'est les données que vous recherchez? –
J'ai besoin à la fois de l'existence de l'attribut et de ses métadonnées (telles que visible ou caché, type, valeurs acceptées, etc.). En ce moment j'interroge toutes les définitions de type dans l'espace de travail, et obtient sa liste d'attributs. Cela ne renvoie pas les types de données personnalisés tels que le champ Enabler Lead décrit ci-dessus (tous les types de données renvoyés ont "Custom = false"). –
de regarder la source de trousse à outils je ne suis pas totalement convaincu qu'il vous permettra même de demander des définitions d'attributs scoped malheureusement ... –