You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:00:19