3

Dynamics CRMのアカウントとポートフォリオの間に1:Nの関係があります。つまり、各アカウントには複数のポートフォリオがあり、各ポートフォリオには特定のアセットがあります。

アカウントの「関連するすべてのポートフォリオのすべての資産」の合計を計算してアカウントフォームに表示するフィールドをアカウントフォームに作成しようとしています。

回避策として、アカウントごとにグループ化されたポートフォリオビューを作成しようとしましたが、ポートフォリオアセットを合計してアカウントレベルにロールアップしません。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

したがって、アカウントフォームで、この例ではアカウント資産の合計を25,000ドルと計算するテキストフィールドを作成しようとしています。

4

3 に答える 3

3
function setupGridRefresh() {
var targetgrid = document.getElementById("NAME OF SUBGRID");

// If already loaded
if (targetgrid.readyState == 'complete') {
    targetgrid.attachEvent("onrefresh", subGridOnload);
}
else {
    targetgrid.onreadystatechange = function applyRefreshEvent() {
        var targetgrid = document.getElementById("NAME OF SUBGRID");
        if (targetgrid.readyState == 'complete') {
            targetgrid.attachEvent("onrefresh", subGridOnload);
        }
    }
}
subGridOnload();
}

function subGridOnload() {
//debugger;
var grid = Xrm.Page.ui.controls.get('NAME OF SUBGRID')._control;
var sum = 0.00;

if (grid.get_innerControl() == null) {
    setTimeout(subGridOnload, 1000);
    return;
}
else if (grid.get_innerControl()._element.innerText.search("Loading") != -1) {
    setTimeout(subGridOnload, 1000);
    return;
}

var ids = grid.get_innerControl().get_allRecordIds();
var cellValue;
for (i = 0; i < ids.length; i++) {
    if (grid.get_innerControl().getCellValue('FIELD NAME LOWER CASE', ids[i]) != "") {
        cellValue = grid.get_innerControl().getCellValue('FIELD NAME LOWER CASE', ids[i]);
        cellValue = cellValue.substring(2);
        cellValue = parseFloat(cellValue);
        sum = sum + cellValue;
    }

}

var currentSum = Xrm.Page.getAttribute('DESTINATION FIELD').getValue();
if (sum > 0 || (currentSum != sum && currentSum != null)) {
    Xrm.Page.getAttribute('DESTINATION FIELD').setValue(sum);
}
}

私はこれをいくつかのソースからつなぎ合わせ、現在それを私のソリューションの1つとして使用しています。さらにサポートが必要な場合、または質問を読み間違えた場合はお知らせください。(ところで、このソリューションは、サブグリッドにエントリが追加または削除されたときに合計を変更する必要があるという前提に基づいています。これが要件でない場合は、RetrieveMultiple OData呼び出しをお勧めします。)

于 2013-03-22T18:03:28.673 に答える
2

Gap ConsultingのAutoSummaryを見てください。これは、コストに見合う価値があります。または、時間をかけて自分で作成してください。アカウントレコードには、次のたびに更新されるフィールドが必要です。

  • ポートフォリオレコードを作成する
  • ポートフォリオレコードの値を更新します
  • ポートフォリオレコードを削除する
  • あるアカウントから別のアカウントにPartfolioレコードの親を変更する

最初の2つは、ポートフォリオのonSaveイベントのワークフローまたはJavaScriptで簡単に実行できます。3番目はワークフローによってのみ実行でき、javascriptでは実行できません(私は思います)。最後の1つは、onSaveが一方を比較してからデクリメントし、もう一方をインクリメントできるように、アカウントルックアップの現在の値を格納するためにonLoadjavascriptが必要になります。4つすべてをプラグインで実行できます。

于 2013-02-08T15:41:30.333 に答える
2

これはすでに答えられていますが、私はあなたのためにプレートに2番目のオプションを置きます。North52のFormulaManagerもご覧ください。一定量の数式を無料で入手できるので、さらに費用効果の高いソリューションになる可能性があります。

更新 これに追加するには、フィールドが値を報告するためだけのものである(そしてデータベースに保存する必要がない)場合、物理フィールドとプラグインを使用するのではなく、集約されたFetchXmlクエリを実行するWebリソースを構築できます。結果の値を表示するだけです。

繰り返しますが、これはFormulaManagerがすぐに実行できることを私が知っていることです。自動要約を使用したことはありません。

于 2013-02-11T18:44:39.460 に答える