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] ) -->
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. |
|
| 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. |
|
| lUnqFocus | 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) |
|
|
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 |
Bloco de código |
---|
language | c# |
---|
theme | Midnight |
---|
title | MsMGet Sample |
---|
| #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}
//-------------------------------------------------------------------
/*/{Protheus.doc} MyMrbwEnch
MsMget sample
@author totvs
@since 31/07/2019
//-----------------------------------------------------------------*/
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")
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} MyMsmGet
Função de manutenção do cadastro
@author totvs
@since 31/07/2019
//-----------------------------------------------------------------*/
User Function MyMsmGet(cAlias,nReg,nOpc)
Local oDlg
Local 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 tela
Local aCpoEnch := {} //campos que serão mostrados na enchoice
Local aAlterEnch := {"A1_COD", "A1_NOME"} //habilita estes campos para edição
Local aField := {}
Local aFolder := {"Cadastrais","Adm/Fin.", "Fiscais", "Vendas"}
Local cSvAlias := Alias()
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAlias)
// 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"})
//Aadd(aField, {"campo 1", "CAMPO_1", "N", 6, 2, "@E 999.99", '', .F., 1, "", "", "", .F., .F., "", 1, .F., "", "S"})
//M->CAMPO_1 := 156
While !Eof() .And. SX3->X3_ARQUIVO == cAlias
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
IF Alltrim(SX3->X3_CAMPO) $ "A1_COD|A1_NOME|A1_DESC|A1_COND|A1_ENDCOB|A1_ENDENT"
Aadd(aField, {X3TITULO(),; // [1] - Titulo
SX3->X3_CAMPO,; // [2] - campo
SX3->X3_TIPO,; // [3] - Tipo
SX3->X3_TAMANHO,; // [4] - Tamanho
SX3->X3_DECIMAL,; // [5] - Decimal
SX3->X3_PICTURE,; // [6] - Picture
SX3->X3_VALID,; |
//posiçãodaenchoicenatelaLocalaCpoEnch :={} //camposqueserãomostradosnaenchoiceLocal aAlterEnch := {"A1_COD", "A1_NOME"} //habilita estes campos para ediçãoLocal aField := {}LocalaFolder :={"Cadastrais","Adm/Fin.","Fiscais","Vendas"}LocalcSvAlias :=Alias()/*EstruturadovetoraField 1Titulo [2] - campo [3] - Tipo [4] - Tamanho [5] - Decimal [6] - Picture [7] - Valid [8] - Obrigat Obrigat
SX3->X3_NIVEL,; // [9] - Nivel |
[10]- Inicializador Padrão [11]- F3 12when [13]- visual [14]- chave [15]- box [16]- folder [17]- nao alteravel [18]- pictvar Inicializador Padrão
SX3->X3_F3,; // |
19gatilho*/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 //ExemplodaestruturadoarrayaField //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(),; // [13]- visual
.F.,; // [14]- chave
SX3->X3_ |
CAMPO,; SX3->X3_TIPO,; SX3->X3_TAMANHO,; SX3->X3_DECIMAL,; SX3->X3_PICTURE,; SX3->X3_VALID,; CBOX,; // [15]- box
Val(SX3->X3_FOLDER),; // [16]- folder
.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 // [17]- nao alteravel
SX3->X3_PICTVAR,; // [18]- pictvar
SX3->X3_TRIGGER}) // [19]- gatilho
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
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
EndIf
oEnch:oBox:align := CONTROL_ALIGN_ |
ALLCLIENTACTIVATEALLCLIENT
ACTIVATE MSDIALOG oDlg CENTER |
;ON INIT EnchoiceBar(oDlg,{|| oDlg:End()},{|| oDlg:End()},,,,.F.,.F.) |
If !Empty(cSvAlias)
DbSelectArea(cSvAlias) |
EndIfreturnDisableEste 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.
Propriedade | Descrição | Tipo |
|
| Array of Record |
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.
|