2015-11-19 4 views
1

L'utilisation de RallyRestAPI permet-elle d'interroger les types ScopedAttributeDefinition? Cela semble définir des types de données personnalisés dans Rally. J'essaie de créer un dictionnaire de données des types personnalisés que nous utilisons dans Rally et d'associer ces types personnalisés à l'objet dont ils sont les attributs. (Dans le cas où cela n'a pas de sens, voici un exemple: Nous avons un champ personnalisé appelé Enabler Lead sur Rally PortfolioItems. Je voudrais interroger Rally pour tous les champs personnalisés pour PortfolioItem et obtenir le champ Enabler, et ses métadonnées, de l'API REST REST.)RallyRestAPI interrogeant les types ScopedAttributeDefinition

J'utilise le client Java.

+0

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

+0

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"). –

+0

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 ... –

Répondre

0

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.