Hi smacdonald2008
I am using the below code in my custom workflow process step. This workflow gets triggered once any project is created.
Users projectuser1, projectuser2 are valid Project users(users added to projects-administrators group) used for testing. 'ownerid', 'observerid' are the roleid's for owner and observer roles for this project template.
Are you aware if there are any privileges missing in the workflowSession to update the Project team? Do you know why there is an issue at
com.adobe.cq.projects.api.ProjectException: Unable to update team members for project /content/projects/sampleproject
at com.adobe.cq.projects.impl.ProjectImpl.updateMembers(ProjectImpl.java:116)
@Override
public void execute(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap metadataMap)
throws WorkflowException {
try {
ResourceResolver resolver = workflowSession.adaptTo(ResourceResolver.class);
Project project = getProject(resolver, workItem.getWorkflowData());
if (project != null) {
updateProjectTeamMembers(project);
}
} catch (Exception e) {
logger.error("Unable to complete Project Team Update Step for data: " + workItem.getWorkflowData(), e);
}
}
private void updateProjectTeamMembers(Project project) throws Exception {
List<String> userIds = new ArrayList<String>();
userIds.add("projectuser1");
userIds.add("projectuser2");
List<String> roleIds = new ArrayList<String>();
roleIds.add("ownerid");
roleIds.add("observerid");
project.updateMembers(userIds, roleIds);
}
private Project getProject(ResourceResolver resolver, WorkflowData workflowData) throws Exception {
if (workflowData != null && "jcr_path".equalsIgnoreCase(workflowData.getPayloadType()) && workflowData.getPayload() != null) {
String payloadPath = workflowData.getPayload().toString();
String projectPath = getProjectPath(payloadPath, resolver);
logger.debug("projectPath"+ projectPath);
Resource projectResource = projectPath != null ? resolver.getResource(projectPath): null;
if (projectResource != null) {
return projectResource.adaptTo(Project.class);
}
}
return null;
}
private String getProjectPath(String payloadPath, ResourceResolver resolver) {
if (payloadPath.startsWith("/content/projects")) {
return StringUtils.substringBeforeLast(payloadPath, "/");
}
return null;
}
Thanks for your help!
-Ramya