jBPM jPDL 用户开发手册 3.2.3 - 第17章

本文详细介绍了jBPM中的邮件支持功能,包括四种发送邮件的方式:邮件动作、邮件节点、任务分派邮件和任务提醒邮件。此外还介绍了邮件模板、邮件服务器配置以及自定义邮件支持等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

17 邮件支持

本章描述了jBPM jPDL中随包发行的邮件支持。

17.1. jPDL中的邮件

从流程中发送邮件有四种指定的方式。

17.1.1. 邮件动作

邮件动作能够用来发送邮件而不是在流程图中显示一个节点。

允许你在在流程的任何地方来指定动作,你可以像这样指定一个邮件动作:

<mail actors="#{president}" subject="readmylips" text="nomoretaxes" />

Subjecttext属性也能作为一个元素来指定,像这样:

<mail actors="#{president}" >

  <subject>readmylips</subject>

  <text>nomoretaxes</text>

</mail>

每个域都可以包含JSF那样的表达式。例如:

<mail to='#{initiator}' subject='websale' text='your websale of #{quantity} #{item} was approved' />

更多的关于表达式的信息,查看21.3 表达式部分

有两个属性用来指定收集人:actorstoto属性应该解析成一个分号分隔的邮件地址列表。actors属性应该解析成一个分号分隔的actorId的列表。那些actorId将使用地址解析来解析成邮件地址。

<mail to='admin@mycompany.com' subject='urgent' text='the mailserver is down :-)' />

更多的关于如何指定收件人的信息,查看17.3 指定收件人部分

邮件可以定义成模板而且在流程中你可以重写模板的属性,如:

<mail template='sillystatement' actors="#{president}" />

更多的关于模板的信息,查看17.4 邮件模板部分

17.1.2. 邮件节点

就跟邮件动作(mail actions)一样,邮件发送也能被建模成节点。那样的话,运行时行为是相同的,但是邮件将在流程图中显示成一个节点。

邮件节点所支持的属性和元素同邮件动作完全相同。

<mail-node name="send email" to="#{president}" subject="readmylips" text="nomoretaxes">

  <transition to="the next node" />

</mail-node>

邮件节点完全应该有一个离开转换。

17.1.3. 任务分派邮件

当任务获得被分配的参与者时通知邮件能够发送。在一个任务上使用notify="yes"属性,如:

<task-node name='a'>

  <task name='laundry' swimlane="grandma" notify='yes' />

  <transition to='b' />

</task-node>

设置notifyyestrueon将导致jBPM给分配到任务上的参与者发送邮件。邮件是基于模板(查看17.4 邮件模板部分)并且包含一个到web应用的任务页面的链接。

17.1.4. 任务提醒邮件

同使用分派(assignments)一样,邮件(emails)能够作为任务提醒被发送。jPDL 中的reminder元素基于定时器。最常用的属性是duedaterepeat。唯一的不同是没有动作(action)指定。

<task-node name='a'>

  <task name='laundry' swimlane="grandma" notify='yes'>

    <reminder duedate="2 business days" repeat="2 business hours"/>

  </task>

  <transition to='b' />

</task-node>

 

17.2. 邮件表达式

torecipientssubjecttext能够被包含像JSF的表达式。更多的关于表达式的信息,查看21.3表达式部分。

表达式中的变量:swimlanes process变量、transient变量beans被配置jbpm.cfg.xml中。

这些表达式能够同本章后面解释的地址解析进行组合。例如:假设在你的流程中有一个swimlanepresident,然后看下面的邮件规范:

<mail actors="#{president}" subject="readmylips" text="nomoretaxes" />

那将为特定的流程执行发送邮件到扮演president的那个人。

17.3. 指定收件人

17.3.1. 多个收件人

actorsto域中,多个收件人可以使用分号(;)或冒号(:)来进行分隔。

17.3.2. 密送邮件

有时除正常的收件人外你还想发送邮件到一个BCC目标。当前,有两个支持的方法:第一你可以在流程定义中指定一个bccActorsbcc属性(根据actorsto)。

<mail to='#{initiator}' bcc='bcc@mycompany.com' subject='websale' text='your websale of #{quantity} #{item} was approved' />

第二个方法是总是发送一个BCC邮件到你在中心配置(jbpm.cfg.xml)中的一个属性中配置的某个位置上:

<jbpm-configuration>

  ...

  <string name="jbpm.mail.bcc.address" value="bcc@mycompany.com" />

</jbpm-configuration>

 

17.3.3. 地址解析

在所有的jBPM中,actorsactorId's引用。这是一个作为流程参与人标识符的字符串。一个地址解析翻译actorId's成为邮件地址。

如果你想应用地址解析使用属性actors而如果你要直接指定邮件地址而不想应用地址解析使用属性to

一个地址解析器应该实现下列的接口:

public interface AddressResolver extends Serializable {

  Object resolveAddress(String actorId);

}

一个地址解析器应该返回3个类型中的1个:字符串(String)、字符串集合(Collection of String)或字符串数组(array of String)。

所有字符串应该为给定的 actorId代表邮件地址。

地址解析器实现应该是使用名字jbpm.mail.address.resolver配置在jbpm.cfg.xml中的bean。如:

<jbpm-configuration>

  ...

  <bean name='jbpm.mail.address.resolver' class='org.jbpm.identity.mail.IdentityAddressResolver' singleton='true' />

</jbpm-configuration>

 

jBPM的身份构件包括一个地址解析器。那个地址解析器将查找给定actorIdUser。如果用户存在,那个用户的邮件被返回,否则为null。更多关于身份构件信息能够在12.11 身份构件中找到。

17.4. 邮件模板

代替在processdefinition.xml中指定邮件,邮件能够指定模板文件中。当一个模板被使用时,processdefinition.xml文件中的每个域仍然能够被覆盖。邮件模板应该在XML文件中像这样来指定:

<mail-templates>

 

  <variable name="BaseTaskListURL" value="http://localhost:8080/jbpm/task?id=" />

 

  <mail-template name='task-assign'>

    <actors>#{taskInstance.actorId}</actors>

    <subject>Task '#{taskInstance.name}'</subject>

    <text><![CDATA[Hi,

Task '#{taskInstance.name}' has been assigned to you.

Go for it: #{BaseTaskListURL}#{taskInstance.id}

Thanks.

---powered by JBoss jBPM---]]></text>

  </mail-template>

 

  <mail-template name='task-reminder'>

    <actors>#{taskInstance.actorId}</actors>

    <subject>Task '#{taskInstance.name}' !</subject>

    <text><![CDATA[Hey,

Don't forget about #{BaseTaskListURL}#{taskInstance.id}

Get going !

---powered by JBoss jBPM---]]></text>

  </mail-template>

 

</mail-templates>

像你在这个例子(BaseTaskListURL)中看到的一样,extra变量能够定义在邮件模板中,它在表达式中是有效的。

包含模板的资源应该在jbpm.cfg.xml中像这样进行配置:

<jbpm-configuration>

  ...

  <string name="resource.mail.templates" value="jbpm.mail.templates.xml" />

</jbpm-configuration>

17.5. 邮件服务器配置

最简单的配置邮件服务器的方法在jbpm.cfg.xml文件中使用jbpm.mail.smtp.host这个配置属性,如:

<jbpm-configuration>

  ...

  <string name="jbpm.mail.smtp.host" value="localhost" />

</jbpm-configuration>

作为选择,当更多的属性需要被指定时,应该用关键字' resource.mail.properties '给定资源引用的属性文件,如:

<jbpm-configuration>

  ...

  <string name='resource.mail.properties' value='jbpm.mail.properties' />

</jbpm-configuration>

17.6. From地址配置

jPDL邮件中From地址的缺省值使用的是jbpm@noreply。邮件的from地址可以在jBPM的配置文件jbpm.xfg.xml中使用关键字'jbpm.mail.from.address'来配置,如:

<jbpm-configuration>

  ...

  <string name='jbpm.mail.from.address' value='jbpm@yourcompany.com' />

</jbpm-configuration>

17.7. 自定义邮件支持

jBPM中所有的邮件支持是以一个类为中央的:org.jbpm.mail.Mail,这是一个ActionHandler实现。无论何时邮件在流程xml中指定,都将代理到邮件类。它可能继承自Mail类然后再为你的特殊需求定制某些功能。为了配置你的类使用邮件代理,在jbpm.cfg.xml文件中像这样来指定'jbpm.mail.class.name'配置字符串:

<jbpm-configuration>

  ...

  <string name='jbpm.mail.class.name' value='com.your.specific.CustomMail' />

</jbpm-configuration>

 定制的mail类在解析期间被读取并且动作将在引用配置了(或缺省的)邮件类名的流程中被配置。所以如果你改变这个属性,所有已经部署的流程将仍然引用旧的邮件名。但他们将能够通过使用一条简单的update语句很容易地被更新到jbpm数据库。

17.8. 邮件服务器

如果你需要一个易于安装的邮件服务器,那么就检出JBossMail Server Apache James吧。

 

:-s

资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 无锡平芯微半导体科技有限公司生产的A1SHB三极管(全称PW2301A)是一款P沟道增强型MOSFET,具备低内阻、高重复雪崩耐受能力以及高效电源切换设计等优势。其技术规格如下:最大漏源电压(VDS)为-20V,最大连续漏极电流(ID)为-3A,可在此条件下稳定工作;栅源电压(VGS)最大值为±12V,能承受正反向电压;脉冲漏极电流(IDM)可达-10A,适合处理短暂高电流脉冲;最大功率耗散(PD)为1W,可防止器件过热。A1SHB采用3引脚SOT23-3封装,小型化设计利于空间受限的应用场景。热特性方面,结到环境的热阻(RθJA)为125℃/W,即每增加1W功率损耗,结温上升125℃,提示设计电路时需考虑散热。 A1SHB的电气性能出色,开关特性优异。开关测试电路及波形图(图1、图2)展示了不同条件下的开关性能,包括开关上升时间(tr)、下降时间(tf)、开启时间(ton)和关闭时间(toff),这些参数对评估MOSFET在高频开关应用中的效率至关重要。图4呈现了漏极电流(ID)与漏源电压(VDS)的关系,图5描绘了输出特性曲线,反映不同栅源电压下漏极电流的变化。图6至图10进一步揭示性能特征:转移特性(图7)显示栅极电压(Vgs)对漏极电流的影响;漏源开态电阻(RDS(ON))随Vgs变化的曲线(图8、图9)展现不同控制电压下的阻抗;图10可能涉及电容特性,对开关操作的响应速度和稳定性有重要影响。 A1SHB三极管(PW2301A)是高性能P沟道MOSFET,适用于低内阻、高效率电源切换及其他多种应用。用户在设计电路时,需充分考虑其电气参数、封装尺寸及热管理,以确保器件的可靠性和长期稳定性。无锡平芯微半导体科技有限公司提供的技术支持和代理商服务,可为用户在产品选型和应用过程中提供有
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 JavaScript 中实现点击展开与隐藏效果是一种非常实用的交互设计,它能够有效提升用户界面的动态性和用户体验。本文将详细阐述如何通过 JavaScript 实现这种功能,并提供一个完整的代码示例。为了实现这一功能,我们需要掌握基础的 HTML 和 CSS 知识,以便构建基本的页面结构和样式。 在这个示例中,我们有一个按钮和一个提示框(prompt)。默认情况下,提示框是隐藏的。当用户点击按钮时,提示框会显示出来;再次点击按钮时,提示框则会隐藏。以下是 HTML 部分的代码: 接下来是 CSS 部分。我们通过设置提示框的 display 属性为 none 来实现默认隐藏的效果: 最后,我们使用 JavaScript 来处理点击事件。我们利用事件监听机制,监听按钮的点击事件,并通过动态改变提示框的 display 属性来实现展开和隐藏的效果。以下是 JavaScript 部分的代码: 为了进一步增强用户体验,我们还添加了一个关闭按钮(closePrompt),用户可以通过点击该按钮来关闭提示框。以下是关闭按钮的 JavaScript 实现: 通过以上代码,我们就完成了点击展开隐藏效果的实现。这个简单的交互可以通过添加 CSS 动画效果(如渐显渐隐等)来进一步提升用户体验。此外,这个基本原理还可以扩展到其他类似的交互场景,例如折叠面板、下拉菜单等。 总结来说,JavaScript 实现点击展开隐藏效果主要涉及 HTML 元素的布局、CSS 的样式控制以及 JavaScript 的事件处理。通过监听点击事件并动态改变元素的样式,可以实现丰富的交互功能。在实际开发中,可以结合现代前端框架(如 React 或 Vue 等),将这些交互封装成组件,从而提高代码的复用性和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值