deboraconstantino / meus-pets-oficial

Aplicativo web desenvolvido para a trilha "Aplicações PO-UI e serviços REST no Protheus" da Universidade TOTVS.
19 stars 10 forks source link

Segui o tutorial da Universidade TOTVS mas o `Execute` e o `FilGetResponse` não retorna nada #3

Closed HorselessName closed 4 months ago

HorselessName commented 4 months ago

Oi, Debora. Tudo bem?

Estou fazendo o módulo de PO-Ui ali da TOTVS que você ministra, estou fazendo o GET que você ensina lá. Eu criei a Controller e a Service, com sucesso, elas estão funcionando.

A camada de dados também funcionou, até a linha do Execute... Eu fiz de acordo com o seu vídeo, seguindo passo a passo lá, assim:

/* 

NOTA sobre o método listarSolicitacoesArmazem:

O `FwxFilial` pega a FILIAL que é passada na requisição.
Abrir e fechar a área com `FwGetArea` e `FwRestArea` é necessário para garantir que a área está limpa e pronta para ser utilizada.
Ref: https://terminaldeinformacao.com/2022/07/20/a-importancia-do-getarea-e-restarea/

Os métodos `SetQuery` e `SetQuery` são a Query que eu quero que a classe execute, e as condições de Where, respectivamente.

Importante: Ao chamar métodos de outros namespaces, você deve utilizar o `u_` antes do nome do método, pois é um método de usuário.
Isso não se faz necessário se o método pertencer a uma classe. Se você não declarar o seu `Utils` usando `using namespace`, você deve chamar o método com o nome do namespace antes do método como abaixo.

*/

Method listarSolicitacoesArmazem() Class SolicitacaoArmazemData
    Local cWhere as Character
    Local cQuery as Character
    Local aArea as Array

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - Listando as Solicitações do Armazém...")

    cWhere := "CP_OP = '014243OS%' AND CP_FILIAL = '" + FwxFilial() + "' AND D_E_L_E_T_ = ''"
    ::SetWhere(cWhere)

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - WHERE para Listar as S.A.s: " + cWhere)
    aArea := FwGetArea()

    AddMapFields(Self)

    cQuery := ManutencaoUtils.u_getQuery("SCP")
    ::SetQuery(cQuery)

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - Query para Listar as S.A.s: " + cQuery)

    /*
    NOTA sobre o `Execute` e o `FilGetResponse`:

    Eles executam a query montada no `::SetWhere`, `::SetQuery` e retorna o JSON com os resultados, respectivamente

    */
    If ::Execute()
        ::FilGetResponse()
    EndIF

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - Solicitações do Armazém listadas...")

Return Nil

Porém só funciona até a linha do Execute. Quando chega no Execute ele trava e não passa pra frente. Olhei ali nos seus códigos fonte, e vi que vc acrescentou aSize e RestArea, eu inclui também eles mas não adiantou...

Vc sabe se o curso está desatualizado ou se tem algo faltando que vc não explicou lá?

deboraconstantino commented 4 months ago

Oi, Debora. Tudo bem?

Estou fazendo o módulo de PO-Ui ali da TOTVS que você ministra, estou fazendo o GET que você ensina lá. Eu criei a Controller e a Service, com sucesso, elas estão funcionando.

A camada de dados também funcionou, até a linha do Execute... Eu fiz de acordo com o seu vídeo, seguindo passo a passo lá, assim:

/* 

NOTA sobre o método listarSolicitacoesArmazem:

O `FwxFilial` pega a FILIAL que é passada na requisição.
Abrir e fechar a área com `FwGetArea` e `FwRestArea` é necessário para garantir que a área está limpa e pronta para ser utilizada.
Ref: https://terminaldeinformacao.com/2022/07/20/a-importancia-do-getarea-e-restarea/

Os métodos `SetQuery` e `SetQuery` são a Query que eu quero que a classe execute, e as condições de Where, respectivamente.

Importante: Ao chamar métodos de outros namespaces, você deve utilizar o `u_` antes do nome do método, pois é um método de usuário.
Isso não se faz necessário se o método pertencer a uma classe. Se você não declarar o seu `Utils` usando `using namespace`, você deve chamar o método com o nome do namespace antes do método como abaixo.

*/

Method listarSolicitacoesArmazem() Class SolicitacaoArmazemData
    Local cWhere as Character
    Local cQuery as Character
    Local aArea as Array

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - Listando as Solicitações do Armazém...")

    cWhere := "CP_OP = '014243OS%' AND CP_FILIAL = '" + FwxFilial() + "' AND D_E_L_E_T_ = ''"
    ::SetWhere(cWhere)

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - WHERE para Listar as S.A.s: " + cWhere)
    aArea := FwGetArea()

    AddMapFields(Self)

    cQuery := ManutencaoUtils.u_getQuery("SCP")
    ::SetQuery(cQuery)

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - Query para Listar as S.A.s: " + cQuery)

    /*
    NOTA sobre o `Execute` e o `FilGetResponse`:

    Eles executam a query montada no `::SetWhere`, `::SetQuery` e retorna o JSON com os resultados, respectivamente

    */
    If ::Execute()
        ::FilGetResponse()
    EndIF

    ConOut("SolicitacaoArmazemData:listarSolicitacoesArmazem - Solicitações do Armazém listadas...")

Return Nil

Porém só funciona até a linha do Execute. Quando chega no Execute ele trava e não passa pra frente. Olhei ali nos seus códigos fonte, e vi que vc acrescentou aSize e RestArea, eu inclui também eles mas não adiantou...

Vc sabe se o curso está desatualizado ou se tem algo faltando que vc não explicou lá?

Vc sabe dizer se ele retornou a query corretamente? Se vc executar ela via banco, funciona?

HorselessName commented 4 months ago

Oi! Eu achei o problema. Eu não sabia que o FilGetResponse retornava False e não armazenava os dados qndo não retornava resultados... Eu ajustei aqui pra usar uma query que retornava um resultado e acabou que deu certo 😅

Muito obrigado.