Python UiPath — как использовать классы с UiPath.Python.Activities

Вот изображение, показывающее активность области Python (версия 3.6 и целевой x64):

Объем Python

Python UiPath — как использовать классы с UiPath.Python.Activities

Основная проблема заключается в связи между обоими методами вызова Python, первый используется для запуска объекта класса, а второй — для доступа к методу этого класса. Вот изображение первого вызова свойств Python:

Вызвать метод инициализации Python

Python UiPath — как использовать классы с UiPath.Python.Activities

И вызов активности getNumberPlusOne:

Вызвать метод Python getNumberPlusOne

Python UiPath — как использовать классы с UiPath.Python.Activities

Выполняемый код Python:

class ExampleClass:
    def __init__(self,t,n):
        self.text = t
        self.number = n

    def getNumberPlusOne(self):
        return (self.number+1)

И, наконец, ошибка при выполнении второго метода Invoke Python:

An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.InvalidOperationException: Error invoking Python method ----> System.Runtime.Serialization.InvalidDataContractException: Type 'UiPath.Python.PythonObject' cannot be serialized. Consider marking it with the DataContractAttribute attribute, and marking all of its members you want serialized with the DataMemberAttribute attribute. If the type is a collection, consider marking it with the CollectionDataContractAttribute. See the Microsoft .NET Framework documentation for other supported types.

Любая идея о том, где ошибка и как взаимодействовать с выходным объектом, созданным в методе init?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
757
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я считаю, что это занятие было разработано с учетом простых сценариев, а не целых классов. Вот статья на их форуме сообщества, где пользователь Sergiu.Wittenberger подробно рассказывает.

Начнем с действия «Загрузить скрипт Python»: invoke python script

В моем случае локальная переменная «pyScript» является указателем на объект python, то есть на экземпляр ExampleClass.

Теперь есть действие Invoke Python Method — оно позволяет нам вызывать метод по имени. Однако кажется, что методы класса недоступны для UiPath — вы не можете просто набрать pyScript.MethodName(). invoke python method

Таким образом, кажется, что мы не можем получить доступ к методам класса (пожалуйста, докажите, что я ошибаюсь здесь!), но есть обходной путь, как показано Серхио. В вашем случае вы должны добавить еще один метод вне вашего класса, чтобы получить доступ к вашему объекту или управлять им:

class ExampleClass:
    def __init__(self,t,n):
        self.text = t
        self.number = n

    def getNumberPlusOne(self):
        return (self.number+1)


foo = ExampleClass("bar", 42)

def get_number_plus_one():
    return foo.getNumberPlusOne()

Обратите внимание, что это также означает, что экземпляр объекта создается в том же файле: foo. На данный момент это кажется единственным вариантом взаимодействия с объектом — опять же, я надеюсь, что кто-нибудь сможет доказать, что я ошибаюсь.

Для полноты картины вот результат:

Спасибо Вольфганг, это помогло. Это работает, как вы сказали.

Fernando 06.05.2019 15:27

Конечно вещь. Пожалуйста, рассмотрите возможность проверки этого как принятого ответа, если это помогло.

Wolfgang Radl 07.05.2019 11:39

Я хотел бы добавить к тому, что сказал вышеупомянутый пользователь, что вы должны убедиться, что импорт, который вы используете, находится в глобальных пакетах сайта, а не в venv, поскольку у Studio нет доступа к этому.

Кроме того, всегда добавляйте это:

import os
import sys

sys.path.append(os.path.dirname(os.path.realpath(__file__)))

в начало вашего кода. Опять же, ограничение реализации. (документы здесь: https://docs.uipath.com/activities/docs/load-script)

Делая это, я думаю, вы сможете создавать более сложные структуры, но я не проверял это.

Другие вопросы по теме