如何在Gel Script中存储项目列表

时间:2013-05-15 16:42:20

标签: list arraylist jelly clarity

我想在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里面的资源列表,我真的很感激:电子邮件以及如何?或者如果我可以在凝胶中写一个循环:电子邮件。

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

非常感谢,

莫娜

4 个答案:

答案 0 :(得分:0)

执行此操作的更简单方法可能是在第一个查询中由管理员进行分组,并创建一个连接资源字段(逗号分隔或LFCR分隔或HTML分隔),而不提交时间表。这将为您提供一个查询,以循环使用每个经理的经理和资源。

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

答案 1 :(得分:0)

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

聚苯乙烯。假设是oracle数据库。

答案 2 :(得分:0)

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

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

拥有前一个直线经理和当前直线经理的属性。对于返回的每一行,current = previous在名为$ resource_list的属性中构建其他行。

当前&lt;&gt;之前,然后将$ resource_list嵌入到您的电子邮件文本中,然后发送它。请注意,您也需要为最终组进行发送。

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

我只会建议升级。我建议向资源发送一份他们尚未事先完成的时间表列表,以便他们有机会解决问题。

答案 3 :(得分:0)

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

  1. SQL Query以获取缺少时间表的资源列表
  2. 将结果填入GEL变量中 EJM
  3. <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 Query Managers
    2. 将GEL forEach与包含gel:email标签

      的Manager数组一起使用

      EJM。

    3. <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> 	

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