CRM 2011获取实体记录的GUID(合同续订)

时间:2012-04-04 16:04:56

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

当我试图在CRM2011中获取合同的GUID时,我遇到了问题。首先,我有一个创建实体记录的工作流程,而不是触发插件来续订合同。当我将合同ID设置为新的GUID时,它工作正常,如下所示:

RenewContractRequest req = new RenewContractRequest();
req.IncludeCanceledLines = true;
req.ContractId = new Guid("1767AD4E-CAF4-E011-8D97-1CC1DEF1B5FF");
req.Status = 1;
RenewContractResponse resp = (RenewContractResponse)service.Execute(req);

然而,当我尝试这样做时:

Guid getContract_id = (Guid)((Entity)context.InputParameters["Target"])["contractid"];

RenewContractRequest req = new RenewContractRequest();
req.ContractId = getContract_id;
req.IncludeCanceledLines = true;
req.Status = 1;
RenewContractResponse resp = (RenewContractResponse)service.Execute(req);

我得到一个例外,即字典中没有给定的密钥,据我所知,它还没有识别我设置的GUID?这可能是我真正愚蠢的事情,我希望有人可以帮助我。

5 个答案:

答案 0 :(得分:2)

我认为第一行的语法不起作用: -

Guid getContract_id = (Guid)((Entity)context.InputParameters["Target"])["contractid"];

您可以使用以下行更简单地执行此操作: -

Guid getContract_id = (Guid)((Entity)context.InputParameters["Target"]).Id;

当您在创建合同后解雇此项目时(因此,Id是您正在启动事件的已创建实体的ID)。

一般而言,虽然检索实体然后设置属性可以通过属性集合执行: -

Entity myEntity = (Entity)context.InputParameters["Target"];
Guid myId = (Guid)entity.Attributes["myIdName"];

答案 1 :(得分:0)

试试这个:

var contract = ((Contract)context.InputParameters["Target"]);
Guid getContract_id = contract.ContractId;

答案 2 :(得分:0)

首先,在CRM中分配主键并不是一个好主意,只需让CRM为您完成。 其次,也许你的插件适用于预创建,预创建意味着数据库中的记录尚未存在,但如果你将插件更改为post,则可以获得新创建记录的GUID。

使用:

Entity myContarct= ((Entity)context.InputParameters["Target"]);

GUID contractId = myContract.Id;

答案 3 :(得分:0)

大家好,非常感谢你的帮助。

我自己已经弄明白了,我已经使用查询表达式来检索Id(GUID)和特定合同的编号。由于我将来会签订许多合同,我相信这是获得Id的更好方式。

答案 4 :(得分:0)

Guid getContract_id = context.PrimaryEntityId;

此外,如果您有理由在CRM中分配主键(实体ID),则不一定是个坏主意。