Erstellen Sie zum Konfigurieren der E-Mail einen neuen E-Mail-Posteingang, und fügen Sie unten auf der Seite Ihr Groovy- oder Javascript-Skript hinzu, wie in der folgenden Abbildung dargestellt:
Das Skript wird beim Abrufen von E-Mails ausgeführt. Dies geschieht einmal für jede eingehende E-Mail.
Nachstehend finden Sie ein Beispiel für ein Groovy-Skript, das einen neuen Vorgang im zugehörigen Tracker erstellt:
import java.util.regex.*;
import com.intland.codebeamer.persistence.dto.*;
import com.intland.codebeamer.persistence.dto.base.*;
import com.intland.codebeamer.persistence.dao.*;
import com.intland.codebeamer.persistence.util.ArtifactPlusContent;
import com.intland.codebeamer.remoting.ArtifactType;
import com.intland.codebeamer.remoting.DescriptionFormat;
import com.intland.codebeamer.manager.*;
import com.intland.codebeamer.controller.importexport.*;
import org.apache.commons.lang3.*;
import com.intland.codebeamer.text.html.*;
import com.intland.codebeamer.manager.util.*;
logger.info("I'm a groovy script, processing " + email);
// id of Leads tracker on cb.com
leadTrackerId = 94520
trackerDao = applicationContext.getBean(TrackerDao.class);
trackerItemManager = applicationContext.getBean(TrackerItemManager.class);
item = new TrackerItemDto();
leadsTracker = trackerDao.findById(leadTrackerId);
item.setTracker(leadsTracker);
// read custom fields in "Leads" tracker
// using a helper class to access fields by name
fieldAccessor = new com.intland.codebeamer.text.excel.FieldAccessor(applicationContext);
fieldAccessor.setUser(user);
def setField(issue, fieldName, value) {
field = fieldAccessor.getFieldByName(issue, fieldName);
if (field != null) {
field.setValue(issue, value);
} else {
logger.warn("Can not find field <" + fieldName +"> on " + issue);
}
};
def getEmailValue(text, regexp, defaultValue) {
p = Pattern.compile(regexp);
matcher = p.matcher(text);
found = defaultValue;
if (matcher.find()) {
found = matcher.group(1);
found = StringUtils.trimToNull(found);
}
logger.info("Found <" + found +"> for regexp <" + regexp +">");
if (StringUtils.isBlank(found) || "--".equals(found)) {
found = defaultValue;
}
return found;
}
subject = email.subject;
message = "";
if (subject.contains("CB New Account") && (subject.contains("saas.codebeamer.com") || subject.contains("codebeamer.com"))) {
// a new account is created on saas
html = email.getHtmlParts().get(0).getBody();
txt = HtmlCleaner.htmlToText(html); // convert the HTML to plain text to extract data from there
logger.info("Cleaned HTML to <" + txt +">")
firstName = getEmailValue(txt, "(?m)First Name(.*?)$", "--");
lastName = getEmailValue(txt, "(?m)Last Name(.*?)$", "--");
email = getEmailValue(txt, "(?m)Email.*?\<mailto:(.*)\>.*?$", "--");
company = getEmailValue(txt, "(?m)Company(.*)$", email);
country = getEmailValue(txt, "(?m)Geo-Location(.*?),", "--");
setField(item, "First name", firstName);
setField(item, "Last name", lastName);
setField(item, "E-Mail", email);
setField(item, "Company", company);
setField(item, "Country", country);
setField(item, "Lead Source", "Trial registration");
desc = subject +"
";
desc += "Country:" + country +"
";
item.description = desc;
} else {
to = email.getHeader("to");
if ("
[email protected]".equals(to)) {
txt = email.getPlainTextParts().get(0).getBody();
logger.info("Processing email text:<"+ txt +">");
email = getEmailValue(txt, "(?m)Email(.*)$", "--");
if (! email.equals("--")) {
firstName = getEmailValue(txt, "(?m)First Name(.*)$", "--");
lastName = getEmailValue(txt, "(?m)Last Name(.*)$", "--");
company = getEmailValue(txt, "(?m)Company(.*)$", email);
phone = getEmailValue(txt, "(?m)Phone(.*)$", "--");
country = getEmailValue(txt, "(?m)Geo-Location(.*?),", "--");
setField(item, "First name", firstName);
setField(item, "Last name", lastName);
setField(item, "E-Mail", email);
setField(item, "Company", company);
setField(item, "Phone", phone);
setField(item, "Country", country);
setField(item, "Lead Source", "Trial registration");
desc = subject +"
";
desc += "Country:" + country +"
";
message = getEmailValue(txt, "(?m)(?s)Message:(.*)", "");
if (! StringUtils.isBlank(message)) {
desc += "
Message:
" + message +"
";
}
item.description = desc;
}
} else {
item = null;
}
}
if (item != null) {
try {
logger.warn("Creating a new item" + item);
trackerItemManager.create(user, item, null);
logger.warn("Created item:" + item);
} catch (Throwable th) {
err = th.getMessage();
logger.info("Failed to create item:" + item, th);
if (err.contains("same email") || err.contains("already exists")) {
// if this is a VetoException with "Lead #1234 with same email already exists!" because duplicate emails found
// and thrown by CodebeamerComTrackerItemListener, then add the subject as comment to the issue
Pattern issueIdPattern = Pattern.compile("\#(\d*)");
matcher = issueIdPattern.matcher(err);
if (matcher.find()) {
issueId = Integer.valueOf(matcher.group(1));
logger.warn("Adding comment to issue #" + issueId +", subject:<" + subject +">");
ArtifactDto comment = new ArtifactDto();
comment.setOwner(user);
comment.setDescriptionFormat(DescriptionFormat.WIKI);
comment.setDescription(subject +"
" + message);
Date date = new Date();
comment.setCreatedAt(date);
comment.setLastModifiedAt(date);
comment.setTypeId(Integer.valueOf(com.intland.codebeamer.remoting.ArtifactType.ISSUE_ATTACHMENT));
List<ArtifactPlusContent> arts = Arrays.asList(new ArtifactPlusContent(comment, null));
trackerItemManager.addAttachments(user, issueId, arts, null, new ActionData(null));
}
}
}
}