我正在嘗試使用Microsoft Dynamics CRM SDK以編程方式更新記錄。 Unfortunatey,我拉紀錄後,更新的領域,並調用.Update()
方法對我的服務代理我得到以下異常:System.InvalidCastException:Microsoft Dynamics CRM遇到錯誤
[System.ServiceModel.FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>]
System.InvalidCastException: Microsoft Dynamics CRM has experienced an error.
Reference number for administrators or support: #B08B34D9"
System.ServiceModel.FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>
因爲我以前從未使用過CRM,我們有稀缺資源,目前在公司內部使用它,我不知道如何/從哪裏開始調查異常,或者從哪裏可以找到它。
該程序以下列方法開始。這只是查詢數據的匹配EIN號碼。如果沒有記錄,那麼我使用.Create()
方法。如果找到記錄,我們會更新Dynamics中當前存在的項目。
public string UpdateDynamics(AgentTransmission agt)
{
ConditionExpression condition = new ConditionExpression();
condition.AttributeName = "neu_taxid";
condition.Operator = ConditionOperator.Equal;
condition.Values.Add("012-3456787");
ColumnSet columns = new ColumnSet(true);
QueryExpression query = new QueryExpression();
query.ColumnSet = columns;
query.EntityName = "account";
query.Criteria.AddCondition(condition);
OrganizationServiceClient client = new OrganizationServiceClient();
EntityCollection collection = client.RetrieveMultiple(query);
if (collection.Entities.Count == 0)
{
_servicePoxy.Create(CreateAccount(agt));
}
else
{
foreach (Entity contact in collection.Entities)
{
//This throws the exception
_servicePoxy.Update(CreateAccount(agt, contact.Id));
}
}
return string.Empty;
}
下面是我用它來創建Entity
對象,我們傳遞給動力學的方法。數據從實體框架模型對象中提取並映射到相應的字段。
private Entity CreateAccount(AgentTransmission agt, Guid Id = new Guid())
{
_account = new Entity();
_account.LogicalName = "account";
_account.Attributes.Add("name", agt.AgencyName);
_account.Attributes.Add("telephone1", agt.BusinessPhone.Replace("(","").Replace(")", "").Replace("-", ""));
_account.Attributes.Add("address1_line1", agt.MailingStreet1);
_account.Attributes.Add("address1_city", agt.MailingCity);
_account.Attributes.Add("address1_postalcode", agt.MailingZip);
_account.Attributes.Add("neu_address1stateprovince", LookupStateCode(agt.MailingState));
_account.Attributes.Add("address1_addresstypecode", new OptionSetValue(1)); //1 for Mailing
_account.Attributes.Add("neu_channelid", LookupChannelId(agt.Channel));
_account.Attributes.Add("neu_appointmentstatus", new OptionSetValue(279660000));
_account.Attributes.Add("customertypecode", LookupCustomerCode(agt.RelationshipType));
_account.Attributes.Add("neu_taxid", UnobfuscateRef(agt.ReferenceNumber).ToString());
//If we're doing an update will need the GUID. Only use when Update is needed.
if (Id != Guid.Empty)
{
_account.Attributes.Add("accountid", Id);
}
return _account;
}
的.Create()
方法的工作,因爲它是應該,但是,所以我認爲這異常被隔離於accountid
GUID屬性我使用的更新。
有一點需要注意的是,您明顯從別處複製了一些代碼,因爲您檢索了帳戶記錄,但是您的foreach將其稱爲「contact」foreach(實體在collection.Entities中的聯繫人)''。雖然這會起作用,但它可能暗示您複製了其他部分,並導致您遇到的問題。我懷疑你的一個Lookup *輔助函數返回一個不匹配的數據類型。 – Filburt 2014-10-07 22:32:24
InvalidCastException是一個很大的提示,一個或多個屬性設置爲錯誤的類型 – 2014-10-08 04:09:54
雖然它可能是一個很好的提示...沒有關於什麼屬性設置不正確的上下文,但它實際上是無用的(並且非常令人沮喪)的消息。 – 2016-02-23 04:18:50