Ligação entre registros da mesma base

Estrutura básica

Há dois tipos de registro na base dbn: o registro PAI e o registro FILHO.

O registro PAI faz a listagem das ocorrências dos registros FILHO, apresentado informações do registro FILHO;

O registro FILHO faz um link para o registro PAI, apresentando informações do registro PAI.

1. Para fazer a lista de referências do FILHO, são usados os seguintes arquivos:

/cgi-bin/simples.pft
/cgi-bin/wxis_modules/ref_link.xis
/bases/par/<dbn>.par // Adicionar os .pft e os caminhos das duas bases do ref_link.xis
/bases/<dbn>/data/<dbn>.fst // Ajustar indexação
/bases/<dbn>/pfts/<lang>/server.pft // Caminho do servidor, chamado nos outros arquivos
/bases/<dbn>/pfts/<lang>/<dbn>.pft // Visualização da ligação, colocar o iframe e o botão para listar os FILHOS

2. Para fazer o link para o PAI, são usados os seguintes arquivos:

/bases/par/<dbn>.par // Adicionar os .pft
/bases/<dbn>/data/<dbn>.fst // Ajustar indexação
/bases/<dbn>/pfts/<lang>/server.pft // Caminho do servidor, chamado nos outros arquivos
/bases/<dbn>/pfts/<lang>/<dbn>.pft // Visualização da ligação com o PAI, colocar ',@doc-principal.pft,’
/bases/<dbn>/pfts/<lang>/doc-principal.pft  // em algumas bases é qualifiers_links.pft

Arquivos específicos

/cgi-bin/simples.pft

O que faz: Gera a lista de referências do documento FILHO.

Observações: Apresenta apenas os dados do registro filho. Os cabeçalhos (nome dos campos) ficam no ref_link.xis. É o formato gerado dentro do iframe do ref_link.xis.

Deve haver um simples.pft para cada tipo de referência na mesma base ou para cada base na instalação do ABCD que tenha referências.

O nome do arquivo e as ocorrências dentro do ref_link.xis dele devem ter os nomes trocados, caso haja outra ligação entre registros.

dbnNome da base
pftNome do formato (sem .pft) de exibição do registro FILHO, quando clicar no link
serverNome do servidor (não funciona @server.pft)
formatoOs formatos devem ser substituídos pelos campos do registro FILHO, apresentados em forma de tabela. O link para o registro está no mfn e os cabeçalhos estão no ref_link.xis.

Conteúdo:

[pft]
'<td class="estilo"><a href="http://server/central/dataentry/fmt.php?Opcion=ver&base=dbn&cipar=dbn.par&Mfn='mfn'&ver=S&Formato=pft" target="_blank" class="estilo" title="">'mfn,'</a></td>'
'<td class="estilo">'mhl,v117[1],'</td>'
'<td class="estilo">'mhl,v119[1],'</td>'
'<td class="estilo">'mhl,v153[1],'</td>'
'<td class="estilo">'mhl,v122*6.2,"/"v122*4.2,"/"v122*0.4,'</td>'
'<td class="estilo">'mhl,v124[1],'</td>'
'<td class="estilo">'mhl,v125[1],'</td>'
[/pft]

/cgi-bin/wxis_modules/ref_link.xis

O que faz: Faz ligação entre o documento PAI e seus FILHOS.

Observações: Gera o conteúdo do iframe no registro PAI.

dbnNome da base
serverNome do servidor (não funciona @server.pft)
estiloNome do arquivo .css
ACERVOdeve ser trocado caso haja mais de uma referência na mesma instalação do ABCD. O caminho deve estar no <dbn>.par
GIZMOdeve ser mantido. O caminho deve estar no <dbn>.par
ref_link.xispara cada base/referência deve haver um ref_link. O nome do arquivo e as ocorrências dentro dele devem ter os nomes trocados, caso haja outra ligação entre registros.
simplestambém devem haver um para cada base/referência. O nome do arquivo e as ocorrências dentro dele devem ter os nomes trocados, caso haja outra ligação entre registros.
formatoos formatos devem ser substituídos pelos nomes dos campos do registro FILHO, apresentados em forma de tabela. O conteúdo dos campos está no simples.pft.

Conteúdo:

<IsisScript name="ref_link.xis">
<section>
    <display><pft>'Content-type: text/html'/#</pft></display>
    <display>
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="http://server/bases/dbn/styles/estilo.css" />
            <title></title>
    </head>
    <body>
    </display>
    <field action="cgi" tag="3001">expressao1</field>
    <field action="cgi" tag="3011">operador1</field>
    <field action="cgi" tag="3002">expressao2</field>
    <field action="cgi" tag="3012">operador2</field>
    <field action="cgi" tag="3003">expressao3</field>
    <field action="cgi" tag="2002">formato</field>
    <field action="cgi" tag="2003">exibir</field>
    <field action="cgi" tag="2004">proximo</field>
    <field action="cgi" tag="2010">lista</field>
    <field action="cgi" tag="2051">formulario</field>
    <field action="cgi" tag="5001">base</field>
    <field action="cgi" tag="5002">cipar</field>
    <!-- Carrega parametros enviados pela PFT da base -->
    <parm name="cipar"><pft>,cat(v5002),</pft></parm>
    <!-- Tratamento de erro -->
    <flow action="jump"><pft>if a(v3001) and a(v2010) then 'ERRO2' fi</pft></flow>
    <field action="replace" tag="2002"><pft>if a(v2002) then 'simples' else v2002 fi</pft></field>
    <field action="replace" tag="2003"><pft>if val(v2003)<1 then '25' else v2003 fi</pft></field>
    <field action="replace" tag="2004"><pft>if val(v2004)<1 then '1' else v2004 fi</pft></field>
<label>Saber</label>
<field action="replace" tag="5010">
<pft>
    if v2051:'FORM' then
            v3001,if p(v3001) then if p(v3002) or p(v3003) then v3011 fi,fi,v3002,
            if p(v3002) and p(v3003) then v3012 fi,v3003
    else
            if p(v3001) then
                if p(v3011) then
                    replace(v3001,' ',v3011)
                else
                    v3001
                fi,
            else
                v2010+|+|
            fi,
    fi,
</pft></field>
    <do task="search">
            <parm name="db">ACERVO</parm>
            <parm name="gizmo">GIZMO</parm>
            <parm name="expression">
            <pft>v5010</pft>
            </parm>
            <parm name="reverse">Off</parm>
            <field action="define" tag="1001">Isis_Current</field>
            <field action="define" tag="1002">Isis_Total</field>
            <loop>
                    <list action="load" type="list">
                            <pft>
                                    ''mhu,'^k',mfn, '^m'mfn,
                            </pft>
                    </list>
            </loop>
    </do>
<!-- AGPOA - INICIO DA VISUALIZACAO DOS RESULTADOS-->
<!--<display><pft>'from: 'v2004'<br>count: 'v2003'<br>'</pft></display-->
<!--display><pft>'<h4>expressão: 'v5010'</h4>'</pft></display-->
<display>
    <form name="resultado" action="wxis.exe" method="get" onSubmit="return verifica()">
    <input type="hidden" name="IsisScript" value="ref_link.xis">
    <input type="hidden" name="nextAction" value="refine/resubmit">
    <table>
    <tr>
    <td></td>
</display>
<display>
<pft>
    if v2002:'simples' then
        '<th class="ahmcs listaSuporte">MFN</th>'
        '<th class="ahmcs listaSuporte">FG</th>'
        '<th class="ahmcs listaSuporte">CDR-FG</th>'
        '<th class="ahmcs listaSuporte">CD</th>'
        '<th class="ahmcs listaSuporte">Data</th>'
        '<th class="ahmcs listaSuporte">Tema</th>'
        '<th class="ahmcs listaSuporte">Subtema</th></tr>'
    fi
</pft>
</display>
<display>
</display>
    <do task="list">
<field action="define" tag="1001">Isis_Current</field>
            <field action="define" tag="199">Isis_Item</field>
            <parm name="sort"><pft>v199^k</pft></parm>
            <parm name="count"><pft>v2003</pft></parm>
            <parm name="from"><pft>v2004</pft></parm>
            <loop>
                    <field action="import" tag="list">1002/2999</field>
                    <do task="mfnrange">
                            <parm name="db">ACERVO</parm>
                            <parm name="from"><pft>v199^m</pft></parm>
                            <parm name="count">1</parm>
                            <loop>
                            <field action="import" tag="list">1000/2999</field>
                            <display>
                            <htmlpft><pft>
                            '<tr><td>'
                    '<span class="destaque">'    '[pft]V1001[/pft]'    '. </span>'
                            if v2002:'simples' then
                                    cat('simples.pft')
                fi,
                            </pft></htmlpft>
                            </display>
                            </loop>     <!--fim do loop mfnrange-->
                    </do>
            </loop> <!--fim do loop task-->
    </do>
<display><pft>
     </pft></display>
    <display>
    <pft>
            '<tr><td>'
            '<input type="Hidden" name="formato" value="'v2002'">'
            if val(v1002)>0 then '<!--<input class="botao" type="Submit" value=" Exibir selecionados">-->' else 'Nenhum registro recuperado!' fi,
            '<br /><br />            </form>
            </table>
 <!--<input type="button" class="botao" name="imprimir"  align="middle" id="imprimir" value="Imprimir" onclick="print()" /></td></tr>-->'
    </pft>
    </display>
<!-- FIM DA VISUALIZACAO DOS RESULTADOS -->
    <display><pft>
    '<span class="etiqueta">Total: </span><span class="destaque">'v1002' </span>' if v1002='1' then 'registro.' else 'registros.' fi,'<br/>'
    '<!--<a href="'v5000,
    if v2051:'FORM' then
            'JanelaPesquisa.htm'
    else
            'indexflo.htm'
    fi,
    '"><img src="'v5000'img/find.png" alt="Pesquisar" border="0">Nova Pesquisa</a>-->'
    </pft>
</display>
<flow action="jump">FIM</flow>
<label>ERRO</label>
    <display>Selecione ao menos uma das bases listadas.</display>
    <flow action="jump">FIM</flow>
<label>ERRO1</label>
    <display>O registro final é menor do que o registro inicial.</display>
    <flow action="jump">FIM</flow>
<label>ERRO2</label>
    <display>
    Informe a expressão de pesquisa<br>ou<br>Selecione ao menos um item para exibição.<br><br>
    <input class="botao" type="button" value="Voltar" onclick="history.go(-1)">
    </display>
    <flow action="jump">FIM</flow>
<label>FIM</label>
    <!-- Para a execução e sai -->
    <display>
    </td></tr></table></display>
<display>
 <pft>
 if val(v1002)>0 then
 if val(v1001)<val(v1002) then
    '<hr color="#660000" width="90%">
    <table>
            <tr>
              <td>
                      <a href="javascript:history.back();">
                      </td>
              <td>
                    <form action="http://cgi-bin/wxis.exe" method="post">
                    <input type="hidden" name="IsisScript" value="ref_link.xis">
                    <input type="hidden" name="expressao" value="
                           'replace(v2001,' ','*'),v2000,
                            if p(v2004) then v2002,replace(v2004,' ','*'),v2003, fi,
                            if p(v2007) then v2005,replace(v2007,' ','*'),v2006, fi
                            '">
                    <input type="hidden" name="campo1" value="'v2000'">
                    <input type="hidden" name="expressao1" value="'v3001'">
                    <input type="hidden" name="operador1" value="'v3011'">
                    <input type="hidden" name="campo2" value="'v2003'">
                    <input type="hidden" name="expressao2" value="'v2004'">
                    <input type="hidden" name="operador2" value="'v3012'">
                    <input type="hidden" name="campo3" value="'v2006'">
                    <input type="hidden" name="expressao3" value="'v3003'">
                    <input type="hidden" name="controle" value="AN="'v900'">
                    <input type="hidden" name="quantidade" value="'v2009'">
                    <input type="hidden" name="lista" value="AN='v2010'">
                    <input type="hidden" name="proximo" value="'f(val(v2004)+25,0,0)'">
                 <input type="image" src="http://teste.isishome.net/img/avancar.png" value="Avançar" alt="Avançar">
             </td>
            </tr>
          </table>
</body>'
else
if  val(v1001)=val(v1002) then
   fi fi fi
 </pft>
</display>
    <flow action="exit">fim</flow>
</section>
</IsisScript>

/bases/par/<dbn>.par

O que faz: Indica os caminhos dos paâmetros da base.

Observações: Deve-se adicionar os .pft e as bases do ref_link.xis.

dbndeve ser trocado pelo nome da base
caminho-fisicodeve ser trocado pelo caminho físico do servidor, incluindo a / inicial. Exemplo: /var/www/abcd
ACERVOdeve ser o mesmo que está em ref_link.xis
GIZMOdeve ser mantido assim

Conteúdo:

// Acrescentar ao conteúdo já existente
doc-principal.pft=%path_database%dbn/pfts/pt/doc-principal.pft
server.pft=%path_database%dbn/pfts/pt/server.pft
GIZMO.*=caminho-fisico/bases/gizmo/pt/qlf850.*
ACERVO.*=caminho-fisico/bases/dbn/data/dbn.*

/bases/<dbn>/data/<dbn>.fst

O que faz: Configuração da indexação da base.

Observações: Além dos campos que fazem a ligação, pelo menos os campos que são exibidos (no doc-principal.pft e no simples.pft) devem estar indexado.

e v1Campo com número/código único na base, geralmente o v1, mesmo, é o número de controle. Deve ser preenchido no registro PAI. Pode ser preenchido no registro FILHO (cada um com seu número, claro).
‘SG’Sigla arbitrária. Não alterar.
773 e v773^wCampo preenchido apenas no registro FILHO, com o código do v1 do registro PAI. Pode ser qualquer campo, desde que alterado em todos os outros arquivos.
|NE_|v773^wSigla que deve estar na <dbn>.pft em <input type=”hidden” value=”NE_’v1′” name=”expressao1″>

Conteúdo:

// Acrescentar ao conteúdo já existente, no início do arquivo.
1 0 'SG'v1
773 0 (v773^w/)
773 0 |NE_|v773^w

/bases/<dbn>/pfts/<lang>/server.pft

O que faz: Especifica o caminho do servidor, utilizado no ref_link.xis e no doc-principal.pft.

Observações: Incluir a barra ao final.

Conteúdo:

‘http://caminho.do/servidor/’

/bases/<dbn>/pfts/<lang>/<dbn>.pft

O que faz: Exibe os campos do registro.

Observações: Colocar o código desejado da PFT, acrescentando os trechos abaixo nos lugares das referências.

dbnNome da base
caminho-fisicoCaminho físico do servidor, incluindo a / inicial. Exemplo: /var/www/abcd
NE_’v1′NE_ é o prefixo do campo preenchido apenas no registro FILHO, com o código do v1 do registro PAI. Deve estar no <dbn>.fst.
ref_link.xisPara cada base/referência deve haver um ref_link. O nome do arquivo e as ocorrências dentro dele devem ter os nomes trocados, caso haja outra ligação entre registros.
formatoFormatação PFT, conforme a base. Preferencialmente, colocar condicional de presença ou de ausência de campos que tenham em apenas um dos tipos de registro.
nome-do-botãoNome do botão para exibir registros FILHOS. Exemplo: “Ver entrevistas”.

Conteúdo:

// Para exibir link para o registro PAI.
if p(v154) and a(v100) then
'<tr class="estilo"><td class="estilo">',@doc-principal.pft,'</td></tr>'
fi,
// Para exibir link para o registro FILHO.
if a(v154) and p(v100) then
'<tr>
<th class="estilo"><br />
<form action="/cgi-bin/wxis.exe" method="post" target="tela" id="tela">
           <input type="hidden" name="IsisScript" value="wxis-modules/ref_link.xis">
           <input type="hidden" value="NE_'v1'" name="expressao1">
<!-- Input para executar o cgi-bin/wxis-modules/ref_link.xis -->
           <input type="hidden" value="dbn" name="base">
           <input type="hidden" value="caminho-fisico/bases/par/'v5001'.par" name="cipar">
           'if a(v154) then
             '<input name="buscar" type="submit" value="nome-do-botão" target="tela" class="estilo" title="">
</form></th>
  <td><iframe frameborder="0" id="tela" name="tela" width="100%" height="150px"></iframe></td>
</tr>'fi/
fi,

/bases/<dbn>/pfts/<lang>/doc-principal.pft

O que faz: Exibe o link para o registro PAI.

Observações:

condicionalIncluir uma condicional para apresentação do link. Preferencialmente com ausência ou presença de campos que existam apenas no registro FILHO.
dbnNome da base
caminho-fisicoCaminho físico do servidor, incluindo a / inicial. Exemplo: /var/www/abcd
‘SG’v999Sigla e campo arbitrários. Não alterar.
v773^wCampo preenchido apenas no registro FILHO, com o código do v1 do registro PAI. Pode ser qualquer campo, desde que alterado em todos os outros arquivos.
v260Qualquer campo, desde que exista apenas no registro PAI. Se for preenchido no registro FILHO, não funcionará.
pftNome do formato (sem .pft) de exibição do registro PAI, quando clicar no link.
formatoFormatação do que será o link para o registro PAI. Colocar campos que estejam no registro PAI  (mas não há problema em estar também no FILHO).

Conteúdo:

(if p(v773^w) then
'<a href="',@server.pft,'central/dataentry/fmt.php?Opcion=ver&base=dbn&cipar=dbn.par&Mfn='ref(l(['caminho-fisico/bases/dbn/data/dbn']'SG'v999,v773^w,v260),mfn)'
&ver=S&Formato=pft" class="estilo" target="_blank" title="">'ref(l(['caminho-fisico/bases/dbn/data/dbn']'SG'v999,v773^w,v260),v245^a, v245^g,' <span class="destaque">MFN: </span>'mfn)'</a>'
fi,)' '

Exemplos

MAJSA: são registrados entrevistas e entrevistados

MAJSA: Banco de memória o Arquivo Histórico de Caxias. Fazem referência entre entrevistado e entrevistas cedidas.

Campos:

v1: Controle (preenchido em todos os registros)

v154: Controle do entrevistado (preenchido na ENTREVISTA, com o v1 do ENTREVISTADO)

v100: Nome do entrevistado (ENTREVISTADO)

v101 e v102: Nascimento e morte do entrevistado (ENTREVISTADO)

v124: Tipo de entrevista (ENTREVISTA)

O registro da entrevista v1=1, chama o entrevistado v154=52.

Na ENTREVISTA, aparecem o nome (v100) e datas de nascimento (v101) e morte (v102) do ENTREVISTADO, a partir do v154 preenchido.

No ENTREVISTADO, aparece a listagem das ENTREVISTAS, com FG (v117), CDR-FG (v119), CD (v153), Data (v122), Tema (v124) e Subtema (v125) da ENTREVISTA.

Em ambos os casos o documento referenciado abre em nova aba do navegador.

Exemplos:

ENTREVISTA                                                ENTREVISTADO

Deixe um comentário