Hello
i am trying to refresh a sub-grid when my script finishing updating relating records but the problem is my sub-grid refresh before all updates finish i have to refresh my sub-grid manually multiple times to see all my updates is there any way i can be sure that Xrm.WebApi.updateRecord finished executing in the server side, i know there is success call back function but it doesn't fulfill my need because it triggers after the request is finished not the execution in my server side then i came with another solution to delay my script using settimeout function but i don't think is consistent sometimes work and other don't here is an example from my code
function updateProducts(context){
var formContext = context.getFormContext();
var isDirty = formContext.data.entity.getIsDirty();
if(!isDirty){
Xrm.Utility.showProgressIndicator("Please wait...");
var result;
var myCollection = [];
var entityId = Xrm.Page.data.entity.getId();
entityId = entityId.replace("}", "").replace("{", "")
var lookupMetier = Xrm.Page.getAttribute("tool_metier").getValue();
var lookupPartenaire = Xrm.Page.getAttribute("msa_partnerid").getValue();
var nameMetier ;
var guidMetier ;
var entTypeMetier;
var namePartenaire ;
var guidPartenaire;
var entTypePartenaire;
if (lookupMetier != null)
{
nameMetier = lookupMetier[0].name;
guidMetier = lookupMetier[0].id;
guidMetier = guidMetier.replace("}", "").replace("{", "")
entTypeMetier = lookupMetier[0].entityType;
}
if (lookupPartenaire != null)
{
namePartenaire = lookupPartenaire[0].name;
guidPartenaire = lookupPartenaire[0].id;
guidPartenaire = guidPartenaire.replace("}", "").replace("{", "")
entTypePartenaire = lookupPartenaire[0].entityType;
}
parent.Xrm.WebApi.retrieveMultipleRecords("opportunityproduct", "?$select=opportunityproductid,tool_prix1&$filter=_tool_metier_value eq "+guidMetier+" and _tool_partenaire_value eq "+guidPartenaire+" and _opportunityid_value eq "+entityId+"").then(
function success(result) {
for (var i = 0; i < result.entities.length; i++) {
var tauxDeMarge = Xrm.Page.getAttribute("tool_tauxdemarge").getValue();
var tauxDevise = Xrm.Page.getAttribute("tool_tauxdevise").getValue();
var fraisDapproche = Xrm.Page.getAttribute("tool_fraisdapproche").getValue();
var prixDachat = result.entities[i].tool_prix1;
var remise = Xrm.Page.getAttribute("tool_remise").getValue();
var var0 = remise/100;
var var1 = 1-var0;
var var2 = 1+tauxDeMarge;
var var3 = (prixDachat*var1*var2)+prixDachat;
var data =
{
"tool_fraisdapproche": fraisDapproche,
"tool_tauxdemarge": tauxDeMarge,
"tool_tauxdevise": tauxDevise,
"tool_remise": remise,
"tool_prixdevente": var3,
}
Xrm.WebApi.updateRecord("opportunityproduct", result.entities[i].opportunityproductid, data)
}
},
function (error) {
console.log(error.message);
// handle error conditions
}
);
setTimeout(function(){
Xrm.Page.getControl("opportunityproductsGrid").refresh();
},10000);
Xrm.Utility.closeProgressIndicator();
}
else
{
var alertStrings = {confirmButtonLabel: "Save", text: "Please save before Update your products !" };
var alertOptions = { height: 190, width: 360 };
Xrm.Navigation.openAlertDialog(alertStrings,alertOptions).then(saveForm,errorCallback);
}
// Xrm.Utility.openWebResource("new_simple_modal", null, 250, 250);
/* var DialogOption = new Xrm.DialogOptions;
DialogOption.width = 500;
DialogOption.height = 620;
window.parent.Xrm.Internal.openDialog("/WebResources/tool_modalDialog", DialogOption, null, null, null);*/
}
function saveForm(){
Xrm.Page.data.save();
}
*This post is locked for comments
I have the same question (0)