2015-11-19 14 views
1

Использование RallyRestAPI, есть ли способ запроса типов ScopedAttributeDefinition? Кажется, это определяет пользовательские типы данных в Rally. Я пытаюсь создать словарь данных пользовательских типов, которые мы используем в Rally, и связать эти настраиваемые типы с объектом, которым они являются атрибутами. (Если это не имеет смысла, вот пример: у нас есть настраиваемое поле под названием Enabler Lead on Rally PortfolioItems. Я хотел бы запросить Rally для всех настраиваемых полей для PortfolioItem и получить поле Enabler и его метаданные из Rally API REST.)RallyRestAPI запрос типов ScopedAttributeDefinition

Я использую клиент Java.

+0

A ScopedAttributeDefinition - это просто взгляд на другой атрибут в системе из определенной области (рабочей области или проекта). Это позволяет вам видеть, скрыт или задан данный атрибут в этой конкретной области. Это данные, которые вам нужны? –

+0

Мне нужно как наличие атрибута, так и его метаданные (такие как видимые или скрытые, тип, принятые значения и т. Д.). Прямо сейчас я запрашиваю все TypeDefinitions в рабочей области и получаю его список атрибутов. Это не возвращает пользовательские типы данных, такие как поле Enabler Lead, описанное выше (все возвращаемые типы данных имеют «Custom = false»). –

+0

от поиска источника инструментария Я не совсем уверен, что он даже позволит вам запрашивать определения атрибутов с областью, к сожалению ... –

ответ

0

Я подал GitHub вопрос, чтобы добавить поддержку для ScopedAttributeDefinition: https://github.com/RallyTools/RallyRestToolkitForJava/issues/19

В то же время, хотя вы можете работать вокруг него, используя основной клиент HTTP напрямую. Этот код запрашивает для всех проектов в вашей рабочей области, а затем находит определение типа для элемента портфолио, а затем для каждого проекта захватывает все пользовательские атрибуты defs через конечную точку scopedattributedefinition и выводит их скрытый/требуемый статус.

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(); 
    } 

Любая другая информация Вы хотели бы, чтобы каждый из этих пользовательских полей должна быть доступна только с помощью запросов к коллекции атрибутов из piTypeDef.