Botão para abrir formulário dentro de outro

Procurando aqui no fórum, achei um post que perguntava exatamente o que eu queria saber. Que no caso é este aqui: Link

Então, tentei copiar o código e implementar no meu sistema porém na hora que clico no botão está acontecendo alguns erros.

É necessário mudar a "URL" que está descrita no código? Porque quando eu mudo e clico no botão, abre uma nova janela porém ela fica em branca e no console do navegador aparece o seguinte erro:


Uncaught ReferenceError: path is not defined
    at TLib.loaderCss (wcm_global_pt_BR.js?v=1.6.5-190730:7)
    at extractCss (wcm_global_pt_BR.js?v=1.6.5-190730:15)
    at extractScriptsAndCss (wcm_global_pt_BR.js?v=1.6.5-190730:15)
    at Object.WCMC.panel (wcm_global_pt_BR.js?v=1.6.5-190730:15)
    at openDocument (abreform.js:19)
    at HTMLButtonElement.onclick (?WDCompanyId=1&WDNrDocto=0&WDNrVersao=0&WDParentDocumentId=44:105)
TLib.loaderCss @ wcm_global_pt_BR.js?v=1.6.5-190730:7
extractCss @ wcm_global_pt_BR.js?v=1.6.5-190730:15
extractScriptsAndCss @ wcm_global_pt_BR.js?v=1.6.5-190730:15
WCMC.panel @ wcm_global_pt_BR.js?v=1.6.5-190730:15
openDocument @ abreform.js:19
onclick @ ?WDCompanyId=1&WDNrDocto=0&WDNrVersao=0&WDParentDocumentId=44:105

onde "openDocument" é o meu arquivo JS com a função.

Caso eu não mude, aparece um erro do fluig com a descrição de erro desconhecido para contatar um administrador, já no console aparece:


Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Alguém consegue me auxiliar nessa implementação? Sei que pode ser algo bobo, mas como sou iniciante, não estou conseguindo encontrar o erro... Quais opções devo mudar deste código??

CÓDIGO

HTML


<div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title"><i class="fluigicon fluigicon-copy icon-md"></i>&nbsp;&nbsp;Documentos</h3>
        </div>
        <div class="panel-body">
            <button type="button" class="btn btn-primary" onclick="openDocument(41, 40000)">Novo Documento</button>
        </div>
    </div>

JAVASCRIPT


function openDocument(docId, docVersion) {
    var parentOBJ;

    if (window.opener) {
        parentOBJ = window.opener.parent;
    } else {
        parentOBJ = parent;
    }

    var cfg = {
        url : "/ecm_documentview/documentView.ftl",
        maximized : true,
        title : "Visualizador de Documentos",
        callBack : function() {
            parentOBJ.ECM.documentView.getDocument(docId, docVersion);
        },
        customButtons : []
    };
        parentOBJ.ECM.documentView.panel = parentOBJ.WCMC.panel(cfg);
}

EDIT 1

Consegui fazer funcionar, porém percebi que não era bem o que eu queria. Este código faz com que ele abra o documento que já foi registrado, e não um formulário para registrar um novo. Teria algum jeito de fazer ele abrir um novo formulário para salvar em um dataset e depois buscar no processo principal?

Olá,

Você quer apenas salvar um novo registro de formulário para ser consumido depois via dataset certo?

Se for isso você pode consumir um WS "ECMCardService" metodo "updateCardData" enviando os dados do registro, ou utilizar a API do fluig "/2.0/cards/create" e passar também os dados do registro que deseja salvar.

para isso é só você criar sua modal definindo os campos que você utilizará para mandar na sua requisição.

Isto, @Francis! O que de fato eu preciso fazer é como se fosse um formulário Pai x Filho. Vai ser criado um formulário que, dentro deste formulário, terá diversos outros formulários (por isso preciso deste botão) que precisam ser linkados com o formulário principal. Será que ficou fácil de entender? Posso explicar com o real exemplo se precisar.
Com esta API eu consigo fazer isso? Um botão que abre um novo formulário linkando o formulário principal.

Sim, entendi ;D
Assim, você só precisa mudar a forma que está vendo o problema.

Você não vai precisar abrir vários formulários em tela. Você terá um formulário dentro de uma modal e um botão de “Salvar registro”, por exemplo. E toda vez que clicar no botão, e passar nas validações do seu formulário, ele vai executar a chamada da API, que tem o código do formulário que quer adicionar um registro.

Se tudo der certo ele vai gerar um registro desse formulário la no diretório do ECM, e se você consultar o dataset deste formulário, a nova linha estará lá.

Eu uso este recurso como alternativa para o Pai x Filho que tem suas limitações.

e eu faço a chamada da API via dataset também para evitar problemas de CORS.

Ahh perfeito, entendi! Você sabe onde tem a documentação dessa API? Eu sou iniciante aqui no fluig e estou um pouco perdido ainda em como poderia fazer este esquema. Porém é exatamente isso que eu precisava, abrir uma modal que seria o formulário e salvar os registros linkando os formulários. Se você conseguir me passar uma documentação que eu consiga me basear eu agradeço imensamente, procurei no google e no site das APIs porém não encontrei… Peço perdão se estiver explícito e eu não tenha visto.

Show!
Você pode ir no seu ambiente fluig e apagar tudo o que tem depois do endereço e adicionar /api

Ex: http://seufluig.com.br/portal/01/home

para: http://seufluig.com.br/api

lá haverá toda a documentação das APis disponiveis para o seu ambiente, e um exemplo do objeto de requisição e da resposta, aí é só procurar na sessão de “cards”, no metodo POST Create.

é bem simples de usar e quebra um galhão o/

Beleza!!! Valeu, Francis! Muito obrigado pela atenção, qualquer coisa eu comento aqui alguma atualização. Isto estava me travando há tempos! Obrigado!

Aaah, só mais uma coisa. A parte do formulário na modal. Você tem algum exemplo disto? Vai ser um botão que abre uma modal e vai cadastrando os novos registros via json? Como que eu faria para abrir esse formulário na modal? Eu cheguei a pesquisar sobre isto porém a única coisa que achei é para abrir em formato de visualização e não edição.

Então, aí você não precisará abrir aquele formulário que já existe no ECM, você pode fazer um novo formulário dentro da própria modal, se estiver usando a modal do FLUIGC (TOTVS Fluig Developer), tem uma opção “content”, onde você poderá passar um bloco de html para ser renderizado dentro da modal, neste bloco você poderá montar seus campos, e quando executar a chamada da API, você passa por todos esses campos, pega os valores, e adiciona num objeto ou num array (ai depende de como fará a sua chamada).

Se quiser deixar bem dinamico, você pode abrir a modal e consultar o dataset daquele formulário, ele vai te retornar um objeto com dois nós: “value” e “columns”. Você pode usar o columns para montar dinamicamente os campos da modal, onde, para cada indice ele apenda um campo na tela. Ahh, lembrando que tem que filtrar os campos automaticos dos formulários tipo: “metadata#active”, “documentid”, etc… Pois estes não precisarão ser preenchidos pelo usuario, eles são preenchidos automaticamente quando o registro é gerado.

Aaaaah saquei agora, perdoe pela demora, ainda sou novo nessa área ahahha. Muito obrigado novamente, Francis! Se eu puder te ajudar com alguma forma, me avise. Vou tentar fazer aqui e qualquer coisa te aviso! Obrigado novamente!

Tranquilo, no começo a gente se bate um pouco mesmo, boa sorte!