【问题标题】:how to store a list of items in Gel Script如何在 Gel Script 中存储项目列表
【发布时间】:2013-05-15 16:42:20
【问题描述】:

我想在 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 中写一个循环。

非常感谢任何答案或想法。

非常感谢,

莫娜

【问题讨论】:

    标签: list arraylist jelly clarity


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      附言。假设是 oracle 数据库。

      【讨论】:

        【解决方案3】:

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

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

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

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

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

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

        【讨论】:

          【解决方案4】:

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

          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:email 标签的 GEL forEach 和 Manager 数组

            ejm.

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-07-11
            • 1970-01-01
            • 1970-01-01
            • 2014-11-02
            • 2021-04-12
            • 2018-08-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多