首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamicsCRM QueryExpression标准在EntityReference中

DynamicsCRM QueryExpression标准在EntityReference中
EN

Stack Overflow用户
提问于 2016-02-28 14:59:44
回答 1查看 1.6K关注 0票数 1

我正在使用来自PowerShell的CRM,试图查询一个链接到特定帐户名称的合同,如果我对Account GUID执行查询,就会得到结果,但是我想查询EntityReference对象中的名称,而不是GUID,例如(这很好):

代码语言:javascript
复制
$query = new-object Microsoft.Xrm.Sdk.Query.QueryExpression('new_contract')
$query.Criteria.AddCondition('new_account', [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, $AccountGuid)

上述结果如下:

代码语言:javascript
复制
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属性是:

代码语言:javascript
复制
Id            : dab2909d-6149-e411-93fc-005056af5481
LogicalName   : account
Name          : CustomerNameText
KeyAttributes : {}
RowVersion    : 
ExtensionData : System.Runtime.Serialization.ExtensionDataObject

我想为new_contract创建一个new_account名称的查询,比如CustomerNameText

我试过:

代码语言:javascript
复制
  $query.Criteria.AddCondition('new_account',([Microsoft.Xrm.Sdk.EntityReference].Attributes['new_account']).Name, [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Like, $AccountName)

但是它不起作用,得到以下错误:

代码语言:javascript
复制
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#也可以

谢谢..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-29 05:57:41

不能对QueryExpression名称使用EntityReference条件。对于EntityReference,您只能使用Guid

如果要按名称查询,可以在LinkEntity中使用QueryExpression。您必须使用LinkCriteria

代码语言:javascript
复制
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 of account。但首先您必须检索accountGuid by name。在这种情况下

代码语言:javascript
复制
  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中调用函数etc --但是我提供了c#代码,正如您所说的,如果在C#中使用它,然后按以下方式使用它:

代码语言:javascript
复制
$query = new-object Microsoft.Xrm.Sdk.Query.QueryExpression('new_contract')
$query.Criteria.AddCondition('new_account', [Microsoft.Xrm.Sdk.Query.ConditionOperator]::Equal, getAccountGuidByName("yourAccountName"));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35684063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档