domingo, 8 de junio de 2014

SPServices actualizar un campo Note (Multiple lines of text)

Cuando desarrollamos soluciones con SPServices suele pasar que nos encontramos con problemas al actualizar los datos, uno que me paso hace poco es el de actualizar un campo Note (Multiple lines of text). En este caso el campo “Descrição”.

image

Si yo guardo el html del campo Descrição directamente a Sharepoint. Ej: <p><strong>Prueba</strong> de ítem 1. Más <strong>información</strong> sobre este ítem.</p>

Sharepoint NO lo detecta como html cuando lo veo en la vista.

image

Entonces cómo debo hacer para que Sharepoint se de cuenta que es html lo que escribí en la columna. Tan simple de agregar el siguiente div como contenedor del html que actualizo en html.

var inputDescripcionValue = htmlEscape("<div class='ms-rtestate-field'>" + <p><strong>Prueba</strong> de ítem 1. Más <strong>información</strong> sobre este ítem.</p> + "</div>"); //ES IMPORTANTE DE PONER LOS ESCAPES DE HTML  

Donde htmlEscape es:

function htmlEscape(str) {
    return String(str)
        .replace(/&/g, '&amp;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#39;')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;');
}

image

image

Pero como hacemos para leer este campo y sólo obtener el html que necesito. Sharepoint cuando retorna el campo, también te devuelve un div contenedor con una clase ExternalClass[GUID].

var descripcion = $(this).attr("ows_Descricao");
var HTMLregex = new RegExp("<div class=\"ExternalClass[0-9A-F]+\">[^<]*");
matched =  descripcion.match(HTMLregex );
var htmlNew = descripcion.replace(matched[0],"");
descripcion = htmlNew.replace("<div class=\"'ms-rtestate-field'\">", "").replace("</div></div>","");

Con el script anterior remuevo el div con clase ExternalClass[GUID] y el div que tiene la clase ms-rtestate-field.

No hay comentarios:

Publicar un comentario