前提条件
- 当前状态下有两个转换,一个转换执行后还在当前状态 - 转换A、一个转换执行后到下一个状态 - 转换B
- 俩个多用户选择器类型的自定义字段,一个为待审批 - 用户A、一个为已审批 - 用户B
实现方式
转换A:
限制 用户A 的用户数量大于一时显示
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.user.ApplicationUser;
CustomField cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(10906L);
List<ApplicationUser> users = (List<ApplicationUser>) issue.getCustomFieldValue(cf);
if(users!=null&&users.size()>1){
return true
}
return false
后处理 将当前用户在用户A字段中移除并添加到用户B字段
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.issue.fields.CustomField;
// 获取当前用户
ApplicationUser user = ComponentAccessor.getComponent(JiraAuthenticationContext.class).getLoggedInUser();
CustomField cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(10906L);
CustomField ycf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(11102L);
List<ApplicationUser> users = (List<ApplicationUser>) issue.getCustomFieldValue(cf);
List<ApplicationUser> newUsers = new ArrayList<>();
for(ApplicationUser ownerUser:users){
if(!user.getUsername().equals(ownerUser.getUsername())){
newUsers.add(ownerUser);
}
}
issue.setCustomFieldValue(cf,newUsers);
List<ApplicationUser> yUsers = (List<ApplicationUser>) issue.getCustomFieldValue(ycf);
if(yUsers==null){
yUsers = new ArrayList<>();
}
yUsers.add(user);
issue.setCustomFieldValue(ycf,yUsers);
转换B:
限制 用户A 的用户数量等于一时显示
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.user.ApplicationUser;
CustomField cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(10906L);
List<ApplicationUser> users = (List<ApplicationUser>) issue.getCustomFieldValue(cf);
if(users!=null&&users.size()==1){
return true
}
return false
后处理 将当前用户在用户A字段中移除并添加到用户B字段
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.issue.fields.CustomField;
// 获取当前用户
ApplicationUser user = ComponentAccessor.getComponent(JiraAuthenticationContext.class).getLoggedInUser();
CustomField cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(10906L);
CustomField ycf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(11102L);
List<ApplicationUser> users = (List<ApplicationUser>) issue.getCustomFieldValue(cf);
List<ApplicationUser> newUsers = new ArrayList<>();
for(ApplicationUser ownerUser:users){
if(!user.getUsername().equals(ownerUser.getUsername())){
newUsers.add(ownerUser);
}
}
issue.setCustomFieldValue(cf,newUsers);
List<ApplicationUser> yUsers = (List<ApplicationUser>) issue.getCustomFieldValue(ycf);
if(yUsers==null){
yUsers = new ArrayList<>();
}
yUsers.add(user);
issue.setCustomFieldValue(ycf,yUsers);
转换C:当下个状态想返回上一步时 - 回退
后处理 将用户B中的用户全部移动到用户A字段中
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.security.JiraAuthenticationContext;
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.issue.fields.CustomField;
// 获取当前用户
ApplicationUser user = ComponentAccessor.getComponent(JiraAuthenticationContext.class).getLoggedInUser();
CustomField cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(10906L);
CustomField ycf = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(11102L);
List<ApplicationUser> users = (List<ApplicationUser>) issue.getCustomFieldValue(ycf);
List<ApplicationUser> yUsers = (List<ApplicationUser>) issue.getCustomFieldValue(ycf);
issue.setCustomFieldValue(cf,yUsers);
List<ApplicationUser> newusers = new ArrayList<>();
issue.setCustomFieldValue(ycf,newusers);