2
1
0
2 回答
- 321
こちらは標準の機能では実現できないです。例えば下記のアドオンを利用しますと、
https://marketplace.atlassian.com/apps/5048/jsu-suite-utilities-for-jira?hosting=server&tab=overview
事後操作に、
- Transition on linked issues (or on sub-tasks, issues in epic)
という機能が追加になりますので、実現できるかと思います。
コメントを追加... - 10-1
ご回答ありがとうございます。
標準機能ではできないのですね。
当方、スクリプトを使ってMutableIssueクラスのsetStatusIdメソッドで更新させる方法でやってみたのですが、
うまくいきませんでした。JSUは当環境にアドオン済みでした。
事後操作リストには「Transition on linked issues (or on sub-tasks, issues in epic)」がないのですが、
「Linked Transition(JSU)」というのはあります。もう少し詳しく教えてください。- Shuzaburo Doba
なるほど、スクリプトからだとトランジションを実行する必要があるのですね!
確かに、以下のようにサブタスクに対してトランジションを実行させたらうまくいったように思えます。
import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.bc.issue.IssueService; import com.atlassian.jira.issue.changehistory.ChangeHistoryManager; import com.atlassian.jira.issue.IssueManager; import com.atlassian.jira.issue.Issue; import org.ofbiz.core.entity.GenericValue; import com.atlassian.jira.issue.changehistory.ChangeHistory; import com.atlassian.jira.issue.history.ChangeItemBean; import com.atlassian.jira.user.ApplicationUser; import com.atlassian.jira.issue.status.Status; import com.atlassian.jira.bc.issue.IssueService.TransitionValidationResult; import com.atlassian.jira.bc.issue.IssueService.IssueResult; import com.atlassian.jira.issue.IssueInputParametersImpl; import java.util.*; // サブタスクに実行させるトランジション ID int actionId = 31; // 判定する親課題のステータスの名前 String validateStatusName = "完了"; ChangeHistoryManager changeHistoryManager = ComponentAccessor.getChangeHistoryManager(); IssueManager issueManager = ComponentAccessor.getIssueManager(); IssueService issueService = ComponentAccessor.getIssueService(); Issue issue = issueManager.getIssueObject(event.getIssue().getId()); // CustomField progressField = customFieldManager.getCustomFieldObject(progressFieldId); // プロジェクトリーダーが更新したことにする ApplicationUser updateUser = issue.getProjectObject().getProjectLead(); GenericValue changeLog = event.getChangeLog(); if(changeLog){ ChangeHistory changeHistory = changeHistoryManager.getChangeHistoryById(changeLog.getLong("id")); List<ChangeItemBean> changeItemBeans = changeHistory.getChangeItemBeans(); for(ChangeItemBean changeItemBean : changeItemBeans){ if(changeItemBean.getField() == "status"){ Status status = issue.getStatus(); String statusName = status.getSimpleStatus().getName(); Collection<Issue> subTaskObjects = issue.getSubTaskObjects(); if(statusName.equals(validateStatusName) && subTaskObjects.size() > 0){ TransitionValidationResult transitionValidationResult; IssueResult transitionResult; for(Issue subTaskObject : subTaskObjects){ Issue subTask = issueManager.getIssueObject(subTaskObject.getId()); transitionValidationResult = issueService.validateTransition(updateUser, subTask.getId(), actionId, new IssueInputParametersImpl()); if(transitionValidationResult.isValid()){ transitionResult = issueService.transition(updateUser, transitionValidationResult); } } } } } }
ただ、サブタスクの現在のステータスにも依存してしまいますし、
確かに複雑な操作が必要ですね... - 樋口晃
スクリプトは便利ですが、JIRA をバージョンアップする時に API が利用不可になってしまうという事が有ります。
バージョンアップの手間を考えると、JSU でできる事は JSU でやった方が良いと思います。
コメントを追加...
親チケットのステータスを「Done」(完了)に変更したときに配下の子チケットのステータスも合わせて完了にするにはどのようにすればよいでしょうか?