我正在实验Dynamic CRM示例页面上的示例CalculatePrice。 而且,我很难理解如何以良好的方式获得产品和捆绑商品。
我想尝试做的是从具有productstructure属性和producttypecode的订单中获取产品。但是,无论我怎么尝试,我都会收到错误消息。字典中没有给定的键。
以下查询应根据productID从salesorder中查找productID
QueryExpression query = new QueryExpression("salesorderdetail");
query.ColumnSet.AddColumns("quantity", "salesorderispricelocked", "priceperunit", "producttypecode", "_productid_value");
query.Criteria.AddCondition("salesorderid", ConditionOperator.Equal, entity.Id);
QueryExpression query2 = new QueryExpression("product");
query2.ColumnSet.AddColumns("productstructure", "productnumber" , "productid");
query.Criteria.AddCondition("productid", ConditionOperator.Equal, ec.Entities["_productid_value"]);
然后我尝试迭代对象列表,以查看它们是否具有产品结构及其产品类型代码
for (int i = 0; i < ec.Entities.Count; i++)
{
if (ec.Entities[i].GetAttributeValue<int>("producttypecode") == 6)
{ you are a product
if (ec.Entities[i].GetAttributeValue<int>("productstructure") == 3){ you are a bundle
这是我使用的示例代码的链接: https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/sample-calculate-price-plugin
答案 0 :(得分:0)
对于初学者来说,_productid_value
表示法是WebAPI访问查询字段的方式。要使用SDK的后期绑定范例访问productid
,请使用:
myEntity["productid"]
或
myEntity.GetAttributeValue<Guid>("productid")
或
myEntity.GetAttributeValue<EntityReference>("productid")
。
除此之外,由于Product是对OrderDetail的查找,因此使用几个LinkEntity对象,您只需一次查询就可以摆脱。
我可能会使用LINQ并执行以下操作:
private void getProducts(Guid salesOrderId)
{
using (var context = new Microsoft.Xrm.Sdk.Client.OrganizationServiceContext(svc))
{
var query = from od in context.CreateQuery("salesorderdetail")
join so in context.CreateQuery("salesorder")
on od.GetAttributeValue<Guid>("salesorderid") equals so.GetAttributeValue<Guid>("salesorderid")
join p in context.CreateQuery("product")
on od.GetAttributeValue<Guid>("productid") equals p.GetAttributeValue<Guid>("productid")
where od.GetAttributeValue<Guid>("salesorderid").Equals(salesOrderId)
select new
{
OrderDetailId = od.GetAttributeValue<Guid>("salesorderdetailid"),
ProductId = od.GetAttributeValue<EntityReference>("productid"),
Quantity = od.GetAttributeValue<decimal?>("quantity"),
IsPriceLocked = so.GetAttributeValue<bool?>("ispricelocked"),
PricePerUnit = od.GetAttributeValue<Money>("priceperunit"),
ProductTypeCode = od.GetAttributeValue<OptionSetValue>("producttypecode"),
ProductStructure = p.GetAttributeValue<OptionSetValue>("productstructure"),
ProductNumber = p.GetAttributeValue<string>("productnumber")
};
var results = query.ToList();
var products = results.Where(e => e.ProductStructure.Value == 6).ToList();
var bundles = results.Where(e => e.ProductStructure.Value == 3).ToList();
}
}
请注意,局部变量results
,products
和bundles
是匿名类型。您可以遍历并访问每个对象的属性,但是也很有可能要将它们强制转换为真实类的实例。