使用C#SDK查询针对Dynamics 365租户的产品/定价信息



我正在尝试在Dynamics 365租户(版本9.2.22101.170(和Microsoft.CrmSdk的版本9.0.2.46中查询产品相关信息。我最感兴趣的是通过产品编号查询产品以检索价格信息,但稍后我将介绍更多参数。以下是我尝试过的许多方法之一(我知道我暂时只预测名称,最终我会需要价格信息等(:

var cols = new ColumnSet(new String[] { "name" });
QueryByAttribute query = new QueryByAttribute("product");
query.ColumnSet = cols;
query.Attributes.AddRange("productnumber");
query.Values.AddRange("100002");
var results = service.RetrieveMultiple(query);
if (results != null)
{
var entities = results.Entities.ToList();
if (entities != null)
{
var productEnt = (Product)entities.FirstOrDefault();
Console.WriteLine(productEnt.Name);     
}
}

这是RetrieveMultiple调用返回的错误消息:

在MetadataCache中找不到名称为"product"、名称映射为"Logical"的实体。MetadataCacheDetails:ProviderType=动态,StandardCache=True,IsLoadedInStagedContext=False,Timestamp=8343791,MinActiveRowVersion=8343791

调用任何其他方法时都会返回相同的消息。很明显,问题不是查询或返回的列,而是";产品";。

果不其然,我正在使用下面的方法来获得实体名称列表,以及单词"产品";没有出现。我认为这可以解释错误信息。

public static EntityMetadata[] GetEntities(IOrganizationService organizationService)
{
Dictionary<string, string> attributesData = new Dictionary<string, string>();
RetrieveAllEntitiesRequest metaDataRequest = new RetrieveAllEntitiesRequest();
RetrieveAllEntitiesResponse metaDataResponse = new RetrieveAllEntitiesResponse();
metaDataRequest.EntityFilters = EntityFilters.Entity;
// Execute the request.
metaDataResponse = (RetrieveAllEntitiesResponse)organizationService.Execute(metaDataRequest);
var entities = metaDataResponse.EntityMetadata;
return entities;
}

这是权限问题吗?在查询之前,我需要做一些额外的加载吗?如何在Dynamics365租户中查询产品/定价相关信息?

我试着在网上搜索相关信息,但我惊讶地发现几乎没有任何与产品相关的信息。

您使用的是QueryByAttribute,而不是QueryExpression请尝试下面的查询,它会有所帮助。

// Define Condition Values
var query_productnumber = "100002";

// Instantiate QueryExpression query
var query = new QueryExpression("product");
query.Distinct = true;

// Add columns to query.ColumnSet
query.ColumnSet.AddColumns("productid", "name");

// Define filter query.Criteria
query.Criteria.AddCondition("productnumber", ConditionOperator.Equal, query_productnumber);
var results = service.RetrieveMultiple(query);
if (results != null)
{
var entities = results.Entities.ToList();
if (entities != null)
{
var productEnt = (Product)entities.FirstOrDefault();
Console.WriteLine(productEnt.Name);     
}
}

最新更新