1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

EMS API utapi012

Discussão em 'EMS , HCM e Totvs 11' iniciado por lm1979, Outubro 28, 2019.

  1. lm1979

    lm1979 Membro Participativo

    Bom dia pessoal,
    Alguém já utilizou a API utapi012?
    Eu gerei o programa de exemplo que está na documentação da API, mas está gerando erro, o suporte da Totvs diz que o meu programa está com erro, mas se ele é uma cópia da documentação, como pode estar errado?

    Segue código do programa.

    Código:
    {utp/utapi012.i}
    RUN utp/utapi012.p PERSISTENT SET h-utapi012.
    /* Seleciona Impressora */
    /* SYSTEM-DIALOG PRINTER-SETUP. */
    
    OS-DELETE VALUE('c:\temp\a.doc').
    
    CREATE tt-configuracao2.
    ASSIGN
        tt-configuracao2.versao-integracao  = 1
        tt-configuracao2.arquivo            = 'c:\temp\a.doc' /* Arquivo que ser� gerado */
        tt-configuracao2.modelo             = 'c:\temp\a.dot' /* Arquivo que contem o formul�rio */
        tt-configuracao2.senha-modelo       = ''
        tt-configuracao2.exibir-construcao  = NO
        tt-configuracao2.abrir-word-termino = NO
        tt-configuracao2.imprimir           = NO. /* Imprime o documento */
    
    CREATE tt-dados.
    ASSIGN
        tt-dados.campo-nome     = 'nome'
        tt-dados.campo-tipo     = 3
        tt-dados.campo-valor    = 'Datasul - Tecnologia'.
    
    CREATE tt-dados.
    ASSIGN
        tt-dados.campo-nome     = 'endereco'
        tt-dados.campo-tipo     = 3
        tt-dados.campo-valor    = 'Santos Dummond, 831'.
    
    CREATE tt-dados.
    ASSIGN
        tt-dados.campo-nome     = 'telefone'
        tt-dados.campo-tipo     = 3
        tt-dados.campo-valor    = '19 - 3124-3000'.
    
    RUN pi-execute IN h-utapi012(INPUT-OUTPUT TABLE tt-configuracao2,
                                 INPUT-OUTPUT TABLE tt-dados,
                                 INPUT-OUTPUT TABLE tt-erros).
    
    IF RETURN-VALUE = 'NOK' THEN DO:
        FOR EACH tt-erros:
            DISP tt-erros WITH 1 COL WIDTH 500.
        END.
    END.
    
    DELETE PROCEDURE h-utapi012.
    Segue o erro apresentado.

    [19/10/28@07:55:55.172-0300] P-020044 T-034456 1 4GL -- (Procedure: 'ITEM office.ms.word.FormFields' Line:9) Ocorreu erro durante acesso a componente da propriedade/metodo: ITEM.
    [19/10/28@07:55:55.172-0300] P-020044 T-034456 1 4GL -- (Procedure: 'ITEM office.ms.word.FormFields' Line:9) O membro solicitado da coleção não existe.
    [19/10/28@07:55:55.172-0300] P-020044 T-034456 1 4GL -- (Procedure: 'ITEM office.ms.word.FormFields' Line:9) Error code: 0x80020009 ITEM office.ms.word.FormFields (5890)
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    no começo do programa, antes de fazer qualquer create, tenta fazer um empty temp-table tt-dados, empty temp-table tt-configuracao2 e empty temp-table tt-erros, isso tá com cara de que na tt-dados tem sujeira, tudo bem, um programa iniciando do zero, mas tá com jeito de que tem um registro para campo ITEM existindo ai.
    rohis curtiu isso.
  3. lm1979

    lm1979 Membro Participativo

    Boa tarde,
    Nada feito, adicionei o comando "Empty temp-table" para as três e mesmo assim deu o mesmo erro.

    Obs.: Será que é alguma incompatibilidade com o Office 365?
  4. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    ai vc me pegou, porque eu uso RTF como modelo, leio o RTF pra uma temp-table, altero o que precisa e salvo de novo.
  5. ds201

    ds201 Membro Participativo

    Boa noite

    Já tive muitos problemas com esta API e acabei desistindo dela. Parece que ela está abandonada.
    Há vários pontos a considerar:
    1 – O arquivo "modelo" deve “Permitir edição”. Se ele estiver no modo “somente leitura” esta propriedade será herdada pelo arquivo de trabalho.
    2 – A palavra "formulário" indica um arquivo especial no qual foram criados campos. O nome destes campos devem ser compatíveis com os nomes que estão no programa. Note que não é um arquivo comum de Word. Ele precisa ter os campos criados usando uma função especifica do Word.
    3 - Como a coisa não andava, abandonei a API e passei a gerar usando o código abaixo:
    Nota: No exemplo abaixo também uso "formulário".

    create tt-dados.
    assign tt-dados.campo-nome = 'nome_responsavel'
    tt-dados.campo-tipo = 3
    tt-dados.campo-valor = if avail funcionario then funcionario.nom_pessoa_fisic else ''.

    assign file-info:filename = "doc-rtf\abfp0011.rtf".

    if file-info:pathname <> ? then do:
    assign v_arquivo_modelo = file-info:pathname.
    assign file-info:filename = session:temp-directory.
    assign v_arquivo_tmp = "\\tsclient\C\temp" + "\abfp0011_" + replace(string(today, "99/99/9999"),"/","") + "_" + string(time) + ".rtf".

    os-delete value(v_arquivo_tmp).
    os-delete value(tt-param.nome_arquivo_rtf). /*--- Exclui o arquivo a ser gerado pela rotina. ---*/
    os-copy value(v_arquivo_modelo) value(v_arquivo_tmp).

    if VALID-HANDLE(ChWord) then do:
    ChWord:QUIT() no-error.
    RELEASE OBJECT ChDoc no-error.
    RELEASE OBJECT ChWord no-error.
    end.

    CREATE "word.application" ChWord.
    ChWord:VISIBLE = FALSE.
    ChWord:DisplayAlerts = FALSE no-error.

    chword:Options:SaveNormalPrompt = FALSE no-error.
    assign ChDoc = ChWord:Documents:OPEN(SEARCH(v_arquivo_tmp)).

    for each tt-dados:
    chDoc:FormFields:ITEM(tt-dados.campo-nome):RESULT = tt-dados.campo-valor no-error.
    end.

    chDoc:SaveAs(v_arquivo_tmp) no-error.
    RELEASE OBJECT ChDoc no-error.
    ChWord:VISIBLE = NO no-error.
    ChWord:QUIT().

    os-copy value(v_arquivo_tmp) value(tt-param.nome_arquivo_rtf).
    dos silent start value(tt-param.nome_arquivo_rtf).
    os-delete value(v_arquivo_tmp).
    end.
    else do:
    run utp/ut-msgs.p (input "show", input 15825, input "NÆo foi poss¡vel gerar o relat¢rio~~" +
    "NÆo foi poss¡vel localizar o arquivo modelo").
    end.
    rohis curtiu isso.
  6. ds201

    ds201 Membro Participativo

    [​IMG]

    Um fragmento de um formulário. O campo em azul corresponde ao campo destacado em vermelho.
    Já não lembro com se cria um formulário do zero. A trabalhoso mais não é difícil.

Compartilhe esta Página