EntityReference 中的 DynamicsCRM QueryExpression 条件
DynamicsCRM QueryExpression Criteria inside an EntityReference
我正在使用 PowerShell 的 CRM SDK,尝试查询链接到特定帐户名称的合同,如果我对帐户 GUID 进行查询,我会得到结果,但我想查询 EntityReference 中的名称对象,而不是 GUID,例如(这很好用):
$query = new-object Microsoft.Xrm.Sdk.Query.QueryExpression('new_contract')
$query.Criteria.AddCondition('new_account', [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, $AccountGuid)
上面的结果是这样的:
Key Value
--- -----
createdby Microsoft.Xrm.Sdk.EntityReference
createdon 21/10/2014
modifiedby Microsoft.Xrm.Sdk.EntityReference
modifiedon 28/02/2016
modifiedonbehalfby Microsoft.Xrm.Sdk.EntityReference
new_account Microsoft.Xrm.Sdk.EntityReference
[...] [...]
new_account
属性是:
Id : dab2909d-6149-e411-93fc-005056af5481
LogicalName : account
Name : CustomerNameText
KeyAttributes : {}
RowVersion :
ExtensionData : System.Runtime.Serialization.ExtensionDataObject
我想为 new_contract
创建一个查询 new_account
Name LIKE CustomerNameText
我试过:
$query.Criteria.AddCondition('new_account',([Microsoft.Xrm.Sdk.EntityReference].Attributes['new_account']).Name, [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Like, $AccountName)
但它不起作用,出现以下错误:
Exception calling "RetrieveMultiple" with "1" argument(s): "Link entity with name or alias new_account is not found"
At line:2 char:5
+ $temp = $service.RetrieveMultiple($query);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FaultException`1
我希望我已经清楚了,但如果没有,请评论任何问题。
最好是Powershell代码,c#也行
谢谢...
您不能对 EntityReference
名称使用 QueryExpression
条件。使用 EntityReference
你只能使用 Guid
.
如果要按名称查询,可以在QueryExpression中使用LinkEntity
。您将不得不使用 LinkCriteria
var q = new QueryExpression();
q.EntityName = "new_contract";
q.ColumnSet = new ColumnSet();
q.ColumnSet.Columns.Add("new_contractid");
q.LinkEntities.Add(new LinkEntity("new_contract", "account", "new_account", "accountid", JoinOperator.Inner));
q.LinkEntities[0].Columns.AddColumns("accountid", "name");
q.LinkEntities[0].EntityAlias = "temp";
q.LinkEntities[0].LinkCriteria.AddCondition("name", ConditionOperator.Equal, "yourAccountName");
P.S如果上面的代码片段不适合你。而您想通过 accountName
检索。要做到这一点,请使用您现有的代码并使用 Guid
帐户。但首先你必须检索 accountGuid by name
。那样的话
public Guid getAccountGuidByName(string name)
{
QueryExpression accountQuery = new QueryExpression("account");
accountQuery.Criteria.AddCondition("name", ConditionOperator.Equal, "yourAccountName");
EntityCollection entCol = Service.RetrieveMultiple(accountQuery);
if (entCol.Entities.Count > 0)
{
return entCol.Entities[0].Id;
}
return Guid.Empty;
}
举个例子,我不知道如何在 powershell 中调用函数等,但我提供了 C# 代码,正如你所说,如果它在 C# 中就可以使用它如下所示:
$query = new-object Microsoft.Xrm.Sdk.Query.QueryExpression('new_contract')
$query.Criteria.AddCondition('new_account', [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, getAccountGuidByName("yourAccountName"));
我正在使用 PowerShell 的 CRM SDK,尝试查询链接到特定帐户名称的合同,如果我对帐户 GUID 进行查询,我会得到结果,但我想查询 EntityReference 中的名称对象,而不是 GUID,例如(这很好用):
$query = new-object Microsoft.Xrm.Sdk.Query.QueryExpression('new_contract')
$query.Criteria.AddCondition('new_account', [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, $AccountGuid)
上面的结果是这样的:
Key Value
--- -----
createdby Microsoft.Xrm.Sdk.EntityReference
createdon 21/10/2014
modifiedby Microsoft.Xrm.Sdk.EntityReference
modifiedon 28/02/2016
modifiedonbehalfby Microsoft.Xrm.Sdk.EntityReference
new_account Microsoft.Xrm.Sdk.EntityReference
[...] [...]
new_account
属性是:
Id : dab2909d-6149-e411-93fc-005056af5481
LogicalName : account
Name : CustomerNameText
KeyAttributes : {}
RowVersion :
ExtensionData : System.Runtime.Serialization.ExtensionDataObject
我想为 new_contract
创建一个查询 new_account
Name LIKE CustomerNameText
我试过:
$query.Criteria.AddCondition('new_account',([Microsoft.Xrm.Sdk.EntityReference].Attributes['new_account']).Name, [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Like, $AccountName)
但它不起作用,出现以下错误:
Exception calling "RetrieveMultiple" with "1" argument(s): "Link entity with name or alias new_account is not found"
At line:2 char:5
+ $temp = $service.RetrieveMultiple($query);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FaultException`1
我希望我已经清楚了,但如果没有,请评论任何问题。
最好是Powershell代码,c#也行
谢谢...
您不能对 EntityReference
名称使用 QueryExpression
条件。使用 EntityReference
你只能使用 Guid
.
如果要按名称查询,可以在QueryExpression中使用LinkEntity
。您将不得不使用 LinkCriteria
var q = new QueryExpression();
q.EntityName = "new_contract";
q.ColumnSet = new ColumnSet();
q.ColumnSet.Columns.Add("new_contractid");
q.LinkEntities.Add(new LinkEntity("new_contract", "account", "new_account", "accountid", JoinOperator.Inner));
q.LinkEntities[0].Columns.AddColumns("accountid", "name");
q.LinkEntities[0].EntityAlias = "temp";
q.LinkEntities[0].LinkCriteria.AddCondition("name", ConditionOperator.Equal, "yourAccountName");
P.S如果上面的代码片段不适合你。而您想通过 accountName
检索。要做到这一点,请使用您现有的代码并使用 Guid
帐户。但首先你必须检索 accountGuid by name
。那样的话
public Guid getAccountGuidByName(string name)
{
QueryExpression accountQuery = new QueryExpression("account");
accountQuery.Criteria.AddCondition("name", ConditionOperator.Equal, "yourAccountName");
EntityCollection entCol = Service.RetrieveMultiple(accountQuery);
if (entCol.Entities.Count > 0)
{
return entCol.Entities[0].Id;
}
return Guid.Empty;
}
举个例子,我不知道如何在 powershell 中调用函数等,但我提供了 C# 代码,正如你所说,如果它在 C# 中就可以使用它如下所示:
$query = new-object Microsoft.Xrm.Sdk.Query.QueryExpression('new_contract')
$query.Criteria.AddCondition('new_account', [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, getAccountGuidByName("yourAccountName"));