一直困擾着我一段時間的問題是,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消息。
decimal _taxPercent = 20.0;隨後適用舍入應用.... –