Hola compañeros, estoy trabajando intensamente en lo que va a ser mi primer módulo "comercial" para DNN, se trata de una integración de Google Maps con el módulo Property Agents , en el que he logrado integrar toda la interfaz de búsqueda de Ventrian, aprovechando la configuración de un determinado módulo PA (custom fields, search config...), para construir un servidor KML que posiciona los inmuebles en el mapa. Lo tengo bastante avanzado y espero poder publicar pronto la primera beta...
El caso es que estoy intentando lanzar un procedimiento en el lado del servidor cuando se ejecute una determinada función javascript en el cliente, para ello estoy usando (según la documentación del Client API de DotNetNuke) el método RegisterPostBackEventHandler, pero cuando hago la llamada a dnn. callPostBack desde el javascript siempre me devuelve un error pues la variable __dnn_postBack es "undefined" o sea, que no se registra en las variables del cliente. En los foros oficiales públicos apenas hay información sobre éste método, y un error idéntico publicado por otro usuario sigue sin respuesta en el foro.
¿Habeis trabajado con este procedimiento? ¿Alguna idea al respecto?
Os pego los trozos de código relacionados que estoy usando...
'implementar el apicacallbackeventhandler...
Partial Class ViewPropertyMap
Inherits DotNetNuke.Entities.Modules.PortalModuleBase : Implements IClientAPICallbackEventHandler
'esta función se comunica con el javascript del cliente, funciona OK...
Public Function RaiseClientAPICallbackEvent(ByVal eventArgument As String) As String Implements UI.Utilities.IClientAPICallbackEventHandler.RaiseClientAPICallbackEvent
...
return "ok"
end function
'registrar las referencias a las clases a utilizar en el inicio del control
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) handles Me.Init
If ClientAPI.BrowserSupportsFunctionality(ClientAPI.ClientFunctionality.XMLHTTP) AndAlso ClientAPI.BrowserSupportsFunctionality(ClientAPI.ClientFunctionality.DHTML) AndAlso ClientAPI.BrowserSupportsFunctionality(ClientAPI.ClientFunctionality.XML) Then
ClientAPI.RegisterClientReference(Me.Page, ClientAPI.ClientNamespaceReferences.dnn_xml)
ClientAPI.RegisterClientReference(Me.Page, ClientAPI.ClientNamespaceReferences.dnn_xmlhttp)
ClientAPI.RegisterClientReference(Me.Page, ClientAPI.ClientNamespaceReferences.dnn)
ClientAPI.RegisterClientVariable(Page, "kml_base", GeoPath, False)
ClientAPI.RegisterClientScriptBlock(Me.Page, "gmap2", "<script type='text/javascript' src='" & ModulePath & "scripts/maps.js" & "'></script>")
'aquí enlazo mi procedimiento de servidor con un evento en el javascript cliente... pero NO FUNCIONA
ClientAPI.RegisterPostBackEventHandler(Me, "UpdtSearchx", AddressOf UpdtSearch, False)
'aquí enlazo un botón de servidor para que devuelva el resultado de una función a una función javascript, esto funciona OK...
cmdSearch.Attributes.Add("onclick", ClientAPI.GetCallbackEventReference(Me, "0", "successFunc", "this",
End If
End Sub
'este es el procedimiento que debería lanzarse desde el javascript del cliente pues está enlazado en el RegisterPostBackEventHandler al suceso "UpdtSearchx"...
Private Sub UpdtSearch(ByVal args As ClientAPIPostBackEventArgs)
Try
'... este procedimiento funciona correctamente si lo enlazo a un evento o lo llamo desde cualquier otro procedimiento en el servidor, omito su contenido dada su extensión y escasa relevancia...
End Sub
//este es el javascript en el cliente que llamo al hacer zoom en el mapa, al cambiar la ubicación, etc... y que hace la llamda al RegisterPostBackEventHandler, y es en la función dnn.CallPostBack donde se produce el error pues la variable __dnn_postBack es "undefined"...
function updtResults()
{
dnn.callPostBack('UpdtSearchx','m=false');
}
//y esta es la función del dnn.prototype que recibe la llamada y donde sucede el error...
callPostBack:function(sAction)
{
var sPostBack = dnn.getVar('__dnn_postBack'); //esta variable no existe, no se registra en el cliente...
var sData = '';
if (sPostBack.length > 0) //aquí error pues lenght no está definido ya que sPostBack tampoco...
...