Páginas filhas
  • Estrutura de tabelas de CHs, Help e Campos (SX3)

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Tabelas de CHs:

  • ZB0
  • ZB1

 Image Added

Image Removed

Neste diagrama, demonstramos as tabelas do AtuSX que guardam as informações referentes aos CHs. A tabela ZB0 representa o cabeçalho (podemos entender como sendo os próprios arquivos de CH, por exemplo FATA010.CH), a ZB1 os itens (as strings de tradução de cada CH), a ZA0 contém os owners e a tabela ZA4 os países.

...

Bloco de código
themeEclipse
titleTextos do sistema (CHs)
user function AtuSXStrQuery()
	Local cVersion := "000001"
	Local cProject := "000001"
	Local cPackage := Space( 6 )
	Local cTable   := "ZB1"
	Local cQuery   := ""
	Local cAliasTmp := ""
	
	//Aqui faremos a Query para retornar as Strings do AtuSX
	//Os campos Filial foram incluídos principalmente para melhorar a performance da query
	cQuery += "SELECT * FROM "+RetSqlName("ZB1")+" ZB1 "
	cQuery += "INNER JOIN "+RetSqlName("ZB0")+" ZB0 "
	cQuery += "ON ZB1.ZB1_IDZB0 = ZB0.R_E_C_N_O_ "
	cQuery += "INNER JOIN "+RetSqlName("ZA0")+" ZA0 "
	cQuery += "ON ZB1.ZB1_FILIAL = '" + xFilial("ZB1") + "' AND "
	cQuery += "ZB0.ZB0_FILIAL = '" + xFilial("ZB0") + "' AND "
	cQuery += "ZA0.ZA0_FILIAL = '" + xFilial("ZA0") + "' AND ZB0.ZB0_IDZA0 = ZA0.R_E_C_N_O_ AND "
	
	//A função ASXVerFil retorna o filtro de versão, projeto e pacote levando em consideração as heranças
	cQuery += ASXVerFil(3, cTable, cVersion, cProject, cPackage, AsxUniqKey( cTable ), cTable ) + " AND "
	
	//Aqui filtro apenas o pais Brasil, módulo SIGAFAT e textos em portogues que estão iguais em espanhol
	cQuery += " ZB1.ZB1_IDZA4 = 1 AND ZA0.ZA0_NOME = 'SIGAFAT' AND ZB1.ZB1_TXTPOR = ZB1.ZB1_TXTSPA " 
	
	cAliasTmp := getNextAlias()
	dbUseArea( .T., "TOPCONN", TcGenQry( ,, ChangeQuery( cQuery ) ), cAliasTmp, .F., .T. )  
	
return

 

Tabelas de help:

  • ZXH
  • ZXT

Image Added

Para criarmos uma query para filtrar as tabelas de Help devemos primeiro entender um conceito diferente na sua arquitetura. Primeiro, o cabeçalho, representado na tabela ZXH, nele podemos ter 2 referências a tabelas de itens, ZXT, tanto pelo campo ZXH_IDPROB (ID do problema) quanto pelo ZXH_IDSOL (ID da solução).

Já na tabela de itens, também temos uma diferença estrutural importante de levarmos em consideração, diferente das outras tabelas que cada registro possui todos as traduções pra todos os idiomas (em diferentes colunas) na ZXT temos uma linha para cada idioma.

As tabelas ZA4 e ZA8 são as tabelas de Países e idioma respectivamente.

Assim como no exemplo anterior os relacionamentos são representados usando a representação do MER.

 

Bloco de código
themeEclipse
titleHelps
user function AtuSXHelpQuery()
	Local cVersion := "000003"
	Local cProject := "000017"
	Local cPackage := Space( 6 )
	Local cTable   := "ZXH"
	Local cQuery   := ""
	Local cAliasTmp := ""
	
	//Aqui faremos a Query para retornar os Helps
	//Os campos Filial foram incluídos principalmente para melhorar a performance da query
	//nessa primeira parte da query retorno os Helps do Brasil
	cQuery += "SELECT * FROM " + RetSQLName("ZXH") + " ZXH "
	cQuery += "INNER JOIN " + RetSQLName("ZXT") + " ZXT ON ZXH.ZXH_IDPRB = ZXT.ZXT_COD AND "
	cQuery += "ZXT.ZXT_IDZA8 = 1 AND ZXT.ZXT_FILIAL = '" + xFilial("ZXT") + "' AND "
	cQuery += "ZXH.ZXH_FILIAL = '" + xFilial("ZXH") + "' AND "
	
	//A função ASXVerFil retorna o filtro de versão, projeto e pacote levando em consideração as heranças
	cQuery += ASXVerFil(3, cTable, cVersion, cProject, cPackage, AsxUniqKey( cTable ), cTable ) + " AND "
	
	//Aqui filtro apenas os helps que tabém existem na subquery, a qual retorna o helps do idioma 3, comparando
	//seus textos, ou seja o texto no idioma 1 tem que ser igual ao idioma 3
	//Como armazenamos os helps em binário, utilizamos a função Cast para converter o tipo de dado 
	cQuery += "EXISTS " 
	cQuery += "( SELECT * from " + RetSQLName("ZXT") + " ZXT2 WHERE "
	cQuery += 	"ZXT2.ZXT_IDZA8 = 3 AND ZXT2.ZXT_COD = ZXT.ZXT_COD AND D_E_L_E_T_ =' ' AND "
	cQuery += 	"CAST( ZXT2.ZXT_TEXTO AS VARBINARY )  = CAST( ZXT.ZXT_TEXTO AS VARBINARY ) )" 
	
	cAliasTmp := getNextAlias()
	dbUseArea( .T., "TOPCONN", TcGenQry( ,, ChangeQuery( cQuery ) ), cAliasTmp, .F., .T. )  
	
return

 

Textos de Campos:

  • ZY3
  • ZX3

Image Added

Para retornarmos as strings da SX3 precisamos fazer o relacionamento entre as tabelas ZY3 (cabeçalho dos campos), a ZX3 com os itens de tradução de cada campo, a ZY2 com as tabelas e a ZA0 com os owners. Podemos utilizar a tabela ZA4 caso seja necessário filtrar o país.

Os relacionamentos entre as tabelas estão destacados pelas linhas de relacionamento do modelo do MER.

 

 

 

¹ - Os parâmetros da função são: ASXVerFil(nTipo, cAlias, cCodVer, cCodPrj, cCodPac, aKey, cPrefix, lExact, lInvAsp, lDescSep)

@param nTipo     Tipo : 1 - ISAM, 2 - SQL browse, 3 - SQL Query

@param cAlias    Alias

@param cVerId    Código da versão

@param cPrjId    Código do projeto

@param cPacId    Código do pacote

@param aKey      Array contendo a chave de relacionamento ( apenas tipo 3 )

@param cPrefix   Prefixo do alias da query que chamou a função ( apenas tipo 3 )

@param lExact    Pesquisa exatamente a versão, projeto e pacote, sem herança

@param lInvAsp   Inverte aspas simples por aspas duplas

@param lDescSep  Desconsidera a configuração de projeto separado

 

@return   cFiltro String de filtro