我有一个问题:错误......`创建新记录时
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Expected non-empty Guid.Detail:
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
<ErrorCode>-2147220989</ErrorCode>
<ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
<Message>Expected non-empty Guid.</Message>
<Timestamp>2013-01-31T09:23:30.4406111Z</Timestamp>
<InnerFault i:nil="true" />
<TraceText>
Code ...`将字段设置为值。我也试过了
Pline.Id = new Guid();
Pline.Id = a; //(a is a guid ref to parent record)
Entity Pline = new Entity("bc_packlines");
if (b.Attributes.ContainsKey("mins_sum"))
{
BlockMins = ((Decimal)((AliasedValue)b["mins_sum"]).Value);
}
Pline.Attributes["bc_packlinesid"] = Pline.Id;
Pline.Attributes["bc_pack"] = a;
Pline.Attributes["bc_type"] = "948110004";
Pline.Attributes["bc_minutespurchased"] = BlockMins;
Pline.Id = a;
service.Create(Pline);
有什么想法吗?谢谢
答案 0 :(得分:1)
其中一些有点令人困惑,尤其是
Pline.Attributes["bc_packlinesid"] = Pline.Id;
// ...
Pline.Id = a;
您不需要明确设置新实体的ID,因此请删除:
Pline.Id = a;
编辑:你也说a
是父记录的Guid - 那你如何/为什么要设置为另一条记录的PK?那不会是完整的。
其次,在这一行
Pline.Attributes["bc_packlinesid"] = Pline.Id;
您正在将字段bc_packlinesid
的值设置为空guid,因为您正在创建的记录的ID尚未设置。这意味着您正试图让实体引用自己?这对我来说听起来不对,但如果是的话,你需要在
var newId = service.Create(PLine)
像
这样的东西Pline.Attributes["bc_packlinesid"] = newId;
service.Update(PLine);
即使这是可能的,我也不确定CRM是否允许实体成为父子本身。
答案 1 :(得分:0)
修正了这个第一个编辑提取语句
<attribute name='productid' groupby='true' alias='productid' />
无论如何,每个新的bc_packlines基于以下内容: 然后......
productid = ((Guid)((AliasedValue)b["productid"]).Value);
BlockMins = ((Decimal)((AliasedValue)b["mins_sum"]).Value);
Entity Pline = new Entity("bc_packlines");
Pline.Id = productid;
谢谢:)希望这有助于某人
答案 2 :(得分:0)
您不应该设置记录的PK,CRM会创建它,因此您需要删除此
线
Pline.Id = a;
并创建与父实体的关系,您有其ID,并编写以下内容
码
Pline.Attributes["bc_packlinesid"]=new CrmEntityRefrence(Pline.EntityLogicalName,parentEntityID);