En muchos de los ejemplos que se pueden encontrar en el SDK del control de Virtual Earth se puede ver que hace uso del evento onload de la etiqueta body para llamar a una función en javascript que cargue el mapa en la página.
function GetMap()
{
var map = new VEMap('myMap');
map.LoadMap(new VELatLong(40.39600978935444, -3.5510219662353877),
5, VEMapStyle.Road, false, VEMapMode.Mode2D, true, 1);
}<body >
<div id='myMap' style="position:relative; width:400px; height:400px;"></div>
</body>
En el caso de tener una página que hereda de una Masterpage, la posibilidad de cargar el control mediante este sistema se esfuma por completo. Lo que hay que hacer es enlazar el evento onload de la página con la función javascript por programación.
var map = null;
if (window.attachEvent)
{
window.attachEvent("onload", LoadMap);
window.attachEvent("onunload", UnloadMap);
}
else
{
window.addEventListener("DOMContentLoaded", LoadMap, false);
window.addEventListener("unload", UnloadMap, false);
}
function LoadMap()
{
map = new VEMap('myMap');
map.LoadMap(new VELatLong(40.39600978935444, -3.5510219662353877),
5, VEMapStyle.Road, false, VEMapMode.Mode2D, true, 1);
}
function UnloadMap()
{
if (map != null)
{
map.Dispose();
map = null;
}
}
Con la aparición del Nuevo SDK y de la nueva plataforma PHI (Partner Hosting Infrastructure) hay que proceder a la migración de todos los agentes desarrollados bajo la anterior versión del SDK, la versión 4.3. Cómo realizar este proceso se explica más o menos aquí.
Evidentemente en este proceso pueden surgir complicaciones y una que me he encontrado es la siguiente:
Error 1 [E160] Procedure 'RepeatedSensitiveSequencesDetected_Answer' declared but never defined. Note that a procedure can only be forward declared once. C:\Program Files (x86)\Windows Live Agents SDK\Dependencies\WLALib_LanguageNeutral\WLALib_LanguageNeutral.5.0.a\Utilities \ComplianceUtilities.pkg 419 1
Para solucionar este problema hay que referenciar la librería ComplianceAnswers_es dentro del archivo Overrides.ddl. En mi caso acaba en “es” porque estoy utilizando el lenguaje español, es decir, tiene que acabar en el código de idioma que se esté utilizando. La referencia exacta es:
package wlalib_es:/Extensions/Chat/ComplianceAnswers_es
Hay lenguajes como C# que utilizan llaves ({}) para separar los bloques de código, otros lenguajes, como Visual Basic, utiliza palabras clases para indicarlo (End If, End For, etc..). En el caso de BuddyScript, lo que utiliza es la indentación, es decir, los bloques de código se separan mediante el uso de tabuladores.
Cuando se compila, el compilar verifica que la sintaxis del código sea correcta. En el caso de encontrar un error de indentación, mostrará el siguiente mensaje de error “[E169] Error in indentation”.
Pero el otro día, encontré el siguiente problema. En primera instancia escribí este datasource para leer un Rss. Obsérvese, que aunque está bien indentado, la indentación no se ha realizado utilizando tabuladores. Eso sí, el código compila y funciona.
datasource GetUserTimeLineXML(URL) => Title, Link, PubDate, Description
http {timeout="30" expire=now continue_on_error=no}
URL
simple xml
rss
channel
item {loop=content}
title
link
pubDate
description
Tras probar que el código compilaba y funcionaba perfectamente, decidí añadir un nuevo datasource en el mismo pkg.
datasource GetUserFriendsXML(URL) => Id, Name
http {timeout="30" expire=now continue_on_error=no}
URL
simple xml
users
user {loop=content}
id
name
La indentación utilizada en este otro datasource es la misma que la utilizada en el anterior. La única diferencia es que el IDE en este caso pinta de verde el nombre del datasource.
Al compilar veremos como la ventana de Conversación comienza a verificar todos los archivos y que cuando llega al pkg donde se encuentra esté código se para. Además, el IDE no muestra ningún tipo de error.
La solución a este problema pasa por indentar correctamente el código utilizando tabuladores, en vez de simples espacios. De esta manera, el código compilar correctamente y se ejecutará con el resultado deseado.
datasource GetUserTimeLineXML(URL) => Title, Link, PubDate, Description
http {timeout="30" expire=now continue_on_error=no}
URL
simple xml
rss
channel
item {loop=content}
title
link
pubDate
description
datasource GetUserFriendsXML(URL) => Id, Name
http {timeout="30" expire=now continue_on_error=no}
URL
simple xml
users
user {loop=content}
id
name