我想在我的 Dynamics CRM 2011 解决方案中编辑电子邮件模板。
我将在表单中添加一个组合框,允许用户决定电子邮件应该是什么分类,例如。“A”、“B”或“C”
这有助于我们的电子邮件网关知道在归档等方面如何处理某些邮件。此外,设置标题将使用户(收件人)更难解密(降低分类),如果我们只是推动分类,这很容易做到在主题行中(是的,我知道我们仍然容易被复制和粘贴,但请尝试告诉我的客户)。
就在发送电子邮件之前,有一个事件可以让我获取邮件项目并添加邮件标题,还可以操作主题行或其他一些可编辑字段等内容。
我编写了一个 Outlook 加载项,它在发送时运行此代码,并且基本上想知道我应该将类似代码放在 Dynamics 中的什么位置。
private Dictionary<string, List<string>> _classifications;
private const string ProtectiveMarkingSchemaName = "http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/X-Protective-Marking";
private const string Version = "0.1";
private const string Namespace = "xyz.com";
void ApplicationItemSend(object item, ref bool cancel)
{
// GUARD
if (!(item is MailItem)) return;
if (ClassificationDropDown.SelectedItem == null ||
String.IsNullOrEmpty(ClassificationDropDown.SelectedItem.Label))
{
cancel = true;
return;
}
// CURRENT ITEM
var mailItem = (MailItem)Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;
// PREPARE MARKING
var origin =
Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;
var classification = new StringBuilder();
classification.AppendFormat("SEC={0}", ClassificationDropDown.SelectedItem.Label);
if (DisseminationDropDown.SelectedItem != null)
{
if (!String.IsNullOrEmpty(DisseminationDropDown.SelectedItem.Label))
{
var cat = DisseminationDropDown.SelectedItem.Label;
classification.AppendFormat(", CAVEAT={0}", cat);
}
}
// FILTHY HACK
if (mailItem.Subject == null)
{
mailItem.Subject = " ";
}
// FIND OLD MARKINGS
var start = mailItem.Subject.IndexOf('[');
var end = mailItem.Subject.LastIndexOf(']');
if (end - start > 0)
mailItem.Subject = mailItem.Subject.Remove(start, (end - start) + 1);
// APPLY MARKING
mailItem.Subject = String.Format("{0} [{1}]", mailItem.Subject.TrimEnd(), classification);
mailItem.PropertyAccessor.SetProperty(
ProtectiveMarkingSchemaName,
String.Format("[VER={0}, NS={1}, {2}, ORIGIN={3}]", Version, Namespace, classification, origin));
}