2016-12-16 4 views
0

複数のBレコードが1つのAレコードにリンクする別のエンティティ(エンティティB)のリンクレコードを表示するサブグリッドを含むエンティティフォーム(エンティティA)があります。 エンティティBのレコードは、サブグリッドの「+」アイコンをクリックし、エンティティBのクイック作成フォームに記入して保存することで、エンティティAにリンクされます。保存後、新しく作成されたレコードBはレコードAの形式のサブグリッドにすべて表示されます。レコードを素早く作成した後のフィールド値のリフレッシュ

エンティティBのクイック作成フォームに入力する際に​​、金額を含むフィールドを入力する必要があります。保存した後、サーバーサイドプラグインは、エンティティAの特定のレコードにリンクされたエンティティBのすべてのレコードをフェッチし、すべての金額の合計を計算し、エンティティAのレコードのフォーム上の合計金額を入力します。期待どおりに、新しく計算された値がデータベースに格納されます。問題は、フォームAの合計金額を表示するフィールドが更新されないことです。それは、フォームがロードされたときと同じ量を表示し続け、フルページの更新後にのみ更新されます。しかし値は、エンティティBの新しいレコードがリンクされるたびに更新されます。 Aの値は、ページがリフレッシュされたときにその値が「新しい」値であることを示しています。

問題は、ユーザーがリフレッシュすることなく、行内にBの10個以上のレコードをリンクすることです。私たちはフィールドの更新を自動的にかなり多くするように要求しますが、これができるかどうかはわかりません:エンティティAのフォームのフィールドをリフレッシュ(/再レンダリング)することは可能ですか?エンティティBのイベント?私はこれがjavascriptで行われなければならないと仮定します。これは、フィールド値のクライアント側表現であり、フィールド値はすでにデータベースに正しく格納されているからです。

ありがとう!

答えて

0

助けてください。それはC#で行うことができます。ここで説明したロジックを使用してプラグインを作成できます。

このプラグインはPlugin Registration Toolを使用して登録されます。エンティティBに2つのステップを追加する必要があります。最初にCreateメッセージを作成し、2つ目にUpdateを追加します。 2番目のステップでは、amountフィールドの更新だけを選択するので、そのフィールドが更新されたときにのみトリガされます。

ロールアップフィールドを使用して行うこともできます。彼らはクリックで更新することができますが、それはあなたのために十分な場合は、12時間ごとに自動的に更新することができます。

私はJavaScriptを使ってそれを行う方法がわかりませんが、私はCRMで新しいので、他の人がそのタイプのソリューションで出現するかもしれない、私はそれを読むこともうれしいでしょう。

0

JavaScriptを使用すると、登録できるグリッドリフレッシュイベントがあります。そこからいくつかのオプションがあります。

  1. リフレッシュイベントでは、サーバーから値を取得し、フォームの値を更新するために休憩をトリガーできます。私はまた、クライアントがそれを更新することを望まないので、同様に分野のために提出を無効にするでしょう。
  2. Or-明示的にsaveを呼び出します。フォームが有効であることを確認するか、必要なフィールドをすべて変更して保存を行わないようにする必要があります。 saveイベントは、データベースから更新された値を返し、フォームを自動的に更新します。

前に電話をしたことがない人は、最初のオプションはおそらくもっと難しいですが、もっと良い選択です。

0

私が考えることができる最も簡単な解決策は、エンティティAのフォームOnLoadイベントに新しいハンドラを追加することによって値をポーリングすることです。

コードは、フィールドの内容を比較し、常にREST APIからのフィールドの値を読み取るためにsetTimeoutを採用するだろうし、それが変わったのかどうかは、非同期フルページのリロードせずにフォームを再読み込みするXrm.Page.data.refreshを呼び出します。

別の(もっと良い)別のオプション:より新しいバージョンにアップグレードします。 2015年のUpdate 1以降、サブグリッドにはOnLoadというイベントもあります。それを処理するだけで、サーバに繰り返しpingを実行することなく、Xrm.Page.data.refreshを呼び出すことができます。

関連する問題