2015-11-02 79 views
0

一直困擾着我一段時間的問題是,Microsoft CRM Dynamics不自動計算稅款。 CRM堅持讓用戶手動輸入稅額。首先,計算十進制數的20%是很痛苦的,其次,最重要的是,如果我們的銷售人員必須單獨打開每個報價產品,然後計算稅額,然後鍵入並保存記錄,他們會在銷售東西時慘敗。我正在嘗試開發一個插件,用於使用金額[「baseamount」]和任何手動計算「稅」字段的創建或更新消息,報價產品預先操作(實體邏輯名= quotedetail)折扣[「manualdiscountamount」]。CRM插件來計算稅收

基本數學稅=(baseamount - manualdiscountamount)/ 100 * 20

我似乎有麻煩的是,如果變量_tax被定義爲直接十進制數,表示30,該值是正確地傳遞給字段,但如果我嘗試使用另一個字段的值設置_tax值,則值保持爲0.00。我的繼承人代碼:

public void Execute(IServiceProvider serviceProvider) 
{ 

    // Sets the context for the plugin environment 
    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 

    // Required for tracing 
    ITracingService trace = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); 

    // Create empty entity variable 
    Entity entity = null; 

    // Check if the InputParameters property contains a target 
    if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
    { 
     // Obtain the target entity from the InputParameters 
     entity = (Entity)context.InputParameters["Target"]; 

     // If message type is not Create OR Update AND it is not a Quote Product, exit gracefully 
     if (context.MessageName != "Create" 
      || context.MessageName != "Update" 
       && context.PrimaryEntityName != "quotedetail") 
     { 
      return; 
     } 
    } 
    else 
    { 
     return; 
    } 

    try 
    { 
     // Used to access Data and Metadata for the platform 
     IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
     IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); 

     // Cast the 2 entity methods to access properties from entity retrived by context 
     QuoteDetail currentEntity = entity.ToEntity<QuoteDetail>(); 

     // Set the variables 
     int _taxPercent = 20; 
     decimal _amount = currentEntity.BaseAmount.Value; 
     decimal _manualDiscount = currentEntity.ManualDiscountAmount.Value; 
     decimal _preTaxAmount = _amount - _manualDiscount; 

     // Do the math and store in _tax 
     decimal _tax = _preTaxAmount/100 * taxPercent; 

     // Set Tax field to value stored in _tax 
     currentEntity.Tax = new Money(_tax); 

    } 

    catch (FaultException<OrganizationServiceFault> ex) 
    { 
     trace.Trace("Exception: " + ex.Message + " " + ex.StackTrace); 
     throw new InvalidPluginExecutionException("An error occured in the plugin.", ex); 
    } 
} 

我相信我的問題是,在創建報價產品中,.Values爲十進制變量沒有,因爲這是發生前置作業傳遞到上下文呢。

有沒有人有任何線索可以完成這項任務?我很驚訝MS離開了CRM。

這似乎是一個很大的問題。

編輯1:變量正確的語法是:

Money _amount = new Money(currentEntity.BaseAmount.Value); 

decimal _amount = currentEntity.BaseAmount.Value; 

這是因爲他們的錢場,但是,它似乎BaseAmount的值在0.00創建消息的預操作

編輯2:昨晚使用ITracingService調試了我的插件。我發現quotedetail實體也在創建消息後觸發更新消息。我仍然無法解決的問題是填充字段數據時,即Price Per Unit字段實際接收到從Produt實體傳入的數據時。我有這個工作。我的過程包括在PreCreate消息期間設置字段值和可爲空的對象值,獲取PreUpdate圖像並將其傳遞給在創建消息之後立即觸發的PreUpdate消息。

+0

decimal _taxPercent = 20.0;隨後適用舍入應用.... –

回答

0

好人,我有一個答案,有點 - 但我會發佈一個新的問題,爲下一個位。在此視頻的幫助下(https://www.youtube.com/watch?v=54Zibk9v338),我有一個工作插件 - 計算quotedetail實體的稅收字段。

我想我得到的是,當您將新產品添加到報價中時,創建消息觸發並將項目添加到窗體,然後更新消息應用這些值。我正在研究沒有更新消息的概念,因爲我沒有更新表單...

我需要的是一個步驟,在Create消息上觸發,首先設置像Tax Taxage(20)這樣的變量並初始化其他字段的變量,但接下來會觸發更新消息獲取值和設置稅收領域。

我現在所擁有的是一個計算的稅務字段,但如果我更改手動折扣金額字段,則不更新。如果我更改數量字段是奇怪的,因爲這兩個字段的代碼是相同的......但我會爲此發佈一個新問題。

我現在頭疼的人

+0

我認爲你遇到的問題是看到事情發生的地方。 1)創建,在這裏運行所有的東西,因爲你想在創建時計算稅額,如果它不這樣做,你有代碼的問題。 2)更新,您還需要在更新時運行代碼,因爲您可能會更改值。如果您更改手動折扣,您希望發生什麼以及實際發生了什麼? –

2

例如,如果沒有手動折扣,您可能會遇到問題。您是否嘗試過調試代碼以查看它崩潰的位置? 您還將遇到更新問題,因爲只有更改的字段位於屬性包中,您還需要檢查預映像。

+0

感謝您的評論。我意識到前映像的需求,但我還沒有進入開發階段。 –

+0

對不起,縮短答案。如果手動折扣大於0.00,if語句可能會運行?我只是通過調試閱讀,因爲該項目只是一個類庫:https://msdn.microsoft.com/en-us/library/aa291243(v=vs.71).aspx –

+0

我不認爲那麼創建和「小數變量的值尚未傳遞到上下文中」是問題所在。在創建時,表單中的所有值都會在上下文中傳遞,但是,如果您沒有提供任何稅款值,則可能存在問題。你可以有一個「decimal_taxpercent = currentEntity.Attributes.Exists(」new_taxpercent「)?currentEntity.new_taxpercent:0;」 或類似的東西。你有沒有在代碼上運行任何調試器來查看它爲什麼變成0? –