Seguindo esta linha, segue um código, pequeno inclusive, que faz uma Totalização de Valores, buscando as informações em um SubGrid!
Para a execução do código, basta adicioná-lo no formulário, e chamá-lo no método OnLoad.
Importante adicionar os JScripts prontos da Microsoft, para execução de chamadas jQuery, sendo eles [jquery1.4.1.min.js] e [jqueryrestdataoperationfunctions.js].
Importante também adicionar o campo de moeda do CRM (TransactionCurrencyId), quando existir na tela do CRM algum campo do tipo moeda. Neste caso usaremos e o script abaixo preenche o campo automaticamente.
Estes arquivos podem ser encontrados no SDK do CRM (quando descompactado em qualquer diretório), no caminho [\SDK\samplecode\js\restendpoint\jqueryrestdataoperations\jqueryrestdataoperations\scripts].
Segue Script:
var timeOutVar;
function PrepareAddUpValue() {
var grid = document.getElementById('GRIDNAME');
if (grid == null)
{
// delay one second and try again.
timeOutVar = setTimeout(PrepareAddUpValue, 1000);
return;
}
clearTimeout(timeOutVar);
grid.attachEvent("onrefresh", AddUpValue);
}
function AddUpValue(){
var gridControl = document.getElementById("GRIDNAME").control;
var ids = gridControl.get_allRecordIds();
var new_total = 0.0;
for(var i = 0; i < ids.length; i++)
{
str_value = gridControl.getCellValue("NOME_COLUNA_GRID", ids[i]).replace("R$", "").replace(" ", "");
new_total += parseFloatString(str_value);
}
Xrm.Page.getAttribute("new_total").setValue(new_total);
Xrm.Page.data.entity.save();
}
function parseFloatString(str){
str = String(str);
var strNew = "";
for(var i=0; i < str.length; i++){
if (isNaN(parseInt(str.charAt(i))) == false) strNew +=str.charAt(i);
}
return parseFloat(strNew);
}
function SetCurrency(){
if (Xrm.Page.getAttribute("transactioncurrencyid") != null) return;
var filter = "?$select=TransactionCurrencyId,CurrencyName";
retrieveMultiple("TransactionCurrencySet", filter, retrieveMultipleCurrencyCompleted, null);
}
function retrieveMultipleCurrencyCompleted(data, textStatus, XmlHttpRequest){
if (data == null) return;
var idValue = data[0].TransactionCurrencyId;
var textValue = data[0].CurrencyName;
var thisEntityType = 'transactioncurrency';
Xrm.Page.getAttribute("transactioncurrencyid").setValue([{ id: idValue, name: textValue, entityType: thisEntityType }]);
}
SetCurrency();
Veja uma tela de exemplo. Note que, ao adicionar um novo registro, o Script é acionado, totalizando o valor em um campo do formulário. Isto acontece porque o Script atua no evento [OnRefresh] do SubGrid do CRM.