En Dynamics CRM, los usuarios pueden añadir notas a formular observaciones acerca de ciertos cambios que se hicieron a un registro. En algunos casos, puede haber un requisito para automatizar la creación de notas basadas en ciertos cambios de información de campo.
La dificultad con las notas es que no es un campo en la entidad. En realidad, es un 1: N asociación que se muestra en la página con un IFRAME incrustado. Esto significa que no podemos llenar un campo, pero en su lugar, tenemos que llamar a los servicios web REST en CRM para solicitar la creación de la nota.
Para controlar esto, podemos crear un simple objeto JavaScript que se encarga de la llamada web del servicio (NoteManager) y otro script para prueba de la creación de las notas (TestNotes):
NoteManager JavaScript:
if (typeof (OGBIT) == "undefined") { OGBIT = {}; }
OGBIT.NoteManager = {
AddNote: function (params, entitySet, onComplete, onError) {
var self = OGBIT.NoteManager;
var serverUrl = self.GetServerUrl();
var ODataURL = serverUrl + entitySet;
var json = JSON.stringify(params); //MUST CONVERT TO JSON STRING
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: ODataURL,
data: json,
beforeSend: function (XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("Accept", "application/json");
},
success: function (data, textStatus, XmlHttpRequest) {
if (onComplete != null)
onComplete(data.d.results);
},
error: function (XmlHttpRequest, textStatus, errorObject) {
var msg = textStatus;
try {
msg = JSON.parse(XMLHttpRequest.responseText).error.message.value;
} catch (e) { }
if (onError != null)
onError(msg);
}
});
},
GetServerUrl: function () {
var serverUrl = '';
if (typeof (Xrm) != 'undefined' && Xrm != null) {
serverUrl = Xrm.Page.context.getServerUrl();
//test that server name is not coming back instead of the domain name
//otherwise we get a Cross-Origen (CORS) 400 error
}
if (serverUrl.match(/\/$/)) {
serverUrl = serverUrl.substring(0, serverUrl.length - 1);
}
return serverUrl + "/XRMServices/2011/OrganizationData.svc/";
},
}
El script anterior implementa dos métodos principales:
Método
|
Descripción
|
AddNote
|
Este método se encarga de la interacción con el servicio web Dynamics CRM. Toma los siguientes parámetros:
Nombre
|
Descripción
|
Params
|
Estructura JSON que contiene la información de la nota
|
entitySet
|
Este es el nombre de la entidad donde se necesita el registro que se añade. Para las notas, el nombre es AnotationSet
|
onComplete
|
Este es un controlador de devolución de llamada (callback handler)
|
onError
|
Controlador de devolución de llamada de los errores
|
Tenga en cuenta los siguientes atributos de la petición:
Los servicios web dinámico CRM son RESTFul. Para la creación de una nueva nota hay que usar el verbo POST.
Dado que se pasa una estructura JSON establecemos los tipos de contenido y de datos a JSON (datatype)
El parámetro de datos contiene los datos JSON en formato de cadena (string) que se genera después de llamar a la función stringify
|
GetServerUrl
|
Este método resuelve la dirección URL del servidor y el nombre de la organización actual.
|
TestNotes Script:
OGBIT.TestNotes = {
AddNotes: function () {
var self = OGBIT.TestNotes;
var note = {};
var ref = {};
note.NoteText = "This is the content of the notes";
note.Subject = "Note Unit test";
ref.LogicalName = Xrm.Page.data.entity.getEntityName();//returns the entity name
ref.Id = Xrm.Page.data.entity.getId(); //returns the primary id/guid
note.ObjectId = ref; //associate the note to an entity
OGBIT.NoteManager.AddNote(note, 'AnnotationSet', self.onComplete, self.onError); //AnnotationSet is the notes entity set
},
onError: function (msg) {
alert(msg)
},
onComplete: function (data) {
alert(data);
}
}
El Script anterior crea las siguientes estructuras JSON:
Nombre
|
Descripción
|
Note
|
Este es el objeto nota. Se crea con los siguientes atributos:
Nombre
|
Descripción
|
NoteText
|
Este es el contenido de la nota
|
Subject
|
Este es el tema
|
ObjectId
|
Este es el objeto asociado a las notas. POR EJEMPLO Una nota puede estar asociado a una cuenta u otra entidad personalizada que apoyan notas.
|
|
ref
|
Este es el objeto asociado. Necesita los siguientes atributos:
Nombre
|
Descripción
|
LogicalName
|
Este es el nombre de la entidad
|
Id
|
Este es el identificador primario (GUID)
|
Estos valores se pueden recuperar mediante el modelo de objetos de cliente XRM. Se utiliza el contexto actual para leer la información de la entidad.
|
Después de crear las referencias JSON, el script utiliza el método NoteManager para enviar la solicitud a los servicios web. Los manejadores de devolución de llamada se llaman después de la llamada al servicio web se ha completado.
Espero que estos scripts pueden ayudarle a obtener una mayor comprensión de los servicios web de Dynamics CRM y cómo interactuar con ellos a través de JavaScript.