Skip to main content

D365 Calculate unitwise product quantity into Opportunity field using javascript

 

 function CalculateOpportunityProductQuantity(executionContext) {  
      var formContext = executionContext.getFormContext();  
      var opportunityRecordId = formContext.data.entity.getId().slice(1, -1);  
      var globalContext = Xrm.Utility.getGlobalContext();  
       // Retrive unitwise product quantity data  
   var fetchXml = "<fetch mapping='logical' >" +  
       "<entity name= 'opportunity' >"+  
           "<link-entity name='opportunityproduct' from='opportunityid' to='opportunityid' alias='opportunityprod' >"+  
           "<attribute name='quantity' />"+  
            "<filter>"+  
                "<condition attribute='opportunityid' operator= 'eq' value='" + opportunityRecordId + "' uiname='Will be ordering' uitype='opportunity' />"+  
            "</filter>"+  
            "<link-entity name='uom' from='uomid' to='uomid' alias='unitdata' >"+  
                "<attribute name='name' />"+                 
                "<attribute name='uomid' />"+  
                "<order attribute='name' />"+  
            "</link-entity>"+  
           "</link-entity>"+  
       "</entity>"+  
      "</fetch>";  
      fetchXml = "?fetchXml=" + encodeURIComponent(fetchXml);  
           Xrm.WebApi.retrieveMultipleRecords("opportunity", fetchXml).then(  
                     function success(response) {  
                          // Odata response value set into a json array  
                          unitwisequantitys = [];  
                           for (var i = 0; i < response.entities.length; i++) {                                            
                               unititem = {}  
                               unititem ["unitname"] = response.entities[i]["unitdata.name"];  
                               unititem ["quantity"] = response.entities[i]["opportunityprod.quantity"];  
                               unitwisequantitys.push(unititem);  
                          }    
                          // Quantity sum Group by Unitname                            
                          var helper = {};  
                          var groupbyunit = unitwisequantitys.reduce(function(r, o) {  
                           var key = o.unitname;  
                           if(!helper[key]) {  
                               helper[key] = Object.assign({}, o); // create a copy of o  
                               r.push(helper[key]);  
                           } else {  
                               helper[key].quantity += o.quantity;                            
                           }  
                           return r;  
                          }, []);  
                          // Get specific unit name quantity   
                          let maunitquantity = groupbyunit.find(o => o.unitname === 'MA');  
                          let qaunitquantity = groupbyunit.find(o => o.unitname === 'qm');  
                          // Set the quantity value   
                          formContext.getAttribute("qm_quantity").setValue(qaunitquantity.quantity);  
                          formContext.getAttribute("ma_quantity").setValue(maunitquantity.quantity);  
                     },  
                     function (error) {  
                          console.log(error.message);                            
                     }  
           );                 
 }  


Comments

Popular posts from this blog

C# run powershell script as administrator

Recently I was fetching a problem that I need to run a PowerShell script that will change TFS user Display name and SID. I was trying to run that script from C# that was not working due to TFS security update and TLS certificate. Using this code block I resolve the Issue. var newProcessInfo = new System.Diagnostics.ProcessStartInfo(); newProcessInfo.FileName = @"C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"; newProcessInfo.Verb = "runas"; // Define Run as administrator newProcessInfo.Arguments = script; //Define your powershell script newProcessInfo.UseShellExecute = false; newProcessInfo.RedirectStandardOutput = true; // This will enable to read Powershell run output newProcessInfo.RedirectStandardError = true; Process proces = System.Diagnostics.Process.Start(newProcessInfo); proces.WaitForExit(); // I want to read the output string from powershell window StringBuilder output = new StringBuilder(); output.Append("Started"); while (!proces.St

ASP.NET MVC razor SAP Crystal report

Crete a new project: Add a aspx Master Page Create a new folder Reports and 2 sub folder crystal & crystalviewer Now add a web form page in crystalviewer  folder. Add the master page namespace in your web form page. MasterPageFile ="~/Views/Shared/ReportSite.Master" Replace your web form by this code < asp : Content ID ="Content1" ContentPlaceHolderID ="ContentPlaceHolder1" runat ="server">      </ asp : Content > Now go to design mode of your web form drag & drop the crystal report viewer in your web form. After that your page will be look look like this. Replace the code: < CR : CrystalReportViewer ID ="EmployeeList" runat ="server"   HasCrystalLogo ="False"     AutoDataBind ="True"   Height ="50px"   EnableParameterPrompt ="false" EnableDatabaseLogonPrompt

mvc razor textboxfor change event change another textboxfor value

Based on value of Weight, Rate , CNF & AWB it will change the value of Freight , TTLCNF anfd TTLFright . Freight= Weight*Rate; TTLCNF  = Weight*CNF; TTLFright=  Freight+ TTLCNF  + AWB; @Html.TextBoxFor(model => model.Weight, new { onChange="return GetWight(this);"}) @Html.TextBoxFor(model => model.Rate, new { onChange="return GetWight(this);"})/Kg @Html.TextBoxFor(model => model.Freight, new {disabled = "disabled" , @readonly = "readonly" ,onChange="return GetTTLFright(this);"}) @Html.TextBoxFor(model => model.CNFPK, new { onChange="return GetCNFPK(this);"}) @Html.TextBoxFor(model => model.TTLCNF, new {disabled = "disabled" , @readonly = "readonly",onChange="return GetTTLFright(this);" }) @Html.TextBoxFor(model => model.AWB, new { onChange="return GetTTLFright(this);"}) and script <script> function GetW