Flux de travail
- Il est impératif de s’assurer que le flux de travail contient des connecteurs entre les tâches. Il doit y avoir un point de départ et un point d’arrivée définis, ou une connexion à un autre flux de travail.
- Lors de la mise en œuvre d’une logique de branchement dans les connecteurs de tâches, il est essentiel de prendre en compte chaque résultat potentiel dans vos conditions, en veillant à ce que chaque condition soit mutuellement exclusive. Évitez les conditions logiques qui se chevauchent.
- Confirmez que l’objet déclenchant le flux de travail est correctement activé. Par exemple, les modèles de niveau 1 doivent avoir les flux de travail activés et des flux de travail d’association spécifiques sélectionnés. Les organisations doivent sélectionner des flux de travail spécifiques pour les entreprises/contacts.
- Il n’est pas permis de configurer plusieurs flux de travail déclenchés par un seul statut.
- Vérifiez qu’il n’y a pas de syntaxe mal formée ou incorrecte dans les connecteurs de tâches ou le routage du flux de travail (par exemple, le routage d’une tâche d’accusé de réception).
Processeur de variables
- Assurez-vous que toutes les variables référencées dans le système sont systématiquement encapsulées entre guillemets doubles.
- Si certaines syntaxes, telles que [#(?object=)#], sont mal formées, cela peut entraîner l’affichage d’une page complètement blanche.
- Assurez-vous qu’il n’y a pas de balises de syntaxe non appariées, telles que sslogic imbriquées les unes dans les autres, ou de balises de fin sslogic manquantes. Lors de l’intégration de différentes syntaxes (par exemple, sslogic, sscalculation ou variables système), il est crucial de comprendre l’ordre des opérations de SmartSimple pour configurer ces éléments correctement.
- Soyez conscient de toutes les valeurs de retour possibles pour une variable. Si une valeur n’a jamais été enregistrée dans un champ, la syntaxe de la variable elle-même sera renvoyée (c’est-à-dire @variable@). De plus, une variable peut retourner une chaîne vide. Le processeur de variables prendra également en compte le formatage du champ et, par défaut, renverra le format configuré du champ, tel que le format monétaire ou de date. Cela doit être pris en compte lors de la manipulation de la valeur.
Javascript & MySQL
- La syntaxe Javascript est utilisée dans les zones affichées à l’utilisateur dans le navigateur. Par exemple, les paramètres de champ personnalisés pour la validation Javascript, les champs personnalisés de valeur calculée spéciale et les champs de script de navigateur spécial.
- La syntaxe MySQL est employée dans les zones en arrière-plan qui ne sont pas visibles par l’utilisateur. Par exemple, les formules de modèle, la logique de soumission et la logique de visibilité des champs personnalisés.
- L’opérateur d’égalité en Javascript est représenté par un double signe égal (==), tandis qu’en MySQL, il est représenté par un seul signe égal (=).
- Les valeurs de chaîne (texte) doivent être encapsulées entre guillemets (les guillemets doubles sont les plus sûrs), renforçant ainsi la recommandation d’encapsuler toujours les appels du processeur de variables entre guillemets.
Lors de l’exécution de vérifications conditionnelles sur les champs utilisant SSLOGIC(), IF() ou des instructions CASE depuis l’assistant de syntaxe de variable ou depuis les formules de modèle/type, comment puis-je faire en sorte que le système reconnaisse une valeur NULL/vide ?
if("@level1.fieldName.value@"="", 0, @level1.fieldName.value@)
est un exemple de retour de "0" si la variable @level1.fieldName.value@ renvoie un résultat vide.
J’essaie de calculer un ensemble de questions de notation en un score total. Les questions de notation sont des boutons radio à sélection unique. Lorsque j’essaie de sauvegarder l’enregistrement sans répondre aux questions de notation, les scores ne sont pas enregistrés.
Nous recommandons de créer une formule de type de niveau 1 pour effectuer ces mises à jour automatisées, en suivant les étapes suivantes :
(1) Menu >> Applications de suivi >> [Modifier] Gestionnaire de soumission >> onglet Application >> Types
(2) [Modifier] votre type d’enregistrement qui inclut vos scores
(3) Cliquez sur l’onglet [Processus] en haut
(4) Saisissez le code suivant dans la [Formule d’application], en remplaçant les variables par les noms de champ corrects utilisés dans votre environnement :
@level1.TotalScoreField@=@level1.1stScore@+@level1.2ndScore@+@level1.3rdScore@
Nous voulons ajouter environ 60 nouveaux budgets au Gestionnaire de budgets pour différentes succursales - quelle est la meilleure méthode pour y parvenir ?
Nous recommandons d’utiliser un chargeur automatique à cette fin ; téléchargez en masse tous vos budgets à l’aide d’un fichier CSV.
Pouvez-vous m’indiquer comment supprimer l’espace entre les phrases dans une invitation à une subvention ?
Vous pouvez essayer de remplacer les balises HTML <p> (paragraphe) par <br> (saut de ligne simple). Par exemple, en naviguant vers Menu >> Applications de suivi >> [Modifier] Gestionnaire de soumission >> onglet Subvention >> Modèles d’invitation >> [Modifier] Inviter des collaborateurs >> onglet Modèles d’email >> [Corps de l’email d’invitation] :
...
Votre signature ici,
<br>Administrateur
Nous voulons supprimer la section « Accords en attente » dans notre portail - comment pouvons-nous effectuer cette mise à jour ?
Pour supprimer les « Accords en attente » du portail, vous devez effectuer la navigation suivante :
Menu >> Paramètres globaux >> onglet Utilisateurs >> Portails >> [Modifier] Commun
Vous verrez ici toutes les pages de portail actives dans votre système. Vous devrez identifier la page de portail spécifique à vos rôles que vous ciblez. Une fois la bonne page de portail identifiée, cliquez sur [Modifier] à côté de son nom, puis cliquez sur le bouton [X] (Supprimer).
Comment pouvons-nous joindre un PDF à un email de confirmation ?
Si vous naviguez vers la tâche dans le flux de travail qui génère ces emails de confirmation, vous trouverez la section [Pièces jointes] dans la configuration qui permet de joindre un fichier (PDF) à l’email :
Menu >> Flux de travail >> [Modifier] NomDuFluxDeTravail >> Tâches (depuis le menu de gauche) >> Cliquez sur la tâche d’accusé de réception par email >> Cliquez sur l’onglet [Modèle de message] en haut et faites défiler vers le bas pour voir le champ [Pièces jointes] en bas de la fenêtre
À partir de là, vous pouvez spécifier la variable ID du champ personnalisé qui contient votre PDF, par exemple :
@#123456789#@
Nous avons configuré OKTA SSO et activé le paramètre « créer un nouvel utilisateur en cas d’absence de correspondance » dans OKTA. Nous essayons de configurer l’assertion de création de nouvel utilisateur SSO. Du côté OKTA, le client a ajouté l’assertion de nouvel utilisateur et lorsque le nouvel utilisateur est créé dans le système, il est vide - c’est-à-dire qu’il n’a ni adresse email, ni prénom ni nom.
Veuillez vous assurer que vos attributs d’assertion OKTA sont valides, en particulier les suivants, car ils sont importants pour votre configuration :
1. Prénom
2. Nom
3. Email
Comment puis-je renommer automatiquement mes activités de niveau 2 ? Je veux que le nom de niveau 2 (« Sujet » champ standard) soit le même que le nom de son enregistrement parent de niveau 1.
Pour définir le champ standard Activité de niveau 2 nommé « Sujet » égal au champ standard de niveau 1 nommé « Nom de la demande », la syntaxe suivante peut être utilisée dans votre formule de modèle de niveau 2 trouvée via Menu >> Applications de suivi >> [Modifier] NomUTA >> Activité (onglet) >> [Formule] :
@level2.subject@=@level1.name@
Comment puis-je localiser l’ID interne d’un champ personnalisé ?
Pour localiser la valeur de l’ID d’un champ, vous devez naviguer vers :
Menu >> Applications de suivi >> [Modifier] votre UTA qui stocke ces activités
À partir de là, vous devez cliquer soit sur Champs standard soit sur Champs personnalisés selon le type de champ pour lequel vous souhaitez identifier l’ID. Dans l’une ou l’autre de ces fenêtres, vous verrez la liste de tous les champs actuels avec leur ID respectif indiqué tout à droite de l’écran.
Comment pouvons-nous utiliser notre propre feuille de style CSS unique dans SmartSimple ?
Les feuilles de style CSS personnalisées peuvent être téléchargées en naviguant comme suit :
Menu --> Paramètres globaux --> onglet Marque --> Couleurs et styles --> onglet Classique --> champ [Chemin de la feuille de style externe] en bas de la page.
J’ai rencontré un flux de travail qui utilise « Identifiant d’appel système », mais je ne sais pas ce que c’est ?
La fonction Appel système de SmartSimple vous permet d’exécuter des fonctions système pré-définies sur le serveur et ainsi d’éviter la création de scripts côté client. Les avantages des appels système sont les suivants :
1. Meilleure performance et sécurité car l’exécution du code a lieu sur le serveur et non dans le navigateur client.
2. Plus stable, car les appels système sont programmés par SmartSimple et optimisés pour la plateforme.
Vous n’avez pas besoin de connaître JavaScript pour utiliser cette fonction. L’identifiant d’appel système est le nom de référence utilisé pour l’appel système dans le flux de travail - ces appels système peuvent être utilisés depuis un champ personnalisé Script navigateur, par exemple :
<!--SysCall_function(@systemCallIdentifierName@)-->
Quelle est la méthode recommandée pour créer un champ personnalisé de sélection de ville ou municipalité qui permet à quelqu’un de sélectionner une ville parmi une liste de villes ?
Nous recommandons d’utiliser une combinaison d’une variable système avec un type de champ personnalisé Recherche - Options d’auto-complétion qui inclut la variable système dans ses [Options prédéfinies].
1. Menu >> Paramètres globaux >> Système (onglet) >> Variables système >> onglet Variables système ; depuis ici, créez d’abord une nouvelle variable système avec le bouton [Nouvelle variable système].
2. Nommez la nouvelle variable système, par exemple cityList et placez toutes les options sélectionnables dans la boîte [Valeur]. Toutes les options sous forme de chaînes de texte doivent être séparées par des points-virgules, comme : Ville 1;Ville 2;Ville 3
3. Créez un nouveau champ personnalisé Recherche - Options d’auto-complétion dans votre UTA et niveau souhaité et placez la variable système dans les [Options prédéfinies] du nouveau champ en utilisant la syntaxe suivante : @system.cityList@
Meilleure pratique : Formats de données corrects
Lors du stockage d’informations dans un système, il est important de comprendre quel type d’informations vous traitez et de les formater en conséquence. Le but est de stocker les informations de manière significative afin de pouvoir effectuer des calculs ou des analyses. Prenons l’exemple du nom d’une personne ; la façon la plus simple de le stocker serait dans un seul champ appelé « nom ».
Cependant, des problèmes surviennent plus tard si une manipulation ou une analyse de ce champ nom est effectuée. Il ne peut pas être séparé en prénom/nom, ce qui signifie que les contacts ne peuvent pas être triés par nom de famille si on le souhaite. Le champ nom ne peut pas simplement être analysé et séparé en cherchant un espace vide entre les noms, car on ne peut pas être sûr du format des données contenues dans le champ. Les utilisateurs peuvent avoir saisi leur deuxième prénom, ou peut-être que leur prénom est composé de deux mots distincts, etc., ce qui entraîne plusieurs espaces dans le champ nom. Pour corriger ce problème, plusieurs champs de saisie doivent être utilisés pour un nom. Ces champs obligent l’utilisateur à être précis et à saisir les données en conséquence. Cela peut être fait en utilisant des champs séparés pour le prénom, le deuxième prénom, le nom de famille, et même un champ de titre pour Jr/Sr.
Pour que l’information soit significative et utile, elle doit être formatée et stockée correctement. Il n’est pas sûr d’essayer de manipuler des données non structurées et non formatées en un autre format.
Utilisez les étapes suivantes pour vous assurer que les données sont stockées et représentées correctement :
1) Concevez votre architecture et votre schéma de manière significative dès le départ (c’est-à-dire utiliser plusieurs champs pour stocker un nom dans l’exemple ci-dessus).
2) Forcez la saisie des données dans un format spécifique de votre choix (c’est-à-dire utiliser des techniques de validation et de transformation des données, en validant que les utilisateurs ne peuvent saisir que des caractères alphabétiques, des apostrophes et des traits d’union comme saisie de leur nom).
La principale zone à considérer est les champs personnalisés que vous créez et comment vous les concevez. Voici quelques exemples spécifiques utilisant l’option de validation et de formatage d’un champ Texte à ligne unique :
1) Date/heure : Les valeurs date/heure doivent toujours être stockées comme une seule valeur date/heure. L’année, le mois, la date, le jour en chiffres ou en mots, ainsi que l’heure, etc. peuvent tous être extraits de cette valeur.
Considérez comment les champs d’entrée de date standard sont divisés en une date, une heure et une minute, mais le système stocke en réalité toutes ces données dans un seul champ. MySQL (et la plupart des autres zones pour un tri facile) utilise le format « YYYY-MM-DD HH:MM:SS ». En utilisant la validation de date sur un champ personnalisé, un format de date uniforme est stocké dans le système, quel que soit le format choisi par chaque utilisateur pour afficher les dates.
2) Nombres : Les nombres doivent toujours être saisis avec précision. Considérez comment vous stockeriez des données monétaires. Lorsque vous utilisez la validation numérique et le formatage monétaire sur un champ personnalisé, le système stocke en réalité la valeur numérique avec toutes les décimales et sans symbole monétaire (c’est-à-dire « 12.948576 »). Cependant, lorsque le système affiche ce champ, il est arrondi à deux décimales et avec un symbole monétaire (c’est-à-dire « $12.95 »).
3) En général : Il est important d’avoir un format spécifique pour toute donnée standard. Prenons par exemple le code postal canadien que l’on pourrait saisir comme « M5V 2H1 » ou « M5V2H1 » (parmi d’autres variantes utilisant des lettres minuscules/majuscules). La meilleure pratique pour cet exemple serait d’imposer que l’utilisateur saisisse toujours un format spécifique avec des lettres majuscules. Cela peut être fait en utilisant la configuration de validation d’un champ personnalisé.
Utilisation correcte du processeur de variables
Le processeur de variables est une fonctionnalité intégrée à SmartSimple qui facilite le pré-traitement et le remplacement dynamique de diverses valeurs dans tout le système, adapté au contexte de l’utilisateur actuel ou de l’objet affiché. Bien que le processeur de variables soit un outil exceptionnellement puissant et bénéfique, il est impératif de comprendre les principes fondamentaux qui régissent son fonctionnement lors de sa configuration.
Des erreurs peuvent facilement survenir, entraînant différents degrés de comportements indésirables, certains pouvant être subtils et difficiles à détecter. Heureusement, ces problèmes peuvent être facilement évités en respectant les meilleures pratiques suivantes.
En général, chaque fois qu’une variable est récupérée pour être utilisée dans un calcul, une évaluation ou une affectation à un autre champ, il est essentiel de l’encapsuler entre guillemets doubles.
Formules de modèle
Problème 1 :
@level1.name@=@level1.owner.firstname@ @level1.owner.lastname@;
Explication :
Lors de l’affectation d’une valeur chaîne à un champ personnalisé, la chaîne doit être entre guillemets. Cet exemple entraînerait une erreur serveur, et aucune donnée ne serait enregistrée dans @level1.name@.
Problème 2 :
@level1.name@='@level1.owner.firstname@ @level1.owner.lastname@';
Explication :
Les noms contenant des apostrophes termineront la chaîne entre guillemets simples (par exemple, si mon nom est Chin O'Brien), ce qui entraînera une erreur serveur et empêchera l’enregistrement des données dans @level1.name@.
Solution :
@level1.name@="@level1.owner.firstname@ @level1.owner.lastname@";
Utilisez toujours des guillemets doubles autour des chaînes pour garantir la sécurité.
Scripts de navigateur
Problème 1 :
frm.cf_@customfield.id@.value="";
Explication :
Dans certains cas où la valeur du champ est nulle, le processeur de variables peut ne pas remplacer la variable par une valeur vide, ce qui entraîne l’affichage de frm.cf_@customfield.id@.value sur la page. Cela perturbera ce script spécifique et toutes les fonctions de script suivantes.
Solution :
document.getElementById("cf_@customfield.id@");
Problème 2 :
var oppid=@opportunityid@;
Explication :
Lorsque la variable est inexistante ou vide, ce script échouera, affectant ensuite tous les scripts suivants.
Solution :
var oppid="@opportunityid@";
Conditions de visibilité
Problème 1 :
@opportunityid@>0
Explication :
Lors de la création d’un niveau 1, il peut sembler que la condition fonctionne correctement car le champ n’est pas visible ; cependant, cela provoquera des erreurs serveur puisque la valeur @opportunityid@ n’est pas remplacée, car cette valeur n’est pas encore disponible pour les nouveaux niveaux 1. Une erreur entraînera l’échec constant de la condition de visibilité, provoquant un comportement indésirable.
Solution :
"@opportunityid@"*1>0
Note : Pour cet exemple spécifique, il existe un paramètre de case à cocher dans la configuration du champ personnalisé qui permet de masquer les champs sur les nouveaux objets jusqu’à ce que l’objet soit enregistré au moins une fois.
Partout ailleurs
Problème 1 :
@ReportProperty(12345,recordcount)@ + @custom number@
Explication :
Si l’une des valeurs mentionnées est vide ou nulle, cela entraînera une erreur et ne fonctionnera pas correctement.
Solution :
"@ReportProperty(12345,recordcount)@"*1 + "@custom number@"*1
Le *1 est utilisé pour caster explicitement le résultat en une valeur numérique. Cela est nécessaire pour s’assurer que si votre @custom number@ contient un caractère alphabétique, le *1 le convertira en 0. Si, pour une raison quelconque, vous utilisez un @ReportProperty()@ qui renvoie vide, alors ""*1 sera aussi converti en 0.
Problème 2 :
Ne pas utiliser de guillemets dans les conditions @sslogic()@ ou @sscalculation()@ produira également des erreurs, bien que celles-ci ne soient pas immédiatement apparentes puisque @sslogic()@ ne s’affiche pas, ce qui peut conduire à des suppositions incorrectes dans certaines situations.
Les considérations suivantes doivent être prises en compte :
1) La variable .inRole renverra toujours des valeurs booléennes true ou false, il n’est donc pas nécessaire de l’encapsuler entre guillemets doubles (par exemple, @me.inRole(Organization Contact)@).
2) Lorsque la valeur de la variable récupérée contient des guillemets doubles, ceux-ci doivent être échappés, ou la variable doit être entourée de guillemets simples si vous êtes certain que la valeur de la variable ne contient pas de guillemets simples.
Meilleure pratique : Mises à jour d’un champ
Texte par défaut
La méthode la plus simple pour stocker une valeur dans un champ est via la configuration disponible sur la page des paramètres du champ personnalisé pour les champs de saisie texte libre, tels que Texte - Ligne unique. Ce paramètre fonctionne en pré-remplissant le champ de saisie sur le formulaire avec la valeur par défaut désignée lorsque le champ ne contient pas déjà une valeur enregistrée. L’utilisateur doit enregistrer le formulaire pour conserver la valeur du champ.
Avantages :
- Simple et efficace
- Flexibilité offerte par la configuration du champ personnalisé (c’est-à-dire qu’il peut être utilisé comme option de stockage unique, empêchant les utilisateurs de modifier la valeur par défaut du champ, et peut être masqué ou affiché sur la page, ou alternativement permettre aux utilisateurs de modifier la valeur par défaut du champ)
- Visibilité (c’est-à-dire que les utilisateurs peuvent voir le champ et confirmer la valeur par défaut avant son enregistrement réel)
Champ de valeur calculée
Cette méthode permet de mettre à jour un champ basé sur une expression exécutée au chargement de la page. Elle s’applique uniquement au type de champ personnalisé Spécial - Valeur calculée. Ce paramètre est configuré en utilisant la syntaxe JavaScript et fonctionne en remplissant le champ de saisie sur le formulaire avec l’expression spécifiée chaque fois que le formulaire est chargé. Les utilisateurs doivent enregistrer le formulaire pour que la valeur du champ soit stockée.
Avantages :
- Simple et efficace
- Des calculs complexes peuvent être exécutés via la syntaxe JavaScript
- Traitement séquentiel (c’est-à-dire qu’au chargement de la page, chaque champ de valeur calculée est évalué dans l’ordre de leur séquence d’affichage)
- Visibilité (c’est-à-dire que les utilisateurs peuvent voir le champ et confirmer la valeur par défaut avant qu’elle soit enregistrée et stockée)
La valeur est stockée dans
Cette méthode permet de dupliquer une valeur de champ et de la stocker dans un autre champ. Elle est configurée via la page des paramètres du champ personnalisé. Ce paramètre fonctionne en dupliquant une valeur de champ dans un autre champ chaque fois que le premier champ est enregistré. Les utilisateurs doivent saisir une valeur dans le premier champ pour que ce processus se produise.
Avantages :
- Simple et efficace
- Synchronisation (c’est-à-dire que cela peut être utilisé pour synchroniser les valeurs entre plusieurs champs représentant le même ensemble de données)
- Transparence (c’est-à-dire fonctionne en arrière-plan)
Formule de modèle
Cette méthode permet de mettre à jour une valeur de champ en arrière-plan. Elle est disponible dans diverses sections et peut être configurée via la page des paramètres UTA, les rôles utilisateur ou les pages de catégories d’entreprise. Ce paramètre est implémenté en utilisant la syntaxe MySQL et fonctionne en mettant à jour directement la valeur stockée d’un champ. Les utilisateurs doivent enregistrer le formulaire, et cette opération se produit après l’enregistrement, faisant référence aux valeurs de champ les plus récentes qui ont été enregistrées.
Avantages :
- Capacité à mettre à jour différentes zones au-delà du formulaire avec lequel l’utilisateur interagit actuellement (c’est-à-dire qu’une formule L2 peut être utilisée pour mettre à jour un champ L1)
- Validité côté serveur (c’est-à-dire peut être utilisé pour des fonctions date/heure pour référencer l’heure serveur au moment précis de l’enregistrement)
- Des calculs complexes peuvent être effectués via la syntaxe MySQL
- Traitement séquentiel (c’est-à-dire qu’en enregistrant un L3, les formules L3 sont exécutées, suivies des formules L2, puis des formules L1 successivement. De plus, dans un bloc de formule de modèle, chaque ligne individuelle est traitée dans l’ordre, permettant de mettre à jour une valeur de champ dans une ligne et de référencer la nouvelle valeur dans la ligne suivante)
- Transparence (c’est-à-dire fonctionne en arrière-plan)
Tâche de flux de travail
Cette méthode fournit un moyen de mettre à jour une valeur de champ en arrière-plan. Elle est configurée comme une tâche au sein d’un flux de travail. Le flux de travail doit être déclenché sur l’objet dont le champ doit être mis à jour.
Avantages :
- Capacité à mettre à jour différentes zones au-delà du formulaire avec lequel l’utilisateur interagit actuellement
- Validité côté serveur (c’est-à-dire peut être utilisé pour des fonctions date/heure pour référencer l’heure serveur au moment exact de l’exécution du flux de travail)
- Trace d’audit inhérente détaillant quand le flux de travail a été déclenché et l’individu qui l’a initié
- Traitement séquentiel (c’est-à-dire la capacité à traiter d’autres tâches de flux de travail avant et après. Remarque : bien que les tâches de flux de travail s’exécutent séquentiellement, les flux de travail eux-mêmes fonctionnent de manière asynchrone sur le serveur)
- Transparence (c’est-à-dire fonctionne en arrière-plan)
Ordre des opérations de SmartSimple
Il est impératif que toutes les personnes possèdent une compréhension complète des processus fondamentaux qui se produisent et de la séquence dans laquelle ils ont lieu lors de l’utilisation du système. Un manque de compréhension de cette séquence peut entraîner des erreurs logiques et, parfois, un comportement imprévisible (considérez l’importance de l’ordre mathématique des opérations).
Comme illustré ci-dessous, s’engager dans tout script comporte des risques considérables, car toute erreur introduite via la configuration pourrait potentiellement perturber une grande partie des fonctionnalités de base du système. Examinons le fonctionnement d’un niveau 3.
Initialisation d’un niveau 3
1) Le processeur de variables s’exécute sur toute la page plusieurs fois dans l’ordre suivant. Ce processus a lieu côté serveur avant que la page n’atteigne le navigateur de l’utilisateur. Lorsqu’on anticipe une forte charge utilisateur, il est essentiel de considérer attentivement notre utilisation du processeur de variables pour optimiser les performances.
- Le processeur de variables substitue les variables @System.@
- Le processeur de variables substitue les variables @me.@
- Le processeur de variables substitue les variables @rootcompany.@
- Le processeur de variables substitue les variables @ReportProperty()@
- Le processeur de variables substitue les variables préfixées @parent.@, @client.@, @owner.@, @branch.@, etc.
- Le processeur de variables substitue les variables @standardfields@ et @customfields@
- Le processeur de variables substitue les variables @xml.customfield@
- Le processeur de variables substitue les requêtes de vue liste [#(?object=)#]
- Le processeur de variables substitue les variables @System2.@
- Le processeur de variables substitue les calculs @sslogic et @sscalculation
- Le processeur de variables substitue les variables @ReportProperty2()@
- Le processeur de variables substitue les variables @ssencrypt, @ssescape, et @sstranslate
2) La page est ensuite envoyée au navigateur de l’utilisateur final.
3) Le script - _showhideheader(); est exécuté, déterminant quelles barres de titre sont affichées ou masquées, ainsi que les champs de contrôle dynamiques.
4) Le script - onloadfunc(); est exécuté après que tous les éléments de la page ont été complètement chargés.
5) Le script - SystemCall onload(); s’initialise et appelle la fonction script ici ; cependant, le traitement réel se produit de manière asynchrone côté serveur.
Enregistrement d’un niveau 3
6) Le script - savefunc(); est exécuté lors de l’enregistrement d’un brouillon, de l’enregistrement ou de la soumission.
7) Le script - sbfunc(); est exécuté lors de l’enregistrement ou de la soumission.
8) Le script - diverses fonctions système sont exécutées, incluant la sanitisation et la conversion de toutes les dates/valeurs saisies dans des formats appropriés pour le stockage dans la base de données.
9) La page est ensuite soumise et postée au serveur.
Processus post-enregistrement pour un niveau 3
Les processus suivants sont exécutés discrètement en arrière-plan après que tous les champs de niveau 3 ont été enregistrés et mis à jour.
10) Le script - SystemCall onsave(); a été initialisé et appelé avant l’étape (9), mais le traitement réel se produit et s’exécute côté serveur à ce moment.
11) Logique de soumission - cela vérifie les conditions et les valeurs des champs personnalisés basées sur les valeurs de champ enregistrées.
12) Formules de modèle - les formules de modèle sont exécutées en fonction des valeurs de champ enregistrées dans l’ordre suivant :
- Formule globale L3
- Formule de type L3
- Formule globale L2
- Formule de type L2
- Formule globale L1
- Formule de type L1
13) Flux de travail - les flux de travail basés sur le statut sont ensuite déclenchés.
Calculer la différence entre deux dates en heures - Champs personnalisés
Datediff() peut être utilisé pour calculer la différence entre deux dates en heures.
datediff([startdatefieldname],[enddatefieldname],'H')
Déclencher une action de sauvegarde depuis un champ personnalisé 'Spécial - Script navigateur'
Mettez à jour la valeur ButtonID dans la syntaxe suivante :
document.getElementById('submitbutton_2947').click();
Validation conditionnelle SmartCheck - Vérification de date avec jours ouvrables
Si la valeur du champ FiscalSupport est Oui, et si le champ date EventDate est inférieur à la date d’aujourd’hui + 45 jours ouvrables , alors retourner l’alerte suivante : « La date de l’événement doit être au moins à 45 jours »
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"); }}
Générer une URL dynamique dirigeant vers un enregistrement de niveau 1 ou 2
Niveau 1
https://alias.smartsimple.com/Apps/app_editevent.jsp?appid=xxxxxx&eventid=@opportunityid@
- Remplacez appid=xxxxxx par votre ID UTA unique hébergeant l’enregistrement de niveau 1, trouvé dans la colonne Administration système (icône engrenage) >> Applications de suivi >> [ID de l’application].
Niveau 2
https://alias.smartsimple.com/Apps/app_editevent.jsp?appid=xxxxxx&eventid=@eventid@
- Remplacez appid=xxxxxx par votre ID UTA unique hébergeant l’enregistrement de niveau 2, trouvé dans la colonne Administration système (icône engrenage) >> Applications de suivi >> [ID de l’application].