Hello Guest! Welcome to our Website.
Something you might want to know about us.
Don't be hesitated to contact us if you have something to say.

Calendario Sharepoint SP.UI.ApplicationPages.CalendarNotify.$4a no sirve 2013

| | viernes, 14 de agosto de 2015
|

Hace poco un cliente me comento que su calendario con colores había de dejado de funcionar después de una migración de SharePoint 2010 a SharePoint 2013, revisé la página vi que usaba un javascript y que devolvía el error "Unable to get value of the property '$4a': object is null or undefined". Eso ocurre por que el namespace SP.UI.ApplicationPages.CalenadarNotify no esta soportado en shaerpoint 2013. Después de quebrarme la cabeza un rato pensé que lo mejor era disparar un jquery después que cargara toda la página, bueno para no hacer esto aburrido les comento que $(document).ready(function() no sirve por que carga la página, pero el calendario lo carga en segunda instancia pasa lo mismo con load. Pero mas o menos por ahí iba la solución, después intente poner setTimeout( function() que esperara que toda la página estuviera cargada y después hiciera lo que yo quería pero la verdad no me sentía cómodo con la solución, después de un rato encontré con la respuesta y era mas o menos similar a lo que había pensando al inicio.

Si utilizaron esta solucion y migraron de SharePoint 2010 a 2013 y dejo de servir, acá les dejo como lo pueden solucionarlo. 



<script type="text/javascript">
_spBodyOnLoadFunctionNames.push("LaunchColorCodeCalendarScriptOnReady");

var SEPARATOR="|||";
function LaunchColorCodeCalendarScriptOnReady() {


    ExecuteOrDelayUntilScriptLoaded(
        MyCalendarHook,
        "SP.UI.ApplicationPages.Calendar.js");


}

function MyCalendarHook() {
    var _patchCalendar = function () {
       ColourCalendar()
    };
    var _onItemsSucceed = SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed;
    SP.UI.ApplicationPages.CalendarStateHandler.prototype.onItemsSucceed = function ($p0, $p1) {
        _onItemsSucceed.call(this, $p0, $p1);
        _patchCalendar();
    };
}


function ColourCalendar() {
        if(jQuery('a:contains(' + SEPARATOR + ')') != null)
        {          
jQuery('a:contains(' + SEPARATOR + ')').each(function (i) {
$box = jQuery(this).parents('div[title]');
var colour = GetColourCodeFromCategory(GetCategory(this.innerHTML));
this.innerHTML = GetActualText(this.innerHTML);
jQuery($box).attr("title", GetActualText(jQuery($box).attr("title")));
$box.css('background-color', colour);
});      
}
}

function GetActualText(originalText) {  
var parts = originalText.split(SEPARATOR);
return parts[0] + parts[2];
}

function GetCategory(originalText) {
var parts = originalText.split(SEPARATOR);
return parts[1];
}

function GetColourCodeFromCategory(display) {
var colour = null;  
switch (display.trim().toLowerCase()) {
case '1':      
colour = '#F08080';
break;    
case '2:      
colour = '#1E90FF';
break;    
case '3':      
colour = "#FFFF4D";
break;    

}  
return colour;
}

</script>

0 comentarios:

Publicar un comentario

 

Labels

Followers