2012-04-04 91 views
0

我在尝试获取CRM2011合同的GUID时遇到问题。首先,我有一个创建实体记录的工作流程,它比启动插件更新合同。CRM 2011获取实体记录的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); 

然而,当我试图做到这一点:当我设置合同ID到一个新的GUID下面看到它正常工作,

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?这可能是一件非常愚蠢的事情,我希望有人能帮助我。

+0

哪行引发异常?哪本字典中没有关键字? – surfen 2012-04-04 16:10:52

回答

0

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

我已经想通了自己,我已经使用查询表达式来检索Id(GUID)和具体合同的数量。由于我将来会有很多合同,我相信这是获得Id的更好方式。

+0

嗨罗本,你能分享你如何使用查询表达式吗?我也需要同样的事情。 – Nirman 2013-10-24 09:48:19

0

试试这个:

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

我不认为在第一行的语法将工作: -

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

你可以做到这一点更简单地使用以下行: -

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

当你在创建契约后触发此事件(因此,Id是您正在创建的创建实体的Id e事件)。

在尽管检索实体,然后设置一个属性可以通过属性集合进行总体而言: -

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

这样获得一个'Entity'类型的实例会有一个非空的'Id'成员,所以我冒昧地更新了你的答案。我希望你会同意,如果没有,请免费删除更改。 – 2012-10-27 15:06:31

0

首先,这不是分配在CRM主键,只是让CRM是个好主意为你而做。 其次,也许你的插件适用于预先创建,并且预创建意味着该记录在数据库中尚不存在,但是如果您将该插件更改为发布,则可以获取新创建记录的GUID。

使用:

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

GUID contractId = myContract.Id; 
0
Guid getContract_id = context.PrimaryEntityId; 

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

相关问题