This example will show you most of what you will need so that you can customize it to your own needs. I will be dumping a few customer records to email with HTML formatting.
This post will build off of my previous post about properly sending emails from AX (http://alexondax.blogspot.com/2013/09/how-to-properly-send-emails-with-built.html)
After performing all of your email setup, go to Basic>Setup>Email Templates and create a new template (bottom section) under your desired email sender/language and choose under layout, XSLT. Click "Template" on the right and put in your XSL and save. (Note: I couldn't click save, I had to close the form and it allowed me to save):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:Table="urn:www.microsoft.com/Formats/Table"> <xsl:output method="html"/> <xsl:template match="/"> <html> <body> <xsl:for-each select="//Table:Record[@name='CustTable']"> <p> <xsl:for-each select="Table:Field"> <xsl:value-of select="@name"/> <xsl:text> : </xsl:text> <xsl:value-of select="."/> <br/> </xsl:for-each> </p> </xsl:for-each> </body> </html> </xsl:template> </xsl:stylesheet>
In my subject, I put "Customer: %AcctNum% - %AcctName%" so that I could demonstrate how you can still pass mappings.
Then here is a simple job to show how to generate and pass the XML so that it is formatted and sent:
static void Job10(Args _args) { SysEmailTable sysEmailTable = SysEmailTable::find('XML'); Map mappings; CustTable custTable; int i; ; while select custTable { if (i>=3) break; mappings = new Map(Types::String, Types::String); mappings.insert('AcctNum', custTable.AccountNum); mappings.insert('AcctName', custTable.Name); SysEmailTable::sendMail(sysEmailTable.EmailId, 'en-us', 'alex@fakeemail.com', mappings, '', custTable.xml(), // XML HERE false, 'admin', false); i++; } }
Hope this helps and as always, happy DAX'ing!