Как сохранить список предметов в 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 внутри тега электронной почты для итерации списка несоответствующих ресурсов, хотя я не тестировал этот подход.
Как я понимаю, все менеджеры получат одинаковый список ресурсов, тогда вы сможете:
- SQL-запрос для получения списка ресурсов с отсутствующим расписанием
- Заполните результаты в переменной 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>
- Sql Query Managers
Используйте 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-й ответ)