問題:我們使用CRM for Outlook插件自動登錄我們的支持電子郵件,但員工之間的內部電子郵件(其中一些包含敏感信息)也被記錄下來。Dynamics CRM 2011 - 通過插件創建實體
理想的解決方案:我試圖寫一個事件前(即「創建電子郵件」消息)插件來阻止內部郵件的自動記錄,但(顯然)停止從正在執行的消息的唯一途徑是在事件前階段拋出一個異常,但這總是導致在Outlook中顯示錯誤消息(我們顯然不能這樣做)。根據文檔,只有「InvalidPluginExecutionExeception」應該向用戶顯示消息,但情況並非如此,因爲所有異常都會在用戶的Outlook應用程序中產生錯誤消息。
潛在解決方案:還有一個「CheckPromoteEmail」消息(根據文檔)確定一個電子郵件是否應晉升爲CRM(I假設「提升到CRM」是指「使電子郵件實體在CRM中存儲「),但我無法找到任何可以讓我告訴CRM不推薦電子郵件的上下文。在我可以設置的上下文中是否埋藏了一些標誌,或者某種方式來發送電子郵件,以便CRM自己的邏輯決定不存儲它?
解決方法解決方案:我所知道的唯一的其他解決方案(中提到here)只是清除主題和電子郵件的內容,它已被創建之後,但我寧願從創建阻止電子郵件第一個地方比編輯或刪除它後的時間和資源浪費了創建電子郵件。
有沒有一種乾淨的方法來停止插件操作?或從任何地方?如果沒有,有人知道微軟爲什麼不提供這個功能嗎?在操作失敗的情況下,他們已經具備了強大的回滾功能,爲什麼他們不給我一種調用回滾的方式?
這裏是我的代碼的情況下,它是在回答我的問題有所幫助:
public class InternalEmailFilter : IPlugin
{
void IPlugin.Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext _context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
Entity e = (Entity)_context.InputParameters["Target"];
bool shouldStore = ShouldStoreInCRM(e);
if (shouldStore == false)
{
throw new Exception(); //attempting to stop the operation without an InvalidPluginExecutionException, but still results in error message to user
}
}
protected bool ShouldStoreInCRM(Entity e)
{
List<Entity> parties = new List<Entity>();
var atttributes = e.Attributes;
if (atttributes.ContainsKey("to") == true) parties.AddRange((atttributes["to"] as EntityCollection).Entities);
if (atttributes.ContainsKey("from") == true) parties.AddRange((atttributes["from"] as EntityCollection).Entities);
if (atttributes.ContainsKey("cc") == true) parties.AddRange((atttributes["cc"] as EntityCollection).Entities);
if (atttributes.ContainsKey("bcc") == true) parties.AddRange((atttributes["bcc"] as EntityCollection).Entities);
foreach (Entity p in parties)
{
if (p.LogicalName == "activityparty" && p.Attributes.ContainsKey("addressused") == true && p.Attributes["addressused"] != null)
{
if (p.Attributes["addressused"].ToString().ToLower().Contains("@ourdomain.com") == false)
{
return true; //someone connected in the email is not an employee, store the email
}
}
}
return false; //everyone was an employee, do not store
}
}
由於您的業務規則是記錄所有電子郵件,因此您沒有給Outlook用戶選擇跟蹤電子郵件的選項,您是否想過使用電子郵件路由器而不是Outlook來獲取電子郵件進入CRM? – Nicknow
是的,我們甚至在我們的CRM上安裝了路由器,但我們還沒有使用它。我們想開始使用隊列等,所以我認爲我們最終可能會朝這個方向前進。 – Richard