Article
· Jan 9 3m de lecture

Comment rejouer certaines lignes d'une source SQL à l'aide d'un adaptateur SQL (EnsLib.SQL.InboundAdapter)

Bonjour la communauté,

Lors de l'utilisation d'un Business Service de type SQL, il peut arriver que nous ayons besoin de rejouer certaines lignes de la table source.

Prenons comme exemple le Service Métier "from customer SQL" utilisant la classe générique

EnsLib.SQL.Service.GenericService

 

Différents cas se présentent, selon les paramètres utilisés sur ce Business Service

Premier cas :

Si le Business Service utilise uniquement KeyFieldName

Dans ce cas, pour retraiter les ID 123, 456 et 789, il suffira de les supprimer de la globale ^Ens.AppData pour le Business Service concerné par la référence "adaptor.sqlrow":

kill ^Ens.AppData("from customer SQL","adapter.sqlrow",123)
kill ^Ens.AppData("from customer SQL","adapter.sqlrow",456)
kill ^Ens.AppData("from customer SQL","adapter.sqlrow",789)

AUtre option: isi vous n'avez pas accès au terminal ou si vous souhaitez éviter toute manipulation system globals of IRIS interoperability, il est également possible de dupliquer temporairement le Service Métier en indiquant dans la requête les lignes que vous souhaitez retraiter

Example :

Avec le requête :

En regardant le contenu de la globale ^Ens.AppData, nous confirmons que les lignes concernées ont été retraitées sous le nom de notre nouveau Business Service "from customer SQL - temporary" :  

NB:si vous supprimez le Service Métier temporaire après avoir retraité les lignes souhaitées, rappelez-vous que la globale ^Ens.AppData ne sera pas supprimée. Ce qui signifie qu'en cas de recréation du Business Service sous le même nom, avec des lignes déjà traitées par ce Business Service temporaire, celles-ci ne seront pas prises en compte. La solution sera donc soit de supprimer les données concernées directement sur ^Ens.AppData, ou pour garantir que le nom temporaire du service métier est toujours unique. Exemple ci-dessous avec une copie de "from customer SQL" to "from customer SQL - restatement of January 8 2024"

Et le résultat dans ^Ens.AppData :

 

Second cas:

Si le Business Service est configuré avec une demande de suppression (DeleteQuery) comme :

UPDATE app.customer SET processed=1 WHERE ID=?

Et une query comme :

Dans ce cas, pour retraiter le client correspondant à l'ID 123, il suffira d'exécuter une mise à jour sur la source comme :

UPDATE app.customer SET processed=0 WHERE ID = 123

Et pour retraiter les ID 123, 456 et 789, une requête du type

UPDATE app.customer SET processed=0 WHERE ID in (123, 456, 789)

NB: ce cas suppose que vous ayez accès à la source SQL avec un compte utilisateur autorisé à mettre à jour la table concernée, ce qui n'est pas toujours garanti.

Autre option:  comme dans le premier cas, vous avez toujours la possibilité de créer un nouveau Service Métier temporaire en copiant le Service initial et en l'adaptant aux besoins de retraitement. (voir autre option du premier cas)

 

3ème cas:

Si le Business Service utilise le paramètre %LastKey, il ne sera pas possible d'indiquer séparément les différentes lignes à retraiter comme dans le cas précédent, mais seulement les ID supérieurs à la valeur de %LastKey.

With a query like :

Dans ce cas, mettez simplement à jour la globale ^Ens.AppData en indiquant la valeur minimale de %LastKey pour le Business Service concerné de l' "adaptor.sqlparam" en référence:

set ^Ens.AppData("from customer SQL","adapter.sqlparam","%LastKey")=120

AUtre option: là encore, comme dans le premier cas, vous avez toujours la possibilité de créer un nouveau Service Métier temporaire en copiant le Service initial et en l'adaptant aux besoins de retraitement. (voir Autre option du premier cas)

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer