7

部分一致に基づいてケースの所有者を取得しようとしています。部分一致に一致する最新のケースを選択します。

これは私が試みているクエリです:

SELECT User.CustomField__c 
FROM User 
WHERE User.Id IN (
    SELECT OwnerId 
    FROM Case 
    WHERE Case.CaseNumber LIKE '%1026' 
    ORDER BY Case.CreatedDate DESC LIMIT 1)

次のクエリは単独で機能しますが、サブクエリの一部としては適切ではないようです。

SELECT OwnerId 
FROM Case 
WHERE Case.CaseNumber LIKE '%1026' 
ORDER BY Case.CreatedDate DESC LIMIT 1

同様に、 をドロップしORDER BYLIMIT動作する場合:

SELECT User.NVMContactWorld__NVM_Agent_Id__c 
FROM User 
WHERE User.Id IN (
    SELECT OwnerId FROM Case 
    WHERE Case.CaseNumber LIKE '%1026')

SOQL サブクエリでは注文/制限クエリは許可されていませんか?

この問題を明確にするために、私が扱っているシナリオは次のようになります...

Salesforce 組織は、ケース番号の「表示形式」を構成できます。「4」桁を選択すると、次のようなケース番号が表示されます。

  • 0001
  • 0125
  • 1234
  • 33456

ケース番号を再構成して、上記のケース番号だけでなく、次のケース番号を取得することもできます...

  • 000001
  • 001234
  • 033456

人々がこの声明で混乱することを望んでいませんでしLIKEた。問題は、001234 と 1234 は異なるケースであるため、顧客が 1234 を提供し、2 つのレコードが見つかった場合、それらが最新のケースであると想定して開始したいと思います。

したがって、LIKEステートメントまたはIN次を含むステートメントを検討してください。('001234', '1234')

4

4 に答える 4

1

LIMITおよび/またはサブクエリで動作しないことを指定しているドキュメントはありORDER BYませんが、あなたが言及したのと同じエラーに遭遇しました。

ただし、SOQLドキュメントの参照関係と外部結合セクションと同様に、 Caseオブジェクトから開始してUserまで参照することで機能する場合があります。これがうまくいくかどうかはわかりませんが、試してみてください。

次に例を示します。

- 編集 -

SELECT OwnerId, Owner.CustomField__c FROM Case WHERE CaseNumber LIKE '%1026' ORDER BY CreatedDate DESC LIMIT 1

OwnerId はGroupまたはUserのいずれかを参照するポリモーフィック キーであるため、カスタム フィールドにアクセスできないことが判明しました。つまり、上記は機能しません。申し訳ありません。

これを回避するには、非常に複雑です。「ユーザー所有者」などと呼ばれるカスタム検索フィールドを作成する必要があります。Owner が User の場合、Userのルックアップ参照が格納されます(これは、 OwnerId の先頭を User ID プレフィックスである '005' と比較することで確認できます)。そのフィールドは、挿入後、更新後トリガーを使用して入力する必要があります。この新しいフィールドのすべての値は、既存のCasesに対してデータロードする必要があります。ただし、この新しい「ユーザ所有者」項目を取得すると、それを使用して SOQL を介してユーザのカスタム項目にアクセスできます。

于 2011-11-17T14:36:26.173 に答える
1

ORDER BYサブクエリからレコードを返さないため、サブクエリでは意味がありLIMITません。代わりに、サブクエリは、メイン クエリをフィルター処理するために使用される ID のリストを作成するだけです。

サブクエリ レコードが返されるようにサブクエリを使用する場合、これらの句は問題ありません。たとえば、これは機能します:

SELECT Name, 
    (SELECT FirstName, LastName FROM Contacts ORDER BY LastName LIMIT 10) 
FROM Account
于 2011-11-17T15:40:56.027 に答える
1

この質問が最初に尋ねられて回答されたときに利用できなかった SOQL の新機能を使用して、ケースからクエリを実行するアプローチが実行可能になったことを追加する価値があると思います (カスタム項目にアクセスできます)。

特に、TYPEOF 機能は、ポリモーフィック ルックアップを通じてタイプ固有のフィールドへのアクセスを提供します

この機能はまだ開発者プレビュー段階であることに注意してください。

SELECT 
  TYPEOF Owner
    WHEN User THEN CustomField__c
  END
FROM CASE
于 2014-04-23T17:24:57.910 に答える
0

クエリを次のように切り替えてみましたか?

SELECT OwnerId, (select id from user)
    FROM Case 
    WHERE Case.CaseNumber LIKE '%1026' 
    ORDER BY Case.CreatedDate DESC LIMIT 1
于 2012-09-24T14:31:09.150 に答える