問題タブ [soql]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Linq to Salesforce "SQL" プロバイダー
だから、私はこの新しいプロジェクトを持っています。私の会社では、SalesForce.com クラウドを使用して、日常業務に関する情報を保存しています。私の仕事は、とりわけ、このデータの CRUD 操作を既存の社内アプリケーション機能とよりシームレスに統合する新しいアプリケーションを作成することです。
Salesforce WSDL API の中心は、クエリ コマンドを文字列として受け取る一連の「query()」Web メソッドです。クエリの構文は SQL っぽいですが、完全ではありません (彼らはそれを SOQL と呼んでいます)。私は「魔法の文字列」が好きではないので、コードベースで Linq を使用し、サービスのラッパーで必要な SOQL クエリに IQueryable を解析したいと考えています。それは確かに可能です (L2E、L2Sql)、しかし近道があるかどうか知りたいです。別の方法 (古いアプリで使用されていた一般的なクエリごとの方法である可能性が最も高い)。汎用の SOQL パーサーの作成に成功すれば、今後のいくつかのアプリでそれを使用できるようになり、私はヒーローになります。
私が見ているオプションは次のとおりです。
- 既存の Linq2SOQL プロバイダーをもっと探してください (私の Google-fu はここで私を失敗させています。そうでなければ、単に 1 つもありません。唯一の .NET ラッパーは、あると便利なものとして Linq について言及しているだけです)。
- 式ツリー パーサーを構築します。少なくとも Select メソッドと Where メソッドの呼び出しをサポートする必要があり、ラムダを解析するか、メソッド本体を操作して、必要な操作とプロジェクションを取得する必要があります。これはかなり大規模な作業のように思えますが、私が言ったように、それは確かに可能です。
- Linq2Sql または同様の既存の Linq プロバイダーでサービスをラップします。これにより、十分に近いクエリ文字列を抽出し、洗練してサービスに渡すことができます。そこには何十人もいるに違いありません(立ち寄っただけの人はいませんが、知る限り)。
- Expression.ToString() (または Expression.DebugView) を呼び出し、その文字列を操作して SOQL クエリを作成します。それはもろく、(舞台裏で)醜く、私が明示的に探しているものだけをサポートしますが、先に進むことができる基本的な翻訳を提供します.
皆さんはどう思いますか?Linq パーサーの作成は、1 人の人間にとって 2 日以上の作業でしょうか? 既存の Linq プロバイダーが関与する行き詰まりのソリューションは、おそらくそれを行うでしょうか? 式の文字列を切り刻んで、そのようにクエリを作成するのはひどいことでしょうか?
編集:接地のためのカークに感謝します。基本的な SOQL パーサーでさえ、何をする必要があるかをさらに調べましたが、実行可能なスケジュールでアプリケーション コードを作成することは、私の範囲を超えています。たとえば、Select() メソッドのラムダから選択リストを作成するか、WSDL オブジェクトのすべての既知の列から選択リストを作成する必要があります。 . これをかなり大きな問題に変える可能性のある他の多くの「未知の未知」があると確信しています. Linq プロバイダーの作成の基本を示すいくつかのリンクを見つけました。それらはすべて単純化しようとしていますが、現時点では時間的に実現可能ではありません。今のところ、リポジトリを構築します。名前付きクエリをカプセル化する名前付きメソッドを使用します (書式設定可能なクエリ文字列の定数クラスは、メンテナンスで頭を悩ませる量を減らす必要があります)。完全ではありませんが、はるかに実現可能です。Linq2SOQL プロバイダーが社内またはオープンソースで軌道に乗った場合、リファクタリングできます。
Linq プロバイダーのリファレンスを探している他の人のために、私が見つけた役立つリンクを次に示します。
- Linq プロバイダーの構築
- チュートリアル: IQueryable LINQ プロバイダーの作成
- Linq: IQueryable プロバイダー シリーズの構築 - 17 部構成! <-- これは、長くて複雑ですが、本当に詳細な説明がたくさんあり、「初めての人」に適しています。
salesforce - SOQL結合クエリはsObjectを返しますが、フィールドは返しません。取得したIDの使い方は?
以下にSOQLがあり、sObjectのIDを含む結果が得られます。私の仮定は、クエリがSObjectのフィールドも返すことでした。たとえば、私のクエリstartDay__c
は、ShigotoShousaiオブジェクトのフィールドのような ""(日付)を取得しようとします。ただし、クエリの結果はsObjectインスタンスのIDにすぎません。
(親:ShigotoShousai
子:) ShigotoAssign
_
system.debug(result)出力
shigotoAssign_ c:{Id = a06500000067aNjAAI、ShigotoShousai _c = a055000000DlHnOAAV}、shigotoAssign_ c:{Id = a06500000067aNoAAI、ShigotoShousai _c = a055000000DlHnTAAV})
プロパティ""の代わりにShigotoShousai__csObjectのIDを取得しましたstartDay__c
。出力は次のようになると思いました:
しかし、クエリ結果はちょうど私にShigotoShousai__csobjectのIDを返しました:(
これで、ID値がSであることがわかりhigotoShousai__c
、そのフィールドにアクセスしたいので、次のようにしました。
そして、これは私にエラーを与えます:
次に、IDを使用してSObject(つまり、ShigotoShousai__c)を参照することはできないと考えました。
しかし、私はそのIDを持っています..どうすればアクセスできますstartDay__c
か?このIDを使用する方法はありますか?
concatenation - SOQLで文字列を連結することは可能ですか?
私は2005年のスレッドを読みましたが、SOQLは文字列の連結をサポートしていないと言われています。
それがサポートされているかどうか疑問に思っていますが、誰かがこれを行っています。
私は連結しようとしていますが、運がありません:(
以下は、指定された電子メールでレコードを検索しようとしているAPEXコードです。
レコードは実際にデータベースにありますが、何もクエリしません。デバッグは「row(0)」を表示します。これは、空が返されることを意味します。
私はconcatを間違った方法でやっていますか?
アップデート
一重引用符を追加する必要がない方法を見つけました。クエリを持つ文字列に対しても同じコロン変数を適用する必要があります。
これも機能し、WHERE句にDateTimeが含まれている場合は、DateTimeを一重引用符で囲むことができないため必要です。
salesforce - Salesforce SOQL クエリとタグ
Salesforce Web サービス API を使い始めたばかりですが、特定のタグを含む Account オブジェクトなど、すべてに対してクエリを実行する明確な方法がないことに驚いています。
特定のタグを含むすべてのオブジェクトを見つける最良の方法は何だと思いますか?
Account.id と AccountTag.id などの結合が関係していると思いますが、実際の調査にもかかわらず、この問題を解決する最善の方法がわかりません。
前もって感謝します!
更新: AccountTag から選択して、ItemId に基づいてアカウント オブジェクトを取得することもできると思いますが、タグは条件の一部に過ぎないアカウントでクエリを実行するのが理想的です。
salesforce - SELECT クエリを使用して、Salesforce.com から連絡先をダウンロードします。以下に示すように、「MALFORMED_QUERY」例外が発生しています
この選択クエリを使用していますが、何が問題なのかわかりません。
Id,Contact.FirstName,Contact.LastName,Contact.Title,Contact.Department,Contact.Birthdate, Contact.Phone,Contact.HomePhone,Contact.MobilePhone,Contact.OtherPhone,Contact.Fax,Contact.Email,Contact.MailingStreetを選択, Contact.MailingCity,Contact.MailingState,Contact.MailingCountry,Contact.MailingPostalCode,Contact.OtherStreet, Contact.OtherCity,Contact.OtherState,Contact.OtherCountry,Contact.OtherPostalCode,Contact.Description,Contact.Account.Name From Contact where strcmp ('%@',Id) = -1",lastcontactId
salesforce - SOQL で force.com データベースから単一のランダム行を要求するにはどうすればよいですか?
合計行数は 10k ~ 100k 行の範囲です。force.com で RAND() を使用できますか? 残念ながら、すべての行には一意の数値識別子がありますが、多くのギャップがあり、フィルタリングされたサブセットからランダムな行を選択したいことがよくあります。
これを行うための特に効率的な方法はないと思いますが、それはまったく可能ですか?
最終的にやりたいことは、テーブル (または特定のフィルター基準に基づくサブセット) からランダムに 1 行を抽出することだけです。
force.com でランダムな行を選択できない場合は、行をクエリして選択し、すべての行に連続した ID (1 ~ 1,035 など) を割り当ててから、その範囲内の乱数をローカルで選択できます。 349、そして行 349 を取得しますか?
salesforce - Salesforce / SOQL-子が与えられた場合、「トップレベル」の親アカウントを返す方法は?
子の最上位の親アカウントを見つける必要があるという問題があります。私ができる最善のことは、子供からフィルターをかけることです。
次に、最上位のアカウントを示すnullのparent.idが見つかるまで繰り返します。あまりエレガントではなく、「トップレベル」のアカウントを保証するものではありません。
しかし、セールスフォースではアカウント間で親子関係をたどることができないため、これは機能しません。誰かここに何か提案がありますか?
.net - サイトの「メモと添付ファイル」に対する Salesforce SOQL クエリ
基本的に、Web サービス API を使用して実行可能な 1 つの SOQL クエリが必要です。このクエリは、Salesforce Web UI のアカウント ページの [メモと添付ファイル] セクションに通常表示されるすべての NoteAndAttachment 項目を返します。これには、アカウント自体に関連付けられている N&A だけでなく、アカウントに関連するケース、商談、または連絡先に関連付けられている N&A も含まれます。Salesforce 自体はその情報を取得するのに問題はないようですが、SOQL の制限とデータ モデルの制限の間で、満足のいく解決策をまだ見つけていません。
これが私がこれまでに持っているものです:
{0} は .NET String.Format で使用するためのものです。これは、レコードを取得しているアカウント ID になります。この特定のクエリは、次の例外で失敗します。
これらはすべて基本的なシステム定義の関係であり、単数の「連絡先」も認識しなかったので、途方に暮れています。
他の解決策には、半結合のサブ選択 (2 つの制限があり、「OR」でそれらを結合することはできないため、ダイスはありません)、ネストされたサブクエリ (できません) などが含まれています。このクエリ言語の制限で終わります。UNION なし、限定されたサブクエリ、限定されたサブクエリの深さ、および NoteAndAttachment エンティティを直接照会することはできません。ウェブサイトに表示されているのと同じ方法でこれらのレコードを取得する方法が必要なだけですが、私は毎回イライラしています.
編集: 今のところ私の答えは、含まれている各オブジェクト タイプ (アカウント、連絡先、商談) の NotesAndAttachments プロパティをクエリし、Case から添付ファイルを取得して NotesAndAttachments として投影し、必要な情報を取得することです。このプロセスには 4 回の往復が必要であり、5 つのレコードの要約情報 (ノート本体またはファイル バイナリなし) に対して平均約 15 秒かかります。データの取得を非同期スレッドにプッシュすることで、取得時間を短縮できましたが、パフォーマンスはおそらく満足できるものではありません。よりパフォーマンスの高いものに取り組み続けますが、今のところ動作しています。
salesforce - SOQLクエリWHERE日付=30_days_ago?
このようなSOQLクエリを作成するにはどうすればよいですか?
これにより、エラーが発生します。
sql - 名前の一部として「」を使用したSQL/SOQLでの名前クエリ
shaquel o'Neilのように、アポストロフィが含まれている名前を検索する必要があるsoql/sqlクエリを作成する必要があります。問題は、where句がNeil部分をドープすることです。これは、検索条件の終わりと見なされるためです。
この状況をどのように処理するかについての提案はありますか?
ありがとう!