CRM:插件错误 - onCreate(<message>预期的非空Guid。</message>)

时间:2013-01-31 09:29:41

标签: c# plugins dynamics-crm-2011 crm

我有一个问题:错误......`创建新记录时

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);

有什么想法吗?谢谢

3 个答案:

答案 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);