Histórico da Página
...
Portuguese | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Classe: MsmGetCria um objeto visual para edição de campos baseado no Dicionário de Campos (SX3) ou em um array. NewContrutor da Classe MsMGet. Retorna uma nova instância do Objeto da Classe MsMGet.MsmGet(): New ( [ cAlias], [ uPar2], < nOpc>, <lUnqFocus>, [ uPar5], [ uPar6], [ aAcho], [ aPos], [ aCpos], [ nModelo], [ uPar11], [ uPar12], [ uPar13], [ oWnd], [ lF3], [ lMemoria], [ lColumn], [ caTela], [ lNoFolder], [ lProperty], [ aField], [ aFolder], [ lCreate], [ lNoMDIStretch], [ uPar25] ) -->
Parâmetro nOpcCaso a variável Private aRotina tenha sido declarada no fonte, o parâmetro nOpc deverá ser informado com o número da linha do vetor aRotina. Caso contrário utilizará sua propriedade com o mesmo nome com seguinte formato:
- aRotina
Parâmetro aFieldQuando o desenvolvedor não utilizar a MsmGet baseada no SX3, deverá informar o parâmetro aField com a seguinte estrutura:
#include "protheus.ch"#include "msmgadd.ch"User Function MyMrbwEnch()Private cCadastro := "Cadastro de Clientes"Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},; {"Visualizar" , "U_MyMsmGet" , 0, 2}}DbSelectArea("SA1")DbSetOrder(1)MBrowse(6,1,22,75,"SA1")ReturnUser Function MyMsmGet(cAlias,nReg,nOpc)Local oDlgLocal oEnch Local lMemoria := .T. Local lCreate := .T.Local lSX3 := .T. //verifica se irá criar a enchoice a partir do SX3 ou a partir de um vetor.Local aPos := {000,000,400,600} //posição da enchoice na telaLocal aCpoEnch := {} //campos que serão mostrados na enchoiceLocal aAlterEnch := {"A1_COD", "A1_NOME"} //habilita estes campos para ediçãoLocal aField := {} Local aFolder := {"Cadastrais","Adm/Fin.", "Fiscais", "Vendas"} Local cSvAlias := Alias() /*Estrutura do vetor aField [1] - Titulo [2] - campo [3] - Tipo [4] - Tamanho [5] - Decimal [6] - Picture [7] - Valid [8] - Obrigat [9] - Nivel [10]- Inicializador Padrão [11]- F3 [12]- when [13]- visual [14]- chave [15]- box [16]- folder [17]- nao alteravel [18]- pictvar [19]- gatilho*/ DbSelectArea("SX3")DbSetOrder(1)DbSeek(cAlias)While !Eof() .And. SX3->X3_ARQUIVO == cAlias If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. X3Uso(SX3->X3_USADO) AADD(aCpoEnch,SX3->X3_CAMPO) EndIf // Exemplo da estrutura do array aField // Aadd(aField, {"Codigo", "A1_COD", "C", 6, 0, "@!", 'IIF(Empty(M->A1_LOJA),.T.,ExistChav("SA1",M->A1_COD+M->A1_LOJA,,"EXISTCLI"))', .F., 1, "", "", "", .F., .F., "", 1, .F., "", "S"}) IF Alltrim(SX3->X3_CAMPO) $ "A1_COD|A1_NOME|A1_DESC|A1_COND|A1_ENDCOB|A1_ENDENT" Aadd(aField, {X3TITULO(),; SX3->X3_CAMPO,; SX3->X3_TIPO,; SX3->X3_TAMANHO,; SX3->X3_DECIMAL,; SX3->X3_PICTURE,; SX3->X3_VALID,; .F.,; SX3->X3_NIVEL,; SX3->X3_RELACAO,; SX3->X3_F3,; SX3->X3_WHEN,; .F.,; .F.,; SX3->X3_CBOX,; Val(SX3->X3_FOLDER),; .F.,; SX3->X3_PICTVAR,; SX3->X3_TRIGGER}) EndIf DbSkip()End DEFINE MSDIALOG oDlg TITLE "Teste MsmGet" FROM 0,0 TO 355,600 PIXEL oDlg:lMaximized := .T.RegToMemory(cAlias, If(nOpc==3,.T.,.F.))If lSX3 //exemplo de utilização da enchoice lendo as informações do SX3 - quando a variável lSX3 for .T. oEnch := MsmGet():New(cAlias,nReg,nOpc,/*aCRA*/,/*cLetras*/,/*cTexto*/,aCpoEnch,aPos,aAlterEnch,; /*nModelo*/,/*nColMens*/,/*cMensagem*/, /*cTudoOk*/,oDlg,/*lF3*/,lMemoria,/*lColumn*/,; /*caTela*/,/*lNoFolder*/,/*lProperty*/,/*aField*/,/*aFolder*/,/*lCreate*/,; /*lNoMDIStretch*/,/*cTela*/) Else //exemplo de utilização da enchoice por array oEnch := MsmGet():New(,,nOpc,/*aCRA*/,/*cLetras*/,/*cTexto*/,aCpoEnch,aPos,aAlterEnch,/*nModelo*/,; /*nColMens*/,/*cMensagem*/, /*cTudoOk*/,oDlg,/*lF3*/,lMemoria,/*lColumn*/,/*caTela*/,; /*lNoFolder*/,/*lProperty*/,aField,aFolder,lCreate,/*lNoMDIStretch*/,/*cTela*/) EndIf oEnch:oBox:align := CONTROL_ALIGN_ALLCLIENTACTIVATE MSDIALOG oDlg CENTER ;ON INIT EnchoiceBar(oDlg,{|| oDlg:End()},{|| oDlg:End()},,,,.F.,.F.) If !Empty(cSvAlias) DbSelectArea(cSvAlias)EndIfreturn DisableEste método desabilita a edição de todos os controles do folder do objeto MsMGet ativo.MsmGet(): Disable ( ) --> EnableEste metodo habilita a edição de todos os controles do folder do objeto MsMGet ativo.MsmGet(): Enable ( ) --> HideEste método inibe a visualização de todos os controles do folder do objeto MsMGet ativo.MsmGet(): Hide ( ) --> ShowEste método habilita a visualização de todos os controles do folder do objeto MsMGet ativo.MsmGet(): Show ( ) -->
A validação dos campos criados na enchoice é executada na seguinte ordem: validação de usuario (X3_VLDUSER) , depois validação do sistema (X3_VALID) e por último a trigger. Protheus 10 |