CRM 2011样本 - 帐号生成错误

时间:2012-06-21 14:45:09

标签: dynamics-crm-2011

我正在尝试编写我的第一个Dynamics Crm 2011插件。

因此我下载了CRM11 sdk并查看了插件示例。我终于安装了我的第一个插件并使用提供的工具进行了注册(对于我来说,至少对我来说这是一个非常陡峭的学习曲线。)

我从基础知识入手,编制了样本中提供的“帐号插件”并使用了注册工具。所有报告都已成功安装,但在创建新帐户时,生成的帐号根本没有显示。我最初认为插件没有正确安装,但注意到如果帐号已经存在,代码会抛出错误我设置了试图让插件引发错误。这是第一次工作,所以我很高兴安装是正确的。

在查看示例代码后,我遗失了生成的帐号如何保存回Dynamis Crm。

// An accountnumber attribute should not already exist because it is system generated.

if (entity.Attributes.Contains("accountnumber") == false)    
{    
    // Create a new accountnumber attribute, set its value, and add
    // the attribute to the entity's attribute collection.

    Random rndgen = new Random();  
    entity.Attributes.Add("accountnumber", rndgen.Next().ToString());    
}    
else     
{    
    // Throw an error, because account numbers must be system generated.    
    throw new InvalidPluginExecutionException("The account number can only be set by the system.");    
}

通过查看其他一些示例,我注意到一些其他代码似乎被调用来创建新实体。我对此进行了调整并将其复制到新的帐号代码中,并按照预期生成帐号。

IOrganizationServiceFactory serviceFactory  = (IOrganizationServiceFactory)

    serviceProvider.GetService(typeof(IOrganizationServiceFactory));

IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

service.Update(entity); // Originally - service.Create(entity);

这是示例代码中的错误还是我做错了什么?如果实体何时将更改提交到数据库,则不需要此代码?

1 个答案:

答案 0 :(得分:2)

刚刚解决了。您需要将此插件注册为“操作前”步骤。

这将教会我将注册工具保留为默认值。将其设置为“Pre-Operation”,在保存之前更改实体的设置。因此,您无需再次调用保存。