Вызов скрипта python

Обсуждение Stimulsoft Reports.NET
Ответить
ALEX1990()
Сообщения: 3
Зарегистрирован: 28 июл 2016, 15:15

Вызов скрипта python

Сообщение ALEX1990() »

Здравствуйте, создал отчёт с помощью дизайнера, можно ли в него добавить кнопку через которую он будет запускать определённый скрипт на python.
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Вызов скрипта python

Сообщение Ivan »

Здравствуйте.

Извините, возможно мы не совсем точно поняли ваш вопрос.
Не могли бы вы более подробно описать вашу задачу?

Спасибо.
ALEX1990()
Сообщения: 3
Зарегистрирован: 28 июл 2016, 15:15

Re: Вызов скрипта python

Сообщение ALEX1990() »

У меня есть удалённый сервер с субд mysql, я через designer строю отчёт из этой бд хранящийся на нём, есть скрипт написанный на python который хранится на этом сервере,и записывает данные в БД. Можно ли в отчёт добавить кнопку,которая будет запускать этот скрипт.
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Вызов скрипта python

Сообщение HighAley »

Здравствуйте.

Вы можете использовать текстовый компонент или изображение и в его событии On Click нопасать код, который будет вызывать нужный скрипт.
Также вы можете добавить форму в отчёт, которая отображается до отчёта. На неё можно добавить кнопку с нужным вам кодом.

Спасибо.
ALEX1990()
Сообщения: 3
Зарегистрирован: 28 июл 2016, 15:15

Re: Вызов скрипта python

Сообщение ALEX1990() »

Извините а по этим вещам есть какие нибудь мануалы , чтобы посмотреть примерно.
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Вызов скрипта python

Сообщение HighAley »

Здравствуйте.

К сожалению, именно по этим вопросам документации нету.
Событие вы можете найти здесь
ClickEvent.png
ClickEvent.png (9.68 КБ) 4099 просмотров
В нём можно писать любой код C# или VB.NET. В зависимости от языка отчёта.

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Re: Вызов скрипта python

Сообщение Леонид »

День добрый!

Внесу свои два цента.

Разумеется вызвать можно всё что угодно, в т.ч. и скрипт Питона.

Не знаю, какая у вас система, но я скачал отсюда https://www.continuum.io/downloads#windows 32bit'ный дистрибутив и поставил в VM под Windows 7 32b.
Далее установил дистрибутив (файл Anaconda3-4.1.1-Windows-x86.exe), у меня он поставил его в C:\Users\leon\AppData\Local\Continuum\Anaconda3.

Теперь нужно создать новый отчёт и написать в нём код, вызывающий скрипт по событию. Для простоты, взял простой пример суммирования двух цифр (файл sum.py):

Код: Выделить всё

import sys

a = int(sys.argv[1]) 
b = int(sys.argv[2])

print (a+b)
Понятно, что у вас есть свой скрипт. Кстати, если он в базе хранится в базе данных, то, вероятно его придётся сначала скачать куда-нибудь в temp (например, C:\Users\%UserName%\AppData\Local\Temp), т.к. запускать нужно так: C:\Users\%UserName%\AppData\Local\Continuum\Anaconda3\python.exe sum.py 10 5, т.е. сам файл Питона, скрипт и параметры коммандной строки, в данном случае это два числа a и b.

Теперь код вызова в виде процедуры для C# из отчёта:

Код: Выделить всё

    internal string CallPythonScript(int a, int b, string scriptPath)
    {
      string python = @"C:\Users\leon\AppData\Local\Continuum\Anaconda3\python.exe"; // python exe path

      // create new process start info
      ProcessStartInfo startInfo = new ProcessStartInfo(python)
      {
        UseShellExecute = false,
        RedirectStandardOutput = true,
        Arguments = string.Format("{0} {1} {2}", scriptPath, a, b)
      };

      Process process = new Process()
      {
        StartInfo = startInfo
      };

      // start the process
      process.Start();

      // read output value
      StreamReader myStreamReader = process.StandardOutput;
      string result = myStreamReader.ReadLine();

      // wait process to exit
      process.WaitForExit();
      process.Close();

      return result;
    }
Прописываете эту процедуру в коде отчёта, не забывая также добавить в using:

Код: Выделить всё

using System;
using System.IO;
using System.Diagnostics;
Создаём, например форму отчёта с двумя Text и одним Button и для простоты вызываем скрипт по событию Click:

Код: Выделить всё

// parse values from text boxes
int a = int.Parse(tbTextA.Text);
int b = int.Parse(tbTextB.Text);

// execute Python script
string result = CallPythonScript(a, b, @"C:\Temp\sum.py");

// show the result
MessageBox.Show(result);
Собственно всё. Скриншоты в приложении. Полностью рабочий вариант отчёта с процедурой в приложении. Остаётся только утсановить Python, если не установлен.
Самое главное, проверяйте пути откуда запускаете Питона и путь к скрипту, это экстремально важно.
Вложения
PythonTest.mrt
Рабочий пример отчёта
(8.27 КБ) 340 скачиваний
Результат выполнения сложения двух чисел
Результат выполнения сложения двух чисел
Clipboard02.png (7.16 КБ) 4084 просмотра
Вкладка Code у тестового отчёта
Вкладка Code у тестового отчёта
Clipboard01.png (75.32 КБ) 4084 просмотра
Ответить