- Introdução
- Configuração e Instalação
- Projetos de automação
- Dependências
- Tipos de fluxos de trabalho
- Fluxo de controle
- Comparação de arquivos
- Melhores Práticas de Automação
- Integração de controle de origem
- Sobre o controle de versões
- Como gerenciar projetos com o TÁS
- Como gerenciar projetos com o SN
- Dif. do fluxo de trabalho
- O painel Controle de origem
- Depuração
- Geração de logs
- A ferramenta de diagnóstico
- Analisador de Fluxo de Trabalho
- Sobre o Analisador de Fluxo de Trabalho
- STN MG-001 - Convenção de nomenclatura de variáveis
- STN MG-002 - Convenção de nomenclatura de argumentos
- STN MG-004 - Duplicação de Nome de Exibição
- STN MG-005 - Variável substitui variável
- STN MG-006 - Variável substitui argumento
- STN MG-008 - Comprimento de variável excedido
- STN MG-009 - Variáveis Catablema de prefixo
- STN MG-011 - Argumentos Catablema de prefixo
- STN MG-012 - Valores padrão de argumentos
- STN MG-016 - Comprimento do argumento excedido
- ST-NMG-017 - O nome da classe corresponde ao namespace padrão
- SR-DB-002 - Contagem alta de argumentos
- SR-DB-003 - Esvaziar bloco catechu
- SR-DB-007 - Múltiplas camadas Com fluxograma
- ST-DPB-010 - Várias instâncias de [Fluxo de trabalho] ou [Caso de teste]
- SR-DB-020 - Propriedades de saída indefinidas
- SR-DB-021 - Tempo limite embutido em código
- SR-DB-023 - Fluxo de trabalho vazio
- SR-DB-024 - Verificação da atividade Persistente
- SR-DB-025 - Pré-requisito de serialidade de variáveis
- SR-DB-027 - Melhores práticas de persistência
- SR-DB-028 - Pré-requisito de serialidade de argumentos
- ST-USG-005 - Propriedades de atividade codificadas
- SR-US-009 - Variáveis não utilizadas
- SR-US-010 - Dependências não utilizadas
- SR-US-014 - Restrições de pacotes
- ST-USG-017 – Modificador de parâmetro inválido
- SR-US-020 - Mensagens de logue mínimas
- SR-US-024 - Não utilizado e postergado
- SR-US-025 - Uso incorreto do valor salvo
- SR-US-026 - Restrições da atividade
- SR-US-027 - Pacotes necessários
- ST-USG-28 — restringir modelos de invocação de arquivos
- ST-USG-032 — rótulos obrigatórios
- ST-USG-034 — URL do Automation Hub
- Variáveis
- Argumentos
- Namespaces Importados
- Automações codificadas
- Introdução
- Registro de serviços personalizados
- Contextos Antes e Depois
- Gerando código
- Geração de caso de teste codificado a partir de casos de teste manuais
- Escrevendo fluxos de trabalho codificados compatíveis com a tela
- Integração do OpenAI com fluxos de trabalho codificados
- Solicite um empréstimo com o UiBank
- Geração de filas com fluxos de trabalho codificados e APIs do Orchestrator
- Usando projetos de biblioteca importados em automações codificadas
- Usando autenticação de dois fatores em automações codificadas
- Conexão com MongoDB Atlas com automações codificadas
- Solução de problemas
- Automação assistida baseada em gatilho
- Repo. de Objetos
- A ferramenta ScreenScrapeJavaSupport
- Extensões
- Sobre extensões
- Ferramenta SetupExtensions
- UiPathRemoteRuntime.exe não está sendo executado na sessão remota
- O UiPath Remote Runtime bloqueia a sessão do Citrix de ser fechado
- O UiPath Remote Runtime causa vazamento de memória
- O pacote UiPath.UIAutomation.Activities e as versões do UiPath Remote Runtime não correspondem
- A extensão do UiPath necessária não está instalada na máquina remota
- Configurações de resolução de tela
- Políticas de grupo
- Não é possível se comunicar com o navegador
- A extensão do Chrome é removida automaticamente
- A extensão pode ter sido corrompida
- Verifique se a extensão para o Chrome está instalada e habilitada
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Habilite o Acesso às URLs do arquivo e o Modo Anônimo
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- Lista de extensões para Chrome
- Extensão do Chrome no Mac
- Políticas de grupo
- Não é possível se comunicar com o navegador
- A extensão Edge é removida automaticamente
- A extensão pode ter sido corrompida
- Check if the Extension for Microsoft Edge is installed and enabled
- Check if ChromeNativeMessaging.exe is running
- Check if ComSpec variable is defined correctly
- Enable access to file URLs and InPrivate mode
- Multiple browser profiles
- Group Policy conflict
- Known issues specific to MV3 extensions
- Lista de extensões para Edge
- Extensão para Safari
- Extensão para Amazon WorkSpaces
- Plug-in do SAP Solution Manager
- Suplemento do Excel
- Teste do Studio
- Solução de problemas
- Sobre a solução de problemas
- Erros de compilação de montagem
- Suporte e limitações do Microsoft Apo-V
- Solução de problemas do Internet Explorer x64
- Problemas do Microsoft Office
- Como identificar elementos de EU em PDF com opções de acessibilidade
- Reparando o suporte da Active Accessibility
- Validation of large Windows-legacy projects takes longer than expected
Recomendações para estruturar fluxos de trabalho codificados para que o Visualizador de pouco código os renderize como diagramas de pouco código limpos e legíveis.
Um pouco de estrutura ajuda muito em uma tela limpa. As recomendações abaixo ajudam o Visualizador de pouco código a renderizar seu fluxo de trabalho codificado como blocos de pouco código legíveis em vez de blocos de código opacos. Elas são ordenadas por impacto, começando pelas alterações mais importantes.
Serviços da UiPath sobre código programado manualmente
Chamadas para os serviços do projeto — system.AddQueueItem(...), excel.ReadRange(...), mail.SendSmtp(...), uiAutomation.Click(...) — renderizadas como cartões de atividades avançados: um nome de exibição amigável, o ícone do serviço, propriedades editáveis e uma variável de saída digitada.
A mesma operação implementada do zero — com HttpClient, System.IO ou uma biblioteca do NuGet Excel — é renderizada, no melhor dos casos, como um cartão Atribuir contendo uma expressão longa, e no pior dos casos, como um bloco de código. Alcançar os pacotes de atividades primeiro e soltar no C# personalizado apenas onde nenhuma atividade cobrir a necessidade, mantém mais o fluxo de trabalho visível.
// Renders as a "Write Range" activity card with editable properties:
excel.WriteRange("C:\\out.xlsx", "Sheet1", "A1", table);
// Renders as an opaque code block:
using var writer = new StreamWriter("C:\\out.csv");
// Renders as a "Write Range" activity card with editable properties:
excel.WriteRange("C:\\out.xlsx", "Sheet1", "A1", table);
// Renders as an opaque code block:
using var writer = new StreamWriter("C:\\out.csv");
O método de entrada como uma camada de orquestração
A visualização do Gráfico desenha apenas o método de entrada ([Workflow] ou Execute). Cada chamada para um de seus próprios métodos torna-se um único bloco rotulado e, ao selecioná-lo, detalha o auxiliar.
Manter a ramificação de nível superior, loops e tratamento de erros no método de entrada e mover sequências de etapas detalhadas para métodos privados bem nomeados, faz com que o gráfico seja lido como um fluxo limpo e de alto nível — ValidateInvoice → PostToQueue → NotifyFinance — em vez de uma barreira de cartões de baixo nível. Cada auxiliar também recebe sua própria seção na visualização do fluxo de trabalho, portanto, nada fica oculto. Os nomes que revelam a intenção importam dobro aqui: o nome do método é o rótulo do bloco.
Controle o fluxo como instruções, não expressões
A tela só pode desenhar ramificações e loops que existem no nível da instrução. A lógica oculta dentro de expressões — lambdas, cadeias de Consultas Integradas a Idiomas (linQ), ternários aninhados ou expressões switch — é compactada em um único cartão, que anula o propósito do visualizador.
Vale a pena notar a distinção: uma switch switch instrução é renderizada totalmente, como um contêiner Switch com um robô por caso, enquanto o formulário de expressãovar label = total switch { ... }; () permanece compactado dentro de um único cartão Assign. O formulário de instrução é a melhor escolha quando a ramificação é uma etapa do processo que o leitor deve ver.
// Invisible logic — one code block, the filtering and branching are not drawn:
invoices.Where(i => i.Amount > 1000).ToList().ForEach(i => Approve(i));
// Visible logic — a loop containing a decision containing an Invoke block:
foreach (var invoice in invoices)
{
if (invoice.Amount > 1000)
{
Approve(invoice);
}
}
// Invisible logic — one code block, the filtering and branching are not drawn:
invoices.Where(i => i.Amount > 1000).ToList().ForEach(i => Approve(i));
// Visible logic — a loop containing a decision containing an Invoke block:
foreach (var invoice in invoices)
{
if (invoice.Amount > 1000)
{
Approve(invoice);
}
}
Um One-liner linQ ainda é adequado quando é uma planilha simples cujos detalhes você ocultaria felizmente (var names = rows.Select(r => r.Name).ToList(); é renderizado como um cartão Atribuir). A regra geral: se um leitor do diagrama ver a ramificação, escreva-a como if, switch ou foreach.
Equivalentes renderizáveis para construções de fallback
Várias construções comuns retornam a blocos de código. Cada um tem um equivalente renderizável que produz blocos visíveis.
| Em vez de | Gravar | Porque |
|---|---|---|
list.ForEach(x => ...) | foreach (var x in list) | O corpo se torna blocos visíveis |
| Funções locais | Métodos privados | Métodos privados renderizados como blocos navegáveis Invoke |
using var handle = excel.UseWorkbook(...); | using (var handle = excel.UseWorkbook(...)) { ... } | O formulário de bloco é renderizado como um quadro de escopo e permite que as chamadas em handle dentro dele sejam resolvidas como atividades |
int a = 1, b = 2; | Uma declaração por linha | Cada um se torna seu próprio cartão Atribuir |
string result; ... result = ...; depois | Uma declaração com um inicializador no primeiro uso | Declarações vazias retornam a blocos de código |
Declarações de variáveis embutidas, uma por instrução
Uma declaração com um inicializador é renderizada como um cartão Atribuir (ou como a saída de um cartão de atividade) e alimenta o painel Variáveis por método. Uma declaração bruta é renderizada como um bloco de código. Declarar cada variável onde seu valor é produzido pela primeira vez a mantém visível.
var asset = system.GetAsset("Config"); // activity card, output: asset
int retryCount = 0; // Assign card, typed
var asset = system.GetAsset("Config"); // activity card, output: asset
int retryCount = 0; // Assign card, typed
Tipos explícitos em que o visualizador não pode inferi-los
A tela rotula cada variável de saída com o melhor tipo que ela pode encontrar:
- Para chamadas de atividade reconhecidas, o tipo vem dos metadados do pacote automaticamente.
var asset = system.GetAsset(...)já exibe o tipo de retorno real, entãovarnão custa nada lá. - Para todo o resto — atribuições simples, chamadas para seus próprios métodos e expressões computadas —
varexibe literalmente comovar. Um tipo explícito coloca o tipo real no cartão e no painel Variáveis.
var totals = ComputeTotals(rows); // Variables panel shows: totals : var
DataTable totals = ComputeTotals(rows); // Variables panel shows: totals : DataTable
var totals = ComputeTotals(rows); // Variables panel shows: totals : var
DataTable totals = ComputeTotals(rows); // Variables panel shows: totals : DataTable
Comentários que descrevem a intenção
Um comentário // colocado diretamente acima de uma atividade, chamada de método, if, foreach, for, switch, try, return, ou #region estiver anexado a esse bloco. Ele se torna a descrição do cartão na visualização do Gráfico, a dica de ferramenta de linha na visualização do Fluxo de Trabalho e o campo Descrição no painel de propriedades. Linhas de comentário consecutivas são unidas.
// High-value invoices need manual approval before posting
system.AddQueueItem("InvoiceApproval", reference: invoice.Id);
// High-value invoices need manual approval before posting
system.AddQueueItem("InvoiceApproval", reference: invoice.Id);
Os comentários que não ficam acima de uma instrução desse tipo são renderizados como suas próprias linhas de código pequenas, portanto, um comentário proposital por etapa é lido melhor do que comentários distribuídos.
Fases do processo agrupadas por regiões
#region Name ... #endregion é renderizado como um grupo recolhível nomeado em ambas as exibições, e as regiões podem aninhar-se. Quando as regiões são nomeadas após fases de negócios — Login, Process invoices, Reporting — um gráfico recolhido é lido como um resumo do processo, e a expansão de uma região revela suas etapas.
Atribuições relacionadas agrupadas
Duas ou mais atribuições consecutivas são dobradas em um único cartão de Atribuição Múltipla. A inicialização de valores relacionados em uma execução ininterrupta os mantém em um cartão organizado em vez de distribuí-los pelo fluxo. Por outro lado, uma atribuição que merece seu próprio cartão deve se destacar de outras atribuições.
Uma chamada por instrução
Quando as chamadas são encadeadas (row.GetValue("col").ToString().Trim()), o visualizador só pode exibir a cadeia como uma única linha, e as cadeias em receptores não reconhecidos falham completamente. Dividir uma cadeia significativa em etapas com variáveis intermediárias nomeadas dá a cada etapa seu próprio bloco. Para APIs de identificação, como pastas de trabalho do Excel e pastas de email, também permite que o visualizador rastreie o identificador para que as chamadas de acompanhamento sejam renderizadas como atividades adequadas.
Invocações de fluxo de trabalho reconhecíveis
workflows.MyOtherWorkflow(arg1, arg2)renderiza como um cartão Invoke Workflow dedicado, com cada argumento rotulado pela direção (In, Out ou InOut) e navegação até o arquivo do fluxo de trabalho.SharedHelpers.Method(...)chama em outro arquivo.csdo projeto renderizado como blocos navegáveis Invoke. Mantê-los como uma única chamada por instrução, em vez de fazer parte de uma cadeia mais longa, é o que permite que eles sejam resolvidos.
Lista de verificação rápida
- As etapas usam serviços de atividades (
system.,excel.,mail.e semelhantes), não equivalentes rolados manualmente. - O
[Workflow]método é curto e orquestra métodos privados bem nomeados. - A ramificação e o loop são instruções (
if,switch,foreach,for,while,try), sem lógica oculta em lambdas ou pipelines linQ. - As variáveis são declaradas em linha, uma por instrução, com um inicializador.
- Tipos explícitos são usados quando o visualizador não pode inferir um, como resultados do método auxiliar e valores computados.
- Um
//comentário de uma linha fica acima de cada etapa significativa. - As fases do processo são envolvidas por
#region. - Cada instrução contém uma chamada de serviço ou auxiliar, sem cadeias longas.
- Outros fluxos de trabalho são invocados por meio
workflows.X(...)de. - Nenhum cartão de bloco de código cinza é deixado na tela — cada um é um local onde a visualização visual ficou oculta.
Conteúdo relacionado
- Serviços da UiPath sobre código programado manualmente
- O método de entrada como uma camada de orquestração
- Controle o fluxo como instruções, não expressões
- Equivalentes renderizáveis para construções de fallback
- Declarações de variáveis embutidas, uma por instrução
- Tipos explícitos em que o visualizador não pode inferi-los
- Comentários que descrevem a intenção
- Fases do processo agrupadas por regiões
- Atribuições relacionadas agrupadas
- Uma chamada por instrução
- Invocações de fluxo de trabalho reconhecíveis
- Lista de verificação rápida
- Conteúdo relacionado