Google API und autocomplete für Adressfelder

17. Oktober 2017 11:39

Hallo zusammen,

eines vorab: ich bin eher neu auf dem Dynamics CRM (365) Gebiet.
Der Vertrieb möchte nun, dass die Adressfelder (z.B. im Lead) mithilfe von Google-Maps autoausgefüllt werden.
Nun habe ich noch nie mit einer API-Einbindung gewarbeitet und Javascript ist ebenfalls neu für mich.
Um einen Code zu erstellen, habe ich unten stehenden Code erzeugt, der aus vorgegebenen Werten die ansprechenden Felder füllt. Das funktioniert.
Doch ich habe Schwierigkeiten mit der API-Implementierung.
Kurze Zusatzinfo: Das CRM ist on-premise.
Ich würde mich sehr freuen, wenn mir jemand helfen könnte.

Schöne Grüße

Code:
var xoOurCompanyNamex = xoOurCompanyNamex || {};               
xoOurCompanyNamex.CityAutoComplete = xoOurCompanyNamex.CityAutoComplete || {}; 

xoOurCompanyNamex.CityAutoComplete.registerCityAutoComplete = function (fieldname) {   // Definition der register-Funktion
   if (Xrm.Page.context.client.getClient() == "Mobile") {                // Xrm = Clientseitiger Namespace des CRM
      // Auto-completion not supported in mobile clients
      return;
   }   
   var field = Xrm.Page.getControl(fieldname);                  // The parameter mentioned in the web ressource
   
   if (field != null) {
      // keyPress-Event registrieren -> Notification, wenn User tippt
      field.addOnKeyPress(xoOurCompanyNamex.CityAutoComplete.onCityKeyPress);             
      field.getAttribute().addOnChange(xoOurCompanyNamex.CityAutoComplete.cityOnChange); 
   }
   else {
      /
      Xrm.Utility.alertDialog("There is no field \"" +
        fieldname + "\" on the form.\n Please check autocomplete registration.");
   }
}

xoOurCompanyNamex.CityAutoComplete.onCityKeyPress = function (ext) {         
   
   var source = ext.getEventSource();     
   var attributeName = source.getName();   
   
   var userInput = source.getValue();     
   
   // only provide suggestions if user typed at least three characters
   if (userInput == null || userInput.length < 3) {
      source.hideAutoComplete();
      return;
   }
   
   
   
   var resultSet = {
      results: new Array(),
      commands: null
   };
   
   //
   // Just for the test:
   //
   resultSet.results.push({ id: "Köln", fields: ["Köln","Deutschland","NRW"] });   
   resultSet.results.push({ id: "Gelsenkirchen", fields: ["Gelsenkirchen","Deutschland","NRW"] });
   resultSet.results.push({ id: "Salt Lake City", fields: ["Salt Lake City","USA","Utah"] });
   resultSet.results.push({ id: "Hamburg", fields: ["Hamburg","Deutschland","Hamburg"] });
   resultSet.results.push({ id: "München", fields: ["München","Deutschland","Bayern"] });
   resultSet.results.push({ id: "Paris", fields: ["Paris","Frankreich",""] });
   
   source.showAutoComplete(resultSet);
}

xoOurCompanyNamex.CityAutoComplete.cityOnChange = function (ext) {
   var source = ext.getEventSource();
   var city = Xrm.Page.getAttribute(source.getName()).getValue();
   
   if (city != null || city.length > 0) {
            
      // Test:
      var country;
      var region;
      
      switch (city) {
         case "Köln":
            country = "Deutschland";
            region  = "NRW";
            break;
         case "Gelsenkirchen":
            break;
         case "Salt Lake City":
            country = "USA";
            region  = "Utah";
            break;
         case "Hamburg":
            country = "Deutschland";
            region  = "Hamburg";
            break;
         case "München":
            country = "Deutschland";
            region  = "Bayern";
            break;
         case "Paris":
            country = "Frankreich";
            region  = "";
            break;
         default:
            country = "Deutschland";
            region  = "";
         
      }
      
      
      Xrm.Page.getAttribute("address1_country").setValue(country);
      Xrm.Page.getAttribute("address1_stateorprovince").setValue(region);
      
      
      Xrm.Page.getAttribute("address1_country").setSubmitMode("always");
      Xrm.Page.getAttribute("address1_country").fireOnChange();
      
   }
}