Pular para conteúdo

Receitas

Status: parcial — receitas ancoradas apenas em fatos citados. [n · F] remete à fonte n da lista de fontes; a letra marca a procedência: F fato em fonte oficial TOTVS/TDN · S fonte secundária (blog, fórum) · unverified sem fonte que sustente.

Escopo desta seção

Receitas curtas, cada uma montada só com afirmações verificadas. Onde a pesquisa não trouxe base, a receita entra como lacuna declarada em vez de "exemplo plausível".

1. Ler uma tabela do Protheus sem perder a workarea

Base: [54] (padrão documentado pela TOTVS), [28] (regras de filial e expurgo).

  • O padrão é: salvar a área, selecionar o alias, posicionar por xFilial() + chave, iterar com DbSkip e restaurar a área.[54 · F]
  • Salve com GetArea() e restaure com RestArea();[31] filtre a filial pelo xFilial da própria tabela e use D_E_L_E_T_ = ' '.[28 · F]

Os três erros que essa receita evita

Workarea não restaurada; _FILIAL comparado entre tabelas; e D_E_L_E_T_ <> '*' no lugar de D_E_L_E_T_ = ' '.[28][31]

2. Gravar em uma tabela com lock correto

Base: [29][31][54].

  • RecLock(<alias>, .T.) cria registro em branco com lock exclusivo; (.F.) trava o registro posicionado para update.[29 · F]
  • Libere sempre com MsUnLock() — esquecer deixa o registro travado para os processos padrão.[31 · F]
  • No INSERT, o registro nasce com valores vazios por tipo (caractere com espaços, numérico 0, data vazia, booleano .F.) e só é definitivo ao soltar o lock.[29 · F]

3. Ponto de entrada MVC que valida antes de gravar

Base: [20][54][56].

  • O PE do MVC é único por model e leva o ID do Model como nome — que não pode ser igual ao nome do fonte.[20 · F]
  • Comece por Local aParam := PARAMIXB; os três primeiros elementos do vetor são sempre o objeto do formulário/modelo, o ID do local de execução e o ID do formulário.[20 · F]
  • Para decidir o que fazer, compare o ID recebido contra os IDs de momento (MODELPRE, MODELPOS, MODELCOMMITTTS, BUTTONBAR, …).[56 · F]
  • Exemplo de referência com aClone(PARAMIXB), DbSeek por filial + chave, RecLock/MsUnlock e Return .T..[54 · F]

4. Expor um endpoint REST em TLPP

Base: [16][44].

  • Inclua tlpp-core.th e tlpp-rest.th (nativos no tlpp.rpo) e declare a annotation acima da função: endpoint é obrigatório, description é opcional.[16, 44 · F]
  • Use @Get, @Post, @Put, @Delete ou @Patch.[16 · F]
  • Responda com oRest:setResponse(); para erro, setStatusCode() e setFault().[16, 17 · F]

Path params com mesmo caminho base

O nome da variável é o da primeira rota registrada; nomes divergentes nas seguintes são ignorados silenciosamente.[17]

5. Consumir uma API externa com Bearer

Base: [27][58].

  • FWRest():new(cUrlBase), headers em array, e o token no cabeçalho Authorization com Bearer + access token.[27 · F]
  • Obtenha o token por POST no endpoint de token com grant_type=password; o access token expira em 1 hora e o refresh em 24 horas — trate a renovação.[27 · F]

6. JSON inline em TLPP

Base: [14].

  • Requer 17.3.0.7 ou superior.[14 · F]
  • local varJson := {"teste": {"var1":"oioi"}} as json, com acesso por índice: varJson['teste']['var1'].[14 · F]

7. Garantir CP-1252 antes de compilar

Base: [24][50].

  • Os compiladores aceitam apenas CP-1252; com erro de codificação o arquivo não é salvo.[24 · F]
  • Vale para .prw, .prg, .prx, .tlpp, .ch, .aph.[50 · F]
  • Ferramenta do repositório: skill utf8-to-cp1252-conversion (script em lote, sem dependências).

Lacunas declaradas

Lacuna: exportação para .xlsx com FwMsExcelXlsx — sem fonte coletada nesta passada. A skill fwmsexcelxlsx-generator cobre o tema internamente.

Lacuna: Protheus + appserver em Docker para teste local — só há blog de terceiro[36].

Lacuna: consulta ao dicionário via SQL e mapa de campos — a API execute-sql aparece na referência interna da skill data-dictionary-lookup, sem fonte TOTVS coletada.

Fontes

[14] · [16] · [17] · [20] · [24] · [27] · [28] · [29] · [31] · [36] · [44] · [50] · [54] · [56] · [58] — ver lista completa.