Lab 5: Código final
Após o desenvolvimento e integração com o Orquestrador BotCity Maestro, o código final ficará semelhante a esse:
Projeto: Cadastro de produto no sistema Fakturama
def main():
maestro = BotMaestroSDK.from_sys_args()
execution = maestro.get_execution()
print(f"Task ID is: {execution.task_id}")
print(f"Task Parameters are: {execution.parameters}")
# Lista de produtos
products = [
{
"Item Number": 1,
"Name": "Laptop",
"Category": "Eletrônico",
"GTIN": "1234567890123",
"Supplier Code": "SUP001",
"Description": "Alto desempenho com as últimas especificações.",
"Price": 999.99,
"Cost Price": 799.99,
"Allowance": 50,
"Stock": 100
},
{
"Item Number": 2,
"Name": "Smartphone",
"Category": "Eletrônico",
"GTIN": "9876543210987",
"Supplier Code": "SUP002",
"Description": "Smartphone com recursos avançados de câmera e display.",
"Price": 699.99,
"Cost Price": 549.99,
"Allowance": 30,
"Stock": 150
},
{
"Item Number": 3,
"Name": "Tenis de corrida",
"Category": "Esporte",
"GTIN": "7654321098765",
"Supplier Code": "SUP003",
"Description": "Confortável e resistente, ideal para corridas.",
"Price": 89.99,
"Cost Price": 69.99,
"Allowance": 20,
"Stock": 200
}
]
bot = DesktopBot()
# Implement here your logic...
# Caminho onde está o executável Fakturama
path_fakturama = r"C:\Program Files\Fakturama2\Fakturama.exe"
if not os.path.exists(path_fakturama):
raise FileNotFoundError(f"O caminho {path_fakturama} não existe.")
# Variável para contar os produtos cadastrados com sucesso
success = 0
try:
# Abre o aplicativo do Fakturama
bot.execute(path_fakturama)
# Repetição para cada produto
for product in products:
# Preenche form com dados dos produtos
fill_product_form(bot, product, success)
status = AutomationTaskFinishStatus.SUCCESS
message = f"Produtos cadastrados com sucesso!"
except Exception as e:
print(f"Erro inesperado: {e}")
status = AutomationTaskFinishStatus.FAILED
message = f"Erro inesperado: {e}"
finally:
# Fecha o aplicativo do Fakturama
bot.alt_f4()
# Descomente para marcar esta tarefa como finalizada no BotMaestro
maestro.finish_task(
task_id=execution.task_id,
status=status,
message=message,
total_items= len(produtos),
processed_items= success
)
def fill_product_form(bot: DesktopBot, product: Dict[str, any], success: int) -> None:
try:
# Identifica e clica no botão "New product"
if not bot.find("new_product", matching=0.97, waiting_time=10000):
not_found("new_product")
bot.click()
# Preenche o campo "Item Number"
if not bot.find("item_number", matching=0.97, waiting_time=10000):
not_found("item_number")
bot.click_relative(137, 8)
bot.type_keys(str(product["Item Number"]))
# Avança e preenche o nome do produto
bot.tab()
bot.type_keys(product["Name"])
# Avança e preenche a categoria
bot.tab()
bot.type_keys(product["Category"])
# Avança e preenche o GTIN
bot.tab()
bot.type_keys(product["GTIN"])
# Avança e preenche o Supplier Code
bot.tab()
bot.type_keys(product["Supplier Code"])
# Avança e preenche a descrição
bot.tab()
bot.type_keys(product["Description"])
# Avança, seleciona tudo e preenche o campo Price
bot.tab()
bot.control_a()
bot.type_keys(str(product["Price"]))
# Avança, seleciona tudo e preenche o custo
bot.tab()
bot.control_a()
bot.type_keys(str(product["Cost Price"]))
# Avança e preenche a margem
bot.tab()
bot.type_keys(str(product["Allowance"]))
# Avança 2 vezes, seleciona tudo e preenche o estoque
bot.tab()
bot.tab()
bot.control_a()
bot.type_keys(str(product["Stock"]))
# Clica no botão "Save"
if not bot.find("botao_save", matching=0.97, waiting_time=10000):
not_found("botao_save")
bot.click()
# Fecha a aba do produto
bot.control_w()
# Incrementa a variável de sucesso
success += 1
except Exception as e:
print(f"Erro ao cadastrar produto: {product["Item Number"]} {product["Name"]}: {e}")
def not_found(label):
print(f"Element not found: {label}")
if __name__ == '__main__':
main()