0

我在尝试获取 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?这可能是我正在做的非常愚蠢的事情,我希望有人能在这里帮助我。

4

5 回答 5

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"];
于 2012-04-04T16:23:56.593 回答
0

尝试这个:

var contract = ((Contract)context.InputParameters["Target"]);
Guid getContract_id = contract.ContractId;
于 2012-04-04T16:19:40.343 回答
0

首先,在 CRM 中分配主键不是一个好主意,让 CRM 为您完成。其次,也许您的插件在 Pre-creation 上工作,并且 pre-creation 意味着数据库中尚不存在该记录,但如果您将插件更改为 post 则您可以获得新创建记录的 GUID。

利用:

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

GUID contractId = myContract.Id;
于 2012-04-04T16:27:12.463 回答
0
Guid getContract_id = context.PrimaryEntityId;

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

于 2014-01-24T17:33:30.170 回答
0

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

我自己想通了,我使用查询表达式来检索 Id (GUID) 和特定合同的编号。因为我将来会有很多合同,所以我相信这是获得 ID 的更好方法。

于 2012-04-12T11:10:01.390 回答