Dynamics 365邮件页面定制:获取收件人邮箱并插入自定义条码
Dynamics 365 邮件定制与收件人邮箱获取方案
1. 根据邮件收件人定制邮件页面添加自定义图片
要实现这个需求,核心流程是获取收件人邮箱→调用你的企业Web API生成定制条码→将条码图片插入富文本邮件,具体可以按以下步骤操作:
- 第一步:先获取邮件收件人的邮箱地址(具体实现我会在第二个问题里详细说明)
- 第二步:调用企业Web API生成条码图片
拿到邮箱后,通过AJAX请求你的Web API,传入邮箱或客户ID,获取返回的条码图片URL或者Base64编码。这里给你一个简单的示例代码:// 用fetch调用Web API获取定制条码 async function getCustomBarcode(email) { try { const response = await fetch('你的企业Web API地址', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: email }) }); const result = await response.json(); return result.barcodeUrl; // 假设API返回图片URL } catch (error) { console.error('获取条码失败:', error); return null; } } - 第三步:将条码图片插入富文本邮件正文
Dynamics 365的邮件正文是富文本字段(通常是description字段),你可以通过FormContext获取该字段的编辑器,然后插入图片:// 插入图片到邮件正文 async function insertBarcodeToEmail(email) { const barcodeUrl = await getCustomBarcode(email); if (!barcodeUrl) return; const formContext = Xrm.Page.getFormContext(); // 弹窗中可通过父上下文获取主表单的FormContext const emailBodyControl = formContext.getControl('description'); if (emailBodyControl) { // 构造图片HTML代码 const imgHtml = `<img src="${barcodeUrl}" alt="定制优惠券条码" style="width:200px;height:auto;">`; // 获取当前正文内容并追加图片 const currentBody = emailBodyControl.getValue() || ''; emailBodyControl.setValue(currentBody + imgHtml); } }
2. 获取邮件“To”字段中的收件人邮箱地址
邮件的“To”字段是活动参与者(ActivityParty)类型的Lookup字段,可能包含多个收件人,需要遍历获取每个收件人的邮箱。以下是两种场景的实现方式:
场景一:在邮件主表单直接获取(功能区按钮所在页面)
如果你的按钮在邮件主表单的功能区,直接通过FormContext获取“To”字段的数据:
function getRecipientEmails() { const formContext = Xrm.Page.getFormContext(); const toField = formContext.getAttribute('to'); const recipients = toField.getValue(); const emails = []; if (recipients && recipients.length > 0) { // 遍历每个收件人,调用Dynamics 365 Web API获取邮箱 recipients.forEach(recipient => { // 根据实体类型选择对应的邮箱字段:联系人/客户用emailaddress1,用户用internalemailaddress const selectField = recipient.entityType === 'systemuser' ? 'internalemailaddress' : 'emailaddress1'; Xrm.WebApi.retrieveRecord(recipient.entityType, recipient.id, `?$select=${selectField}`) .then(result => { const email = result[selectField]; if (email) { emails.push(email); // 这里可以调用插入条码的函数,比如给第一个收件人添加条码,或者批量处理 insertBarcodeToEmail(email); } }) .catch(error => { console.error('获取收件人邮箱失败:', error); }); }); } return emails; }
场景二:在弹出窗口中获取父表单的“To”字段数据
如果按钮点击打开的是自定义弹出窗口(比如用Xrm.Navigation.openDialog),需要在弹窗中通过父上下文获取主表单的“To”字段:
// 弹窗内的代码 function getParentFormRecipients() { // 获取父表单的FormContext const parentFormContext = window.parent.Xrm.Page.getFormContext(); const toField = parentFormContext.getAttribute('to'); const recipients = toField.getValue(); // 后续处理和场景一一致,遍历获取邮箱即可 }
内容的提问来源于stack exchange,提问作者user193116
相关产品推荐
相关产品推荐

