1

我使用從PowerShell的CRM SDK,試圖查詢鏈接到特定的帳戶名稱的合同,如果我對帳戶GUID查詢我得到的結果,但我想查詢對命名的EntityReference對象的內部,而不是GUID,例如(這工作正常):DynamicsCRM QueryExpression標準內EntityReference

$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名稱LIKE​​

我想:

$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#是確定以及

謝謝...

回答

3

不能使用QueryExpression標準EntityReference名。使用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")); 
+0

謝謝,你能否更新你的答案以符合我的標準,例如new_contract - > new_account的名字,所以它會更容易理解你的答案,並將它翻譯回powershell – Avshalom

+0

@Avshalom是的,我可以但你必須提供給我關於用於關係的細節。我也認爲「new_contract」和「new_account」是你的自定義字段。 將關係細節添加到您的問題 –

+0

'new_contract'是合同實體,'new_account'是'account'實體的自定義名稱,它有一個關係(但我不確定名稱)'name '我正在查找的字段是'帳戶'實體的名稱,我想查找帳戶名稱爲「somename」的合同 – Avshalom