提交 2bd2401e 编写于 作者: T Tim Stephenson

Enabled injection of mail templates from vars as well as fields

上级 366ecb2f
......@@ -30,6 +30,7 @@ import org.apache.commons.mail.SimpleEmail;
/**
* @author Joram Barrez
* @author Frederik Heremans
* @author Tim Stephenson
*/
public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
......@@ -41,7 +42,9 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
protected Expression bcc;
protected Expression subject;
protected Expression text;
protected Expression textVar;
protected Expression html;
protected Expression htmlVar;
protected Expression charset;
public void execute(ActivityExecution execution) {
......@@ -50,8 +53,10 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
String ccStr = getStringFromField(cc, execution);
String bccStr = getStringFromField(bcc, execution);
String subjectStr = getStringFromField(subject, execution);
String textStr = getStringFromField(text, execution);
String htmlStr = getStringFromField(html, execution);
String textStr = textVar == null ? getStringFromField(text, execution)
: getStringFromField(getExpression(execution, textVar), execution);
String htmlStr = htmlVar == null ? getStringFromField(html, execution)
: getStringFromField(getExpression(execution, htmlVar), execution);
String charSetStr = getStringFromField(charset, execution);
Email email = createEmail(textStr, htmlStr);
......@@ -72,6 +77,8 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
leave(execution);
}
protected Email createEmail(String text, String html) {
if (html != null) {
return createHtmlEmail(text, html);
......@@ -224,4 +231,13 @@ public class MailActivityBehavior extends AbstractBpmnActivityBehavior {
return null;
}
protected Expression getExpression(ActivityExecution execution,
Expression var) {
// TODO fix reliance on internal code.
ProcessEngineConfigurationImpl svcs = (ProcessEngineConfigurationImpl) execution
.getEngineServices();
return svcs.getExpressionManager().createExpression(
(String) execution.getVariable(var.getExpressionText()));
}
}
......@@ -45,16 +45,22 @@ public abstract class AbstractExternalInvocationBpmnParseHandler<T extends FlowN
if (fieldExtension.getFieldName().equals("html")) {
textOrHtmlDefined = true;
}
if (fieldExtension.getFieldName().equals("htmlVar")) {
textOrHtmlDefined = true;
}
if (fieldExtension.getFieldName().equals("text")) {
textOrHtmlDefined = true;
}
if (fieldExtension.getFieldName().equals("textVar")) {
textOrHtmlDefined = true;
}
}
if (!toDefined) {
bpmnParse.getBpmnModel().addProblem("No recipient is defined on the mail activity", task);
}
if (!textOrHtmlDefined) {
bpmnParse.getBpmnModel().addProblem("Text or html field should be provided", task);
bpmnParse.getBpmnModel().addProblem("Text, html, textVar or htmlVar field should be provided", task);
}
}
......
......@@ -115,6 +115,19 @@ public class EmailServiceTaskTest extends EmailTestCase {
assertEmailSend(messages.get(0), true, "Test", "Mr. <b>Kermit</b>", "activiti@localhost", Arrays.asList("kermit@activiti.org"), null);
}
@Deployment
public void testVariableTemplatedMail() throws Exception {
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("gender", "male");
vars.put("html", "<![CDATA[<html><body>Hello ${gender == 'male' ? 'Mr' : 'Ms' }. <b>Kermit</b><body></html>]]");
vars.put("text", "Hello ${gender == 'male' ? 'Mr' : 'Ms' }. Kermit");
runtimeService.startProcessInstanceByKey("variableTemplatedMail", vars);
List<WiserMessage> messages = wiser.getMessages();
assertEquals(1, messages.size());
assertEmailSend(messages.get(0), true, "Test", "Mr. <b>Kermit</b>", "activiti@localhost", Arrays.asList("kermit@activiti.org"), null);
}
// Helper
public static void assertEmailSend(WiserMessage emailMessage, boolean htmlMail, String subject, String message,
......
<definitions
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="Examples">
<process id="variableTemplatedMail" >
<startEvent id="theStart" />
<sequenceFlow sourceRef="theStart" targetRef="sendMail" />
<serviceTask id="sendMail" activiti:type="mail">
<extensionElements>
<activiti:field name="to">
<activiti:string>kermit@activiti.org</activiti:string>
</activiti:field>
<activiti:field name="subject">
<activiti:string>Test</activiti:string>
</activiti:field>
<activiti:field name="htmlVar">
<activiti:expression>html</activiti:expression>
</activiti:field>
<activiti:field name="textVar">
<activiti:expression>text</activiti:expression>
</activiti:field>
</extensionElements>
</serviceTask>
<sequenceFlow sourceRef="sendMail" targetRef="theEnd" />
<endEvent id="theEnd" />
</process>
</definitions>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册