<\/HEAD>
Recentemente, me pediram para ajudar a criar um link de email em um pop-up para enviar informações sobre registros relacionados. Baseando-se no exemplo sobre como recuperar o histórico de manutenção postado aqui<\/A>, Vamos adicionar um botão que enviará um email com esse histórico. <\/P><\/P>
Um link mailto pode conter alguns elementos:<\/P>
- o email ou emails para os quais enviar o correio<\/LI>
- opcionalmente o CC e\/ou BCC<\/LI>
- um assunto<\/LI>
- e um corpo<\/LI><\/UL>
<\/P>
O HTML que usaremos para o botão é bastante simples. Consiste em uma âncora com o link mailto (espression\/expr1) e dentro dessa âncora o botão (veja as linhas 5 a 7):<\/P>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>b<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>Histórico de manutenção:<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>b<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN><SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>br<\/SPAN> <SPAN class="punctuation token">\/><\/SPAN><\/SPAN>
{expression\/expr0}
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>br<\/SPAN> <SPAN class="punctuation token">\/><\/SPAN><\/SPAN><SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>br<\/SPAN> <SPAN class="punctuation token">\/><\/SPAN><\/SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>b<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>Histórico do Email:<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>b<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/PAN>br<\/PAN> <PAN class="punctuation token">\/><PAN><PAN>
<SPANTAG"token"attr-name"href"attr-value"{expression/expr1}"/>
<SPANTAG"token"imgalt"Email"height"50"src"http://icons.iconarchive.com/icons/iynque/ios7-style/1024/Mail-icon.png"width"50"/>
</a><spanclass=line-numbers-rows><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>O pop-up fica assim quando o usuário clica em um ponto (desculpe por misturar espanhol e inglês):

Quando o usuário clica no botão, isso criará um email se você tiver um aplicativo de email configurado na sua máquina:

Vamos nos aprofundar em como criar a expressão Arcade para obter as informações e estruturá-las de forma que crie este email. A parte de conectar a uma tabela relacionada e filtrar a tabela com base no ID do hidrante já foi explicada aqui: (
Usando funções FeatureSetBy no Arcade para detalhar outras camadas e tabelas) então não entrarei em detalhes. Usei a mesma função GetHistory, com uma pequena mas importante mudança na linha 13:<\/P>
Função <spanclass=tokenfunction>GetHistory</span>(hydrant_id) {
var tbl = FeatureSetByName($map, "Maintenance");
Console(tbl);
var sql = "COD_HIDRANTE = '" + hydrant_id + "'";
Console(sql);
var tbl_filtered = Filter(tbl, sql);
Console(Count(tbl_filtered));
if (Count(tbl_filtered) > 0) {
var history = "Por favor, encontre abaixo o histórico de manutenção para o Hidrante " + hydrant_id + ":";
for (var maintenance in tbl_filtered) {
var txt_date = Text(maintenance.Fecha_Mantenimiento, ' - (Y/MM/DD) ');
var txt_man = txt_date + maintenance.Mantenimiento;
history += "TextFormatting.NewLine" + txt_man;
}
} else {
var history = "Sem histórico para o Hidrante " + hydrant_id;
}
return history;
}
<spanclass=line-numbers-rows><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span</span><span)
Estou adicionando "TextFormatting.NewLine" como string e não como constante. Na verdade, essa string poderia ter qualquer conteúdo único, mas escolhi para fazer isso dessa maneira. Assim, a string resultante contém todo o histórico em uma única linha e o texto "TextFormatting.NewLine" será usado mais tarde para substituí-lo por algo que pode ser usado em uma URL e funcionará como nova linha no e-mail ("%0D%0A").
A outra parte da expressão é usada para chamar essa função e definir as outras partes do e-mail:
<SPAN class="keyword token">var</SPAN> hydrant_id <SPAN class="operator token">=</SPAN> $feature<SPAN class="punctuation token">[</SPAN><SPAN class="string token">"COD_HIDRANTE"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</SPAN> email <SPAN class="operator token">=</SPAN> <SPAN class="string token">"someone@someplace.com"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</SPAN> cc <SPAN class="operator token">=</SPAN> <SPAN class="string token">"other_one@someplace.com;other_two@someplace.com"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</SPAN> bcc <SPAN class="operator token">=</SPAN> <SPAN class="string token">"secret_person@someplace.com"</SPAN><SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</SPAN> subject <SPAN class="operator token">=</SPAN> <SPAN class="string token">"Histórico de manutenção do Hidrante "</SPAN> <SPAN class="operator token">+</SPAN> hydrant_id<SPAN class="punctuation token">;</SPAN>
<SPAN class="keyword token">var</span> body <span class="operator token">=</span> <span class="token function">GetHistory</span><span class="punctuation token">(</span>hydrant_id<span class="punctuation token">)</span><span class="punctuation token">;</span>
<SPAN class="keyword token">var</span> params <span class="operator token">=</span> <span class="punctuation token">{</span>cc<span class="punctuation token">:</span> cc<span class="punctuation token">,</span>
bcc<span class="punctuation token">:</span> bcc<span class="punctuation token">,</span>
subject<span class="punctuation token">:</span> subject<span class="punctuation token">,</span>
body<span class="punctuation token">:</span> body<span class="punctuation token">}</span><span class="punctuation token">;</span>
<Span class="keyword token">var</Span> url <Span class="operator token">=</Span> <Span class="string token">"mailto:"</Span> <Span class="operator token">+</Span> email <Span class="operator token">+</Span> <Span class="string token">"?"</Span> <Span class="operator token">+</Span> <Span class="token function">UrlEncode</Span><Span class="punctuation token">(</Span>params<Span class="punctuation token">)</Span><Span class="punctuation token">;</Span>
url <Span class="operator token">=</Span> <Span class="token function">Replace</Span><Span class="punctuation token">(</Span>url<Span class="punctuation token">,</Span> <Span class="string token">"TextFormatting.NewLine"</Span><Span class="punctuation token">,</Span> <Span class="string token">"%0D%0A"</Span><Span class="punctuation token">)</Span><Span class="punctuation token">;</Span>
<SPan clasS= "keyword toKen ">return </SPan > url<SPan clasS= "pUncTuation toKen ">;</SPan ><<EMOJI_0 > ><SPan clasS= "line-numbers-rows "><SPan ><EMOJI_1 > ></SPan ><SPan ><EMOJI_2 > ></SPan ><SPan ><EMOJI_3 > ></SPan ><SPan ><EMOJI_4 > ></SPan ><SPan ><EMOJI_5 > ></SPan ><SPan ><EMOJI_6 > ></SPan ><SPan ><EMOJI_7 > ></SPan ><SPan ><EMOJI_8 > ></SPan ><SPan ><EMOJI_9 > ></SPan ><SPan ><EMOJI_10 > ></SPan ><SPan ><EMOJI_11 > ></SPan ><SPan ><EMOJI_12 > ></SPan ><SPan ><EMOJI_13 > ></SPan ><SPan ><EMOJI_14 > ></SPan ></SpAN>Vamos explicar o que fazemos nesta segunda parte da expressão Arcade:
- Lemos o ID do hidrante na linha 1
- Definimos os e-mails para enviar o e-mail (incluindo 2 CC's e 1 BCC) nas linhas 2 a 4.
- O assunto é basicamente um texto incluindo a variável ID do hidrante
- O corpo é gerado usando a função GetHistory explicada acima
- Nas linhas 7 a 10 criamos um dicionário chamado params com as propriedades cc, bcc, subject e body e atribuímos os valores das variáveis cc, bcc, subject e body definidas nas linhas 3 a 6
- Na linha 12 usamos a nova função Arcade UrlEncode (lançada na versão 1.7 ) que codificará corretamente os parâmetros da URL
- Na linha 13 substituímos o texto "TextFormatting.NewLine " por um texto "%0D%0A ", que criará as novas linhas onde for necessário no corpo do e-mail. Se tivéssemos feito isso antes de usar o UrlEncode, isso teria convertido o texto em "%250D%250A ", provavelmente fazendo com que a nova linha não funcionasse.
Se você tiver alguma dúvida, por favor use o botão "Adicionar uma Resposta" para me avisar.
Código final usado está listado abaixo:
Função