2014-07-21 62 views
1

是否有一個插件可以在FetchXML(甚至是SQL)報告在運行時上註冊的事件?動態CRM FetchXML報告事件插件到火

RetrieveMultiple和檢索不被解僱!

public void Execute(IServiceProvider serviceProvider) 
{ 
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
    // The FetchXML report does not fire the plugin on RetrieveMultiple 
    if (context.InputParameters["Query"] is FetchExpression) 
    { 
     IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
     IOrganizationService service = factory.CreateOrganizationService(context.UserId); 
     using (Context linq = new Context(service)) 
     { 
      // Do the work. 
     } 
    } 
} 
+0

是否火的時候,你做一個高級查找?這是註冊爲事件前還是事件後插件?你確認它設置爲同步執行嗎?你如何確認它沒有運行?你有沒有在第一行放置一個斷點,'IPluginExectionContext ...',來驗證它是否沒有被觸發? 由於沒有觸發CRM事件,因此在查詢SQL表時無法激活插件。當運行FetchXML報告時,應該觸發RetrieveMultiple事件。 – Nicknow

+0

你試過調試過嗎? – hkhan

+0

@Nick它會在我執行高級查找,刷新視圖或使用fetchXML查詢從控制檯應用程序執行時觸發。我已經確認在運行fetchXML報告時它沒有運行 - 通過在if之前創建一個帳戶並將Visual Studio附加到沙箱進程。報表運行時,RetrieveMultiple似乎不會觸發。 – Bvrce

回答

0

我有類似需要執行時運行報告的動作和最好的支撐。]這樣我可以找到觸發該報告通過Javascript運行做到這一點。

粗糙的過程是這樣的:

  1. 在適用的實體,創建功能區按鈕通過Javascript啓動報告。 (這篇文章給出了一個操作方法:Trigger a report from a ribbon button
  2. 作爲運行報表的Javascript函數的一部分,在報告之前更新相應記錄中的字段(例如「new_ReportRunOn」)(標準REST更新操作在此處工作)運行代碼。這裏的想法是簡單地運行報告將始終導致「new_ReportRunOn」字段首先更新。
  3. 讓您的插件通過僅應用「new_ReportRunOn」字段來過濾此字段上的更改。 (或者,你可能只是在JavaScript中有你的邏輯運行[如部分工序2],而不是更新的字段只是觸發一個插件。)

這也不是沒有缺點,但:

  • 您需要在「CRM報告」部分「隱藏」報告,因此它基本上只能通過實體表單訪問。如果用戶選擇瀏覽報告部分中的「所有報告」,它仍然可以在報告部分看到。如果一個「savy」用戶以這種方式發佈了報告,那麼它會繞過您的Javascript代碼來觸發插件。
  • 如果報告可以跨多個記錄運行(例如,用戶從實體網格視圖中選擇適用的記錄),則需要完成其他考慮/編碼。有可能處理這種情況,但根據你的問題它不會出現這將是用例。

我在2013年的安裝中已經有一段時間類似於這個過程,它實際上工作得很好。這並不理想,但完成了工作。