segunda-feira, 12 de dezembro de 2022

Instalação Protheus Oracle

Tutorial de como configurar o oracle 21c Express para utilizar junto ao Protheus Release 12.1.33 no Windows 10 Pro.

1. Instalação Oracle
2. Conexão no DBeaver
3. Variáveis de Ambiente
4. Configurações do BD ( collation )
5. ODBC
6. Validação com DBAccess
7. Ex appserver.ini C/ Oracle


1. Instalação Oracle

Baixar o oracle "express" direto do site oficial.

https://www.oracle.com/br/database/technologies/xe-downloads.html














Avançar

Colocar senha ( sa ) minúsculo

Instalar





















Permitir acesso




















Aguardar demora um pouco \ Selecionar Português Brasil













































localhost:1521
1521/XEPDB1

usuário: system
senha: sa

Instalação do Oracle Concluída.

2. Conexão no DBeaver

host:
localhost
Port: 1521
DataBase: XE
Opção: Service Name

User: system
Password: sa
Role: Normal
Client: OraDB21Home1

























NetworkAlias: <alias>
TNS name:  não informar
User name: system
Password: sa






































































Conexão com Dbeaver concluído.


3. 
Configuração das variáveis de ambiente.

Propriedades do Sistema \ Avançado \ Variáveis de Ambiente \ Variáveis do sistema \





















































1) ORACLE_BASE
C:\app\denis.souza\product\21c


2) ORACLE_HOME
C:\app\denis.souza\product\21c\dbhomeXE


3) ORACLE_SID
Xe

4) PATH
C:\app\denis.souza\product\21c\dbhomeXE\bin
(Essa variável já existe, mas parece que ele cria este caminho
dentro dela sozinho, após instalação)

5) TNS_ADMIN

C:\app\denis.souza\product\21c\homes\OraDB21Home1\network\admin
( com esse deu certo )

C:\app\denis.souza\product\21c\dbhomeXE\network\admin
( com esse não deu certo )

6) USERNAME
SYSTEM


Ex:
tnsnames.ora 
C:\app\denis.souza\product\21c\homes\OraDB21Home1\network\admin )

# tnsnames.ora Network Configuration File: C:\app\denis.souza\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\tnsnames.ora
# Generated by Oracle configuration tools.

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = <HOSTNAME + .(Domínio) + .local>)(PORT = <1521>))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = <HOSTNAME + .(Domínio) + .local>)(PORT = <1521>))


ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

Ex: 

<HOSTNAME + Domínio + .local>

UFON99999999.uf01.local

Configurações de variáveis de sistema concluído.


4. Configurações do BD ( collation )

Executar o MSDOS como administrador de sistema

Rodar os seguintes comandos:

C:\windows\system32>
sqlplus









SQL> connect sys / 280679 as sysdba;

(Obs: connect sys / senha as sysdba;)

Caso a autenticação falhe, faça a alteração no sqlnet.ora.
DE:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
PARA:
SQLNET.AUTHENTICATION_SERVICES= (NONE)
REF:
https://cursos.alura.com.br/forum/topico-o-que-fazer-ness-caso-ora-12638-falha-na-recuperaoo-de-credencial-87424

SQL> alter system set nls_length_semantics=CHAR scope=both;

SQL> SHUTDOWN IMMEDIATE;

SQL> startup restrict;

SQL> alter database character set INTERNAL_USE WE8MSWIN1252;

SQL> shutdown;

SQL> startup;

Comandos rodados com sucesso.

SELECT * FROM NLS_DATABASE_PARAMETERS;

SELECT value$ FROM sys.props$ WHERE name= 'NLS_CHARACTERSET';






5. ODBC

Adicionar\ S
elecionar: Oracle em OraDB21Home1





















Data Source Name: XE
Description: XE
TNS Service Name: não informar
User Id: system















TEST CONNECTION


















Service Name: XE
UserName: system
Password: sa






































ODBC configurado com sucesso.


6. Validação com DBAccess

No dbaccess.ini colocar o caminho da oci


[ORACLE/XE]
user=system
clientlibrary=C:\app\denis.souza\product\21c\dbhomeXE\bin\oci.dll
password=“ÿ
TableSpace=
IndexSpace=
LogAction=0
Disable=0
environments=XE

[ORACLE]
environments=XE















































Configuração com Dbaccess concluída com sucesso.


7. Ex appserver.ini C/ Oracle

[XE]
SOURCEPATH=C:\TOTVS\TOTVS_R33\Protheus\apo
ROOTPATH=C:\TOTVS\TOTVS_R33\Protheus\protheus_data_ora
STARTPATH=\system\
RPODB=TOP
RPOLANGUAGE=PORTUGUESE
RPOVERSION=120
LOCALFILES=CTREE
LOCALDBEXTENSION=.dtc
StartSysInDB=1
TOPMEMOMEGA=1
PICTFORMAT=DEFAULT
DATEFORMAT=DEFAULT
SpecialKey=xXE
DBDataBase=ORACLE
DBALIAS=XE
DBserver=LOCALHOST
DBPORT=7891
BUILDKILLUSERS=1

quinta-feira, 28 de julho de 2022

launch.json

Olá, com o launch.json é possível criar vários ambientes para conexão de degub.

Abaixo segue um exemplo de launch.json (07/2022):

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "totvs_language_debug",
            "request": "launch",
            "name": "Smart Client 27 Debug",
            "program": "${command:AskForProgramName}",
            "smartclientBin": "C:/TOTVS/R27/smartclient/smartclient.exe",
            "cwb": "${workspaceFolder}",
            "isMultiSession": true,
            "enableTableSync": true,
            "enableMultiThread": true
        },
        {
            "type": "totvs_language_debug",
            "request": "launch",
            "name": "Smart Client 33 Debug",
            "program": "${command:AskForProgramName}",
            "smartclientBin": "C:/TOTVS/TOTVS_R33/tec/smartclient/smartclient.exe",
            "cwb": "${workspaceFolder}",
            "isMultiSession": true,
            "enableTableSync": true,
            "enableMultiThread": true
        },
        {
            "name": "debug chrome po ui",
            "type": "chrome",
            "request": "launch",
            "url": "http://localhost:4200/#",
            "webRoot": "${workspaceFolder}/taf-thf/",
            "sourceMapPathOverrides": {
                "webpack:/": "${webRoot}/",
                "/./": "${webRoot}/",
                "/src/": "${webRoot}/",
                "/": "",
                "/./~/": "${webRoot}/node_modules/"
            }
        }
    ],
    "lastPrograms": [
        {
            "args": [],
            "label": "sigataf",
            "description": ""
        },
        {
            "args": [],
            "label": "xxx",
            "description": ""
        }
    ],
    "lastProgramExecuted": "xxx",
    "lastProgramArgumens": []
}

tabelas debug advpl

É possível exibir as tabelas ao debugar o produto, utilize o enabletablesync no launch.json.

Exemplos de configuração abaixo:



Ex da tag: "enableTableSync": true

Ex: launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "totvs_language_debug",
            "request": "launch",
            "name": "Smart Client 27 Debug",
            "program": "${command:AskForProgramName}",
            "smartclientBin": "C:/TOTVS/R27/smartclient/smartclient.exe",
            "cwb": "${workspaceFolder}",
            "isMultiSession": true,
            "enableTableSync": true,
            "enableMultiThread": true
        },
        {
            "type": "totvs_language_debug",
            "request": "launch",
            "name": "Smart Client 33 Debug",
            "program": "${command:AskForProgramName}",
            "smartclientBin": "C:/TOTVS/TOTVS_R33/tec/smartclient/smartclient.exe",
            "cwb": "${workspaceFolder}",
            "isMultiSession": true,
            "enableTableSync": true,
            "enableMultiThread": true
        },
        {
            "name": "debug chrome po ui",
            "type": "chrome",
            "request": "launch",
            "url": "http://localhost:4200/#",
            "webRoot": "${workspaceFolder}/taf-thf/",
            "sourceMapPathOverrides": {
                "webpack:/": "${webRoot}/",
                "/./": "${webRoot}/",
                "/src/": "${webRoot}/",
                "/": "",
                "/./~/": "${webRoot}/node_modules/"
            }
        }
    ],
    "lastPrograms": [
        {
            "args": [],
            "label": "sigataf",
            "description": ""
        },
        {
            "args": [],
            "label": "xxx",
            "description": ""
        }
    ],
    "lastProgramExecuted": "xxx",
    "lastProgramArgumens": []
}

quarta-feira, 16 de fevereiro de 2022

pesquisa grid tabela mvc advpl

É possível ativar a pequisa de todas as colunas da grid em telas desenvolvidas com ADVPL MVC.

Utilize o parâmetro GridSeek no objeto da view.

oView:SetViewProperty('VIEW_T0O','GRIDSEEK', {.t.}) //Adiciona a pesquisa por campos no Grid.


Outras Refs:

1)

https://devforum.totvs.com.br/914-filtrar-um-grid-em-mvc

Filtrar um Grid em MVC

oView:SetViewProperty( 'ViewGrid' , 'ENABLENEWGRID' ) 

oView:SetViewProperty( 'ViewGrid', "GRIDNOORDER") 

oView:SetViewProperty( 'ViewGrid', "GRIDFILTER", {.T.}) 

oView:SetViewProperty( 'ViewGrid', "GRIDSEEK", {.T.})

2)

https://tdn.totvs.com/display/framework/FWFormView

Tipo de formulário: FormGrid habitado com o ENABLENEWGRID

Aceita o uso de * no ID.

Descrição: 

Define se será exibida ou nao a opcao de pesquisa no grid.

aParam : Deve ser passado um array com a estrutura abaixo,

se o array não for passado, o default é exibir a pesquisa no grid:

[1] ExpL: Se Verdadeiro habilita, Se falso desabilita
Exemplo: oView:SetViewProperty("VIEW_ZA2", "GRIDSEEK", {.T.})


quinta-feira, 9 de dezembro de 2021

Cannot execute Linter

 Está com falha para compilar os fontes em advpl ?

Apresenta o erro Cannot execute Linter. Includes not defined?

1. Acesse o configure server view















2.  Insira o caminho do include ( utilize um diretório curto, e no caminho, a cada subdiretório, utilize 2 barras caídas para esquerda ), ex:


"C:\\TOTVS\\ch12\\p10r200"






















3. Salve o arquivo modificado "servers.json"

4. Feche o Visual Code

5. Pare e suba os serviços

6. Abra o Vs Code e compile o fonte.

quinta-feira, 25 de novembro de 2021

Paginação API Advpl FWAdapterBase

Foi criada a WAdapterBaseV2(), classe para facilitar a criação de API com filtros e paginação e Hash Campos JSON to Protheus.

A partir do exemplo acima é possível realizar filtros no retorno do GET, abaixo exemplos utilizando paginação e o padrão oData.

Obs. Endereço e conteúdo da comparação deve ser ajustado de acordo com o ambiente utilizado.
Filtro utilizando paginação
Filtro utilizando o padrão oData
Filtro utilizando ordenação
Filtro informando os campos que serão retornados


Ver mais na referência do tdn totvs: