1
votes

Comment empêcher UiPath de rester bloqué dans l'étape de macro d'appel?

J'appelle une macro à l'aide d'une macro d'appel dans UiPath Workflow. Le souci est un certain temps l'un des excels que les poignées de macro se figeront pour toujours, provoquant le blocage de l'exécution de la macro et le processus restera bloqué dans la macro d'appel pour toujours.

Existe-t-il un moyen de modifier le flux de travail UiPath afin que, si l'activité de macro d'appel n'est pas terminée dans les 15 minutes, le bot lève une exception?


0 commentaires

3 Réponses :


0
votes

Vous pouvez envelopper votre macro d'appel dans un parallèle où vous dans une deuxième branche avez un délai et une exception de jet. Le délai doit correspondre à la valeur de délai d'expiration souhaitée, c'est-à-dire 15 minutes.

Vous devez également avoir une variable locale de type boolean comme entrée de la propriété de condition dans le parallèle. Quand / si l'appel de macro revient, vous définissez ce booléen sur True, ce qui annule à son tour la branche de délai.

De cette façon, si l'exception est levée, le parallèle est quitté et le workflow continue. En fonction de votre comportement souhaité, vous voudrez peut-être envelopper le parallèle dans un essai.


0 commentaires

2
votes

Il existe un moyen de le faire, laissez-moi essayer de vous le présenter:

Vous aurez besoin de 3 variables pour votre solution comme ci-dessous:

  1. Un pour stocker votre temps d'attente jusqu'à ce qu'une exception soit levée de type TimeSpan
  2. Un pour déclarer votre heure de début de votre type d'exécution actuel de DateHeure
  3. Un pour informer si le temps d'attente par défaut d'exécution a été dépassé ou non de type Booléen

 entrez la description de l'image ici

Ensuite, vous devez utiliser Activité parallèle où sur votre champ d'application Excel et Exécuter la macro s'exécuteront avec une boucle While qui comparera constamment l'heure de début et votre temps d'attente défini. S'il dépasse la valeur de temps par défaut définie, une exception sera levée. Consultez l'exemple de solution ci-dessous:

 entrez la description de l'image ici

Dans ce cas, car nous entourons l'action Parallèle dans le bloc Try-Catch , vous devez spécifier l'expression d'exception dans la section Captures , car Lancer sera écrasé par Captures comme indiqué ci-dessous:

 entrez la description de l'image ici

La deuxième option est de le faire sans Try-Catch , puis l'exception Throw sera affichée, vérifiez la solution ci-dessous:

 entrez la description de l'image ici

Vous devez également modifier l'action Lancer en définissant le message d'exception en conséquence, comme illustré ci-dessous:

 entrez la description de l'image ici

J'espère que cela vous sera utile.


4 commentaires

J'ai essayé le code ci-dessus avec une simple fonction macro qui affiche une boîte de message. La boîte de message apparaît uniquement lorsque l'exception de délai d'expiration est levée.


Prarallel fonctionnera-t-il vraiment dans ce cas? Je pense que ce ne sera pas le cas car, lorsque la macro est en cours d'exécution, le bot exécute l'activité «Exécuter une macro». Ce n'est que lorsque la macro est terminée qu'elle en sortira. Pourra-t-il donc basculer vers l'autre branche parallèle (lors de l'exécution de l'étape «Exécuter une macro»)?


Oui, cela fonctionnera, la chose à ajouter est de changer la valeur de la variable booléenne (excecutionMacroComplete) en True si la macro a réussi. J'ai essayé en plaçant la macro d'attendre 2 minutes et la variable maxWaitTime à 1 minute. Gardez à l'esprit que si vous terminez l'action parallèle dans le bloc Try-Catch, tout ce que vous avez défini dans la section Catch sera affiché comme exception si vous n'utilisez pas Try and Catch, le message Throw sera affiché.


@automaticSoldier s'il vous plaît vérifier la réponse mise à jour et le commentaire ci-dessus.



0
votes

Réponse de @Konstantinos Palaiodimos est dans la bonne direction mais la branche 2 a une boucle qui s'exécuterait continuellement jusqu'à maxWaitTime et qui finirait par lancer une exception. Donc, pour garantir que le contrôle retourne à la branche 1 (portée Excel) après l'expiration du délai de vérification dans la branche 2 (Do while Loop), un délai doit être ajouté à la branche 2. S'il y a un retard dans la branche 2, le contrôle retournera à la branche 1 pendant ce délai pour vérifier si l'exécution de la macro est terminée ou non, si la macro n'est pas terminée, le contrôle revient à la branche 2 et le cycle continue jusqu'à maxWaitTime ou jusqu'à l'exécution de la macro se termine


0 commentaires