Flujos de trabajo
- Es imperativo asegurarse de que el flujo de trabajo contenga conectores entre las tareas. Debe haber un punto de inicio y fin definido, o una conexión a otro flujo de trabajo.
- Al implementar lógica de ramificación dentro de los conectores de tareas, es esencial tener en cuenta cada resultado potencial en sus condiciones, asegurándose de que cada condición sea mutuamente exclusiva. Evite condiciones lógicas superpuestas.
- Confirme que el objeto que activa el flujo de trabajo esté habilitado adecuadamente. Por ejemplo, las plantillas de Nivel 1 deben tener flujos de trabajo habilitados y flujos de trabajo de asociación específicos seleccionados. Las organizaciones deben seleccionar flujos de trabajo específicos para empresa/contacto.
- No está permitido configurar múltiples flujos de trabajo para ser activados por un solo estado.
- Verifique que no haya sintaxis malformada o incorrecta dentro de los conectores de tareas o en el enrutamiento del flujo de trabajo (por ejemplo, enrutamiento de una tarea de reconocimiento).
Procesador de Variables
- Asegúrese de que todas las variables referenciadas dentro del sistema estén consistentemente encapsuladas entre comillas dobles.
- Si cierta sintaxis, como [#(?object=)#], está malformada, puede resultar en que se muestre una página completamente en blanco.
- Asegúrese de que no haya etiquetas de sintaxis desajustadas, como sslogic anidados entre sí, o etiquetas de fin de sslogic faltantes. Al incrustar diferentes sintaxis (por ejemplo, sslogic, sscalculation o variables del sistema), es crucial entender el Orden de Operaciones de SmartSimple para configurar estos elementos adecuadamente.
- Tenga en cuenta todos los posibles valores de retorno para una variable. Si un valor nunca se ha guardado en un campo, la sintaxis de la variable misma será retornada (es decir, @variable@). Además, una variable puede devolver una cadena vacía. El procesador de variables también considerará el formato del campo y, por defecto, devolverá el formato configurado del campo, como formato de moneda o fecha. Esto debe ser tomado en cuenta al manipular el valor.
Javascript y MySQL
- La sintaxis de Javascript se utiliza en áreas que se muestran al usuario en el navegador. Ejemplos incluyen configuraciones de campos personalizados para Validación Javascript, campos personalizados de Valor Calculado Especial y campos de Script de Navegador Especial.
- La sintaxis de MySQL se emplea en áreas backend que no son visibles para el usuario. Ejemplos incluyen Fórmulas de Plantillas, Lógica de Envío y Lógica de Visibilidad de campos personalizados.
- El operador de igualdad en Javascript se representa con un doble signo igual (==), mientras que en MySQL se representa con un solo signo igual (=).
- Los valores de cadena (texto) deben estar encapsulados entre comillas (las comillas dobles son las más seguras), reforzando así la recomendación de siempre encapsular las llamadas del Procesador de Variables entre comillas.
Al ejecutar verificaciones condicionales en Campos usando SSLOGIC(), IF() o sentencias CASE desde dentro del asistente de sintaxis de variables o desde dentro de Fórmulas de Plantillas/Tipos, ¿cómo puedo hacer que el sistema reconozca valores NULL/Vacíos?
if("@level1.fieldName.value@"="", 0, @level1.fieldName.value@)
es un ejemplo de cómo devolver un "0" en caso de que la variable @level1.fieldName.value@ retorne un resultado vacío.
Estoy intentando calcular un conjunto de preguntas de puntuación en una puntuación total. Las preguntas de puntuación son botones de radio de selección única. Al intentar guardar el registro sin responder las preguntas de puntuación, las puntuaciones no se guardan.
Recomendamos crear una Fórmula de Tipo de Nivel 1 para realizar estas actualizaciones automáticas, usando los siguientes pasos como guía:
(1) Menú >> Aplicaciones de Seguimiento >> [Editar] Gestor de Envíos >> pestaña Aplicación >> Tipos
(2) [Editar] su Tipo de registro que incluye sus puntuaciones
(3) Haga clic en la pestaña [Procesar] en la parte superior
(4) Ingrese el siguiente código en la [Fórmula de Aplicación], reemplazando las variables con los nombres correctos de campos usados en su entorno:
@level1.TotalScoreField@=@level1.1stScore@+@level1.2ndScore@+@level1.3rdScore@
Queremos añadir ~60 nuevos presupuestos al Gestor de Presupuestos para diferentes Sucursales - ¿cuál es el mejor método para lograr esto?
Recomendamos usar un Autocargador para este propósito; cargando en masa todos sus presupuestos usando un archivo CSV.
¿Podría indicarme cómo eliminar el espacio entre oraciones dentro de una Invitación a Subvención?
Puede intentar reemplazar las etiquetas HTML <p> (párrafo) con <br> (salto de línea simple). Por ejemplo, navegando a Menú >> Aplicaciones de Seguimiento >> [Editar] Gestor de Envíos >> pestaña Subvención >> Plantillas de Invitación >> [Editar] Invitar Colaboradores >> pestaña Plantillas de Correo Electrónico >> [Cuerpo del Correo de Invitación]:
...
Su firma aquí,
<br>Administrador
Queremos eliminar la sección "Acuerdos Pendientes" dentro de nuestro Portal - ¿cómo podemos hacer esta actualización?
Para eliminar los 'Acuerdos Pendientes' del Portal, debe realizar la siguiente navegación:
Menú >> Configuración Global >> pestaña Usuarios >> Portales >> [Editar] Común
Desde aquí verá todas las Páginas del Portal activas dentro de su sistema. Querrá identificar qué página del Portal, específica para sus Roles, está apuntando. Una vez que haya identificado la página correcta del Portal, haga clic en [Editar] junto a su nombre y finalmente haga clic en el botón [X] (Eliminar).
¿Cómo podemos adjuntar un PDF en un correo electrónico de confirmación?
Si navega a la Tarea dentro del Flujo de Trabajo que genera estos correos electrónicos de confirmación, encontrará la sección [Archivos adjuntos] dentro de la configuración que nos permite adjuntar un archivo (PDF) al correo:
Menú >> Flujos de Trabajo >> [Editar] NombreFlujoTrabajo >> Tareas (desde el menú izquierdo) >> Haga clic en la Tarea de Reconocimiento por Correo Electrónico >> Haga clic en la pestaña [Plantilla de Mensaje] en la parte superior y desplácese hacia abajo para ver el campo [Archivos adjuntos] en la parte inferior de la ventana
Desde aquí puede especificar la variable de ID de campo personalizado que contiene su PDF, por ejemplo:
@#123456789#@
Hemos configurado OKTA SSO y hemos habilitado la opción "crear nuevo usuario si no hay coincidencia" en OKTA. Estamos tratando de configurar la aserción de creación de nuevo usuario SSO. En el lado de OKTA, el cliente ha agregado la aserción de nuevo usuario y cuando el nuevo usuario se crea en el sistema, está en blanco, es decir, no tiene dirección de correo electrónico, nombre ni apellido.
Por favor, asegúrese de que sus Atributos de Aserción de OKTA sean válidos, especialmente los siguientes, ya que son importantes para su configuración:
1. Nombre
2. Apellido
3. Correo electrónico
¿Cómo puedo renombrar automáticamente mis Actividades de Nivel-2? Quiero que el Nombre de Nivel-2 (campo estándar "Asunto") sea igual al nombre de su registro padre de Nivel-1.
Para establecer el campo estándar de Actividad L2 llamado "Asunto" igual al campo estándar L1 llamado "Nombre de la Aplicación", se puede usar la siguiente sintaxis dentro de su Fórmula de Plantilla de Nivel-2 que se encuentra en Menú >> Aplicaciones de Seguimiento >> [Editar] NombreUTA >> Actividad (pestaña) >> [Fórmula]:
@level2.subject@=@level1.name@
¿Cómo puedo localizar el ID interno de un Campo Personalizado?
Para localizar el valor de ID de un campo, debe navegar a:
Menú >> Aplicaciones de Seguimiento >> [Editar] su UTA que almacena estas Actividades
Desde aquí, debe hacer clic en Campos Estándar o Campos Personalizados dependiendo del tipo de campo para el que desea identificar el ID. Dentro de cualquiera de esas ventanas, verá una lista de todos los campos actuales con su respectivo ID listado en el extremo derecho de la pantalla.
¿Cómo podemos usar nuestra propia hoja de estilos CSS única dentro de SmartSimple?
Las hojas de estilos CSS personalizadas pueden ser subidas navegando de la siguiente manera:
Menú --> Configuración Global --> pestaña Branding --> Colores y Estilos --> pestaña Clásico --> campo [Ruta de Hoja de Estilos Externa] al final de la página.
Encontré un flujo de trabajo que utiliza "Identificador de Llamada del Sistema", pero no estoy seguro de qué es.
La función de Llamada del Sistema de SmartSimple le proporciona la capacidad de ejecutar funciones del sistema predefinidas en el servidor y, en el proceso, evitar la creación de scripts del lado del cliente. Los beneficios de las Llamadas del Sistema son los siguientes:
1. Mejor rendimiento y seguridad ya que la ejecución del código ocurre en el servidor y no en el navegador del cliente.
2. Más estabilidad, ya que las Llamadas del Sistema son programadas por SmartSimple y optimizadas para la plataforma.
No necesita conocer JavaScript para usar esta función. El Identificador de Llamada del Sistema es el nombre de referencia usado para la Llamada del Sistema en el flujo de trabajo; estas Llamadas del Sistema pueden ser usadas desde un campo personalizado de Script de Navegador, con un ejemplo como:
<!--SysCall_function(@systemCallIdentifierName@)-->
¿Cuál es el enfoque recomendado para crear un Campo Personalizado de Selección de Ciudad o Pueblo que permita a alguien seleccionar una Ciudad de una lista de Ciudades?
Recomendamos utilizar una combinación de una Variable del Sistema junto con un tipo de Campo Personalizado Búsqueda - Opciones de Autocompletado que incluya la Variable del Sistema dentro de sus [Opciones Predefinidas].
1. Menú >> Configuración Global >> Sistema (pestaña) >> Variables del Sistema >> pestaña Variables del Sistema; desde aquí primero crearemos una nueva Variable del Sistema usando el botón [Nueva Variable del Sistema].
2. Nombre la nueva Variable del Sistema, como cityList y coloque todas las opciones seleccionables dentro del cuadro [Valor]. Todas las opciones de cadena de texto deben estar separadas por punto y coma, por ejemplo: Ciudad 1;Ciudad 2;Ciudad 3
3. Cree un nuevo campo personalizado Búsqueda - Opciones de Autocompletado dentro de su UTA y nivel deseado y coloque la Variable del Sistema en las [Opciones Predefinidas] del nuevo campo usando la siguiente sintaxis: @system.cityList@
Mejor Práctica: Formatos Correctos de Datos
Al almacenar cualquier información en cualquier sistema, es importante entender qué tipo de información se está manejando y formatearla en consecuencia. El propósito es almacenar la información de manera significativa para poder realizar cálculos o análisis sobre ella. Tome el ejemplo del nombre de una persona; la forma más fácil de almacenarlo sería en un solo campo llamado 'nombre'.
Sin embargo, surgen problemas más adelante si se manipula o analiza este campo de nombre. No puede separarse en nombre/apellido, lo que significa que los contactos no pueden ser ordenados por apellido si se desea. El campo de nombre no puede simplemente analizarse y separarse buscando un espacio vacío entre los nombres porque no podemos estar seguros del formato de los datos dentro del campo. Los usuarios pueden haber ingresado su segundo nombre también, o quizás su nombre está compuesto por dos palabras separadas... etc., resultando en múltiples espacios en nuestro campo de nombre. Para corregir este problema, se deben usar múltiples campos de entrada para un nombre. Estos campos obligan al usuario a ser específico y a ingresar los datos así. Esto puede hacerse usando campos separados para nombre, segundo nombre, apellido e incluso un campo de título para Jr./Sr.
Para que la información sea significativa y útil, debe estar formateada y almacenada correctamente. No es seguro intentar manipular datos no estructurados y sin formato en otro formato.
Use los siguientes pasos para asegurarse de que los datos se almacenen y representen correctamente:
1) Diseñe su arquitectura y esquema de manera significativa desde el principio (es decir, usando múltiples campos para almacenar un nombre en el ejemplo anterior).
2) Fuerce la entrada de datos en un formato específico de su elección (es decir, usando técnicas de validación y transformación de datos, validando que los usuarios solo puedan ingresar caracteres alfabéticos, apóstrofes y guiones como entrada de su nombre).
El área principal a considerar son los campos personalizados que crea y cómo los diseña. A continuación, algunos ejemplos específicos usando la opción de validación y formato de un campo de Texto de Línea Única:
1) Fecha/hora: Los valores de fecha/hora siempre deben almacenarse como un solo valor de Fecha/hora. El año, mes, día, fecha, día como números o palabras, así como la hora, etc., pueden extraerse de esto.
Considere cómo los campos de entrada estándar de fecha se dividen en fecha, hora y minuto, pero el sistema realmente almacena todos estos datos como un solo campo. MySQL (y la mayoría de las otras áreas para ordenamiento fácil) usa el formato "AAAA-MM-DD HH:MM:SS". Al usar la validación de Fecha en un campo personalizado, se almacena un formato uniforme de fecha en el sistema sin importar cómo cada usuario especifique la forma en que desea ver las fechas.
2) Números: Los números siempre deben ingresarse con precisión. Considere cómo almacenaría datos de moneda. Cuando usa la validación Numérica y formato de Moneda en un campo personalizado, el sistema realmente almacena el valor numérico con el número completo de decimales y sin símbolo de moneda (por ejemplo, "12.948576"). Sin embargo, cuando el sistema muestra este campo, se redondea a dos decimales y con símbolo de moneda (por ejemplo, "$12.95").
3) En General: Es importante tener un formato específico para cualquier dato estándar. Tome por ejemplo el código postal canadiense que uno podría ingresar como "M5V 2H1" o "M5V2H1" (entre otras variantes usando letras minúsculas/mayúsculas). La mejor práctica para este ejemplo sería hacer que el usuario siempre ingrese un formato específico con letras mayúsculas. Esto puede hacerse usando la configuración de validación de un campo personalizado.
Uso Correcto del Procesador de Variables
El Procesador de Variables es una funcionalidad integrada en SmartSimple que facilita el preprocesamiento y reemplazo dinámico de varios valores a lo largo del sistema, adaptado al contexto del usuario actual o del objeto que se está visualizando. Aunque el Procesador de Variables es una herramienta excepcionalmente poderosa y beneficiosa, es imprescindible entender los principios fundamentales que rigen su operación al configurarlo.
Los errores pueden ocurrir fácilmente, resultando en diversos grados de comportamiento indeseado, algunos de los cuales pueden ser sutiles y difíciles de detectar. Afortunadamente, estos problemas pueden evitarse fácilmente siguiendo las mejores prácticas que se indican a continuación.
Generalmente, cada vez que se recupera una variable para usar en un cálculo, evaluación o asignación a otro campo, es esencial encapsularla entre comillas dobles.
Fórmulas de Plantilla
Problema 1:
@level1.name@=@level1.owner.firstname@ @level1.owner.lastname@;
Explicación:
Al asignar un valor de cadena a un campo personalizado, la cadena debe estar entre comillas. Este ejemplo resultaría en un error del servidor y no se guardaría ningún dato en @level1.name@.
Problema 2:
@level1.name@='@level1.owner.firstname@ @level1.owner.lastname@';
Explicación:
Los nombres que contienen apóstrofes terminarán la cadena entre comillas simples (por ejemplo, si mi nombre es Chin O'Brien), causando un error del servidor y evitando que se guarde cualquier dato en @level1.name@.
Solución:
@level1.name@="@level1.owner.firstname@ @level1.owner.lastname@";
Siempre utilice comillas dobles alrededor de las cadenas para garantizar seguridad.
Scripts de Navegador
Problema 1:
frm.cf_@customfield.id@.value="";
Explicación:
En ciertos casos donde el valor del campo es nulo, el Procesador de Variables puede no reemplazar la variable con un valor en blanco, resultando en la visualización de frm.cf_@customfield.id@.value en la página. Esto interrumpirá este script específico y cualquier función de script subsecuente.
Solución:
document.getElementById("cf_@customfield.id@");
Problema 2:
var oppid=@opportunityid@;
Explicación:
Cuando la variable no existe o está en blanco, este script fallará, afectando posteriormente a todos los scripts siguientes.
Solución:
var oppid="@opportunityid@";
Condiciones de Visibilidad
Problema 1:
@opportunityid@>0
Explicación:
Al crear un nuevo Nivel 1, puede parecer que la condición funciona correctamente ya que el campo no es visible; sin embargo, esto causará errores de servidor porque el @opportunityid@ no se reemplaza, ya que ese valor aún no está disponible para nuevos Nivel 1. Un error resultará en que la condición de visibilidad falle constantemente, llevando a un comportamiento indeseado.
Solución:
"@opportunityid@"*1>0
Nota: Para este ejemplo específico, hay una configuración de casilla de verificación dentro de la configuración del campo personalizado que permite ocultar campos en objetos nuevos hasta que el objeto se guarde al menos una vez.
En Todas Partes
Problema 1:
@ReportProperty(12345,recordcount)@ + @custom number@
Explicación:
Si alguno de los valores mencionados está en blanco o es nulo, esto resultará en un error y no funcionará correctamente.
Solución:
"@ReportProperty(12345,recordcount)@"*1 + "@custom number@"*1
El *1 se utiliza para convertir explícitamente el resultado en un valor numérico. Esto es necesario para asegurar que si su @custom number@ incluye un carácter alfabético, el *1 lo convertirá en 0. Si, por alguna razón, usa un @ReportProperty()@ que devuelve vacío, entonces ""*1 también se convertirá en 0.
Problema 2:
No usar comillas dentro de condiciones @sslogic()@ o @sscalculation()@ también producirá errores, aunque estos pueden no ser inmediatamente evidentes ya que el @sslogic()@ no se muestra, lo que puede llevar a suposiciones incorrectas en ciertas situaciones.
Se deben tener en cuenta las siguientes consideraciones:
1) La variable .inRole siempre devolverá valores booleanos true o false, por lo tanto no es necesario encapsularla entre comillas dobles (por ejemplo, @me.inRole(Organization Contact)@).
2) Cuando el valor de la variable recuperada incluye comillas dobles, estas deben ser escapadas, o la variable debe estar entre comillas simples si se está seguro de que el valor de la variable no contiene comillas simples.
Mejor Práctica: Actualizaciones a un Campo
Texto Predeterminado
El método más sencillo para almacenar un valor en un campo es a través de la configuración disponible en la página de configuración del campo personalizado para campos de entrada de texto abierto, como Texto - Línea Única. Esta configuración funciona pre-poblando el campo de entrada en el formulario con el valor predeterminado designado cuando el campo no contiene ya un valor almacenado. Es necesario que el usuario guarde el formulario para retener el valor del campo.
Ventajas:
- Simple y eficiente
- Flexibilidad proporcionada a través de la configuración del campo personalizado (es decir, puede usarse como una opción de almacenamiento único, evitando que los usuarios editen el valor predeterminado del campo, y puede ocultarse o mostrarse en la página, o alternativamente, permitir que los usuarios modifiquen el valor predeterminado del campo)
- Visibilidad (es decir, los usuarios pueden ver el campo y confirmar el valor predeterminado antes de su guardado y almacenamiento real)
Campo de Valor Calculado
Este método permite actualizar un campo basado en una expresión ejecutada al cargar la página. Es aplicable únicamente al tipo de campo personalizado Especial - Valor Calculado. Esta configuración se realiza usando sintaxis de JavaScript y funciona poblando el campo de entrada en el formulario con la expresión especificada cada vez que se carga el formulario. Los usuarios deben guardar el formulario para asegurar que el valor del campo se almacene.
Ventajas:
- Simple y eficiente
- Se pueden ejecutar cálculos complejos mediante sintaxis JavaScript
- Procesamiento secuencial (es decir, al cargar la página, cada campo de Valor Calculado se evalúa en el orden de su secuencia de visualización)
- Visibilidad (es decir, los usuarios pueden ver el campo y confirmar el valor predeterminado antes de que se guarde y almacene)
El Valor se Almacena En
Este método permite duplicar un valor de campo y almacenarlo en otro campo. Se configura mediante la página de configuración del campo personalizado. Esta configuración funciona duplicando un valor de campo en otro campo cada vez que se guarda el primer campo. Los usuarios deben ingresar un valor en el primer campo para que este proceso ocurra.
Ventajas:
- Simple y eficiente
- Sincronización (es decir, puede usarse para sincronizar valores entre múltiples campos que representan el mismo conjunto de datos)
- Transparencia (es decir, funciona detrás de escena)
Fórmula de Plantilla
Este método permite actualizar un valor de campo detrás de escena. Está disponible en varias secciones y puede configurarse mediante la página de configuración de UTA, Roles de Usuario o Categorías de Empresa. Esta configuración se implementa usando sintaxis MySQL y funciona actualizando directamente el valor almacenado de un campo. Los usuarios deben guardar el formulario, y esta operación ocurre después de guardar, por lo que hace referencia a los valores más recientes de campo que se han guardado.
Ventajas:
- Capacidad para actualizar áreas diferentes más allá del formulario con el que el usuario está interactuando actualmente (es decir, una fórmula L2 puede usarse para actualizar un campo L1)
- Validez del lado del servidor (es decir, puede usarse para funciones de fecha/hora para referenciar la hora del servidor en el momento preciso de guardar)
- Se pueden realizar cálculos complejos mediante sintaxis MySQL
- Procesamiento secuencial (es decir, guardar un L3 resulta en la ejecución de fórmulas L3, seguido por fórmulas L2 y posteriormente fórmulas L1 en sucesión. Además, dentro de un bloque de fórmula de plantilla, cada línea individual se procesa en orden, permitiendo actualizar un valor de campo en una línea y referenciar el nuevo valor en la línea siguiente)
- Transparencia (es decir, funciona detrás de escena)
Tarea de Flujo de Trabajo
Este método proporciona un medio para actualizar un valor de campo detrás de escena. Se configura como una tarea dentro de un Flujo de Trabajo. El Flujo de Trabajo debe activarse contra el objeto cuyo campo requiere actualización.
Ventajas:
- Capacidad para actualizar áreas diferentes más allá del formulario con el que el usuario está interactuando actualmente
- Validez del lado del servidor (es decir, puede usarse para funciones de fecha/hora para referenciar la hora del servidor en el momento exacto de la ejecución del Flujo de Trabajo)
- Registro de auditoría inherente detallando cuándo se activó el flujo y quién lo inició
- Procesamiento secuencial (es decir, la capacidad de procesar otras tareas del Flujo de Trabajo antes y después. Nota: aunque las tareas del Flujo de Trabajo se ejecutan secuencialmente, los Flujos de Trabajo en sí operan de forma asincrónica en el servidor)
- Transparencia (es decir, funciona detrás de escena)
Orden de Operaciones de SmartSimple
Es imperativo que todas las personas posean una comprensión completa de los procesos fundamentales que ocurren y la secuencia en que tienen lugar al usar el sistema. La falta de comprensión sobre esta secuencia puede resultar en errores lógicos y, en ocasiones, comportamiento impredecible (considere la importancia del orden matemático de operaciones).
Como se ilustra a continuación, involucrarse en cualquier scripting conlleva riesgos considerables, ya que cualquier error introducido mediante configuración podría potencialmente interrumpir una parte significativa de la funcionalidad central del sistema. Examinemos la operación de un Nivel 3.
Iniciando un Nivel-3
1) El Procesador de Variables se ejecuta sobre toda la página múltiples veces en el siguiente orden. Este proceso ocurre del lado del servidor antes de que la página llegue al navegador del usuario. Al anticipar una alta carga de usuarios, es esencial considerar cuidadosamente nuestro uso del Procesador de Variables para optimizar el rendimiento.
- El Procesador de Variables sustituye variables @System.@
- El Procesador de Variables sustituye variables @me.@
- El Procesador de Variables sustituye variables @rootcompany.@
- El Procesador de Variables sustituye variables @ReportProperty()@
- El Procesador de Variables sustituye variables prefijadas @parent.@, @client.@, @owner.@, @branch.@, etc.
- El Procesador de Variables sustituye variables @standardfields@ y @customfields@
- El Procesador de Variables sustituye variables @xml.customfield@
- El Procesador de Variables sustituye consultas de vista de lista [#(?object=)#]
- El Procesador de Variables sustituye variables @System2.@
- El Procesador de Variables sustituye cálculos @sslogic y @sscalculation
- El Procesador de Variables sustituye variables @ReportProperty2()@
- El Procesador de Variables sustituye variables @ssencrypt, @ssescape y @sstranslate
2) La página es posteriormente enviada al navegador del usuario final.
3) Se ejecuta el script - _showhideheader(); que determina qué barras de título se muestran u ocultan, junto con campos de control dinámicos.
4) Se ejecuta el script - onloadfunc(); después de que todos los elementos de la página han sido completamente cargados.
5) Se ejecuta el script - SystemCall onload(); que inicializa y llama a la función del script aquí; sin embargo, el procesamiento real ocurre de forma asincrónica en el servidor.
Guardando un Nivel-3
6) Se ejecuta el script - savefunc(); al guardar un borrador, guardar o enviar.
7) Se ejecuta el script - sbfunc(); al guardar o enviar.
8) Se ejecutan varios scripts del sistema, que incluyen sanitizar y convertir todas las fechas/valores de entrada en formatos apropiados para almacenamiento en la base de datos.
9) La página es entonces enviada y publicada al servidor.
Procesos Post-Guardado para un Nivel-3
Los siguientes procesos se ejecutan discretamente en segundo plano después de que todos los campos del Nivel 3 han sido guardados y actualizados.
10) El script - SystemCall onsave(); fue inicializado y llamado antes del paso (9), pero el procesamiento real ocurre y se ejecuta en el servidor en este punto.
11) Lógica de Envío - verifica las condiciones y valores de campos personalizados basados en los valores guardados.
12) Fórmulas de Plantilla - se ejecutan fórmulas de plantilla basadas en los valores guardados en el siguiente orden:
- Fórmula global L3
- Fórmula de tipo L3
- Fórmula global L2
- Fórmula de tipo L2
- Fórmula global L1
- Fórmula de tipo L1
13) Flujos de Trabajo - se activan flujos de trabajo basados en el estado.
Calcular la diferencia entre dos fechas en horas - Campos Personalizados
Datediff() puede usarse para calcular la diferencia entre dos fechas en horas.
datediff([startdatefieldname],[enddatefieldname],'H')
Disparar una acción de guardado desde un campo personalizado 'Especial - Script de Navegador'
Actualice el valor ButtonID dentro de la siguiente sintaxis:
document.getElementById('submitbutton_2947').click();
Validación Condicional SmartCheck - Verificación de Fecha con Días Hábiles
Si el valor del campo FiscalSupport es Sí, y si el campo de fecha EventDate es menor que La Fecha de Hoy + 45 Días Hábiles entonces devuelve la siguiente alerta, "La fecha del evento debe estar al menos a 45 días de distancia"
if(form.getStr("cf_FinancialSupport") == "Yes"){ if(ssConvertDate(form.getStr("cf_EventDate"),"@dateformat@","yyyy-mm-dd") < "<!--@sscalculation(SS_FUNC.addbusdays('@date(currentdate)@',45))-->") { result.isPassed=false; result.addMsg("cf_@EventDate.id@","Event Date must be at least 45 days away"); }}
Generar una URL Dinámica que dirija a un Registro de Nivel 1 o 2
Nivel-1
https://alias.smartsimple.com/Apps/app_editevent.jsp?appid=xxxxxx&eventid=@opportunityid@
- Reemplace el appid=xxxxxx con su ID único de UTA que alberga el registro de Nivel-1, encontrado en la columna Administración del Sistema (icono de engranaje) >> Aplicaciones de Seguimiento >> [ID de Aplicación].
Nivel-2
https://alias.smartsimple.com/Apps/app_editevent.jsp?appid=xxxxxx&eventid=@eventid@
- Reemplace el appid=xxxxxx con su ID único de UTA que alberga el registro de Nivel-2, encontrado en la columna Administración del Sistema (icono de engranaje) >> Aplicaciones de Seguimiento >> [ID de Aplicación].