2010-06-23 140 views
2

我在动态CRM 4中遇到了一些问题。我试图通过WPF应用程序中的crm-service更新价格和可用性,但这需要永久。长达半小时的产品约有6000种。它需要这么长时间?我能否以更快的方式做到这一点?通过CRM-webservice更新Dynamics CRM 4中的实体永远需要

QueryExpression query = new QueryExpression(); 
query.EntityName = EntityName.product.ToString(); 

BusinessEntityCollection entities = crmService.RetrieveMultiple(query); 

foreach (product crmProduct in entities.BusinessEntities.OfType<product>()) 
{ 
    crmProduct.price = new CrmMoney() { Value = 123M }; 
    crmProduct.stock = new CrmNumber() { Value = 123 }; 
    crmService.Update(crmProduct); 
} 

回答

0

试试你的CRM服务对象上设置这样的:

crmService.UnsafeAuthenticatedConnectionSharing = true; 

这使得服务只进行一次身份验证,然后使用相同的凭证。如果代码位于多个人将要使用同一个CRM服务的网站中,这将是一件坏事,因为未来的用户可以访问他们不应该访问的记录,但是,在WPF应用程序中只有一个用户,这不是一个问题。

Here's an article有更多的指标和一些更多的事情要考虑调整。它最初适用于CRM 3,但我们发现4中的相同设置仍可提升性能。

2

要提高性能,请尝试仅更新您真正要更新的字段。您的代码正在更新每个属性,因为您使用的是来自CRM的产品。当你这样做时,每一个插件都会被解雇,而且由于产品是一个核心的CRM实体,更新这个实体时可以触发更多的CRM逻辑。

尝试仅获取产品(productid)的主键并设置这两个字段并调用update语句。有了这个,在使用顺序过程时,您应该在标准硬件上每秒实现约100个请求。

要获得更多更新,请尝试在CRM服务器上运行该进程或使用并行处理。