![](/img/trans.png)
[英]Dynamics CRM 2016 Create and Qualify a Lead Programmatically C#
[英]Dynamics CRM 2016 c# use id of not yet existing entity
对于我的项目,我必须创建多个报价并向其中添加产品。
出于性能原因(大约5000个引号),我使用“ ExecuteMultipleRequest()”。
这是关于我所拥有的:
var quote = new Quote
{
QuoteNumber = "123",
Name = "test123",
PriceLevelId = new EntityReference(PriceLevel.EntityLogicalName, Pricelevel.Id),
CustomerId = new EntityReference(Account.EntityLogicalName, Customer.Id),
};
_requests.Requests.Add(new CreateRequest { Target = quote });
var quoteDetail = new QuoteDetail
{
QuoteId = new EntityReference(Quote.EntityLogicalName, quote.Id),
ProductId = new EntityReference(Product.EntityLogicalName, product.Id),
IsPriceOverridden = true,
PricePerUnit = new Money(20),
Quantity = Convert.ToDecimal(5),
};
_requests.Requests.Add(new CreateRequest { Target = quoteDetail });
我的问题是quote.Id。 我知道它是空的,直到服务器处理请求并创建报价。
有没有办法告诉服务器它应该使用quotes new id作为quotedetail?
还是我创建报价单然后创建所有详细信息的唯一方法?
如果必须这样做,该怎么做才能提高性能?
您可以更改代码以使用OrganizationServiceContext ,而不是显式发送CreateRequests,它可以在将对象的更改提交到CRM之前本地跟踪对象的更改。
使用OrganizationServiceContext时,可以使用AddRelatedObject添加一个对象并将其链接到另一个对象:
将一个相关实体添加到OrganizationServiceContext并创建一个链接,该链接定义单个请求中两个实体之间的关系。
您的最终代码将类似于以下内容:
using (var context = new OrganizationServiceContext(_serviceProxy))
{
var quote = new Quote
{
QuoteNumber = "123",
Name = "test123",
PriceLevelId = new EntityReference(PriceLevel.EntityLogicalName, pricelevel.Id),
CustomerId = new EntityReference(Account.EntityLogicalName, customer.Id),
};
context.AddObject(quote);
var quoteDetail = new QuoteDetail
{
ProductId = new EntityReference(Product.EntityLogicalName, product.Id),
IsPriceOverridden = true,
PricePerUnit = new Money(20),
Quantity = Convert.ToDecimal(5),
};
context.AddRelatedObject(quote, new Relationship("quote_details"), quoteDetail);
context.SaveChanges();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.