3
2
1
    Commentコメントを追加...

    1 回答

    1.  
      3
      2
      1

      例えば、こんなスクリプトです。

      com.atlassian.jira.issue.IssueManager              issueManager = com.atlassian.jira.component.ComponentAccessor.getIssueManager();
      com.atlassian.jira.issue.link.IssueLinkManager issueLinkManager = com.atlassian.jira.component.ComponentAccessor.getIssueLinkManager();
      
      
      /* 任意の課題 */
      com.atlassian.jira.issue.Issue issueObject = issueManager.getIssueObject("<課題キー>");
      com.atlassian.crowd.embedded.api.User user = issueObject.getAssignee();
      
      
      /* 任意課題の内部リンク課題一覧 */
      java.util.List<com.atlassian.jira.issue.link.IssueLink> inwardLinkList = issueLinkManager.getInwardLinks(issueObject.getId());
      if (inwardLinkList == null || inwardLinkList.size() == 0) {
      	return;
      }
      
      
      for (com.atlassian.jira.issue.link.IssueLink inwardLink : inwardLinkList) {
      	/* 課題リンクタイプは blocks に限る */
      	com.atlassian.jira.issue.link.IssueLinkType inwardLinkType = inwardLink.getIssueLinkType();
      	if (inwardLinkType == null) {
      		continue;
      	}
      	String inwardLinkTypeName = inwardLinkType.getName();
          if (inwardLinkTypeName != null && inwardLinkTypeName.length() > 0 && inwardLinkTypeName.toLowerCase().trim().equals("blocks")) {
      		/* 内部リンク課題 */
      		com.atlassian.jira.issue.Issue sourceIssue = inwardLink.getSourceObject();
      		if (sourceIssue != null) {
      			com.atlassian.jira.issue.issuetype.IssueType sourceIssueType = sourceIssue.getIssueTypeObject();
      			if (sourceIssueType == null) {
      				continue;
      			}
      			/* 内部リンクのバグ課題のみ */
      			String sourceIssueTypeName = sourceIssueType.getName();
      			if (sourceIssueTypeName != null && sourceIssueTypeName.length() > 0 && sourceIssueTypeName.toLowerCase().trim().equals("bug")) {
      				issueLinkManager.createIssueLink(issueObject.getId(), sourceIssue.getId(), inwardLinkType.getId(), null, user);
      				issueLinkManager.removeIssueLink(inwardLink, user);
      			}
      		}
      	}
      } 
      1. RYOITO

        書こうと思っていたレス忘れていました。 リンクの先/元を逆にする事ができました。ありがとうございます。 <実施MEMO> IssueType「Task」やLinkType「親子リンク(WBSGantt)」等の大文字小文字の混じったものをそのまま扱う場合は、toLowerCase()が何やら邪魔をするので、equals判定されない為外す。 e.g. sourceIssueTypeName.trim().equals("Task")

      2. RYOITO

        重要があるかわかりませんが… Redmineから移行してインポータが原因で親子リンク(WBSGantt)が逆になった方へ。 以下に気をつける必要があります。参考まで。 このスクリプトは課題単一に対して素晴らしい動きをしますが、何も考えずそのまま大量課題で走らせると取り返しがつかない事になるかも知れませんので注意して下さい。親子関係が何代にも渡る事、IssueKey通りになっていない事が多々ありますが、当然ながら実施の際には工夫が必要です。 e.g. Redmine SAND-100 → SAND-110 → SAND-105    ↓ Import後 SAND-100 ← SAND-110 ← SAND-105 そのような場合、このスクリプトをキーの若い順で走らせると以下のようになります。 inwardをoutwardにするスクリプトなので。 結果 SAND-100 ← SAND-110 → SAND-105

      Commentコメントを追加...