Crée un système de script en python qui exécute du code C#

Fermé
Athroniaeth - 20 janv. 2022 à 00:00
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 20 janv. 2022 à 16:53
Bonjour,

Actuellement je travaille sur l'automatisation de SAP, pour ce faire j'ai créé une classe SAP avec des fonctions personnalisées pour pouvoir mieux gérer les erreurs et les imprévus de SAP. Ces fonctions me permettent de pouvoir automatiser beaucoup de données à grande échelle puisque l'application sort de la transaction lorsqu'elle est bloquée pour X raisons. Cette application est codée en C# (ce qui permet d'avoir un code structuré contrairement à VBA en plus d'avoir la librairie .NET)

Pour gagner en efficacité et praticité, j'ai voulu créer un système de script qui permettrait aux utilisateurs d'utiliser mes fonctions pour leurs propres automatisations SAP

Le problème est que C# n'est pas le langage le plus facile à apprendre pour effectuer la maintenance des scripts ou même pour créer des scripts d'automatisation. (Et les seules méthodes que j'avais trouvées étaient de lire un fichier et d'exécuter le code en C #, ce qui n'est pas du tout sécurisé)

Donc mon idée était d'avoir un système de script codé en C#, qui prendrait des fichiers python (python étant un langage facile à apprendre) pour utiliser mes fonctions que j'ai codées en C#

Existe-t-il un moyen simple de créer un système de script comme celui-ci ? ou d'avoir un système de script C# sécurisé avec des listes blanches de fonctions prédéfinies ?



Configuration: Windows / Opera 82.0.4227.58
A voir également:

3 réponses

yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
20 janv. 2022 à 07:17
bonjour,
Je ne comprends pas bien ce que tu appelles des "scripts".
Je connais des fichiers sources (python ou c#, des fichiers exécutables, ou des fichiers texte.
As-tu envisagé d'écrire un fichier texte contenant des ordres pour ton programme, et que ton programme c# lise ces ordres?
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
20 janv. 2022 à 07:43
Bonjour à vous 2.

Je rejoins yg_be c'est pas clair ta demande.

As tu envisagé une interface avec une listbox d'actions pré établies (Ouvrir un fichier SAP, Importer un csv, lancer le traitement bidule, etc....)?
L'utilisateur sélectionne les actions qu'il veut, dans le bon ordre, ça les place par exemple dans une seconde listbox.
Je choix de ces actions peut impliquer un paramètrage, par exemple quand il sélectionne "ouvrir un fichier SAP, ça ouvre une boite de dialogue pour choisir le fichier...)
Et l'utilisateur construit ainsi son scénario.
Scénario que tu peux ensuite enregistrer (en fichier texte par exemple) pour le réutiliser plus tard.

0
Bonjour à vous deux, je vais essayer de faire plus concret c'est vrai que je suis flou dans ma demande.

Fonctionnement :

J'ai une application C# (WindowsForm) avec lequel j'automatise SAP,
Pour le faire fonctionner je met en avance des programmes sous forme de classe (qui va par exemple intégrer des articles dans un contrat en utilisant 2 transactions SAP)

Quand on ouvre l'application, elle va me montrer les programmes (actuellement avec une listbox) que j'ai mis dedans et j'ai plus qu'a lui dire d'exécuter telle programme (en lui donnant un fichier Excel par avance avec des données et un identifiant SAP).

Dès que je valide, le programme ce lance, il ouvre/ce connecte SAP tout seul et exécute le programme, grâce à mes fonctions personnalisés.

Par exemple il y'a une fonction qui si à la fin d'une transaction si il vois qu'il n'est pas au menu, arrête tout sans sauvegarder et indique sur le fichier Excel en créant une nouvelle feuille que le programme à bugger sur X colonne et donc que cette colonne n'est pas valide et donc à vérifier par un humain.

Ce que je cherche a faire :

à la place d'avoir à retoucher au code du programme en permanence, j'aimerai que mon programme ai un système de script, je crée un fichier.txt par exemple avec le même code que j'aurai mis dans mon programme. Ainsi je pourrais dire au programme, tu va exécuter ce script dans "dossier/fichier.txt" avec les données "dossier/fichier.xlsx"

Cela permettrai de pouvoir laissé aux utilisateur de l'application un moyen d'avoir leurs propres programmes fait maison, mais j'ai deux problèmes :

- Le seul moyen que j'ai trouvé à ça est de programmer l'application pour qu'il exécute le code C# d'un fichier.txt (ce qui n'est pas sécurisé du tout)

- Les utilisateurs ne savent pour la majorité pas programmer

Ducou je cherche à faire ce système de script, avec du python de préférence vue qu'il est simple à apprendre, qui exécuterais mes fonctions SAP codé en C# dans mon application de manière sécurisé.

J'espère avoir été plus clair.

@Whismeril
Oui j'y ai pensé mais je trouve que ce genre de système assez limité, et je me disais qu'avoir un langage de programmation pour faire le script était mieux si l'utilisateur voulais faire quelque chose qui n'est pas possible de faire en passant par cet outil.

Mais c'est très certainement ce que je vais faire si je ne trouve pas de solution a mon système de script.
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Athroniaeth
20 janv. 2022 à 16:09
C'est quoi, un "programme sous forme de classe"? Tout cela fait-il partie de ton application WindowsForm, où sont-ce des composants indépendants?

Quand tu écris "à la place d'avoir à retoucher au code du programme en permanence", tu fais référence à quel programme?
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Athroniaeth
20 janv. 2022 à 16:17
Si je comprends bien, les "scenarios" disponibles sont codés en dur dans ton programme C#, et tu souhaite qu'ils soient constructibles à partir de python?

As-tu envisagé d'écrire un fichier texte contenant des ordres pour ton programme, et que ton programme c# lise ces ordres?

Le code python pourrait simplement préparer ce ficher avec le scenario, et un programme C# qui utilise ce scenario comme input?

Je n'ai pas compris le danger d'exécuter le code C# d'un fichier.txt: tout utilisateur ne peut-il pas faire cela à tout moment?
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
20 janv. 2022 à 16:53
En plus des questions de yg_be
Les utilisateurs ne savent pour la majorité pas programmer


Oui j'y ai pensé mais je trouve que ce genre de système assez limité, et je me disais qu'avoir un langage de programmation pour faire le script était mieux si l'utilisateur voulais faire quelque chose qui n'est pas possible de faire en passant par cet outil.


Si je comprends bien, tu espères faire apprendre python à des personnes (pour peu qu’elles le veuillent) pour qu’ensuite ils codent un script python qui va piloter ton programme C#.

Et bien la limitation est exactement la même qu’avec ma proposition. Ce qui n’est pas prévu dans le programme C# ne pourra pas être « scripté ». Et donc tu devras d’un côté aire évoluer le programme C# et en plus apprendre aux utilisateurs comment l’utiliser dans le script Python.

Donc ma proposition sera plus simple pour l’utilisateur, pas besoin d’apprendre un langage et l’utilisation devrait être assez intuitive.
Et même probablement que ce sera plus simple pour toi, car ça n’est pas très compliqué à réaliser et à maintenir.

En plus le gars à qui ça plait d’apprendre Python, il va vite se rendre compte qu’il n’a pas besoin de ton logiciel et écrire des scripts qui pilotent directement SAP pour faire ce qu’il a envie. (J’ai vérifié même si je n’en doutais pas, c’est parfaitement réalisable)

Bref en gros, selon moi, tu vas te prendre la tête avec les réfractaires, les « geeks » t’oublieront toi et ton logiciel dès qu’ils maîtriseront suffisamment Python pour ne plus avoir besoin de toi, et tu arriveras peut-être à faire quelque chose avec ceux qui sont entre deux.
0