2017-02-10 30 views
1

爲了清理拉力賽我要改變的被標記爲項目的母公司爲"Closed"以便在檢索子項目,並使用API​​

--MyWorkspace 
    - Project 1 
    - Project 2 
    - Child 1 (Status = Closed) 
    - Child 2 (Status = Closed) 
    - Child 3 (Status = Open) 
    - Project 3 

我想更新的更新父在拉力賽所選擇的項目的"Child 1" and "Child 2" to "Project 1"父(要移動不同父在這些子項目。

import sys 
from pyral import Rally, rallyWorkset 
options = [arg for arg in sys.argv[1:] if arg.startswith('--')] 
args = [arg for arg in sys.argv[1:] if arg not in options] 
server = <server> 
apikey = <api_key> 
workspace = <workspace> 
project = <project_name> 
rally = Rally(server,apikey=apikey, workspace=workspace, project=project) 
rally.enableLogging('mypyral.log') 

我使用以下方法檢查所需要的工作空間下的所有項目

projects = rally.getProjects(workspace=workspace) 
for proj in projects: 
    print (" %12.12s %s %s" % (proj.oid, proj.Name, proj.State)) 

這給了我父級項目僅

<id> <Name> <status> 

這個邏輯並不雖然返回所有子項目。

此外,我正在尋找post方法來更新父母,一旦我得到我想要關閉的項目列表。

回答

1

這是正確的 - projects = rally.getProjects(workspace=workspace)返回所有父項目。

爲了讓所有兒童的項目,你需要問一下父母:

for proj in projects: 
children = proj.Children 
for child in children: 
    print (" %12.12s %s %s" % (child.oid, child.Name, child.State)) 

整個任務我通過以下方式可以解決:

#get object for 'New Parent': 
target_project = rally.getProject('NewParentForClosedProjects') 

projects = rally.getProjects(workspace=workspace) 
for proj in projects: 

    #get children of project 
    children = proj.Children 

    for child in children: 

     #if project closed: 
     if child.State == 'Closed': 
      #Then update Parent to new one: 
      project_fields = { 
       "ObjectID": child.oid, 
       "Parent": target_project.ref 
      } 
      try: 
       result = rally.update('Project', project_fields) 
       print "Project %s has been successfully updated with new %s parent" % (str(child.Name), str(child.Parent)) 
      except RallyRESTException, ex: 
       print "Update failure for Project %s" % (str(child.Name)) 
       print ex 
相關問題