Attenzione A Xrm.Page.Context.GetServerUrl

Questa funzione è molto utilizzata...

...per le chiamate REST.

Peccato che se il CRM è acceduto con un url differente (l'indirizzo IP, un alias o altro) lei risponde sempre con l'url inserito nell'IIS che è di solito il nome macchina.

A questo punto, quando si effettua una chiamata REST, il sistema "vede" che l'url di provenienza è differente da quello chiamato e risponde con un bel HTTP 401 unhautorized.

Per evitare ciò bisogna effettuare due azioni (la prima sempre, la seconda se il problema si presenta in parti di codice di cui non si posseggono i sorgenti):

Riscrivere la funzione incriminata in una propria libreria JS in modo da calcolare l'url da quello del chiamante. La funzione dovrebbe somigliare a quella riportata.

GetServerUrl: function() {
   var u1=window.location.host;
   var orgname=Xrm.Page.context.getOrgUniqueName();
   var vet=u1.split(".");
   var port="";
   if(window.location.port!=80) {
      port=":" + window.location.port.toString();
   }
   if(vet[0].toUpperCase()==orgname.toUpperCase()) { //ifd
      return window.location.protocol + "://" + window.location.host + port;
   }
   return window.location.protocol + "://" + windo.location.host + port + "/" + orgname;
}

Usare gli host name di IIS facendo puntare quindi il sito all'alias scelto (es.: http://crm.miaazienda.it).

 

Dettagli...