1

我想在 Clarity 13.1 中创建一个流程,该流程向 IT 部门中属于不同 OBS 单位的所有经理发送一封电子邮件,其中包含未完成其时间表的资源列表 + 相关时间段。(这里的代码我没有复制,如果还是太长见谅)

首先,我编写了一个查询来选择我需要的所有管理器,结果存储在 var="result3" 中。

然后我写了这个:

<core:forEach items="${result3.rowsByIndex}" trim="true" var="mng">
 <core:set value="${mng[0]}" var="userid"/> 
<core:set value="${mng[1]}" var="ManagerLastName"/>
 <core:set value="${mng[2]}" var="ManagerFirstName"/>
 <core:set value="${mng[3]}" var="ManagerEmail"/>
 <core:set value="${mng[4]}" var="idManager"/>
 <gel:log> manager ${mng[1]} </gel:log>

接下来,我选择了所有未编译其时间表的资源,并将结果存储在 result2 中。这是最后一部分:

<core:forEach items="${result2.rowsByIndex}" trim="true" var="tms">
 <core:set value="${tms[0]}" var="id_risorse"/>
 <core:set value="${tms[1]}" var="Full_Name"/>
 <core:set value="${tms[2]}" var="Email"/>
 <core:set value="${tms[3]}" var="Time_Period"/>
 <core:set value="${tms[4]}" var="Prid"/>
 <core:set value="${tms[5]}" var="MANAGER_ID"/>

<gel:log> Risorsa: ${tms[1]} periodo: "${tms[3]}"</gel:log> 

<gel:email from="clarity@mediobanca.it"
 subject="MISSING TIMESHEET: ${tms[3]}"
 to="${mng[3]}">

 ( Here is the CONTENT OF EMAIL
 Resource: ${tms[1]}, id= "${tms[0]}" 

 </gel:email> 

</core:forEach> 
</core:forEach> 
</core:forEach> 
</gel:script>

在这里,问题在于,通过这种方式,每个经理都会收到很多与每个资源或每个时间段相关的电子邮件,而每个经理只能收到一封包含资源列表的电子邮件......

我也试过把最后两个放在后面

如果有人知道是否可以参考 gel:email 中的资源列表以及如何参考,我将不胜感激?或者如果我可以在 gel:email 中写一个循环。

任何答案或想法都会受到高度赞赏。

非常感谢,

莫娜

4

4 回答 4

0

您可以在 result2 查询中使用聚合函数 wm_concat 或分析函数 LISTAGG。

附言。假设oracle数据库。

于 2014-05-19T16:57:39.503 回答
0

也许更简单的方法是在第一个查询中按经理分组,并创建一个连接资源的字段(逗号分隔或 LFCR 分隔或 HTML
分隔)而不提交时间表。这将只为您提供一个查询,以便与经理和每个经理的资源进行循环。

至于打印出电子邮件中的列表,您可以在电子邮件标签中使用 forEach 来迭代不合规资源的列表,尽管我还没有测试过这种方法。

于 2014-04-08T22:44:07.417 回答
0

据我了解,所有经理都会收到相同的资源列表,那么您可以:

  1. SQL 查询以获取缺少时间表的资源列表
  2. 将结果填充到 GEL 变量 ejm

<core:forEach items="${result_resources.rows}" trim="true" var="myrow">				
<core:set var="var_string_results">${var_string_results} ${myrow.id_risorse} ${myrow.Full_Name},</core:set>			   			
</core:forEach>

  1. Sql 查询管理器
  2. 将 GEL forEach 与包含 gel:email 标记的 Manager 数组一起使用

    伊姆。

<core:forEach begin="0" items="${vDestinatarios.rows}" var="slRow">								
 <core:set value="${slRow.email}" var="managers"/>			
 <gel:email from="clarity@mediobanca.it" fromName="clarity@mediobanca.it" subject="MISSING TIMESHEET" to="${managers}">
	<![CDATA[	<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
	<HTML>	<HEAD/>	
	<BODY>
	${var_string_results}							
	<![CDATA[ </BODY>	</HTML>	]]>		 
 </gel:email>
</core:forEach> 	

我希望它有所帮助,如果上述格式不正确,我很抱歉(这是我的第一个答案)

于 2017-08-22T11:21:19.317 回答
0

我对此类脚本的偏好是使用单个查询来获取您需要的所有数据。通常,如果您正在执行时间表升级,您只想将电子邮件发送给资源的直线经理或 OBS 一部分中的个人。因此,您的查询返回的列可能是:线路经理(名字、姓氏和电子邮件地址、资源 ID、资源全名、OBS 路径(以及您需要的任何其他内容)。

您的 SQL 应由直线经理进行分组和排序。

具有前任直属经理和现任直属经理的属性。对于返回的每一行,current=previous 在名为 $resource_list 的属性中构建额外的行。

当前 <> 上一个时,将 $resource_list 嵌入到您的电子邮件文本中,然后发送。请注意,您还需要为最后一组进行发送。

最佳做法是将您的电子邮件格式化为 html,然后使用格式化来控制丢失的时间表资源的显示方式。

我只建议将其作为升级。我建议向资源发送一份他们事先没有完成的时间表列表,让他们有机会解决问题。

于 2015-10-22T21:48:57.487 回答