• advertisement_alt
  • advertisement_alt
  • advertisement_alt

Luiz FERNANDO

Members
  • Content count

    105
  • Joined

  • Last visited

  • Days Won

    25

Posts posted by Luiz FERNANDO


  1. 8 minutos atrás, Amarildo de Matos disse:

    bom dia..

    tenho estudado muito a parte do webservice, com rest, antes eu utilizacao soap.

    se quizer ver algo sobre webservices, e tirar duvidas, tenho agora todos os sabados de manha, podcast ao vivo com os colegas do windev

    tambem podemos falar sobre o servidor alphaservers que eu utilizo tambem..

     

    Bom dia Amarildo estou fechando um servidor dedicado hoje com alphaservers, sobre dar tratamento em rest (POST GET) usando JSON e tb fazer deploy do projeto eu já tenho o conhecimento basico para isso, minha duvida mesmo é como montar(preparar) um servidor, pois todos meus teste foram feito no servidor do Adriano Booler, e la já está tudo pronto.

    Obs: caso vc tiver esse conhecimento e poder me dar uma consultoria me chama em off, obg.

    1 person likes this

  2. Cassiano obg pelo retorno, a forma que vc mencionou acima que configurar um servidor para usar webservice com windev não é tão complicado assim, me animou aqui, vou ver se faço um teste com AlphaServers, estava vendo os pacote deles, vc acha que um Semi-Dedicado para começar resolve, ou é melhor um Dedicado.


  3. Pessoal andei fazendo uns treinamento com o TOM e consegui aprender a mexer com  WEBSERVICE,  trocando ideia com um outro amigo, ele me aconselhou a fazer isso em PHP, pois é bem mais simples dar manutenção, uma vez configurado o ISS ou Apache o servidor já está pronto, agora em windev preparar um servidor para ele parece não ser tão simples assim, eu particularmente não sei fazer, trabalho com banco de dados MariaDB, daí fiquei na dúvida, começar o aprendizado tudo novamente em PHP, ou aprender a configurar um servidor para usar a windev e tudo que eu alterar no projeto fazer um DEPLOY, se algum colega poder dar a sua opinião.


  4. 12 horas atrás, Cassiano disse:

    @Luiz FERNANDO se observar no vídeo no segundo 29 ao 33 ele mostra o controle HTML Control, é um controle do Windev, não sei a partir de qual versão mas observe q esta claro no vídeo

    Nossa que falta de atenção de minha parte, vlw Cassiano, agora não da mais erro ao executar ExecuteJS

    1 person likes this

  5. 15 horas atrás, Cassiano disse:

    Luis não entendi o q vc esta querendo, poderia fornecer mais informações.

    Colega eu queria usar uma função em java dentro da windev

    até achei esse video do Amarildo, porém ele não explica como criar o controle HTML CONTROL, se eu ignorar esse parametro e tentar usar da erro, dizendo que não existe um controle HTM CONTROL

    mais não explicar sobre esse parametro, 


  6. Pessoal queria fazer unsteste com função em java em windev, vi que o comando é esse 

    
    
    JSCode is string = [
    
    
    
    var now = new Date();
    
    
    
    alert( 'Today is: ' + now);
    
    
    
    ]
    
    
    
    ExecuteJS(HTM_MyHTMLControl, JSCode)

     

    Minha duvida é como criar um HTML CONTROL, que no caso é o primeiro parametro para executar o ExecuteJS
     
     

  7. 1 hora atrás, Fábio Senji disse:

    Seguindo a dica do Cassiano, faz uma busca por mywindow..plane ou nomeDaSuaJanela..plane no código, ou por um executeProcess(botãoQueMudaPlano, trtClick).
    Como vc muda o plano, assim mesmo?

    Aqui uso a versão 24, pior que uma outra vez tive o mesmo problema, naquela ocasião eu acabei usando o controle supercontrol deixando o mesmo fora da janela, e qdo ativado mudava a posição dele para dentro da janela, consigo usar window internal aqui apenas como menu lateral ou colocando dentro de um dashboard 

    para resolver meu problema aqui, acabei usando o controle layout, e aproveitei a propria window internal do menu para isso, deixando invisível os menu qdo clicado na opção pesquisa, acabou ficando até legal usando dessa forma, uma outra hora com mais calma vou tentar descobrir o pq não consigo chamar uma internal com open

            IW_menu.MZ_menu_4..Visible = False
            IW_menu.MZ_menu_5..Visible = False  

           GR_pesquisa..visible = true
     

    60b52fab22bcb_tela3.png.27b3ce4caef9946c0487896cef50bc7e.png

     

    tela 3.png


  8. 1 hora atrás, Cassiano disse:

    Estranho pq não tem nada a ver.

    Certeza q não ta esquecendo algum comando pra mudança de plane perdido no código?

    Cassiano não tem nada no código, pior que a segunda vez que tendo usar janela internal sem sucesso, se eu criar uma simples janela com um botão e chamar a internal ele não abre.

     

     


  9. Pessoal tenho um aplicativo com uma window de 11 plane, ao chamar uma janela internal ele simplesmente passa para o plane 1, no emulador conforme imagens abaixo da certo, alguém teria alguma dica, tentei chamar com open, openchild, openmobile e nenhuma deu certo.

    60b4e4b8e7bc9_tela2.png.ecaf423a9250f63f9d6fd0daa76e9ab2.png

     

     

    tela 2.png


  10. 20 horas atrás, Cassiano disse:

    Parece q não, teve um colega q teve problemas com isso ai o q ele fez foi criar a identificação dele e salva isso num banco e mais algumas informações do device

    se não me engano na versão 26 tem algo meio q automatizado nesse sentido, não tenho certeza.

     

    vc pode pegar informações tipo modelo do aparelho, fabricante + data + hora etc e criar um hash unico algo assim

     

    Colega já imaginava isso, vou pensar em algo aqui, depois retorno ao tópico, obg

    1 person likes this

  11. Pessoal alguém poderia me dar alguma dica de como identificar um aparelho.

    tentei usar o SysIdentifier() mais da erro na hora de gerar o apk

    
    
    IF NOT InAndroidSimulatorMode() THEN
    
    
    
    	sIdentifier is string
    
    
    
    	sIdentifier = SysIdentifier()
    
    
    
    	EDT_chave=sIdentifier
    
    
    
    END

    outra opção que achei no help foi SysIMEI("Cellular Line")), mais pelo que entendi preciso colocar o nome do aparelho, queria algo mais pratico, a finalidade seria liberar o acesso a um sistema.

    Obs: preciso ter algo do aparelho gravado num webservice, quando o usuario for acessar o apk, o sistema verifica essa informação e busca no webservice, se encontrar ele acessa, caso contrario não. 

     

    Obg

    1 person likes this

  12. Cassiano obg pela sua resposta, com ela parou de dar o erro de sintaxe, porem não entrava na array(só não tinha respondido antes, pois estava tentando aqui)

    Vilani vlw pela resposta, com sua dica deu certinho o retorno agora.

    o código ficou assim:

    teste is httpRequest
    
    teste.Method=httpPost
    
    S_URL is string="https://apipefin.scnbrasil.com.br/v1/"
    
    teste.URL=S_URL
    
    resposta is httpResponse= HTTPSend(teste)
    
    
    
    IF ErrorOccurred THEN
    
    	Error(ErrorInfo(errFullDetails))
    
    ELSE
    
    	EDT_RESULTADO=resposta..Content
    
    END	
    
    
    
    _erro is Structure
    
    	mensagem is string
    
    	logid is string
    
    END
    
    
    
    _cadastro is Structure
    
    	codigoerro is string
    
    	erro is _erro  
    
    END
    
    
    
    stEstrutura_cadastro is _cadastro
    
    Deserialize(stEstrutura_cadastro,resposta..Content,psdJSON)
    
    Info(stEstrutura_cadastro.codigoerro)         
    
    Info(stEstrutura_cadastro.erro.mensagem)
    
    Info(stEstrutura_cadastro.erro.logid)
    
    
    
    

     

    1 person likes this

  13. Pessoal veja se alguém pode me ajudar nesse retorno

    {"codigoErro":99,"erro":{"mensagem":"Erro do servidor - tente novamente e se o erro persistir entre em contato com o suporte","logId":"c7a1beb"}}

    Tentei usar o exemplo do Amarildo da receita, mais diz que o retorno do JSON não tem elemento array nele, veja meu código.

    teste is httpRequest
    
    teste.Method=httpPost
    
    S_URL is string="https://apipefin.scnbrasil.com.br/v1/"
    
    teste.URL=S_URL
    
    resposta is httpResponse= HTTPSend(teste)
    
    
    
    IF ErrorOccurred THEN
    
    	Error(ErrorInfo(errFullDetails))
    
    ELSE
    
    	EDT_RESULTADO=resposta..Content
    
    END	
    
    
    
    _erro is Structure
    
    	mensagem is string
    
    	logid is string
    
    END
    
    
    
    _cadastro is Structure
    
    	codigoerro is string
    
    	erro is array of _erro
    
    END
    
    
    
    stEstrutura_cadastro is _cadastro
    
    Deserialize(stEstrutura_cadastro,resposta..Content,psdJSON)     // aqui diz que json não esta retornando nenhuma array
    
    Info(stEstrutura_cadastro.codigoerro)  // aqui o retorno esta ok
    
    
    
    FOR EACH _erro OF stEstrutura_cadastro.erro  
    
    	Info(_erro.mensagem)
    
    	Info(_erro.logid)
    
    END

    o que percebi que no caso da receita quando o retorno vem em array tem um ( [ ) no inicio e outro  o final ( ] )

    { "atividade_principal":[{"text":"Desenvolvimento de programas de computador sob encomenda","code":"62.01-5-01"}] }

     

    1 person likes this

  14. Boa noite, aproveitando o tópico, não consigo usar as tecla F? no code(key pressed) de uma table

    IF KeyPressed(Asc(CR)) THEN
    
    	ExecuteProcess(BTN_selecionar,trtClick)   // funciona
    
    END
    
    
    
    IF KeyPressed(VK_SPACE) = True THEN
    
    	Info("SPACE")   // funciona	
    
    END
    
    
    
    IF KeyPressed(VK_F6) = True THEN
    
    	Info("F6")	   // não funciona
    
    END
    
    
    
    IF KeyPressed(VK_F7) = True THEN
    
    	Info("F7")	   // não funciona
    
    END
    
    
    
    

    no inicio do sistema já coloquei essas duas linhas

    EXTERN "KeyConst.WL"
    EXTERN "WinConst.WL"
     

    Algum colega teria alguma dica, obg

     


  15. Pessoal alguém sabe me dize qse consigo trabalhar com dois banco de dados ao mesmo tempo

    hoje para conectar eu uso assim

    gnConexao = SQLConnect(p_endereco, p_usuario, p_senha, p_Banco, "MySQL")

    o detalhe se eu fazer uma nova conexão eu perco a de cima

    Obg


  16. Colegas preciso fazer uma busca numa array, aonde o resultado pode ser mais de 1 registro, como faço para percorrer dentro dela, depois de localizado o primeiro item.

    nResultado = ArraySeek(arrParcelas,asLinear,1,arrPedidos[x,17])
    
    IF nResultado <> -1 THEN
    
       arrParcelas[nResultado,5]="Teste"
    
    END

    Obg


  17. Jânio como vc veio do xharbour, veja o código abaixo, aqui eu utiliza uma tabela a parte apenas para o controle desses numero, que no meu caso tb não pode ser o campo ID, trabalho com mysql.

    function fSequencia_generica(cAlias,cCodcli,cCampo,nTamanho,nTabela)
    
      local nSqlro1,aCad,aCad1,aca1,cSql1
    
      local aSql:={}
    
      default cCampo:='codigo'
    
      default nTamanho:=7
    
      aCad:="SELECT "+ccampo
    
      aCad+=" FROM "+cAlias
    
      aCad+=" WHERE uso1='N'"
    
      aCad+=" AND uso2='N'"
    
      aCad+=" AND tabela ='"+nTabela+"'"
    
      SqlExecute("commit")	 
    
      aSql:=SqlArray(aCad)
    
      if len(aSql)=0
    
         aCad:="SELECT "+ccampo
    
         aCad+=" FROM "+cAlias
    
         aCad+=" WHERE tabela ='"+nTabela+"'"
    
         aCad+=" ORDER BY "+cCampo+" DESC LIMIT 1 "
    
         SqlExecute("commit")	 
    
         aSql:=SqlArray(aCad)
    
         if SQLErrorNO() > 0
    
            MsgStop("Numero do Erro SQL.: " + STR(SQLErrorNO(),10,0)+CHR(13)+CHR(13)+SQLErrorMsg()+" "+'cBanco',"sistema")     
    
            return(.F.)
    
         endif   
    
         if LEN(aSql)==0
    
            nSqlro1:=STR(1)
    
            nSqlrow=str(Val(nSqlro1))
    
            cCodcli=(StrZero(Val(nSqlro1),nTamanho))
    
         else
    
            nSqlro1:=aSql[01,01]
    
            nSqlrow=str(Val(nSqlro1)+1)
    
            cCodcli=Strzero((Val(nSqlro1)+1),nTamanho)
    
         endif
    
         SQLBeginTrans()
    
         cSql1:=" UNLOCK TABLES"
    
         sqlexecute(cSql1)
    
         SQLEndTrans()
    
    
    
         SQLBeginTrans()
    
         cSql:="INSERT INTO "+cAlias+" ( tabela,codigo,uso1,uso2 )" 
    
         cSql+="VALUES( "+any2sql(nTabela)+" , "+any2sql(cCodcli)+" , "+any2sql('S')+" , "+any2sql('N')+" )"
    
         SqlExecute(cSql)
    
         if SQLErrorNO() > 0 
    
            fMensagem() 
    
            return(.f.) 
    
         endif 
    
         SqlExecute("commit")	 
    
         SQLRollBack()
    
         SQLEndTrans()
    
         SQLRefresh() 
    
      else
    
         cCodcli=(strzero(val(aSql[1,1]),nTamanho))
    
         SQLBeginTrans()
    
         cSql:="UPDATE "+cAlias+" SET"
    
         cSql+="   uso1="+Any2Sql('S')+" "
    
         cSql+="  WHERE codigo="+Any2Sql(cCodcli)+" "
    
    	  cSql+="  AND tabela='"+nTabela+"'"
    
         sqlexecute(cSql)
    
         if SQLErrorNO() > 0 
    
            fMensagem() 
    
            return(.f.) 
    
         endif 
    
         SQLExecute("commit")
    
         SQLRollBack() 
    
         SQLEndTrans() 
    
         SQLRefresh()
    
      endif
    
    return(NIL)

    exemplo de uma aplicação que uso isso, cadastro de produto, preciso do código do produto antes de incluir ele, qdo clico em novo ele pega o numero e deixa o campo USO1 com S, caso eles sair sem gravar faço um UPDATE deixando este campo USO1 como N, aonde sera aproveitado para o próximo cadastro. 

    1 person likes this

  18. Pessoal estou com a seguinte situação aqui

    aqui chamo uma procedure, enviando como parametro uma array

    kardex_novo(arrKardex)

    aqui é a declaração de minha array

    PROCEDURE kardex_novo(arrKardex is array of 1 by 9 ANSI string)

    ele da erro em tempo de execução, tipo se tiver 7 registros(linhas) na arrKardex, ele espera essa sintaxe

    PROCEDURE kardex_novo(arrKardex is array of 7 by 9 ANSI string)

    em tempo de execução nunca irie saber o numero de linhas, como seria a forma correta de fazer essa declaração

    Obg

     

     


  19. Em 05/06/2020 at 8:38 AM, Ananias Guerra disse:

    Já deu uma olhada se a função FileToMemory(<Name of instance of structure or class> , <File name>) resolve ?
    <Name of instance of structure or class> -> aqui entra o array
    <File name> -> nome da query

    Colega obg pela resposta, acho que o caminho é por ai mesmo, tentando acertar a sintaxe aqui.

     FileToArray(arrItens,SQLFetch("aSQL"))

    assim que conseguir retorno aqui

    1 person likes this

  20. Sera que é possível jogar de forma automático todo conteúdo de um select em uma array, sem ter que passar por um WHILE SQLFetch, e alimentar registro a registro

     

    sS_CmdSQL =
    
    [
    
    	 SELECT k.codigo,k.saldo,k.sql_rowid
    
    	 FROM kardex k
    
    	 INNER JOIN
    
    	 (SELECT MAX(sql_rowid) AS sql_rowid
    
    	 FROM kardex WHERE setor = %1 
    
    	 AND codigo IN ( %2 )
    
    	 GROUP BY codigo) groupedk
    
    	 ON k.sql_rowid = groupedk.sql_rowid 
    
    ]
    
    
    
    sS_CmdSQL = StringBuild(sS_CmdSQL, sProduto )    
    
    
    
    IF SQLExec(sS_CmdSQL,"aSQL")=False THEN
    
    	SQLInfo("aSQL")
    
    	sS_Mensagem=SQL.MesErreur
    
    	Info(sS_Mensagem)
    
    	SQLClose("aSQL")
    
    	RETURN
    
    END
    
    
    
    i=1
    
    WHILE SQLFetch("aSQL") = 0 
    
    	arrItens[i,1]=SQLGetCol("aSQL",1)
    
    	arrItens[i,2]=val(SQLGetCol("aSQL",2))
    
    	i++ 
    
    	Dimension(arrItens, i, 22)
    
    END

    Obg