Saltar al contenido principal
pdf?stylesheet=default
Blackboard Help

Asignación de campos personalizados de archivo de instantánea sin formato

Asignación de campos

El marco de trabajo SIS es compatible con la personalización de datos entrantes antes de que se añadan a Blackboard Learn de registro en registro. Esto resulta útil cuando los datos de su sistema SIS no están alineados con sus requisitos de datos de Learn y no pueden modificarse en SIS porque está prohibido o la información que representan los datos la utilizan otros sistemas. Este documento abarca el uso de la opción de "Asignación de campos", específicamente cómo utilizar la opción de asignación del campo de script personalizado.

Esta capacidad para personalizar los datos entrantes se llama Asignación de campos y se accede a ella en la interfaz de usuario a través del menú Configuración avanzada de la integración. 

2B2E00EE-E5E9-4C45-813E-B43A9D27A368.png

La pantalla de Configuración avanzada proporciona una lista de objetos compatibles con ese objeto en Learn. Esta alineación con el tipo de integración variará de un tipo de integración a otro.

Blackboard-Learn.png

Cuando selecciona la Asignación de campos en un objeto de Learn asociado con el tipo de integración, en este caso Cursos, se le redirigirá a la página de Asignación de campos de la integración.

226A21E8-55A6-4FF5-985F-375D6E6F6E54.png

Además de información útil sobre el campo, como si es obligatorio para la inserción o si es obligatorio que sea único, también puede realizar desde esta página diversos ajustes que controlan cómo la integración gestiona los datos entrantes y si usted elige asignar entre objetos entrantes. 

Blackboard-Learn-1.png

Scripts personalizados y asignación de campos

En el campo que desee proporcionar una asignación de campo, puede seleccionar el uso de un campo entrante distinto. Por ejemplo: si el ID de curso entrante no fuera adecuado para su uso en Learn, en su lugar, podría asignarlo a la Clave externa de curso. Como este tutorial trata sobre el uso de un script personalizado para realizar la asignación debería seleccionar "Utilizar un script personalizado" en el menú desplegable "Campo de origen".

Los scripts personalizados se basan en JavaScript. Todos los datos entrantes se asignan a un modelo de objeto interno que proporciona la capacidad de acceder a cada elemento de datos para sus datos y su uso subsiguiente o la manipulación con un JavaScript personalizado.

Utilice comparadores de números enteros en instrucciones switch JavaScript. Si debe utilizar cadenas o caracteres como comparadores, utilice las instrucciones si/o en lugar de instrucciones switch.

Podrá encontrar dos excelentes referencias de JavaScript en Mozilla Developer Network https://developer.mozilla.org/en-US/...ript/Reference y en World Wide Web Consortium (W3C) http://www.w3schools.com/jsref/.

39C8D570-8079-4340-9C2B-C6E531CF1073-sm.png

Seleccionar "Utilizar un script personalizado"  le proporciona un área de texto donde introducir su código JavaScript.

39C8D570-8079-4340-9C2B-C6E531CF1073.png

En esta área de texto es donde introducirá su script personalizado para editar los datos entrantes.

Documentación interna de Learn

La documentación sobre los scripts de asignación de campos personalizada se encuentra en la página de documentos de muestra vinculada en el nivel superior de la página de Integración desde el sistema de información del alumno en el panel de administrador del sistema de Learn.

SISFrameworkSampleDocsLink.png

El enlace de documentos de muestra abre una página que contiene diversos enlaces a documentos del marco de trabajo de integración SIS y que abarcan todo tipo de integraciones. Los dos documentos de interés en el contexto del tipo de integración de archivo de instantánea sin formato y de la asignación de campos personalizada están vinculados al Diccionario de datos: Integración de archivos de instantánea sin formato y Ejemplos de script de asignación de campos personalizada respectivamente.

SISFrameworkSampleDocsPage.png

Scripts personalizados

El acceso a cada uno de los modelos de objeto de los tipos de integración es distinto y se basa en la estructura de datos subyacente de la especificación de datos del tipo de integración. A partir de la comprensión de la especificación de datos de integración, se puede derivar un patrón para el acceso a todos los objetos de la integración. 

En el caso de un archivo de instantánea sin formato, este patrón se basa en un objeto raíz "data", por lo que podemos derivar el siguiente patrón:

data.getValue(<FlatFileDataObject>);

donde <FlatFileDataObject> es sustituido por el nombre de elemento de encabezado de la fuente de datos.

Por ejemplo:

data.getValue("firstname");

data.getValue("lastname");

data.getValue("course_name");

Además, cuando la fuente de datos emplea 'Y' o 'N' debe sustituirlos condicionalmente ya que el resultado del script en valores booleanos sería verdadero o falso respectivamente. Por ejemplo:

var avail_ind  =  false;

if (data.getValue("available_ind").toUpperCase() == 'Y') {

avail_ind=true;

avail_ind;

se puede escribir mediante una instrucción con el uso de un operador ternario:

condición ? ejecutar si la condición es verdadera : ejecutar si la condición es falsa :

Por ejemplo:

data.getValue("available_ind").toUpperCase( )=='Y' ? avail_ind = true : avail_ind = false;

avail_ind;

lo anterior puede reducirse aún más a tan solo una instrucción ternaria ya que es el valor final de la expresión en la última línea del script que se devuelve cuando se guarda el punto de datos en Learn.

Por lo que podemos utilizar:

data.getValue("available_ind").toUpperCase() == 'Y' ? avail_ind = true : avail_ind = false;

y obtener el mismo resultado.

Como los scripts personalizados se procesan en función del rendimiento de integración del registro, pueden verse afectados si se realizan scripts con un uso informático intensivo (como el cifrado). Además, tenga en cuenta que el acceso a datos externos no es compatible: es posible que solo pueda realizar operaciones en los datos de fuentes existentes o en datos derivados informáticamente.

Depurar scripts

Depurar los scripts es relativamente sencillo ya que los errores o los problemas de datos que pueda encontrarse se registran.

Por ejemplo: 

el desarrollo de un script personalizado determinado en el campo "Available":

data.getValue("available_ind");

se puede ejecutar correctamente, pero si el valor no se pasa a la fuente de datos, el script producirá la siguiente entrada en el registro:

Valor nulo devuelto por un atributo que no puede anularse: isAvailable.
Datos no válidos para el atributo: isAvailable. Valor: null.  Utilización del valor de Learn predeterminado. 

Siempre que (available_ind se proporcione en la fuente):

data.getValue("available_ind");

puede ejecutarse correctamente, pero produce la siguiente entrada en el registro:

Tipo de valor no válido para el atributo: isAvailable. Valor: y
Datos no válidos para el atributo: isAvailable. Valor: Y.  Utilización del valor de Learn predeterminado.

que es debido a que debemos modificar condicionalmente los datos entrantes al valor booleano esperado, en este caso, "TRUE", para que podamos cambiar el script por:

data.getValue("available_ind") == 'y'?true:false;

Pero para estar seguros queremos capturar las comparativas de mayúsculas y minúsculas por lo que modificamos el script:

data.getValue("available_ind").toUpper() == 'Y' ? true : false;

Esto resultará en un error de script y se imprimirá en el registro:

Error durante la ejecución de script del atributo: isAvailable.
blackboard.platform.script.ScriptingException: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "toUpper" no está definido. (<Unknown Source>#2) en <Unknown Source> en la línea número 2.

Esto es debido a que JavaScript no cuenta con toUpper(), pero cuenta con toUpperCase() por lo que al editar el script...

data.getValue("available_ind").toUpperCase() =='Y' ? true : false;

ahora el script se ejecuta correctamente.

Scripts de ayuda: Registro de scripts personalizados

Learn proporciona scripts de ayuda para proporcionar funcionalidades comunes como el registro de sus scripts. Si añade lo siguiente a sus scripts se incluirá el resultado en los registros de integración:

helper.logError(msg) 

helper.logWarning(msg) 

helper.logInfo(msg) 

helper.logDebug(msg)

El resultado de los métodos de helper.log* estarán visibles en los registros basados en la configuración de integración de los niveles de registro.

Algunos de los scripts de ayuda adicionales disponibles (como se describe en la página Ejemplos de secuencia de comandos de asignación de campos personalizados enlazada desde la página de documentos de muestra) son:

  • helper.getBatchUid( String id ) : esto construye un identificador prefijado según el prefijo de UID de lote específico de la integración SIS en la que se ejecuta la asignación. Esto se debe utilizar siempre que se generen ID "únicas" ya que el prefijo puede ayudar a evitar conflictos de ID.
  • helper.getHelper( String helperName ) : esto devuelve un objeto de ayuda específico del tipo de integración SIS que contiene métodos de ayuda aplicables a este tipo de integración. La documentación de estas ayudas se proporcionará en documentos java para cada tipo de integración SIS.
  • helper.skipAttribute() : esto devuelve un valor que cuando se devuelve de un script de asignación provoca que el campo que se está asignando se salte (no cambian).
  • helper.skipAttributeIfNull( Object value ) : si el valor que se pasa es nulo, esto devuelve lo mismo que skipAttribute. Si no es nulo, el valor se devuelve.
  • helper.skipRecord() : esto devuelve un valor que cuando se devuelve de un script de asignación provoca que todo el registro que se está procesando se salte.
  • helper.skipRecordIfNull( Object value ) : si el valor que se pasa es nulo, esto devuelve lo mismo que skipRecord. Si no es nulo, el valor se devuelve.

Continuando con nuestro script de muestra, agregaremos un mensaje del registro de información para indicar que el valor utilizado en Learn se deriva de un script personalizado, el objeto de datos base al que hacen referencia los datos insertados y los valores calculados que se utilizaron. También agregaremos un mensaje de registro que indica una condición de error según la falta de un adecuado. 

Si volvemos a observar el script anterior isAvailable digamos que AVAILABLE_IND se ha establecido de forma inconsistente en las fuentes de datos del curso, es decir que no siempre está presente en la fuente de datos , y desea establecerlo en true cuando no exista un valor de AVAILABLE_IND presente o se ha evaluado adecuadamente. El script ahora pasa a ser:

var outInd = false;

var inInd = data.getValue("available_ind")

if (inInd == "") {

   helper.logInfo("INCOMING AVAILABLE_IND UNDEFINED for  "+data.getValue("course_id")+": setting isAvailable to true");

   outInd=true;

} else {

   data.getValue("available_ind").toUpperCase()=='Y'?outInd=true:outInd=false;

}

helper.logInfo("OUTGOING AVAILABLE_IND: ["+outInd+"]");

outInd;

El registro ahora muestra:

31 de mayo de 2013, 4:03:56 PM - Curso [create/update, testCourse1]
INCOMING AVAILABLE_IND UNDEFINED for TEST_COURSE_1: setting isAvailable to true
OUTGOING AVAILABLE_IND: [true]
Course 'testCourse1' processed successfully.
testCourse1|TEST_COURSE_1|Test Course 1| 
...
remaining log entries
...
Asignación de campos realizada correctamente.

Ejemplos

Nombres de curso

Contraseñas

Correos electrónicos

Nombre del curso: Añadir período y año
Caso de uso

Es deseable que en la visualización de los cursos contenga el período y el año en los que se ofrecen el curso. Actualmente los datos proporcionados por SIS no agregan esta información a course_name. Los cursos se muestran utilizando el nombre del curso. Por ejemplo:

Course-Name--Add-Term-and-Year.png

 

Condiciones previas

SIS proporciona el período y el año como parte de la cadena course_id y proporciona el campo course_name necesario. 

Por ejemplo:

external_course_key|course_id|course_name|available_ind

ARTHIST.202.01|36202010114|Historia del arte 202: Arquitectura del renacimiento|Y

En el ejemplo anterior, el course_id se compone de:

el departamento: 36

el curso: 202

la sección: 01

el mes del período: 01

el año: 14

Requisitos

1. Los períodos están determinados por el mes designado. Por ejemplo:

01 = Invierno

04 = Primavera

06 = Verano

09 = Otoño

2. Agregar el período y el año derivados mediante el programa al nombre del curso separados por espacios y encerrados entre paréntesis "()". Por ejemplo:

Historia del arte 202: Arquitectura del renacimiento (Invierno 2014)

3. Ignore la información agregada si no se proporciona el período adecuado.

Condición posterior

1. Los cursos en los que course_id proporciona los identificadores de período/año tendrán sus datos de course_name agregados con (TERM YEAR) antes de la creación o actualización del registro del curso en Learn.

2. Los cursos sin identificadores de período/año adecuados en course_id no su course_name no cambiarán.

El script

El nombre del curso se proporciona en el campo course_name de la fuente de datos SIS y la información de período necesaria se encuentra en el campo course_id de los elementos de fuente de datos SIS en formato numérico. Para cumplir con los requisitos debe

a) determinar el año y

b) determinar el período mediante la asignación a un rango y, a continuación, dándole el formato adecuado a los datos resultantes.

Esto lo lograremos proporcionando funciones de JavaScript para devolver el formato deseado para la visualización del nombre del curso y colocar el resultado de dichas funciones en el formato correcto.

Podrá encontrar tutoriales sobre la escritura de funciones de JavaScript en los sitios de HTMLGoodies (http://www.htmlgoodies.com/beyond/ja...d-classes.html) y en World Wide Web Consortium (W3C) (http://www.w3schools.com/js/js_functions.asp).

a) Determinar el año.

Dado que el course_id contiene un año de dos cifras al final de la secuencia de caracteres, podemos escribir una función que recupere los dos últimos caracteres:

function courseYear(crn) {

    return crn.substring(9); 

}

b) Determinar el período.

El course_id también nos proporciona los datos para determinar el período por lo que podemos utilizar la función de subcadena de JavaScript para recuperar los datos de MM y asignarlos a un rango de meses que representen la etiqueta de un período, por ejemplo: 09=Otoño, 01=Invierno, 04=Primavera, 06=Verano

Este es un caso simplista, los datos también podrían proporcionar fechas de inicio que podrían utilizarse conjuntamente con course_id para determinar de forma condicional el período.

function getTerm(crn) {

    var termCode=crn.substring(7, 9);

    var term="";

 

    if (termCode == "01") {

      term="Invierno";

    } else if (termCode == "04") {

      term="Primavera";

    } else if (termCode == "06") {

      term="Verano";

    } else if (termCode == "09") {

      term="Otoño";

    } else {

      term="";

    }

  return term;

}

function getYear(crn) {

    return crn.substring(9); 

}

Como aquí trabajamos con números enteros podríamos escribir la función getTerm con una instrucción switch en lugar de la anterior que utiliza si/o...

function getTerm(crn) {

var termCode = parseInt(crn.substring(7,9));

var term = "";

 

switch (termCode)

  {

  case 09: term ="Otoño"; break;

  case 01: term ="Invierno"; break;

  case 04: term ="Primavera"; break;

  case 06: term ="Verano"; break;

      default: term ="";

  }

  return termString ;

}

La instrucción switch funciona únicamente porque podemos generar un número entero para el comparador.

Ahora que contamos con funciones para determinar el período y el año, vamos a escribir el script que agrega el course_name:

function getTerm(crn) {

  var termCode=crn.substring(7, 9);

  var term="";

 

  if (termCode == "01") {

    term="Invierno";

  } else if (termCode == "04") {

    term="Primavera";

  } else if (termCode == "06") {

    term="Verano";

  } else if (termCode == "09") {

    term="Otoño";

  } else {

    term="";

  }

  return term;

}

 

function getYear(crn) {

  return crn.substring(9); 

}

 

var crn = data.getValue("course_id");

var year = getYear(crn);

var term = getTerm(crn);

var courseName = data.getValue("course_name");

var newCourseName = "";

 

if (term!="") {

  newCourseName = courseName + " (" + term + " 20" + year + ")";

} else {

  newCourseName = courseName;

}

 

helper.logInfo("INCOMING COURSE_NAME " + data.getValue("course_name"));

helper.logInfo("INCOMING COURSE CRN " + crn);

helper.logInfo("INCOMING COURSE YEAR " + year);

helper.logInfo("INCOMING COURSE TERM " + term);

helper.logInfo("INCOMING COURSE_NAME " + data.getValue("course_name"));

helper.logInfo("OUT NEW NAME " + newCourseName);

 

newCourseName;

Si introduce lo anterior en la asignación de campo Course para Course Name y, mediante el uso de la opción Cargar archivo de integración, carga manualmente (guarda) el ejemplo de fuente de curso de los datos de ejemplo anteriores, observará que se publican los datos siguientes en el registro de nuestro curso de ejemplo:

2B2E00EE-E5E9-4C45-813E-B43A9D27A368.png

Y el nombre del curso ahora se mostrará con el período y el año según se derivaron del course_id:

E892E0C4-204F-4035-B272-128F4A0BB980.png

Contraseñas
Caso de uso

Utilice LDAP para autentificar usuarios de Learn, pero Learn requiere el uso de contraseñas para la creación de cuentas de usuarios y su SIS no proporciona contraseñas. Debe crear una contraseña aleatoria por usuario.

Condiciones previas

La fuente de datos proporciona la información de usuario básica que puede utilizarse para crear la contraseña. Por ejemplo: nombre y apellido.

Requisitos

Las contraseñas deben ser una combinación del nombre+apellido+un número aleatorio

Debe poder especificar un rango para la creación aleatoria

Condición posterior

La contraseña se crea para el usuario, por ejemplo: 

Para el usuario Ramón López la contraseña podría ser ramonlopez102464

Datos de muestra
external_person_key|user_id|passwd|firstname|lastname|email|system_roletestPerson1|aanderson_test|changeme|Alpha|Anderson||nonetestPerson2|bvonbrown_test|changeme|Beta|Von Brown||nonetestPerson3|ccharlie_test|changeme|Chi|Charlie|ccharlie@google.com|nonetestPerson4|ddavis_test|changeme|Delta|Davis!||nonetestPerson5|eedwards_test|changeme|Epsilon|Edwards|epsilon.edwards@institution.edu|nonetestPerson6|ggardner_test|changeme|Gamma|G'Ardner||none
Script

function rand (min, max) {

    var argc = arguments.length;

    if (argc === 0) {

        min = 0;

        max = 2147483647;

    }

    return Math.floor(Math.random() * (max - min + 1)) + min;

}

 

var password = "";

var regex = new RegExp(" ", 'g');

 

helper.logInfo("INCOMING PASSWORD: " + data.getValue("passwd"));

helper.logInfo("INCOMING FIRSTNAME: " + data.getValue("firstname"));

helper.logInfo("INCOMING LASTNAME: " + data.getValue("lastname"));

password = (data.getValue("firstname") + data.getValue("lastname") + rand() + rand()).toUpperCase();

password = password.replace(regex, '');

helper.logInfo("GENERATED PASSWORD: " + password);

password;

Si introduce lo anterior en la asignación de campo User para Password y carga manualmente (guarda) el ejemplo de fuente de usuario (persona) de los datos de ejemplo anteriores, observará que se publican los siguientes datos en los registros:

Passwords.png

Correos electrónicos

Los correos electrónicos pueden ser complicados de validar correctamente y podría argumentarse que esto nunca debe hacerse con una expresión regular sencilla o en JavaScript. A continuación encontrará un ejemplo de alto nivel que aunque probablemente concuerde correctamente el 95 % o más de las direcciones de correo puede perderse algunos ejemplos de caso marginales y, por tanto, su uso previsto es como ejemplo de cómo se puede enfocar la construcción de direcciones de correo electrónico y el uso de la captura de errores en un script de asignación de campos personalizados en lugar de ser un ejercicio de validación de correo electrónico.

Caso de uso

Su SIS no almacena cuentas de correo electrónico o almacena cuentas de correo electrónico personales, pero no aquellas emitidas por su institución, es preferible que las cuentas de correo electrónico de Learn sean cuentas de correo electrónico emitidas por la institución.

Condiciones previas

Los datos necesarios para generar la parte local de las direcciones de correo electrónico deseadas existe en la fuente de datos de SIS. Por ejemplo: nombre y apellido.

Requisitos

Las cuentas de correo electrónico emitidas por la institución siguen el patrón de firstname.middleinitial.lastname-yy@institution.edu, donde "-yy" representa el año de graduación previsto del alumno. Estos elementos se pasan a las fuentes SIS en los datos siguientes:

FIRSTNAME: el nombre del alumno

MIDDLENAME: el segundo nombre del alumno

LASTNAME: el apellido del alumno

OTHERNAME: el año de graduación

La parte local de las direcciones de correo electrónico aceptables solo deben contener caracteres alfanuméricos, "-","_","." y apóstrofes. Por ejemplo: Gamma.G'Ardner-06_16@institution.edu.

Condición posterior

Se forma una dirección de correo electrónico con el formato adecuado y se pasa a Learn.

Datos de muestra
external_person_key|user_id|passwd|firstname|lastname|email|system_role
testPerson1|aanderson_test|changeme|Alpha|Anderson||none
testPerson2|bvonbrown_test|changeme|Beta|Von Brown||none
testPerson3|ccharlie_test|changeme|C...lie@google.com|none
testPerson4|ddavis_test|changeme|Delta|Davis!||none
testPerson5|eedwards_test|changeme|E...nstitution.edu|none
testPerson6|ggardner_test|changeme|Gamma|G'Ardner||none
Script

var emailAddress = "";

var instDomain = "institution.edu";

 

function buildIt() {

  var fname  = data.getValue("firstname");

  var lname = data.getValue("lastname");

  var regex = new RegExp(" ", 'g');

  emailAddress = fname +"."+lname+"@"+instDomain;

  emailAddress=emailAddress.toLowerCase();

  emailAddress = emailAddress.replace(regex, '');

}

 

function validateIt(eAddress) {

  var emailRegEx  = /^([a-zA-Z0-9_\.\-\'])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

  if (!emailRegEx.test(eAddress))

    throw new Error("Email Validator Error: Cannot Validate Email Address");

}

 

emailAddress = data.getValue("email");

 

if (emailAddress == "" || emailAddress == null) {

  buildIt();

} else if ( emailAddress.indexOf(instDomain) === -1) {

  buildIt()

}

 

try {

  validateIt(emailAddress);

} catch (err) {

  helper.logError("INCOMING EMAIL ADDRESS: " + emailAddress);

  helper.logError("INCOMING FIRSTNAME: " + data.getValue("firstname"));

  helper.logError("INCOMING LASTNAME: " + data.getValue("lastname"));

  helper.logError(err +" for User (" + data.getValue("user_id") +", Email (" + emailAddress + "). No Email Address Saved for this user. )");

  emailAddress="";

}

 

helper.logInfo("emailAddress: " + emailAddress);

emailAddress;

Si introduce lo anterior en la asignación de campo de User para Password y carga manualmente (guarda) el ejemplo de fuente de usuario (persona) de los datos de ejemplo anteriores, observará que se publica un error en los registros.

email-fail-1.png

email-fail-detail.png

Esto se debe a que las direcciones de correo electrónico no pueden contener signos de exclamación según nuestra expresión regular.

Tenga en cuenta que el usuario igualmente se crea ya que no se requiere una dirección de correo electrónico válida para crear o actualizar un registro de usuario.

Cambiar la entrada de Delta Davis de:

testPerson4|ddavis_test|changeme|Delta|Davis!||none

testPerson4|ddavis_test|changeme|Delta|Davis||none

al eliminar el signo "!" del campo de apellido lastname de delta y volver a cargar el archivo elimina el error y actualiza el registro de Delta con la nueva dirección de correo electrónico:

email-success-1.png

email-success-detail.png

Omitir un registro o atributo en caso de error

El ayudante proporciona dos métodos adicionales que ofrecen un control incluso mayor sobre el procesamiento de sus scripts:

helper.skipAttribute(): omite un atributo que no sea crítico que parezca estar mal configurado

helper.skipRecord(): para omitir todo el registro y continuar con el siguiente

El script de correo electrónico anterior registra un error cuando la dirección de correo electrónico no se puede validar, pero además continúa con la creación del registro de todos modos. Si no queríamos crear usuarios con correos electrónicos vacíos y en su lugar queríamos registrar el error de validación y pasar al siguiente registro podíamos añadir helper.skipRecord() en un condicional basado en emailAddress al final del script. Por ejemplo: 

en lugar de cerrar el script con emailAddress=""; cerrarlo con:

(emailAddress=="") ? helper.skipRecord(): emailAddress;

Esto omite condicionalmente el registro en función del contenido de emailAddress que hemos fijado en una cadena vacía cuando falla la validación. 

Añada el método helper.skipRecord() en el script y cambie la entrada de Delta Davis from:de:

testPerson4|ddavis_test|changeme|Delta|Davis||none

testPerson4|ddavis_test|changeme|Delta|Davis!||none

En el ejemplo de fuente de la carga manual (guardado) el usuario (persona) revisado, con signo de exclamación, podrá ver los datos publicados en los registros.

skiponerror.png

Tenga en cuenta que el error se registra y que al final del registro indica que el registro se ha omitido como resultado de un script de asignación y el atributo que se ha devuelto como resultado.

La aplicación condicional de helper.skipAttribute() tendrá un efecto similar, el script procesará los datos de fuentes y en función de la presencia de un condicional como la línea final que llama a helper.skipAttribute(), la integración devolverá un error y omitirá el registro o si el atributo no es necesario, la configuración de asignación tomará el control y tratará el atributo según la configuración.