Nedávno jsem byl požádán, abych pomohl vytvořit odkaz na email v pop-up okně pro odeslání informací o souvisejících záznamech. Navazujíc na příklad o získávání historie údržby zveřejněný zde<\/A>, přidáme tlačítko, které odešle email s touto historií.<\/P><\/P>Odkaz mailto může obsahovat několik prvků:<\/P>email nebo emaily, na které se má mail odeslat<\/LI>volitelně CC a\/nebo BCC<\/LI>předmět<\/LI>a tělo zprávy<\/LI><\/UL><\/P>HTML, které použijeme pro tlačítko, je poměrně jednoduché. Skládá se z odkazu s mailto odkazem (expression\/expr1) a uvnitř tohoto odkazu je tlačítko (viz řádky 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>Historie údržby:<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>Emailová historie:<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> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/span>a<\/span> <SPAN class="attr-name token">href<\/span><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/span><SPAnclass=\"punctuation token\">\"<SPAnclass=\"punctuation token\">{expression/expr1}<SPAnclass=\"punctuation token\">\"</SPAnclass></SPAnclass></SPAnclass></SPAnclass> <SPAnclass=\"token tag\"><SPAnclass=\"token tag\"><SPAnclass=\"punctuation token\"><</SPAnclass>img<SPAnclass=\"attr-name token\">alt</SPAnclass>=<SPAnclass=\"attr-value token\">"Email"</SPAnclass> <SPAnclass=\"attr-name token\">height</SPAnclass>=<SPAnclass=\"attr-value token\">"50"</SPAnclass> <SPAnclass=\"attr-name token\">src</SPAnclass>=<SPAnclass=\"attr-value token\">"http:\/\/icons.iconarchive.com\/icons\/iynque\/ios7-style\/1024\/Mail-icon.png"</SPAnclass> <SPAnclass=\"attr-name token\">width</SPAnclass>=<SPAnclass=\"attr-value token\">"50"</SPAnclass> <SPAnclass=\"punctuation token\"> \/></SPAnclass> <SPAnclass=\"token tag\"><SPAnclass=\"token tag\"><SPAnclass=\"punctuation token\"><\/<SPAnclass>a</SPAnclass>></SPAnclass></SPAnclass><SPAnclass=\"line-numbers-rows\"><SPan></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span></SpAN><\/P>Pop-up vypadá takto, když uživatel klikne na bod (omlouvám se za kombinaci španělštiny a angličtiny):<\/P><\/P><\/P>Když uživatel klikne na tlačítko, vytvoří se email, pokud máte na svém počítači nastavenou emailovou aplikaci:<\/P><\/P><\/P>Pojďme se podívat, jak vytvořit Arcade výraz pro získání informací a jejich strukturování tak, aby vytvořil tento email. Část o připojení k související tabulce a filtrování tabulky podle ID hydrantu již byla vysvětlena zde: (Použití funkcí FeatureSetBy v Arcade pro průnik do jiných vrstev a tabulek<\/A>) takže nebudu zacházet do detailů. Použil jsem stejnou funkci GetHistory, s malou ale důležitou změnou na řádku 13:<\/P>Funkce <SPAN class="token function">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 = "Níže naleznete historii údržby hydrantu " + 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 = "Žádná historie pro hydrant " + hydrant_id; } return history; } <EMOJI_8></EMOJI_9></EMOJI_10></EMOJI_11></EMOJI_12></EMOJI_13></EMOJI_14></EMOJI_15></EMOJI_16></EMOJI_17></EMOJI_18></EMOJI_19></EMOJI_20></EMOJI_21></EMOJI_22></EMOJI_23></EMOJI_24></EMOJI_25></EMOJI_26> Přidávám "TextFormatting.NewLine" jako řetězec a ne jako konstantu. Ve skutečnosti by tento řetězec mohl mít jakýkoli unikátní obsah, ale já jsem si vybral dělat to tímto způsobem. Výsledný řetězec tedy obsahuje veškerou historii na jednom řádku a text "TextFormatting.NewLine" bude později použit k jeho nahrazení něčím, co lze použít v URL a co bude fungovat jako nový řádek v e-mailu ("%0D%0A").Druhá část výrazu slouží k zavolání této funkce a definování dalších částí e-mailu:var
<\/P>
Odkaz mailto může obsahovat několik prvků:<\/P>
HTML, které použijeme pro tlačítko, je poměrně jednoduché. Skládá se z odkazu s mailto odkazem (expression\/expr1) a uvnitř tohoto odkazu je tlačítko (viz řádky 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>Historie údržby:<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>Emailová historie:<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> <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/span>a<\/span> <SPAN class="attr-name token">href<\/span><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/span><SPAnclass=\"punctuation token\">\"<SPAnclass=\"punctuation token\">{expression/expr1}<SPAnclass=\"punctuation token\">\"</SPAnclass></SPAnclass></SPAnclass></SPAnclass> <SPAnclass=\"token tag\"><SPAnclass=\"token tag\"><SPAnclass=\"punctuation token\"><</SPAnclass>img<SPAnclass=\"attr-name token\">alt</SPAnclass>=<SPAnclass=\"attr-value token\">"Email"</SPAnclass> <SPAnclass=\"attr-name token\">height</SPAnclass>=<SPAnclass=\"attr-value token\">"50"</SPAnclass> <SPAnclass=\"attr-name token\">src</SPAnclass>=<SPAnclass=\"attr-value token\">"http:\/\/icons.iconarchive.com\/icons\/iynque\/ios7-style\/1024\/Mail-icon.png"</SPAnclass> <SPAnclass=\"attr-name token\">width</SPAnclass>=<SPAnclass=\"attr-value token\">"50"</SPAnclass> <SPAnclass=\"punctuation token\"> \/></SPAnclass> <SPAnclass=\"token tag\"><SPAnclass=\"token tag\"><SPAnclass=\"punctuation token\"><\/<SPAnclass>a</SPAnclass>></SPAnclass></SPAnclass><SPAnclass=\"line-numbers-rows\"><SPan></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span><Span></Span></SpAN>
Pop-up vypadá takto, když uživatel klikne na bod (omlouvám se za kombinaci španělštiny a angličtiny):<\/P>
Když uživatel klikne na tlačítko, vytvoří se email, pokud máte na svém počítači nastavenou emailovou aplikaci:<\/P>
Pojďme se podívat, jak vytvořit Arcade výraz pro získání informací a jejich strukturování tak, aby vytvořil tento email. Část o připojení k související tabulce a filtrování tabulky podle ID hydrantu již byla vysvětlena zde: (
Funkce <SPAN class="token function">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 = "Níže naleznete historii údržby hydrantu " + 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 = "Žádná historie pro hydrant " + hydrant_id; } return history; } <EMOJI_8></EMOJI_9></EMOJI_10></EMOJI_11></EMOJI_12></EMOJI_13></EMOJI_14></EMOJI_15></EMOJI_16></EMOJI_17></EMOJI_18></EMOJI_19></EMOJI_20></EMOJI_21></EMOJI_22></EMOJI_23></EMOJI_24></EMOJI_25></EMOJI_26>
Přidávám "TextFormatting.NewLine" jako řetězec a ne jako konstantu. Ve skutečnosti by tento řetězec mohl mít jakýkoli unikátní obsah, ale já jsem si vybral dělat to tímto způsobem. Výsledný řetězec tedy obsahuje veškerou historii na jednom řádku a text "TextFormatting.NewLine" bude později použit k jeho nahrazení něčím, co lze použít v URL a co bude fungovat jako nový řádek v e-mailu ("%0D%0A").
Druhá část výrazu slouží k zavolání této funkce a definování dalších částí e-mailu:
var
Pokud máte nějaké dotazy, použijte prosím tlačítko „Add a Reply“ a dejte mi vědět.
Konečný použitý kód je uveden níže:
Function
@XanderBakker this is very useful - thank you! I'm wondering if you have a way for handling single quotes in fields. We have a content_ field in our data that often includes single apostrophes. Unfortunately, when we click our mailto link from the pop-up, the content_ field will not populate past the '. For example, the content_ field value might be "Michigan's 16 presidential electors have cast their votes...etc." When you click the mailto html link, only "Michigan" will populate. As a temporary fix we have used:
var content = Replace($feature.content_, "'", "")
However, the grammar is not correct. Any suggestions?
Hi @RiannaAylward ,
Sorry for the delay in my reply, I was (and still am) on vacation.
First of all, I have noticed some problems with this arcade expression after an update was applied to ArcGIS Online (more than a year ago), so it might not work anymore.
However, the correct way of changing characters and create a valid URL is not using the Replace function, but the UrlEncode function as shown in the code. This function will replace any invalid characters by its valid representation in a URL: https://developers.arcgis.com/arcade/function-reference/text_functions/#urlencode
Hi @XanderBakker
This is super useful and I am trying to get it to work with a Survey123 feature edit workflow, where the URL opens automatically the associated feature in Survey123. However, I can't seem to get the globalid to be seen as part of the URL. I've tried a lot of variations at this point combining Arcade field cals as well as use of {globalid} directly in the mailto: field in the pop-ups and haven't had any luck -- do you have any suggestions?
Example of the issue:
I'm working in Enterprise 10.8.1.
Thank you!
@XanderBakker Hi Xander, thanks for posting this!
Do you know if the pop-up example picture links you provided are down? They don't seem to load for me so its a little difficult to follow the post in its entirety.
Přihlášení členové mohou přispívat, sledovat aktualizace a další. Nový zde? Zaregistrujte si bezplatný účet.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.