2016-11-11 2 views
0

J'ai le dessous de l'exécution de JavaScript sur un de mes formes événement OnLoad: -JavaScript Se déclenche trop vite. Les objets non chargés

function calcServicePriceTotal() { 

    var grid = document.getElementById('ProjectServicesGrid'); 
    var ids = grid.control.get_allRecordIds(); 
    var sum = 0.00; 
    var cellValue; 

    for (i = 0; i < ids.length; i++) { 

    var cellValue = grid.control.getCellValue('iss_salesprice', ids[i]); 
    var number = Number(cellValue.replace(/[^0-9\.]+/g, "")); 
    sum = sum + number; 
    } 
    Xrm.Page.data.entity.attributes.get("ava_tempgrossvalue").setValue(sum); 
} 

Malheureusement, j'obtiens l'erreur suivante: -

"Error:'subGridOnload' is undefined"

Je crois que le script est mise à feu avant l'objet a eu le temps de charger, que puis-je faire pour ralentir la fonction? Il doit y avoir un moyen de surmonter cela, mais je suis loin d'être un expert JavaScript, donc je pourrais utiliser de l'aide.

Merci à l'avance

+0

Comment vous appellent cette fonction? – Rajesh

+0

Rajesh, Merci pour le montage. Je l'appelle normalement dans la fenêtre Propriétés du formulaire CRM de l'événement OnLoad de formulaires. – Powell21

+0

Y at-il un appel ajax dans 'grid.control.get_allRecordIds();'? – Pankaj

Répondre

0
function calcServicePriceTotal() { 
    if (document.getElementById("Services")) { 
     var grid = document.getElementById("Services").control; 
     var ids = grid.get_allRecordIds() 
     var sum = 0 
     for (i = 0; i < ids.length; i++) { 
      var cellValue = grid.getCellValue('iss_salesprice', ids[i]); 
      var number = Number(cellValue.replace(/\D/g, '')); 
      number = number/100; 
      sum = sum + number; 
     } 
     Xrm.Page.data.entity.attributes.get("iss_value").setValue(sum); 
    } 
    else { 
     setTimeout("calcServicePriceTotal();", 500); 
    } 
} 
+0

Vous devez utiliser 'setTimeout (calcServicePriceTotal, 500)' plutôt que d'inclure la fonction entre guillemets. Il appelle la fonction directement, plutôt que d'effectuer un 'eval' sur la chaîne – jasonscript