我期待構建一個相當簡單的插件,用於計算剩餘使用的「單位」數量&。我有兩個自定義實體(Parent)bc_learninglicences &(Child)bc_llbalance,插件在創建bc_llbalance時觸發,另一個用於更新。
bc_llbalance:包含
bc_learninglicense(查一查場對父母entite bc_learninglicences/bc_name)
bc_units(單位由本記錄中使用)
bc_learninglicences:包含
bc_name
bc_unitsquantity(這是設置爲單位總數量)
bc_unitsused(這需要繼承的 「bc_llbalance」 「bc_units」)
bc_unitsremaining的總和(簡單bc_unitsquantity - bc_unitsused)
好所以我已經包含了我剛剛試圖找出如何讓bc_units用於繼承總和的代碼...客戶關係管理2011年:插件 - 獲取聲明,繼承兒童實體的總和
p.s我是新開發的CRM 2011,只有幾周/幾個項目經驗。
// Obtain the execution context from the service provider.
Microsoft.Xrm.Sdk.IPluginExecutionContext context (Microsoft.Xrm.Sdk.IPluginExecutionContext) serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));
//Extract the tracing service for use in debugging sandboxed plug-ins.
ITracingService tracingService =(ITracingService)serviceProvider.GetService(typeof(ITracingService));
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
// Obtain the target entity from the input parmameters.
Entity entity = (Entity)context.InputParameters["Target"];
IOrganizationServiceFactory serviceFactory =(IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
EntityReference a = (EntityReference)entity.Attributes["bc_learninglicense"];// ((EntityReference)targetEntity.Attributes["bc_learninglicense"]).Id;
if (entity.LogicalName == "bc_llbalance")
{
//fetchxml to get the sum total of estimatedvalue
string value_sum = string.Format(@"<fetch distinct='false' mapping='logical'
aggregate='true'><entity name='bc_llbalance'><attribute name='bc_units'
alias='units_sum' aggregate='sum' /><filter type='and'><condition
attribute='bc_learninglicense' operator='eq' value='{0}' uiname=''</filter></entity>
</fetch>", a.Id);
FetchExpression fetch = new FetchExpression(value_sum);
EntityCollection value_sum_result = service.RetrieveMultiple(fetch);
decimal TotalValue = 0;
// decimal TotalValue = 0;
foreach (var c in value_sum_result.Entities)
{
TotalValue = ((Decimal)((AliasedValue)c["value_sum"]).Value);
}
Entity llc = new Entity("bc_learninglicences");
llc.Id = a.Id;
llc.Attributes["bc_unitsused"] = TotalValue;
service.Update(llc);
}
}
所以我認爲這個問題與連接到父
實體「bc_learninglicences」,「bc_learninglicense」規定是查找場對孩子
實體「bc_llbalance」。
希望這是有道理的:基本上它不工作
我得到這個錯誤從CRM
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Unexpected exception from plug-in (Execute): LearningLicenses.LearningLicenses: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.Detail:
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
<ErrorCode>-2147220956</ErrorCode>
<ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>Unexpected exception from plug-in (Execute): LearningLicenses.LearningLicenses: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.</Message>
<Timestamp>2013-01-24T13:11:51.2373399Z</Timestamp>
<InnerFault i:nil="true" />
<TraceText>
[LearningLicenses: LearningLicenses.LearningLicenses]
[c1b35170-c563-e211-8c6d-b499bafd5e5b: LearningLicenses.LearningLicenses: Create of bc_llbalance]
</TraceText>
</OrganizationServiceFault>
任何建議或幫助該解決方案將greatfully讚賞。
感謝您隨時爲我提供幫助!
我也有一些jscritp負載的父窗體,它計算子實體的子網格的總和:這只是爲了澄清我需要實現的......這是不夠的,因爲父窗體只更新負載與插件bc_learninglicences將在創建bc_llbalance時進行更新。
function timeout(){
setTimeout(calcUnitTotal, 3000);
}
function calcUnitTotal(){
var grid = document.getElementById('Lines').control;
var ids = gridControl.get_allRecordIds();
var sum = 0;
var cellValue;
for(i = 0; i < ids.length; i++) {
var cellValue = grid.get_selectedRecords('bc_units')[i].value;
var number = Number(cellValue.replace(/[^0-9\.]+/g,""));
sum = sum + number;
}
Xrm.Page.data.entity.attributes.get('bc_unitsused').setValue(sum);
var val1 = Xrm.Page.getAttribute('bc_unitsquantity').getValue();
if(val1 != null && sum != null)
{
var result = val1 - sum;
Xrm.Page.data.entity.attributes.get('bc_unitsremaining').setValue(result);
}
else { alert(val1 + sum + "error: Values not passed for Remaining") }
}
可以重構catch塊 - 你是隱藏實際的錯誤。另外,如果你沒有對錯誤信息做任何事情,爲什麼要有一個catch塊呢?編輯:等你有兩個catch塊不做任何事。基本上,在我們可以幫忙之前,我們需要ex.Message的信息(或刪除catch塊並讓錯誤拋出) – glosrob
謝謝。我已經刪除了try&catch並且將「TotalValue」改爲了十進制而不是字符串。這給了我已經在這個崗位取代了舊的錯誤味精用新的錯誤... –
好吧,我改變了代碼的最後一位
-2147220991 的xmlns:d2p1 = 「http://schemas.datacontract.org/2004/07/System.Collections.Generic」/> 無效的XML。
llc.Attributes [「bc_name」] = a.Id;
llc.Attributes [「bc_unitsused」] = TotalValue;
service.Update(LLC);
我現在已經有了一個新的錯誤---
未處理的異常:
任何想法?也可以假設這是它可能失敗的地方? –