2013-06-27 61 views
1

我需要添加用戶(用戶已存在於存儲庫中,我只需要添加他們)以及從CSV文件到團隊區域的角色。項目區域和團隊區域已經存在。我可以成功添加用戶,但不能從csv文件中添加角色。向RTC團隊區域中的用戶添加角色

CSV文件格式是:

Project name,Team Area name,Members,roles 
Project1,User_Role_TA,Alex,Team Member 
Project2,TA2,David,Scrum Master 

下面是它的代碼。它成功添加了用戶,並且目前爲他們添加了來自項目區域的角色,但我需要從CSV文件中爲用戶添加角色。在下面的代碼中,如果我可以從csv文件中的角色「IRole [] availableRoles = clientProcess.getRoles(area,null);」 ,我認爲它應該解決這個問題。我沒有收到任何錯誤,但沒有添加角色。

 while((row = CSVFileReader.readLine()) != null) 
      { 
      rowNumber++; 
      st = new StringTokenizer(row,","); 
      while (st.hasMoreTokens()) { 
      projectAreaList.add(st.nextToken()); 
      teamAreaList.add(st.nextToken()); 
      membersList.add(st.nextToken()); 
      roleList.add(st.nextToken()); 
      } 
      } 
      for (int i=1; i<rowNumber; i++) 
      { 
      projectAreaName = projectAreaList.get(i); 
      teamAreaName = teamAreaList.get(i); 
      members = membersList.get(i); 
      member_roles =roleList.get(i); 


       URI uri = URI.create(projectAreaName.replaceAll(" ", "%20")); 
       IProjectArea projectArea = (IProjectArea) processClient.findProcessArea(uri, null, null); 
       if (projectArea == null) 
       { 
        System.out.println("Project Area not found"); 
       } 
       if (!teamAreaName.equals("NULL")){ 
        List <TeamAreaHandle> teamlist = projectArea.getTeamAreas(); 
        ITeamAreaHandle newTAHandle = findTeamAreaByName(teamlist,teamAreaName,monitor); 
        if(newTAHandle == null) { 
        System.out.println("Team Area not found"); 
        } 
        else { 
         ITeamArea TA = (ITeamArea)teamRepository.itemManager().fetchCompleteItem(newTAHandle,ItemManager.DEFAULT,monitor); 
         IRole role = getRole(projectArea); 
        IContributor user = teamRepository.contributorManager().fetchContributorByUserId(members,monitor); 

        /*role1 = getRole(area).getId(); 
        if(role1.equalsIgnoreCase(member_roles)) 
        { 
         user_role = getRole(area); 
         }*/ 


        IProcessAreaWorkingCopy areaWc = (IProcessAreaWorkingCopy)service.getWorkingCopyManager().createPrivateWorkingCopy(TA); 
        areaWc.getTeam().addContributorsSettingRoleCast(
          new IContributor[] {user}, 
          new IRole[] {role}); 
        areaWc.save(monitor); 

        } 

public static IRole getRole(IProcessArea area) throws TeamRepositoryException { 
      ITeamRepository repo = (ITeamRepository) area.getOrigin(); 
      IProcessItemService service =(IProcessItemService) repo 
       .getClientLibrary(IProcessItemService.class); 
      IClientProcess clientProcess = service.getClientProcess(area, null); 
      IRole[] availableRoles = clientProcess.getRoles(area, null); 
      for (int i = 0; i < availableRoles.length; i++) { 
       return availableRoles[i]; 
      } 
      throw new IllegalArgumentException("Couldn't find role"); 
     } 
+0

您使用的是RTC3.x還是RTC4.x? – VonC

+0

我正在使用RTC 3.0.1.3 –

回答

0

一些你要使用的API是私人在RTC3.x

不同的選擇,請參見this thread(類似於一個位代碼):

ProjectAreaWorkingCopy workingCopy = (ProjectAreaWorkingCopy)manager.getWorkingCopy(project); 

這類延伸至ProcessAreaWorkingCopy

public class ProjectAreaWorkingCopy extends ProcessAreaWorkingCopy implements IProjectAreaWorkingCopy 

ProcessAreaWorkingCopysetRoleCast檢索團隊並設置角色。

人們可以通過

team.setRoleCast(contributor, roleCast); 
# or 
projWc.getTeam().addContributorsSettingRoleCast(new IContributor[] {contributor}, roles); 

OP Kaushambi Suyal報告設定在團隊層面的作用:

造就了一種方法,在線程,有少量變化提到,它的工作。
另外我們還需要通過這裏的工藝區域不是這個項目區域,因爲我試圖給用戶在團隊區域添加角色而不是項目區域。

+0

對不起,在這之後回來。我的問題仍然存在。我想從問題中提到的csv文件設置角色。我已經看到這個線程和你的答案,但我仍然無法解決它。我需要的是,如果我能將字符串member_roles投射到IRole,它將解決問題。請幫忙。 –

+0

@KaushambiSuyal有趣。在這一點上,jazz.net當然是尋找這種信息的地方。 – VonC

+0

最後我可以添加角色。創建一個方法在線程中提到的幾乎沒有變化,它的工作。另外還想提一下,我們需要在此處傳遞過程區域,而不是項目區域,因爲我正在向團隊區域中的用戶添加角色,而不是項目區域。 –