Как сохранить список предметов в Gel Script

Я хотел бы создать процесс в Clarity 13.1, который рассылает электронное письмо всем менеджерам, принадлежащим к различным подразделениям 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>

Здесь проблема заключается в том, что таким образом каждый менеджер получает много электронных писем, связанных с каждым ресурсом или каждым периодом времени, в то время как каждый менеджер должен получать ТОЛЬКО 1 электронное письмо, содержащее СПИСОК РЕСУРСОВ...

Я пытался также поставить последние два после

Я действительно ценю, если кто-то знает, можно ли обратиться к списку ресурсов внутри геля: электронная почта и как? или если бы я мог написать цикл внутри геля: электронная почта.

Любой ответ или идея высоко ценится.

Большое спасибо,

Mona

4 ответа

Вы можете использовать агрегатную функцию wm_concat или аналитическую функцию LISTAGG в вашем запросе result2.

Ps. Предположим, база данных оракула.

Я предпочитаю использовать такие сценарии, как один запрос, чтобы получить все необходимые данные. Обычно, если вы выполняете эскалацию расписаний, вы можете отправить электронное письмо только линейному менеджеру ресурса или частному лицу в одной части OBS. Следовательно, столбцы, возвращаемые вашим запросом, могут быть следующими: менеджер строки (имя, фамилия и адрес электронной почты, идентификатор ресурса, полное имя ресурса, путь OBS (плюс любые другие вещи, которые вам нужны).

Ваш SQL должен быть сгруппирован и упорядочен линейным менеджером.

Имеют атрибуты предыдущего линейного менеджера и текущего линейного менеджера. Для каждой возвращаемой строки, где current=previous, создайте дополнительные строки в атрибуте с именем $resource_list.

Если текущий <> предыдущий, вставьте $ resource_list в текст своей электронной почты и затем отправьте его. Обратите внимание, что вам также необходимо отправить сообщение для последней группы.

Рекомендуется форматировать ваши электронные письма как html, а затем использовать форматирование, чтобы контролировать отображение недостающих ресурсов расписания.

Я бы только рекомендовал это как эскалацию. Я бы порекомендовал отправить ресурсу список расписаний, которые они не заполнили заранее, чтобы дать им возможность разобраться в проблеме.

Возможно, более простой способ сделать это - сгруппировать по менеджеру в первом запросе и создать поле объединенных ресурсов (через запятую или через LFCR или HTML
отдельно) без расписаний. Это даст вам всего один запрос для прохождения цикла с менеджером и ресурсами для каждого менеджера.

Что касается распечатки списка внутри электронного письма, вы можете использовать forEach внутри тега электронной почты для итерации списка несоответствующих ресурсов, хотя я не тестировал этот подход.

Как я понимаю, все менеджеры получат одинаковый список ресурсов, тогда вы сможете:

  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 Query Managers
  2. Используйте GEL forEach с массивом Manager, содержащим тег gel: email

    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>  

Я надеюсь, что это поможет, и извините, если приведенный выше формат не является правильным (это мой 1-й ответ)

Другие вопросы по тегам