2
1
0
1 回答
- 321
データをIDではなく名称から取得するが良いと思います。
名称を変更する場合は、スクリプトの修正が必要になりますが、リリースされた後に余程のことが無い限りは、そこまで頻繁に名称変更することもないと思いますし、それよりも移行後のスクリプト修正が必要でなくなるため、移行後の負荷は減るし環境毎のソース差異がなくなるため運用は楽になるのかなと考えております。
逆にIDだと名称変更に左右されないメリットがあると思うので、どちらが良いかはもちろん状況によります。
サンプル
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.workflow.WorkflowManager; import com.atlassian.jira.workflow.JiraWorkflow; import com.atlassian.jira.issue.Issue; import com.atlassian.jira.issue.status.Status; // API final WorkflowManager workflowManager = ComponentAccessor.getWorkflowManager(); // フィールドID final Long CUSTOM_FIELD_ID_IMPORTANT = customFieldManager.getCustomFieldObjectsByName("重要度").getAt(0).getIdAsLong(); // トランジション名:IT部門承認者クローズ待ち → 品質管理責任者クローズ待ち final String TRANSITION_NAME_FROM_IT_DEPT_APPROVER_CLOSE_PENDING_TO_QUALITY_MANAGEMENT_REPRESENTATIVE_CLOSE_PENDING = "承認"; // スクリプトを実行させたいトランジション箇所 List<Integer> transitionIdList = new ArrayList<Integer>(); // トランジションを実行した場合 if(underlyingIssue != null && getAction() != null && getAction().id != null){ Issue incidentIssue = (Issue)underlyingIssue; JiraWorkflow workflow = workflowManager.getWorkflow(incidentIssue); List<Status> statusList = workflow.getLinkedStatusObjects() for(int i = 0; i < statusList.size(); i++){ Status status = statusList.getAt(i); String statusName = status.getName().replaceAll(" ", ""); if(statusName.equals("ステータス名")){ Iterator actions = workflow.getLinkedStep(status).getActions().iterator(); while (actions.hasNext()){ com.opensymphony.workflow.loader.ActionDescriptor action = (com.opensymphony.workflow.loader.ActionDescriptor)actions.next(); if( action.getName().equals(TRANSITION_NAME_FROM_IT_DEPT_APPROVER_CLOSE_PENDING_TO_QUALITY_MANAGEMENT_REPRESENTATIVE_CLOSE_PENDING)){ transitionIdList.add(action.getId()); break; // 複数トランジションで制御すしたい場合は不要 } } } } if(transitionIdList.contains(getAction().id)){ getFieldById("customfield_" + CUSTOM_FIELD_ID_IMPORTANT).setHidden(true); } }
コメントを追加...
Configuration Managerを利用してプロジェクトデータを移行しようと考えていますが、移行元と先で課題タイプ、ステータス、カスタムフィールド、トランジション等のIDが変わった場合、移行先に合わせてIDを修正しないとスクリプトが動作しなくなります。
またBehavioursで特定トランジションで実行されることを「Condition」で設定できますが、この設定は自動で移行されず手動設定が必要になるため、その手間も省けたらと考えております。
この問題を回避する方法を教えて下さい。