CopyDynamicSchemaAPI : incluse dans le périmètre, globale
La classe CopyDynamicSchemaAPI fournit des méthodes et des points d’extension pour la duplication des métadonnées de schéma dynamique.
L’API CopyDynamicSchemaAPI accepte une catégorie dynamique spécifiée comme entrée et procède à la copie de toutes les métadonnées associées via un processus d’arrière-plan asynchrone. Les métadonnées incluent les catégories enfants, les membres de catégorie, les attributs, les ensembles de choix, les choix et les remplacements de choix.
Par exemple, le schéma de métadonnées est utilisé pour décrire les caractéristiques du produit telles que la couleur, la taille de l’écran ou la vitesse du réseau. Ces caractéristiques changent au fil du temps et le schéma permet de suivre ces changements entre les versions pour des éléments tels que l’assistance technique ou les garanties. CopyDynamicSchemaAPI vous permet de dupliquer ces volumes de métadonnées en une seule demande.
Cette API fournit un ID de transaction et une clé de vérification à des fins de sécurité et pour s’assurer que votre logique ne s’applique qu’aux opérations autorisées. Cette API permet en outre un nommage personnalisé et une duplication partielle en indiquant les enregistrements à ignorer dans le processus de copie. En cas d’échec d’une partie du processus de copie, le système lance automatiquement une restauration pour annuler toutes les modifications apportées au cours de l’opération.
Besoins
Cette API nécessite le module d’extension Dynamic Schema Support (com.glide.dynamic_schema) et le rôle d’administrateur ou de dynamic_schema_writer pour y accéder.
Méthodes des points d’extension
Ces méthodes de point d’extension définissent si le processus de copie s’applique à la transaction actuelle, si un enregistrement particulier est copié ou ignoré, et quel est le nouveau nom de la copie. Cela vous permet de contrôler s’il faut ignorer certaines métadonnées, renommer des éléments, appliquer des règles métier ou éviter de copier des informations sensibles.
Si aucun point d’extension n’est fourni, l’API copie tout (sauf si l’API est appelée avec l’une des méthodes skip, par exemple skipAttributes()) et génère des noms pour les éléments copiés.
- CopyDynamicSchemaAPI : verifyCopyOperation(String transactionId) - Appelé avant de copier chaque type de composant principal. Doit renvoyer la même clé de vérification fournie à getCopyApi(). Si la méthode renvoie null, la logique du point d’extension est ignorée pour cette opération.
- CopyDynamicSchemaAPI : shouldCopy(Objet recordData) - Si faux, ignore la copie de cet enregistrement.
- CopyDynamicSchemaAPI : getCopyName(Objet recordData) - Crée un nom personnalisé ou généré automatiquement pour la copie.
Workflow CopyDynamicSchemaAPI
- CopyDynamicSchemaAPI : getCopyApi(Chaîne categoryToCopy, chaîne verificationKey) - Crée un objet utilisé ultérieurement dans l’opération de copie et valide les entrées.
- CopyDynamicSchemaAPI : skipAttributes(), CopyDynamicSchemaAPI : skipChoiceSets(), CopyDynamicSchemaAPI : skipChoiceOverrides() - Paramètres prédéfinis permettant d’ignorer les attributs, les choix, les jeux de choix et les remplacements de choix pendant l’opération de copie. Doit être appelé avant runAsync().
- CopyDynamicSchemaAPI : getTransactionId() - Utilisé pour stocker l’ID de transaction afin que votre point d’extension puisse reconnaître cette opération de copie spécifique.
- CopyDynamicSchemaAPI : runAsync() - Démarre le processus de copie asynchrone et déclenche les points d’extension pour chaque enregistrement en cours de copie. Renvoie l’ID de transaction.
- Après runAsync(), le système exécute les méthodes de point d’extension que vous avez peut-être définies précédemment : verifyCopyOperation(), shouldCopy(), getCopyName().
Si une étape échoue, l’API restaure l’intégralité de la transaction. Vous pouvez surveiller l’état de l’opération dans la colonne Nom de la table Agent d’avancement [sys_progress_worker], avec un format de nom comme Copier le schéma dynamique – <ID de transaction>.
CopyDynamicSchemaAPI : getCopyApi(Chaîne categoryToCopy, chaîne verificationKey)
Crée et renvoie un objet CopyDynamicSchemaAPI utilisé pour exécuter l’opération de copie. Cette méthode est fournie dans la classe DynamicSchemaCopyController.
| Nom | Type | Description |
|---|---|---|
| categoryTocopy | Chaîne | Nom de l’espace de noms qui identifie de manière unique la catégorie donnée à partir de laquelle effectuer la copie. Exemple : Table : Catégories dynamiques [dynamic_categories], Colonne Nom avec espace de noms (calculé) Remarque : Vous devrez peut-être ajouter manuellement cette colonne à votre vue de table à l’aide de l’icône d’engrenage. |
| Clé de vérification | Chaîne | Clé de vérification pour autoriser l’opération de copie. Consultez CopyDynamicSchemaAPI : getTransactionId() pour plus d'informations. |
| Type | Description |
|---|---|
| Objet | Objet CopyDynamicSchemaAPI utilisé pour obtenir l’ID de transaction, effectuer la copie ou configurer une stratégie prédéfinie. Renvoie uniquement null si non autorisé. Lève une exception si non valide ou catégorie introuvable. |
L’exemple de script suivant montre comment utiliser getCopyApi() pour obtenir un objet CopyDynamicSchemaAPI qui vous permet de dupliquer une catégorie existante. Pour ce faire, l’exemple appelle getCopyApi() avec le nom avec espace de noms de la catégorie cible (tech_store/u_device_specs) où u_mobile_devices est le nom, et avec une clé de vérification (verification_key).
var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key");
api.runAsync();
Ce script renvoie un objet CopyDynamicSchemaAPI . Sortie :
{CopyDynamicSchemaAPI@13721}
Cet objet vous permet de surveiller l’opération, de configurer des paramètres prédéfinis selon vos besoins et d’initier le processus de copie à l’aide de méthodes d’API copyDynamicSchema supplémentaires.
CopyDynamicSchemaAPI : skipAttributes()
Préréglage permettant aux utilisateurs d’ignorer la copie d’attributs pendant l’opération de copie.
| Nom | Type | Description |
|---|---|---|
| Néant |
| Type | Description |
|---|---|
| Objet | Renvoie un objet CopyDynamicSchemaAPI avec les attributs omis. Utilisé pour obtenir l’ID de transaction, effectuer la copie ou configurer une stratégie prédéfinie. Renvoie uniquement null si non autorisé. Lève une exception si non valide ou catégorie introuvable. |
L’exemple suivant montre comment utiliser skipAttributes() pour ignorer la copie d’attributs. Les membres de la catégorie sont toujours copiés, mais lient à l’attribut d’origine, car les attributs eux-mêmes ne sont pas copiés. En outre, les choix ou remplacements de choix associés uniquement à des attributs ne sont pas inclus.
var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key");
api.skipAttributes().runAsync();
Sortie :
{CopyDynamicSchemaAPI@13721}
CopyDynamicSchemaAPI : skipChoiceOverrides()
Préréglage permettant aux utilisateurs d’ignorer la copie de tous les remplacements de choix pendant l’opération de copie.
| Nom | Type | Description |
|---|---|---|
| Néant |
| Type | Description |
|---|---|
| Objet | Renvoie un objet CopyDynamicSchemaAPI avec les remplacements de choix omis. Utilisé pour obtenir l’ID de transaction, effectuer la copie ou configurer une stratégie prédéfinie. Renvoie uniquement null si non autorisé. Lève une exception si non valide ou catégorie introuvable. |
L’exemple suivant montre comment utiliser skipChoiceOverrides(). Lorsque ce paramètre prédéfini est appliqué, aucun remplacement de choix n’est copié.
var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key");
api.skipChoiceOverrides().runAsync();
Sortie :
{CopyDynamicSchemaAPI@13721}
CopyDynamicSchemaAPI : skipChoiceSets()
Paramètre prédéfini permettant aux utilisateurs d’ignorer la copie de tous les ensembles de choix et les choix pendant l’opération de copie. Tous les éléments copiés qui auraient été liés à l’ensemble de choix ou au choix copié seront liés à l’ensemble de choix ou au choix d’origine à la place.
| Nom | Type | Description |
|---|---|---|
| Néant |
| Type | Description |
|---|---|
| Objet | Renvoie un objet CopyDynamicSchemaAPI avec des ensembles de choix et des choix omis. Utilisé pour obtenir l’ID de transaction, effectuer la copie ou configurer une stratégie prédéfinie. Renvoie uniquement null si non autorisé. Lève une exception si non valide ou si une catégorie est introuvable. |
L’exemple suivant montre comment utiliser skipChoiceSets(). Lorsque ce paramètre prédéfini est appliqué pour ignorer les ensembles de choix ou les choix dans l’opération de copie. Les remplacements de choix sont toujours copiés, mais liés au choix d’origine, car les choix eux-mêmes ne sont pas copiés.
var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key");
api.skipChoiceSets().runAsync();
Sortie :
{CopyDynamicSchemaAPI@13721}
CopyDynamicSchemaAPI : getTransactionId()
Génère et renvoie un ID de transaction unique pour chaque opération de copie démarrée. Cet ID est utilisé pour suivre l’opération et est transmis aux points d’extension pour validation et logique personnalisée. Cette méthode est fournie dans la classe DynamicSchemaCopyController.
L’ID de transaction est utilisé par les points d’extension tels que getCopyName() pour s’assurer que la logique personnalisée ne s’applique qu’à la transaction de copie correcte. Vous pouvez stocker cet ID dans une table personnalisée pour le référencer ultérieurement ou pour le coordonner avec d’autres scripts.
| Nom | Type | Description |
|---|---|---|
| Néant |
| Type | Description |
|---|---|
| Chaîne | ID de transaction pouvant être utilisé pour identifier l’opération de copie. Vous pouvez vérifier l’état de l’opération de copie dans la colonne Nom de la table Agent d’avancement [sys_progress_worker]. Format de dénomination : Copier le schéma dynamique <ID de transaction> |
L’exemple suivant montre comment utiliser getTransactionId() pour récupérer et stocker un ID de transaction avant de copier un schéma dynamique. L’utilisateur appelle getTransactionId() pour obtenir l’ID de transaction et le stocker dans une table personnalisée. Lorsque l’implémentation du point d’extension est appelée pendant le processus de copie, elle peut vérifier par rapport aux ID de transaction stockés pour déterminer si elle doit fournir une logique de dénomination personnalisée ou retourner null pour ignorer la transaction.
var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key");
var id = api.getTransactionId();
var gr = new GlideRecord("u_copy_transactions");
gr.initialize();
gr.setValue("u_transaction_id", id);
gr.insert();
api.runAsync();
La sortie renvoie l’ID unique de transaction :
“9a8e0f92ff5032103c16ffffffffff82”
CopyDynamicSchemaAPI : runAsync()
Démarre le processus de copie pour les composants de schéma dynamique et renvoie un ID de transaction pour identifier l’opération de copie. Cette méthode est fournie dans la classe DynamicSchemaCopyController.
La méthode runAsync() exécute l’opération de copie de manière asynchrone en arrière-plan et appelle les points d’extension getCopyName(),shouldCopy() et verifyCopyOperation() pendant le processus de copie pour personnaliser le nom et la sécurité. Pour afficher l’état de l’opération de copie, consultez la colonne Nom de la table Agent d’avancement [sys_progress_worker], colonne Nom avec le format de dénomination Copier le schéma dynamique - <ID de transaction>.
Si une partie de la copie échoue, l’API annule automatiquement tous les changements pour maintenir la cohérence des données.
| Nom | Type | Description |
|---|---|---|
| Néant |
| Type | Description |
|---|---|
| Chaîne | ID de transaction utilisé pour identifier l’opération de copie. Le processus de copie est asynchrone, mais vous pouvez vérifier l’état de l’opération de copie dans la colonne Nom de la table Agent d’avancement [sys_progress_worker] avec le format de dénomination Copier le schéma dynamique : <ID de transaction>.Le comportement de copie dépend de l’implémentation du point d’extension et des paramètres prédéfinis de méthode Ignorer. Les composants ne sont ignorés que si les préréglages de méthode skip() sont appelés ou si le point d’extension shouldCopy() renvoie false. |
L’exemple de script suivant montre comment lancer une opération de copie de schéma dynamique à l’aide de la méthode runAsync() où tech_store/u_device_specs/u_mobile_devices est le nom unique de la catégorie à copier et verification_key est une clé de vérification. Après avoir obtenu l’instance d’API de copie et stocké l’ID de transaction pour la référence du point d’extension, runAsync() commence le processus de copie pour tous les composants de schéma (catégories, membres de catégorie, attributs, ensembles de choix, choix et remplacements de choix).
var api = DynamicSchemaAPI.get().getCopyApi("tech_store/u_device_specs/u_mobile_devices", "verification_key");
api.runAsync();
Génère l’ID de transaction :
“9a8e0f92ff5032103c16ffffffffff82”
CopyDynamicSchemaAPI : getCopyName(Objet recordData)
Méthode de point d’extension permettant des noms personnalisés pour une copie ou un nom généré automatiquement s’il est vide ou nul. Cette méthode de point d’extension est fournie dans la classe JavaScript DynamicSchemaCopyController.
| Nom | Type | Description |
|---|---|---|
| recordData | Objet | Objet contenant les métadonnées de l’enregistrement :
|
| Type | Description |
|---|---|
| Chaîne | Nom proposé pour cet exemplaire. Erreurs possibles :
|
| Chaîne (vide ou nulle) | Nom généré automatiquement pour cette copie. |
Cet exemple montre une implémentation du point d’extension. Une fois que la méthode shouldCopy() renvoie la valeur vrai pour confirmer l’intention de l’utilisateur de copier l’enregistrement, l’utilisateur fournit un nom personnalisé pour la copie en définissant getCopyName(). Par exemple, l’utilisateur peut ajouter « _copy » au nom d’origine en tant qu’étiquette choisie, ou autoriser le système à générer automatiquement un nom.
var DynamicSchemaCopyController = Class.create();
DynamicSchemaCopyController.prototype = {
initialize: function() {},
verifyCopyOperation: function(transactionId) {
var transactionIdExist = new GlideRecord('u_copy_transactions');
transactionIdExist.addQuery('u_transaction_id', transactionId);
transactionIdExist.query();
if (transactionIdExist.hasNext()) {
return 'verification_key';
}
else {
return null;
}
},
shouldCopy: function(recordData) {
var namespacedNameSkip = [
'tech_store/u_device_specs/u_phone',
'tech_store/u_device_specs/u_storage'
];
var recordNamespacedName = String(recordData.get('namespaced_name'));
if (namespacedNameSkip.includes(recordNamespacedName)) {
return false;
}
return true;
},
getCopyName: function(recordData) {
return String(recordData.get('name') + '_copy');
},
type: 'DynamicSchemaCopyController'
};
Record's name + "_copy"CopyDynamicSchemaAPI : shouldCopy(Objet recordData)
Méthode de point d’extension pour créer des opérations de copie personnalisées en permettant aux utilisateurs de spécifier si un enregistrement particulier doit être copié. La méthode renvoie true si l’enregistrement doit être copié et false si elle doit être ignorée.
Cette méthode de point d’extension est fournie dans la classe DynamicSchemaCopyController et offre aux utilisateurs la possibilité de contrôler quels enregistrements sont inclus dans le processus de copie en fonction de leurs besoins.
| Nom | Type | Description |
|---|---|---|
| recordData | Hachage Java | HashMap Java contenant les métadonnées d’enregistrement :
|
| Type | Description |
|---|---|
| Booléen | Renvoie la valeur Vrai si une copie doit être effectuée et Faux dans les autres cas. Marqueur indiquant si une copie doit être effectuée. Valeurs valides :
|
Cet exemple montre une implémentation du point d’extension shouldCopy(). Une fois la vérification terminée, la méthode permet aux utilisateurs d’implémenter une logique de copie personnalisée, ce qui leur permet d’ignorer des enregistrements en fonction de critères tels que le nom, le namespaced_name, la table ou sys_id.
var DynamicSchemaCopyController = Class.create(); DynamicSchemaCopyController.prototype = {
initialize: function() {},
verifyCopyOperation: function(transactionId) {
var transactionIdExist = new GlideRecord(‘u_copy_transactions’);
transactionIdExist.addQuery(‘u_transaction_id’, transactionId);
transactionIdExist.query();
if (transactionIdExist.hasNext()) {
return ‘verification_key’;
}
else {
return null;
}
},
shouldCopy: function(recordData) {
var namespacedNameSkip = [
‘tech_store/u_device_specs/u_phone’,
‘tech_store/u_device_specs/u_storage’
];
var recordNamespacedName = String(recordData.get(‘namespaced_name’));
if (namespacedNameSkip.includes(recordNamespacedName)) {
return false;
}
return true;
},
getCopyName: function(recordData) {
return String(recordData.get(‘name’) + ‘_copy’);
},
type: 'DynamicSchemaCopyController'
};
Renvoie la valeur true si la namespaced_name n’est pas égale à tech_store/u_device_specs/u_phone ou tech_store/u_device_specs/u_storage.
CopyDynamicSchemaAPI : verifyCopyOperation(String transactionId)
Méthode de point d’extension utilisée pour vérifier l’ID de transaction de l’opération de copie avant de renvoyer la clé de vérification correspondante de getCopyApi(), garantissant la pertinence pour l’implémentation du point d’extension. Cette méthode de point d’extension est fournie dans la classe DynamicSchemaCopyController .
| Nom | Type | Description |
|---|---|---|
| ID de transaction | Chaîne | Chaîne unique qui identifie chaque opération de copie. |
| Type | Description |
|---|---|
| Chaîne | Clé de vérification de getCopyApi() ou nulle si l’ID de transaction n’est pas pertinent pour ce point d’extension. |
Cet exemple montre une implémentation du point d’extension verifyCopyOperation(). L’utilisateur doit vérifier l’ID de transaction associé à l’opération de copie avant de renvoyer la clé de vérification. La clé de vérification doit correspondre à la valeur fournie en tant qu’argument à la méthode getCopyApi( ).
var DynamicSchemaCopyController = Class.create(); DynamicSchemaCopyController.prototype = {
initialize: function() {},
verifyCopyOperation: function(transactionId) {
var transactionIdExist = new GlideRecord(‘u_copy_transactions’);
transactionIdExist.addQuery(‘u_transaction_id’, transactionId);
transactionIdExist.query();
if (transactionIdExist.hasNext()) {
return ‘verification_key’;
}
else {
return null;
}
},
shouldCopy: function(recordData) {
var namespacedNameSkip = [
‘tech_store/u_device_specs/u_phone’,
‘tech_store/u_device_specs/u_storage’
];
var recordNamespacedName = String(recordData.get(‘namespaced_name’));
if (namespacedNameSkip.includes(recordNamespacedName)) {
return false;
}
return true;
},
getCopyName: function(recordData) {
return String(recordData.get(‘name’) + ‘_copy’);
},
type: 'DynamicSchemaCopyController'
};
Sortie :
“verification_key”