Modelos de import/export : Anexo técnico 

O tratamento de importação e as acções associadas

A importação e exportação objeto está realizado pelo intermédio de um tratamento criado a partir da compilação do modelo. Este tratamento temporário tem por nome WWINNNNNN ou WWENNNNNN (NNNNNN sendo um número incremental).

No caso de exportação, o tratamento não faz que extrair os dados (em os filtrando segundo as habilitações dos utilizadores). No caso de importação, o tratamento contém as instruções de descodificação do fluxo de dados, e chama as diferentes funções ligadas ao objecto a importar, em emulando em qualquer maneira o registo. Assim, as etiquetas standard do tratamento SUBXXX e SPEXXX, que permite de gerar os objetos, são chamados normalmente.

Mas chama-se em outro as etiquetas suplementares específicos à importação, definidos no tratamento IMPXXX, se existe (e no tratameto específico definido no modelo, que permite de tratar os casos específicos). As cronologias que seguem descrevem precisamente a maneira cujo se desenrola uma importação nos casos diferentes de objeto (não se reporterá à documetação sobre a gestão objeto para mais indicações). No quadro que segue, as ações standard são indicadas em itálico, aquelas ligadas à importação o são em cinzento.

A coluna Ações indica as ações realizadas justo após a operação indicada no contexto : po exemplo, neste caso de objeto simples, se observa o pavimento 8.2 :

  • realiza-se as ações VERIF_MOD e IMP_VERIF_MOD
  • fecha-se o registo, depois realizam-se as ações AVANT_MODFIC e IMP_AVANT_MODFIC
  • afectam-se as variáveis da clase [F], depois se realiza as ações INIMOD e IMP_INIMOD.
  • reescreve-se, depois as ações MODIF e IMP_MODIF.
  • executa-se a operação de fim de transação (Commit), depois realiza as ações APRES_MOD e IMP_APRES_MOD.
  • abre-se, depois executam-se as ações DEVERROU e IMP_DEVERROU.

De referir que as ações situadas no tratamento específico de importação são efectuados antes aquelas do tratameto standard de importação; se o tratameto específico de importação afeta a variável GPE a 1, a ação do tratameto standard de importação está inobida.

Objecto simples

Sequência

Contexto

Ações

1.1

Antes a criação do programa de importação :

O Openo que permite escrever o programa temporário de importação (de nome dado pela variável IMPTRT) não está ainda feito.

É possível de alterar o nome das mascaras utilizadas (quadro NOMMSK, o número de máscaras é dado por NBMASK)

IMP_COMPILE

1.2

Após a criação do programa de importação :

O tratamento temporário de importação (de nome dado pela cariável IMPTRT) está sempre aberto por Openo : é então possível de acrescentar (por Wrseq) das instruções complementares.

O tratamento será compilado após esta ação, depois o procedimento de importação propriamente começará

IMP_TRTSUP

2

Início de programa

OUVRE IMP_OUVRE

3

Leitura de registo de cabeçalho

Transferência na clase [F]

A ação AP_IMPORT está chamada após o carregamento das variáveis decodificadas de cada bloco (o nível de imbricação está conhecido pela variável SEPNUM (de 1 a 8), a abreviação da tabela principal em curso de tratamento pela variável IMPABR

 

 

AP_IMPORT

4

Verificação da autorização de criar ou

de modificar :

SETBOUT IMP_SETBOUT (*)

5

Teste de existência do objeto :

 

5.1

Se objeto não existe :

SETBOUT IMP_SETBOUT
RAZCREIMP_RAZCRE

5.2

Se o objeto existe :

Depois carregamento da ficha

Reverificação das autorizações

VERROU IMP_VERROU

LIENSIMP_LIENS

SETBOUT IMP_SETBOUT

AVANT_MOD IMP_AVANT_MOD

6.1

Simulaçao de registo dos ecrãs associados

à tabela principal

IMPORT

IMP_DEFTRT (*)

6.2

Para cada campo de ecrã :

Execução das ações "avant_zone"

avant_saisie

init

Se a zona está registada :

Para saber se a zona está num quadro :

(esta acção afeta "nolign" se necessário)

Se OK=1, transferência depois a classe [F]

Do campo de mesmo nome

Execução das ações "après_zone"

E se for caso disso "après_modif"

 

 

 

 

 

 

IMP_ZONE

7.1

Leitura de um registo do ficheiro secundário (isto é feito para todos os níveis de registos secundários)

 

IMPORT

IMP_TAB

 

AP_IMPORT

 

7.2

Simulação dos ecrãs associados.

No caso de um quadro, a variável

"nolign" está utilizada.

Por defeito, uma linha está acrescentada

( nolign = 0)

 

8

Registo de objeto

 

8.1

Caso de criação :

Início de transação

Registo

Fim transação

 

 

Em caso de Rollback :

VERIF_CRE IMP_VERIF_CRE

INICREIMP_INICRE

CREATION IMP_CREATION

APRES_CRE IMP_APRES_CRE

 

AB_CREATION

IMP_AB_CREATION

8.2

Caso da modificação :

Início de transação

Fecho de registo

Afetação das variáveis [F]

Reescrita

Fim transação

 

 

Em caso de Rollback :

Abertura

VERIF_MOD IMP_VERIF_MOD

AVANT_MODFIC

IMP_AVANT_MODFIC

INIMODIMP_INIMOD

MODIF IMP_MODIF (*)

APRES_MOD IMP_APRES_MOD

 

AB_MODIF IMP_AB_MODIF

DEVERROU IMP_DEVERROU

9

Fim de programa :

FERME IMP_FERME

(*) As ações MODIF e IMP_MODIF estão em princípio utilizadas para gerir o registo das linhas (MODIF está utilizada em standard para a gestão do objeto, IMP_MODIF permite gerir as ações complementares). A ação IMP_DEFTRT permite reafectar se necessário a variável TRTMSK, que define o nome do tratamento automático definido no dicionário dos ecrãs.

A ação IMP_SETBOUT está utilizada para completar as opções de gestão de objeto. pode ter a fazer um "Call VIREBOUT" em importação para interdir a criação por exemplo e age nomeadamente sobre a variável CHAINE que contém todas as opções.

Objeto combinado

Sequência

Contexto

Ações

1.1

Antes a criação do programa de importação :

O Openo que permite escrever o programa temporário de importação (de nome dado pela variável IMPTRT) não está ainda feito.

É possível de alterar o nome das mascaras utilizadas (quadro NOMMSK, o número de máscaras é dado por NBMASK)

IMP_COMPILE

1.2

Após a criação do programa de importação :

O tratamento temporário de importação (de nome dado pela cariável IMPTRT) está sempre aberto por Openo : é então possível de acrescentar (por Wrseq) das instruções complementares.

O tratamento será compilado após esta ação, depois o procedimento de importação propriamente começará

IMP_TRTSUP

1.3

Início de programa

OUVRE IMP_OUVRE

2

Leitura do ficheiro de importação e transferência na classe [F]

A ação AP_IMPORT está chamada após o carregamento das variáveis decodificadas de cada bloco (o nível de imbricação está conhecido pela variável SEPNUM (de 1 a 8), a abreviação da tabela principal em curso de tratamento pela variável IMPABR

AP_IMPORT

3

Teste de existência de objeto (nº linhas >0)

 

3.1

Se o objeto existe :

VERROU IMP_VERROU

3.2

Verificação da autorização de criar ou

de modificar :

SETBOUTIMP_SETBOUT

3.3

Se objeto não existe :

SETBOUTIMP_SETBOUT

RAZCREIMP_RAZCRE

4.1

Anel de leitura dos registos

Registos ligados a cada linha :

Transferência na clase [F]

Fim de anel de leitura

Registos ligados em fim de anel :

FILTER :

LIENS0IMP_LIENS0

LIENSIMP_LIENS

 

LIENS2IMP_LIENS2

5.1

Simulaçao de registo dos ecrãs associados

à tabela principal

IMPORT

IMP_DEFTRT (*)

5.2

Para cada campo de ecrã :

Execução das ações avant_zone

avant_saisie

init

Se a zona está registada :

Se OK=1, transferência depois la classe [F] do campo de mesmo nome

Execução das ações après_zonee o caso disso après_modif

 

 

 

 

IMP_ZONE

6.1

Leitura de um registo do ficheiro secundário

A ação AP_IMPORT está chamada após o carregamento das variáveis decodificadas de cada bloco (o nível de imbricação está conhecido pela variável SEPNUM (de 1 a 8), a abreviação da tabela principal em curso de tratamento pela variável IMPABR

IMPORT

 

AP_IMPORT

6.2

Simulação dos ecrãs associados.

No caso de um quadro, a variável nolign está utilizada.

Por defeito, uma linha está acrescentada

( nolign = 0)

 

7

Registo de objeto

 

7.1

Caso de criação :

 

Início de transação

Para cada linha :

Registo

 

No fim de registo das linhas :

Transação terminada :

VERIF_CRE IMP_VERIF_CRE

DEBUT_CRE IMP_DEBUT_CRE

INICREIMP_INICRE

CREATIONIMP_CREATION

MODIFIMP_MODIF

APRES_CREIMP_APRES_CRE

7.2

Caso da modificação :

Início de transação

Apagamento das linhas

Anel sobre as linhas :

 

Criação de linha

No fim do anel

Fim transação

VERIF_MOD IMP_VERIF_MOD

DEBUT_MOD

IMP_DEBUT_MOD

FILTER :

INICREIMP_INICRE

CREATION IMP_CREATION

MODIFIMP_MODIF

APRES_MODIMP_APRES_MOD DEVERROUIMP_DEVERROU

8

Fim de programa :

FERME IMP_FERME

 

Objeto quadro

Sequência

Contexto

Ações

1.1

Antes a criação do programa de importação :

O Openo que permite escrever o programa temporário de importação (de nome dado pela variável IMPTRT) não está ainda feito.

É possível de alterar o nome das mascaras utilizadas (quadro NOMMSK, o número de máscaras é dado por NBMASK)

IMP_COMPILE

1.2

Após a criação do programa de importação :

O tratamento temporário de importação (de nome dado pela cariável IMPTRT) está sempre aberto por Openo : é então possível de acrescentar (por Wrseq) das instruções complementares.

O tratamento será compilado após esta ação, depois o procedimento de importação propriamente começará

IMP_TRTSUP

1.3

Início de programa

OUVRE IMP_OUVRE

2

Leitura dos dados do ficheiro e carregameto da classe [F]

A ação AP_IMPORT está chamada após o carregamento das variáveis decodificadas de cada bloco (o nível de imbricação está conhecido pela variável SEPNUM (de 1 a 8), a abreviação da tabela principal em curso de tratamento pela variável IMPABR

 

AP_IMPORT

3

Se o objeto existe :

VERROU IMP_VERROU

4

Fecho da tabela

Início de leitura :

Anel de leitura dos registos

No fim da leitura

FILTER :

LIENS0IMP_LIENS0

LIENSIMP_LIENS

LIENS2IMP_LIENS2

5

Verificação da autorização de modificar :

SETBOUTIMP_SETBOUT

6.1

Simulaçao de registo dos ecrãs associados

à tabela principal

IMPORT

IMP_DEFTRT (*)

6.2

Para cada campo de ecrã :

Execução das ações avant_zone

avant_saisie

init

Se a zona está registada :

Se OK=1, transferência depois la classe [F] do campo de mesmo nome

Execução das ações après_zonee o caso disso après_modif

 

 

 

 

IMP_ZONE

7.1

Leitura de um registo do ficheiro secundário

IMPORT

7.2

Simulação dos ecrãs associados.

uma linha está acrescentada ao quadro (nolign está gerado pela gestão objeto)

 

8

Registo de objeto

 

8.1

Está-se sempre em criação

Início de transação

depoos fecho tabela

se OK<>0 na seguida de MOD_IMPORT,

a transação está prosseguida:

Apagam-se todos os registos existentes

Para cada linha :

Registo

No fim de registo das linhas :

Fim de transacção

VERIF_MOD IMP_VERIF_MOD

MOD_IMPORT

 

FILTER :

INICREIMP_INICRE

CREATIONIMP_CREATION

MODIFIMP_MODIF

9

Quando a transação está com sucesso

APRES_MOD IMP_APRES_MOD

10

Fim de programa :

FERMEIMP_FERME

 

As ações do tratamento IMPxxx

Todas as ações IMPxxx têm o mesmo contexto que aquelas de SUBxxx e são chamadas após.

As ações seguintes são particulares.

a ação IMPORT

A ação IMPORT está chamada após cada leitura de registo.

A variável IMPFIC contém a abreviação do ficheito importado A classe correspondente está em linha (para as informações importadas).

No caso de um quadro, a variável "nolign" está inicializada a 0, ela será explorada em saída para saber qual linha está registada. Se "nolign" está deixada a zero, uma nova linha será criada.

a ação IMP_TAB

A ação IMPORT está utilizada para gerir as zonas de uma tabela secundária arrumada num quadro (a página 3 do objeto define a estes efeitos as tabelas secundárias, os ecrãs, e as variáveis de baixo de quadro correspondente). Isto permite distinguir as zonas não indiciadas devendo ser arrumadas num quadro de outras zonas. Esta ação não está utilizada que para as importações de objeto de tipo normal.

Ação IMP_ZONE

A ação IMP_ZONE está chamada em vez e lugar do registo de uma zona, ela permite recuperar um valor num ecrã que terá um nome diferente no ficheiro (ex : casos das zonas dimensionadas numa tabela que corresponde a várias colunas de um quadro) :

  • A variável IMPFIC contém a abreviação do ficheiro que provocou o registo.
  • A variável IMPMSK contém o nome de ecrã em curso de registo.
  • A variável IMPZON contém o nome da zona em curso de registo.
  • A variável IMPMOD, preposicionada a 0 permite desencadear a ação de "après_modif".
  • A variável OK, iincializado a 1, permite ou não de desencadear a ação standard.

Ação MOD_IMPORT

A ação MOD_IMPORT não serve que em importação de um objeto quadro (para interdir eventualmente esta importação).

O tratamento de importação específico

Este tratamento de importação curto-circuito (em geral por razões de performance) a gestão standard de objeto e não inclui que um número restrito de etiquetas chamadas por Gosub depois a função de importação Estas etiquetas são definidas a seguir :

Etiqueta

Contexto

$OUVRE

Em início de importação, esta etiqueta permite declarar as máscaras, tabelas, e variáveis necessárias

$RAZCRE

Em início de leitura (vai-se ler um novo registo). Permite atualizar a zero as variáveis que vão em seguida ser prenchidas pela importação.

$SAIMSK

Quando um grupo de dados foi lido. A variável IMPFIC permite conhecer a abreviação da tabela cujo conteúdo foi lido. A classe [F] correspondente a esta tabela está então registada, e pode-se efetuar as transferências de dados versus máscaras (quando se trabalha com objetos de tipo cabeçalho / linha,

$VALID

Acabou de se ler os dados : esta etiqueta permite fazer os controlos e de criar ou de modificar os dados na base.

Não está aconselhado de realizar este modo de importação que os problemas particulares de performance se colocam. Com efeito, mesmo se está mais pesada, a importação "standard" de objeto permite obter um controlo automático em incluindo tudo o que está descrito na logica de objeto, então que o programa de importação específica necessita de tudo recodificar à mão, em chamando eventualme te componentes existentes.

Ficheiros de transcodificação

Princípio da transcodificação

No modelo de importação ou de uma exportação, Enterprise Management recebe um fluxo de dados num jogo de caracteres que não está forçosamente o jogo de caracteres interno (correspondendo ao jogo de caracteres WE8ISO8951P1 sob oracle). Falta estar em medida de transcodificar. Atenção, não se fala nesta documentação que trabnscodificação de caracteres guardados sobre um byte, correspondendo em geral a estes caracteres acentuados ou particulares a certas línguas ocidentais. Estes caracteres são normalmente codificados sobre um byte dos valores compreendidos entre 160 e 250. A seguir, encontraremos as correspondências entre estes caracteres e os códigos ascii do jogo standard utilizado por Enterprise Management (afixados com jogo de caracteres de tipo Arial).

Octeto

0

1

2

3

4

5

6

7

8

9

16…

 

¡

¢

£

¤

¥

¦

§

¨

©

17…

ª

«

¬

 

®

¯

°

±

²

³

18…

 ´

µ

·

¸

¹

º

»

¼

½

19…

¾

¿

A :

A :

A :

A :

A :

Å

Æ

Ç

20…

 È

É

Ê

Ë

Ì

Í

Î

Ï

Ð

Ñ

21…

Ò

Ó

Ô

Õ

Ö

×

Ø

Ù

Ú

Û

22…

Ü

Ý

Þ

ß

à

á

â

ã

ä

å

23…

æ

ç

è

é

ê

ë

ì

í

î

ï

24…

 ð

ñ

ò

ó

ô

õ 

ö

÷

ø

ù 

25…

 ú

 û

ü

ý

þ

ÿ 

 

 

 

 

Isto se faz pelo intermédio do campo Jogo de caracteres no pavimento de transcofificação O campo em questão toma os valores definidos pelo menu local 9. Este menu local não está parametrizável por defeito, mas é possível de acrescentar os valores em desenvolvimento, para gerar de novos jogos de caracteres externos.

A cada valor deste menu local corresponde um ficheiro externo, instalado sobre o servidor, que define as trascodificações a realizar. Este ficheiro se encontra no directório SYS do dossier X3, e para um nome TRANS#.cnv, onde # corresponde ao número do menu local (1, 2, 3…). O ficheiro TRANS0.cnv contém os comentários explicando (em inglês) a maneira de fazer :

  • Define-se então duas linhas sobre as quais se indica :

sage="cadeia1"
output="cadeia2"

cadeia1 e cadeia2 são prefixos sobre 3 caracteres definindo o código do jogo que se pretende definir. Por exemplo,poder-se-á utilizar ado para a cadeia 1, e jogo para o segundo jogo de carateres.

  • Define-se então em seguida as linhas para definir cada caracter em lhe atribuindo uma mnemónica idêntica (que será prefixado por cadeia1 ou cadeia2),seguimento de um sinal de iguladade e do código do caracter. Por exemplo, se se designa por eacute o acento agudo, imaginemos que este caracter seja transcodificação no jogo de caracteres de chegada jogo com o código decimal 238 (é codificado 233 no jogo ado). Escriver-se-á as duas linhas seguintes :

adoeacute="238"
jeueacute="233"

É importante notar que :

  • que as duplas quotas não são obrigatórias (ter-se-á podido escrever adoeacute=238).
  • que os códigos podem ser também dados em formato octal sob a forma \nnn, e em formato hexadecimal sob a forma Hxx.
  • que a ordem na qual as linhas são apresentadas importa pouco (pode-se então definir a totalidade dos caracteres de um jogo, depois aquelas do jogo seguinte, ou de emparelhar os caracteres dois a dois, toma-se não importa qual outra ordem).
  • que os caracteres não descritos (ou descritos num jogo sem estar no outro) não serão transcodificados
  • que de linhas de comentários podem livremente ser inseridos ou acrescentados em fim de linha, previsto que sejam precedidods do caracter #.

Exemplo de ficheiro : TRANS0.cnv

Encontrar-se-á a seguir o conteúdo do ficheiro TRANS0.cnv, que explica em inglês como se toma :

#
########################################################################
#
# trans0.cnv
#
# Transcodification file used for Sage X3 import/export
#
# Each line (except the comments prefixed by # ) must have the following format
#
# adoxxxxx = value1 or extxxxxx = value2
#
# (ado for adonix internal code, ext for "external" file code
#
# xxxxx is an identifier used to associate external & internal code together
#

# values can be defined in following formats :
#
# nnn or "nnn"         value in decimal
# \nnn or "\nnn"       value in octal
# Hnnn or "Hnnn"       value in hexadecimal
#
# Author : Bertrand YVINEC   
# Translated by Dominique BOPP
#
# Copyright (c) ADONIX 1992-2001
#
########################################################################
#
# Identifier definition (default is ado and ext)
#
adonix = "iso"
output = "ibm"

Exemplo de ficheiro : TRANS2.cnv

Este ficheiro permite transcodificar no jogo IBM PC. O ficheiro aqui expurgado da maior parte das linhas de comentários

#
########################################################################
# trans2.cnv
# Copyright (c) ADONIX 1992-2001
########################################################################
adonix = "iso"
output = "ibm"
#
# ISO code first
isoagr="\340"    # a grave
isoeai="\351"    # e acute
isoegr="\350"    # e grave
isocce="\347"    # c cedilla
isougr="\371"    # u grave
isodeg="\260"    # degree
isoali="\247"    # alinea
isoaci="\342"    # a circumflex
isoeci="\352"    # e circumflex
isoici="\356"    # i circumflex
isooci="\364"    # o circumflex
isouci="\373"    # u circumflex
isoatr="\344"    # a dieresis
isoetr="\353"    # e dieresis
isoitr="\357"    # i dieresis
isootr="\366"    # o dieresis
isoutr="\374"    # u dieresis
isopou="\243"    # pound
#
# Ensuite en code PC
ibmagr="\205"    # a grave
ibmeai="\202"    # e acute
ibmegr="\212"    # e grave
ibmcce="\207"    # c cedilla
ibmugr="\227"    # u grave
ibmdeg="\370"    # degree
ibmali="\365"    # alinea (CP 850)
ibmaci="\203"    # a circumflex
ibmeci="\210"    # e circumflex
ibmici="\214"    # i circumflex
ibmoci="\223"    # o circumflex
ibmuci="\226"    # u circumflex
ibmatr="\204"    # a dieresis
ibmetr="\211"    # e dieresis
ibmitr="\213"    # i dieresis
ibmotr="\224"    # o dieresis
ibmutr="\201"    # u dieresis
ibmpou="\234"    # pound

Importação silenciosa

Princípio de chamada

Se dseja desencadear directamente uma importações num tratamento, é possível de proceder em inserindo as linhas seguintes :

If !GSERVEUR
 
   Call OUVRE_TRACE(TIT) From LECFIC
Endif
Call IMPORTSIL([L]COD_MODELE,[L]NOM_FICHIER)from GIMPOBJ
If !GSERVEUR
    Call FERME_TRACE From LECFIC
Endif

 Com

  • [L]COD_MODELE=Variável contendo o código do modelo de importação
  • [L]NOM_FICHIER=Variável contendo o nome completo do ficheiro a importar

Variáveis afetadas

As variáveis passadas em argumento são os seguintes :

  • [L]COD_MODELE=Variável contendo o código do modelo de importação
  • [L]NOM_FICHIER=Variável contendo o nome completo do ficheiro a importar

O estatuto de fim de importação recuperável no campo [M:IMP2]STAT
Pode-se ter o texto em claro da mensagem ligada ao erro em chamando o subprograma seguinte :

Call ERR_IMPORT([M:IMP2]STAT,MESSAGE) From GIMPOBJ