私たちの手順の 1 つは、ユーザーがビューを選択してからリボン ボタンを押すことで、関連するレコードを一括挿入できるようにします。フォームが保存され、フラグが設定され、プラグインが機能します。
ビュー セレクターを備えたサブグリッドを使用して、ユーザーがその場で独自のビューを選択または作成できるようにします。ビューが選択されると、結果の数 (提供されるのは lte 5k) が表示されます。
プラグインがまったく同じ fetchxml サーバー側 (userquery または savedquery の取得、次に取得 + FetchExpression) を実行すると、結果が変わります。異なる数のレコードを取得するだけでなく、いくつかのレコードも異なります。
この問題はタイムゾーンに関係していると結論付けました。一部のフィルタには、日付値とともに「on-or-after」演算子が含まれていました。例:
<filter type="and">
<condition attribute="modifiedon" operator="on-or-after" value="2011-01-01" />
<condition attribute="modifiedon" operator="on-or-before" value="2011-12-31" />
</filter>
プラグインは管理者として実行されました。プラグイン ユーザーを変更しても効果はありません。FetchExpression を使用して CRM からレコードを取得するときに、現在のユーザーのタイムゾーンが考慮されていないかのようです。
fetchxml 式がクライアント側とサーバー側で同じ結果を返すようにするにはどうすればよいですか?
おそらく関連: MSDN スレッド。
御時間ありがとうございます。
編集: Daryl の提案に従って、SQL トレースを実行しました。結果は不可解です。日付は、クライアント側のクエリ (CRM から実行される、つまり高度な検索) に対して正しくオフセットされます。これは、ユーザーのタイムゾーン設定を使用して fetchxml が正しく変換されることを意味します。これは、サーバー側の同じクエリでは発生しません。出力 SQL には、タイムゾーン オフセットのない「現状のまま」の日付フィルターが含まれます。クエリ実行コンテキストの起源に関係なく、同じ変換が発生したと想定しました。
編集 2:コードの非表示領域 (最後のデバッグ手段) のフラグにより、実行中のユーザーのコンテキストでプラグインがサービスをインスタンス化できませんでした。現在、すべてが正常に動作しています。お時間を割いてご協力いただき、誠にありがとうございました。