Campaign Classic - Requête incrémentale récupère tous les enregistrements au lieu des nouveaux uniquement ;

Dernière mise à jour : 2022-09-29

Description

Le client possède plusieurs requêtes incrémentielles qui ne fonctionnent pas comme prévu. Au lieu de récupérer de nouveaux enregistrements uniquement depuis leur dernière exécution, ils récupèrent tous les enregistrements à chaque fois, comme une Requête activité.

Résolution

Le coupable est le Nettoyage workflow.

Le Requête incrémentale le workflow fonctionne de cette manière :

  1. Conserver une table d'historique avec les résultats des itérations précédentes.
  2. Récupérez TOUTES les lignes de la requête cible.
  3. Filtrage de toutes les lignes présentes dans le tableau d’historique
  4. Ajoutez les résultats restants dans le tableau history pour le filtrage de l'itération suivante.

Ainsi, ce nom de table de travail de l’historique est de la notation suivante :

wkfhistoworkflowid activityName_

Désormais, pour les ID de workflow 0 (pour les clients où la variable xtknewid autorise des séquences négatives), nous voyons qu’il s’agit en fait de :

wkfhisto(uint)workflows activityName_

Bien que cela soit correct pour l’exécution des workflows.

Par exemple, l’activité incrémentale incremental1 de workflow ID=-1 crée un tableau wkfhisto4294967295_incremental1.

Ce qui manque c'est la Nettoyage workflow.

Ici, nous avons un code qui tente de supprimer des tables de travail des workflows supprimés.

Ici, un code dédié répertorie toutes les tables wkfhisto*, extrait le workflowId de leurs noms (à partir de la convention ci-dessus) et les supprime, à l’exception de celles dont les worklowID se trouvent dans la table xtkworkflow.

Cependant, il manque la variable uint partie

Il tente donc de rechercher un workflow avec l’ID 4294967295 au lieu de retransmettre cette information à l’entier. Ce workflow étant introuvable, cette table est supprimée. La prochaine fois que ce workflow s’exécute, la variable Requête incrémentale activité ne trouve pas de table d’historique existante et la crée en la considérant comme la toute première exécution.

Correction:

Le correctif pour ce problème est disponible dans la version Adobe Campaign Classic 20.1.1 (version 9122 et ultérieure).

Solutions que les clients peuvent utiliser :

Solution 1 : Arrêtez le workflow de nettoyage et exécutez-le par intermittence pour nettoyer la base de données et le disque dur jusqu’à ce que le correctif soit pris et disponible. Non recommandé si vous n’avez pas prévu de mise à niveau.

Solution 2 : Supposons que la variable Requête incrémentale L’activité est affectée et contournée en procédant de la même manière que la fonction Requête incrémentale en créant un schéma persistant destiné à contenir le contenu de la table d’historique. Utilisez une combinaison de Requête et Mise à jour de données pour imiter le comportement. Cela doit être effectué pour tous les workflows nécessitant la requête incrémentale.

Solution 3 :  Supposons que la variable Requête incrémentale L’activité est impactée et contournée en ajoutant un champ d’audit (tsCreated/tsLastModified) au schéma en question. Votre requête incrémentale sera alors convertie en activité de requête normale avec une clause où comme tscreated GetDate().

Solution 4 :

  • Créez une nouvelle séquence xtknewworkflows et initialisez-la à un élément éloigné des plages d’ID de workflow actuelles.
  • Modifiez le schéma xtkworkflow pour l’utiliser. pkSequence
  • Demandez au client de cloner tous les workflows concernés et de supprimer les workflows d'origine.
  • Une fois que le client est prêt pour une mise à niveau, supprimez ce correctif en revenant à xtknewId pour la création du workflow (afin d'éviter les surprises indésirables).

Sur cette page