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>, [ uPar4]<lUnqFocus>, [ uPar5], [ uPar6], [ aAcho], [ aPos], [ aCpos], [ nModelo], [ uPar11], [ uPar12], [ uPar13], [ oWnd], [ lF3], [ lMemoria], [ lColumn], [ caTela], [ lNoFolder], [ lProperty], [ aField], [ aFolder], [ lCreate], [ lNoMDIStretch], [ uPar25] ) -->
Nome | Tipo | Descrição | Obrigatório | Referência | cAlias | Caracter | Tabela cadastrada no Dicionário de Tabelas (SX2) que será editada. |
| |
|
| uPar2 | Nulo | Parâmetro não utilizado. |
| |
|
| nOpc | Numérico | Tipo de edição do objeto(Inclusão, Alteração, Exclusão, Visualização) | X | uPar4 | Nulo | Parâmetro não utilizado. | | Lógico | Caso o msmget tenha apenas um campo indica se ele receberá foco. Valor default .T. (Disponível a partir da LIB Label 20220502) | |
|
| uPar5 | Nulo | Parâmetro não utilizado. |
| |
|
| uPar6 | Nulo | Parâmetro não utilizado. |
| |
|
| aAcho | Vetor | Vetor com nome dos campos que serão exibidos. Os campos de usuário sempre serão exibidos se não existir no parametro um elemento com a expressão "NOUSER" | |
|
| aPos | Vetor | Vetor com coordenadas para criação da enchoice no formato {"TOP","LEFT","BOTTOM","RIGHT"} | |
|
| aCpos | Vetor | Vetor com nome dos campos que poderão ser editados. |
| |
|
| nModelo | Numérico | Se for diferente de 1 desabilita execução de gatilhos estrangeiros. |
| |
|
| uPar11 | Nulo | Parâmetro não utilizado. |
| |
|
| uPar12 | Nulo | Parâmetro não utilizado. |
| |
|
| uPar13 | Nulo | Parâmetro não utilizado. | |
|
| oWnd | Objeto | Objeto (janela, painel, etc) onde a enchoice será criada |
| |
|
| lF3 | Lógico | Indica se a enchoice esta sendo criada em uma consulta F3 para utilizar variáveis de memória. Valor default é .F. |
| |
|
| lMemoria | Lógico | Indica se a enchoice utilizará variáveis de memória ou os campos da tabela na edição. Valor default é .F. |
| |
|
| lColumn | Lógico | Indica se a apresentação dos campos será em forma de coluna. Valor default é .F. | |
|
| caTela | Caracter | Nome da variável tipo "private" que a enchoice utilizará no lugar da variável aTela. | |
|
| lNoFolder | Lógico | Indica se a enchoice não irá utilizar as Pastas de Cadastro (SXA). Valor default.F. |
| |
|
| lProperty | Lógico | Indica se a enchoice não utilizará as variáveis tipo "private" aTela e aGets, somente suas propriedades com seus respectivos nomes. Valor default .F. |
| |
|
| aField | Vetor | Vetor com os campos que serão mostrados na Enchoice caso o SX3 não seja utilizado. |
| |
|
| aFolder | Vetor | Vetor com o nome das pastas caso o SX3 não seja utilizado. | |
|
| lCreate | Lógico | Indica se cria as pastas especificadas no parâmetro aFolder. Valor default é .F. | |
|
| lNoMDIStretch | Lógico | Define se o objeto não será alinhado conforme o espaço existente na janela. Valor default é .F. |
| |
|
| uPar25 | Caracter | Campo reservado. |
| |
|
| lOrderACho | Lógico | Indica se os campos definidos em aAcho serão exibidos na ordem criada (.T.) ou na ordem do SX3 (.F.). Valor default é .F. |
| |
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: - 1ª linha: Pesquisar
- 2ª linha: Visualizar
- 3ª linha: Incluir
- 4ª linha: Alterar
- 5ª linha: Exclui
- aRotina Vetor com as rotinas que serão executadas na MBrowse e que definira o tipo de operação que esta sendo executada (inclusão, alteração, exclusão, visualização, pesquisa, ...) no formato:
Elemento | Conteúdo | 1 | Título | 2 | Rotina | 3 | Reservado | 4 | Operação (1 - pesquisa; 2 - visualização; 3 - inclusão; 4 - alteração; 5 - exclusão) | 5 | Acesso relacionado a rotina, se esta posição não for informada nenhum acesso será validado |
Parâmetro aFieldQuando o desenvolvedor não utilizar a MsmGet baseada no SX3, deverá informar o parâmetro aField com a seguinte estrutura: Elemento | Conteúdo | 1 | Título | 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 - Opção do combo | 16 | Folder | 17 | Não Alterável | 18 | PictVar | 19 | Gatilho |
#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.HideEste método inibe a visualização de todos os controles do folder do objeto MsMGet ativo.RefreshMétodo de atualização do objetoMsmGet(): Refresh ( ) --> SetFocusEste método atribui o foco para o objeto.MsmGet(): SetFocus ( ) --> ShowEste método habilita a visualização de todos os controles do folder do objeto MsMGet ativo. 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.
|