Marco's profile......Marco Valli's Blog...PhotosBlogLists Tools Help

......Marco Valli's Blog......

Internet, Tecnologia & Sharepoint!!

Marco Valli

Occupation
Location
Loading...
October 19

Google Maps & SharePoint

In questi giorni mi sono scontrato con un’esigenza particolare di un cliente, dovendo realizzare in sharepoint un database contenente informazioni su indirizzi, è nata l’esigenza di vedere effettivamente dove quei luoghi fossero, senza naturalmente dover aprire una nuova pagina e digitare manulamente l’indirizzo…

La soluzione poteva prevedere l’utilizzo di virtual earth oppure di google maps… dopo un primo esame, la scelta è ricaduta sul secondo candidato principalmente per due motivi:

  1. maggiore accuratezza nel ricercare le vie (e non sto parlando di paesini sperduti ma di Milano centro..)
  2. mappe notevolmente più aggiornate (passando a città un po’ più piccole l’aggiornamento risale anche a più di 5 anni fa… mentre Google ha un’aggiornamento di massimo 1,5/2 anni)

Per poter inserire la mappa nella pagina (nel mio caso ho modificato la DispForm.aspx della lista) è necessario inserire una dataview nel punto in cui si vuole vedere la mappa, io ho scelto di posizionarla sotto la form stessa, in modo che per raggiungere i pulsanti OK e Annulla non sia necessario effettuare uno scroll kilometrico…

Dopo aver inserito la dataview, bisogna limitare la visualizzazione della stessa al solo elemento nella pagina corrente, per ottenere questo, è sufficiente creare un nuovo parametro querystring (nome a scelta) il cui parametro si chiama ID, in questo modo al caricamento della pagina, dall’url viene recuperato l’ID che è sempre presente in qualsiasi form di sharepoint (NewForm, EditForm e DispForm).

Una volta creato il parametro, bisogna impostare il filtro sulla dataview in modo che il parametro appena creato sia uguale al valore ID (che viene recuperato e filtrato dalla dataview). In questo modo la dataview restituirà un solo risultato e, in seguito, una sola mappa.

Prima di procedere è necessario procurarsi un codice per utilizzare le api di google map, il codice si ottiene gratuitamente ma bisogna essere registrati con account Google; cliccando QUI arrivate alla pagina in cui inserire l’url del sito in cui si troverà la mappa di google, cliccando su Generate API Key, otterrete una stringa alfanumerica, senza la quale ad ogni caricamento della mappa verrà generato un avviso (anche se la mappa funziona correttamente…)

Adesso bisogna creare un file .xsl con questo codice:

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="
http://www.w3.org/1999/XSL/Transform" xmlns:ddwrt2="urn:frontpage:internal">
<xsl:output method="html" indent="no"/>
<xsl:template match="/" xmlns:ddwrt="
http://schemas.microsoft.com/WebParts/v2/DataView/runtime">
  <xsl:call-template name="dvt_1"/>
</xsl:template>
<xsl:template name="dvt_1">
  <xsl:variable name="Rows" select="/dsQueryResponse/Rows/Row" />
  <xsl:call-template name="dvt_1.body">
   <xsl:with-param name="Rows" select="$Rows" />
  </xsl:call-template>
</xsl:template>
<xsl:template name="dvt_1.body">
  <xsl:param name="Rows" />
  <script src="
http://maps.google.com/maps?file=api&amp;v=2&amp;key=<<GOOGLE API KEY>>" type="text/javascript">
  </script>
  <div id="xslmap" style="width:750px; height:400px">
  </div>

  <script type="text/javascript">
  function addLoadEvent(func) {
     var oldonload = window.onload;
     if (typeof window.onload != 'function') {
       window.onload = func;
     }
     else {
       window.onload = function() {
         oldonload();
         func();
       }
     }
  }    

        var point;
        var marker;
        var address;
        var htmladdress;

        var map = new GMap2(document.getElementById("xslmap"));
        map.setCenter(new GLatLng(51, -129), 4);
        map.checkResize();

        map.addControl(new GMapTypeControl());
        map.addControl(new GLargeMapControl());
        map.enableScrollWheelZoom();

        var geocoder = new GClientGeocoder();

  addLoadEvent(function() { map.checkResize(); });

       </script>
  <xsl:for-each select="$Rows">
   <xsl:call-template name="dvt_1.rowview" />
  </xsl:for-each>
  <script type="text/javascript">
        function showAddress(address) {
            if (geocoder) {
          geocoder.getLatLng(address, function(point) {if (!point) { var marker = new GMarker(new GLatLng(39.6,-98)); map.addOverlay(marker); marker.openInfoWindowHtml(address); } else { var marker = new GMarker(point); map.addOverlay(marker); marker.openInfoWindowHtml(address); } } );
        } else {
          var point = new GLatLng(39.6,-98);
          var marker = new GMarker(point);
          map.addOverlay(marker);
           marker.openInfoWindowHtml("Testing");
        }
     }    
      </script>
</xsl:template>
<xsl:template name="dvt_1.rowview">
  <script type="text/javascript">
        address = &quot;<xsl:value-of select="@Address" />&quot; + ", " + &quot;<xsl:value-of select="@City" />&quot;  + ", " + &quot;<xsl:value-of select="@State" />&quot;  + ", " + &quot;<xsl:value-of select="@ZipCode" />&quot;  + ", " + &quot;<xsl:value-of select="@Country" />&quot; ;     
       geocoder.getLatLng(  address,  function(point)  {  if (point)  {   var marker = new GMarker(point);  map.addOverlay(marker);  GEvent.addListener (   marker,   &quot;click&quot;,   function()  {   this.openInfoWindowHtml(<<TESTO DEL TOOLTIP>>);  }  );  }  }  );
      </script>
  </xsl:template>
</xsl:stylesheet>

Copiare questo codice in notepad e salvarlo sul desktop modificando l’estensione in .xsl naturalmente dovrete inserire la vostra API Key e dovrete inserire anche il testo che volete venga visualizzato nel tooltip che appare cliccando sul pin che viene generato sulla mappa..

Per recuperare le informazioni sull’indirizzo dalla dataview, bisogna inserire i valori della lista in uso, in questo caso io ho utilizzato il campo Address + City + State + ZipCode + Country , il nome dei campi viene recuperato grazie a questa stringa:

<xsl:value-of select="@NOME DEL CAMPO" />

Naturalmente bisogna utilizzare il vero nome del campo e non l’etichetta del campo stesso.. per conoscere il vero nome del campo, basta tentare di modificare il campo stesso e nell’url, ci sarà la querystring &field= che contiene il vero nome del campo.

Siamo arrivati al momento cruciale, cliccando su Attività comuni di Data View e poi su Proprietà visualizzazione dati, scegliamo il tab Origine dati XSLT, cliccando su sfoglia, selezionare il file xsl appena creato e fare click su OK, salvare la pagina (facendo attenzione a modificare la posizione del file che deve essere salvato nel sito stesso)

Se tutti i passaggi sono stati seguiti correttamente, dovreste trovarvi con una bella mappa che recupera i dati dalla vostra lista, effettua una ricerca ottenendo le coordinate del luogo e mette un bel pin sulla mappa.

Unico particolare che non sono riuscito a risolvere (in fondo NON sono un programmatore…) è la questione della centratura della mappa.. con questo stylsheet la centratura è fatta manualmente alla riga che riporta la funzione map.setCenter, sarebbe bello centrare automaticamente la mappa sul pin appena recuperato…. Se qualcuno ha idea di come fare mi faccia un colpo!!

 

Enjoy! :)

August 12

Windows 7: utilizzare un disco virtuale come un normale disco aggiuntivo

Comincia con questa piccola guida il mio viaggio con Windows 7 e le sue numerose novità….

In Windows 7 l’utilizzo delle macchine virtuali con il nuovo Virtual PC va oltre l’utilizzo standard, le macchine virtuali possono infatti condividere applicazioni con il sistema host in maniera semplice e trasparente… Questa guida si concentra però sui dischi virtuali utilizzati dalle virtual machine, in 7 è possibile utilizzare questi dischi come se fossero normali dischi fissi collegati con il sistema, con tutti i vantaggi che ne conseguono (possibilità di esportare/importare file dalla/nella virtual machine senza doverla per forza accendere e senza passare da un secondo sistema operativo… ecc.)

image

Per cominciare andiamo alla gestione disco

image

Aprendo il menù Azioni, vedremo comparire l’opzione Collega VHD (e anche Crea VHD…)

E’ sufficiente selezionare il disco desiderato..

image image

 

E il disco comparirà magicamente nell’elenco dei dischi…

E’ necessario inizializzarlo..

E poi procedere alla creazione di una nuova partizione..

image image  image

 

Dopo pochi secondi il disco sarà pronto per essere utilizzato.. L’icona azzurrina lo distinguerà (solo in Gestione Disco) dagli altri dischi “fisici”

image 

Con pochissimi passaggi ecco a disposizione un modo molto comodo per sfruttare i dischi virtuali da riutilizzare poi in innumerevoli modi…

Windows 7 è pieno di queste funzionalità apparentemente scontate ma che sono una manna dal cielo per chi ne ha bisogno…

Enjoy!! :)

July 02

Amplificare il microfono in Windows Vista

Utilizzando spesso il portatile durante delle demo e delle presentazioni, ho scoperto (a mie spese) che in Vista l'amplificazione del microfono tramite gli speaker non è una cosa immediata (come succedeva con Windows XP dove bastava togliere il mute dal microfono..)

Inoltre sembra che il problema vari a seconda della scheda audio montata nel sistema.. Al giorno d'oggi la maggior parte dei computer monta una scheda audio integrata che quasi sempre è realtek.. naturalmente anche il mio portatile non fa eccezzione...

Navigando su internet mi sono accorto che il problema è abbastanza sentito (chi per fare demo, chi per usare il pc a mo' di karaoke) ma soluzioni poche... partito da un post di un utente che aveva "smanettato" nel registro di sistema (ma la chiave che modificava lui nel mio registro non c'era), ho trovato le chiavi giuste da modificare per riavere la possibilità di usare il microfono in modalità "live"

questa è la guida:

Aprire il registro di sistema tramite comando regedit, quindi andare in questa chiave:

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\0000\AD1981\Disable

 

image

qui troverete due stringhe binarie ed entrambe, se sono impostate su 01 devono essere impostate a 00:

image

Una volta fatto questo è sufficiente riavviare il sistema, una volta riavviato, cliccate con il tasto destro del mouse sull'icona del volume in basso a destra vicino all'orologio e selezionate l'opzione Dispositivi di riproduzione, selezionate gli altoparlanti e cliccate su Proprietà, quindi sulla scheda Livelli e come per magià comparirà la barra di regolazione del microfono in cui andrà disattivato il "mute" e regolato il volume...

image

Ed ecco risolto il problema... mi chiedo solo come mai i programmatori (del driver realtek o di Vista non si saprà mai..) hanno deciso di complicare così la vita alle persone... tenendo conto che su vari forum alcune persone esasperate hanno effettuato il downgrade a Xp su cui il problema non si manifesta piuttosto di venire a capo del problema...

Come sempre..

Enjoy! :D

Technorati Tag: ,,,

Abilitare la connessione remota da remoto...

Sembra un gioco di parole ma in alcuni casi si rende necessario abilitare la connessione remota ad un server/client senza avere accesso fisico alla macchina, i casi possono essere i più disparati: doversi collegare ad un server con RDP disabilitato e senza nessuno che possa abilitarlo oppure client sempre con RDP disabilitato ma con utenti, ai quali spiegare i semplici passaggi per abilitarlo, che trasformerebbero la semplice operazione in un'odissea...

Ecco quindi trovata la soluzione..

aprire il registro del proprio computer tramite comando regedit, una volta aperto cliccate sul menù File e quindi su Connect Network Registry

image

nella schermata che compare inserite il nome del computer sul quale bisogna abilitare l'RDP, se tutto va bene (e se avete i permessi per farlo) si aprirà un nuovo ramo dell'albero con il nome del computer e sotto le due chiavi primarie HKEY_LOCAL_MACHINE e HKEY_USERS, per risolvere il nostro problema bisogna cercare questa chiave:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server

dentro questa chiave ci sarà una stringa denominata fDenyTSConnections

image

bisogna impostare il valore di questa stringa a 0 per abilitare l'RDP e dare OK, una volta fatto questo è sufficiente far fare da remoto il reboot al computer tramite questo comando da prompt:

shutdown /m \\nomecomputer /r /f

dopo il riavvio la macchina sarà raggiungibile tramite RDP senza nessun problema con l'utente predefinito (l'amministratore)

Enjoy! :)

Technorati Tag: ,
June 23

Infopath: usare una vista personalizzata di un elenco per popolare un campo dropdown

Probabilmente il titolo è più complesso da capire rispetto all'effettivo problema...

Il problema: popolare una casella dropdown in Infopath da un'elenco che funge da origine dati, ma dell'elenco non si vogliono importare tutti i campi ma solo alcuni, o in un'ordine particolare

La soluzione: invece che selezionare come origine una "Raccolta o elenco Sharepoint", selezionare "Documento XML"

image

per avere il file xml è sufficiente fare questi passaggi:

  • creare la vista desiderata sull'elenco da utilizzare come origine dati
  • ottenere il GUID della vista, per fare questo andare in modifica della visualizzazione, nella barra dell'URL comparirà un GUID di questo tipo: %7B373A8D27%2DC310%2D5D43%2DB671%2DDF873E6793DB%7D sostituire secondo questo schema i caratteri:  %7B diventa {   ,  %2D diventa -  ,   %7D diventa }     ottenendo quindi il GUID: {373A8D27-C310-5D43-B671-DF873E6793DB}
  • ottenere il GUID della lista da utilizzare, per fare questo è sufficiente entrare nel menù impostazioni elenco e ripetere il lavoro svolto con il GUID della vista con il testo recuperato dalla barra dell'URL per ottenere il GUID della lista.
  • entrare nel sito nel quale si trova la lista e aggiungere questo testo all'url:

/_vti_bin/owssvr.dll?Cmd=Display&View={GUID VISTA}&List={GUID ELENCO}&XMLDATA=TRUE

  • se la pagina visualizza correttamente un codice xml avete raggiunto il vostro scopo, è sufficiente utilizzare questo url come origine del file xml che serve per alimentare la lista, l'unica cosa da modificare ancora è l'opzione relativa al salvataggio dell'xml, non fatelo salvare ma impostate il modulo in modo che ad ogni apertura possa recuperare il file xml ed il contenuto della vista filtrata

image

Fatto questo avrete un'origine dati personalizzata secondo le vostre esigenze, semplicemente configurando la vista di un elenco, con la possibilità di includere o escludere elementi senza dover mettere mano alla form...

Enjoy! :D