当我试图在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?这可能是我真正愚蠢的事情,我希望有人可以帮助我。
答案 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),则不一定是个坏主意。