如何使用字符串值查询实体引用对象?
QueryExpression query = new QueryExpression("entityName");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "14%");
" parentaccountid"这里基本上是类型entityreference。
EntityCollection results = crmService.RetrieveMultiple(query);
当我尝试获得结果时,我收到错误无法投射&它期待着GUID。
我知道这可能是不可能的,但我可能仍然错了。 有没有其他方法可以使用字符串查询实体引用对象?
其他信息:
有一个实体"机会",它有几个属性,名称为name,orderamount,parentaccountid等。
我在应用过滤器后调用服务如下:
QueryExpression query = new QueryExpression("opportunity");
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("name", ConditionOperator.Like, "14%");
FilterExpression childFilter = query.Criteria.AddFilter(LogicalOperator.Or);
childFilter.AddCondition("tmeic_proposalnumber", ConditionOperator.Equal, "XXXXXX");
EntityCollection results = crmService.RetrieveMultiple(query);
我按照以下方式分配结果:
DataTable dt = new DataTable();
dt.Columns.Add("CustomerName");
try
{
foreach (Entity item in results.Entities)
{
DataRow dr = dt.NewRow();
dr["CustomerName"] = item.Contains("parentaccountid") ? item.GetAttributeValue<EntityReference>("parentaccountid").Name : string.Empty;
dt.Rows.Add(dr);
}
}
我将此数据表绑定到windows窗体应用程序中的datagridview:
dgv.DataSource=dt;
现在,我想使用客户名称进行搜索。
但是当我添加过滤器时,它会抛出错误,因为它期待GUID。
query.Criteria.AddCondition("parentaccountid", ConditionOperator.Like, "14%");
我为客户名称分配了 GetAttributeValue(&#34; parentaccountid&#34;)。姓名。我的搜索参数只是名称,因为我在datagridview中显示名称而不是GUID。
但是在QueryExpression中它要求GUID。我如何实现这一目标?
您可以通过添加类型为EntityReferences&amp;的过滤器来提供我们查询的任何链接吗?结果是从datagridview绑定的吗?
答案 0 :(得分:3)
您需要过滤关联的name
实体的account
属性。
将account
实体加入opportunity
实体,然后像这样应用ConditionExpression
:
var query = new QueryExpression("opportunity");
LinkEntity link = query.AddLink("account", "parentaccountid", "accountid");
link.AddCondition("name", ConditionOperator.BeginsWith, "14");
答案 1 :(得分:2)
虽然看起来我们运气不好让“喜欢”运算符将字符串与动态GUID进行比较,但至少有几种可能的解决方法:
这是我在工作流程中使用的代码,它完全符合我的描述(即将GUID填充到文本字段中)。它将输出参数设置为GUID,然后工作流的下一步将该值填充到字段中。
public partial class GetGuid : BaseWorkflow
{
[Output("Entity Id")]
public OutArgument<string> EntityId { get; set; }
protected override void ExecuteInternal(LocalWorkflowContext context)
{
EntityId.Set(context.CodeActivityContext, context.WorkflowContext.PrimaryEntityId.ToString());
}
}
请注意,虽然“喜欢”操作符不适用于GUID,“大于”和“小于”操作,所以这样的操作:
<fetch>
<entity name="account" >
<attribute name="accountid" />
<attribute name="name" />
<filter type="and" >
<condition attribute="accountid" operator="gt" value="14000000-0000-0000-0000-000000000000" />
</filter>
</entity>
</fetch>
答案 2 :(得分:1)
parentaccountid 是Lookup Property。
LinkEnitity只能应用于其他实体。
过滤的简便方法是在属性末尾添加名称。
query.Criteria.AddCondition("parentaccountidname", ConditionOperator.Like, "%In%");
感谢Dave,请参阅Q&A