- Criado por Usuário desconhecido (juliane.venteu), última alteração por Marcos Zambon Amista em 22 nov, 2024
Compatível Países: | Todos |
Sistemas Operacionais: | Todos |
Compatível às Bases de Dados: | Todos |
Nível de Acesso: | Nível 1 (Acesso Clientes) |
Idiomas: | Português, Inglês, Espanhol |
Versão | P10 R1.4 |
Um submodelo do tipo Grid permite manipular diversos registros por vez. Ele tem um relacionamento do tipo Nx1 ou NxM com outros submodelos.
ClassName
SetLPost
A Pós-validação será realizada na validação do submodelo no momento da gravação dos dados e durante a inclusão de uma nova linha.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
bLinePost | Bloco de Código | Bloco de código de pós validação da linha | X |
SetLPre
O bloco será invocado durante qualquer tentativa de atribuição de valor na linha.
O Bloco deve retornar um valor lógico, caso retorne falso a atribuição de valor não será permitida.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
bLinePre | Bloco de Código | bloco código de pré validação da linha | X |
SetUseOldGrid
Este método é utilizado para compatibilizar com o Browse antigo do Protheus
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lUseCols | Lógico | Define se ira trabalhar com aCols/aHeader. | .T. |
SetStruct
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
oFormModelStruct | Objeto | Objeto com a estrutura de dados. | X |
GetOldData
[1] aHeader
[2] aCols
AddLine
O método retorna a quantidade total de linhas da grid. Se a grid já possui 2 linhas e tudo correu bem na adição da linha, o AddLine retornara 3, se ocorreu algum problema
retornará 2, pois a nova linha não foi inserida.
Os motivos para a inserção não ser bem sucedida podem ser algum campo obrigatório não informado, a pós-validação da linha retornou falso ou o grid atingiu a quantidade máxima de linhas, por exemplo.
Se a linha for incluida com sucesso o grid posiciona na mesma.
Length
UnDeleteLine
DeleteLine
IsUpdated
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Indica a linha a ser verificada | ::NLINE |
SetNoInsertLine
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lSet | Lógico | Especifica se a inserção deve esta ligada .F. ou desligada .T. | .T. |
SetNoUpdateLine
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lSet | Lógico | Especifica se a alteração deve esta ligada .F. ou desligada .T. | .T. |
SetNoDeleteLine
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lSet | Lógico | Especifica se a exclusão deve esta ligada .F. ou desligada .T. | .T. |
IsDeleted
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Indica a linha a ser verificada | ::NLINE |
SetLine
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Numero da linha | 0 |
GoLine
estiver invalida
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Numero da linha do grid que será utilizado como DEFAULT | X |
SetLine
GetLine
SetValue
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cId | Caracteres | Código/Nome do atributo da folha de dados | X | ||
xValue | Qualquer | Valor a ser atribuído | ::ADATAMODEL[::NLINE][MODEL_GRID_DATA][MODEL_GRIDLINE_VALUE][NIDFIELD] |
LoadValue
de função ( CallStack ). Diferentemente do método SetValue, este método não executa a validação do campo, mas fornece
todas as indicações de que ele foi atualizado. Ele é muito útil quando dentro de uma validação de campo, necessitamos
alterar valores de outros campos, sem que isto implique em validá-los.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cId | Caracteres | Código/Nome do atributo da folha de dados | X | ||
xValue | Qualquer | Valor a ser atribuído |
GetValue
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cId | Caracteres | Código/Nome do atributo da folha de dados | X | ||
nLine | Numérico | Numero da linha | ::NLINE |
VldLineData
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lVldOwner | Lógico | Verifica se será validado o submodelo e seus filhos (.T.) ou se será validado apenas o contexto do submodelo (.F.) | .T. | X |
VldData
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lVldOwner | Lógico | Verifica se será validado o submodelo e seus filhos (.T.) ou se será validado apenas o contexto do submodelo (.F.) | .T. | X |
CanSetValue
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cId | Caracteres | Código/Nome do atributo da folha de dados | X |
SetLoadFilter
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
aLoadFilter | Array | Estrutura de filtro [n] Array [n][1] ExpC: ID do campo do submodelo de destino [n][2] ExpC: Valor que o campo deve usar no filtro [n][3] Operador Relacional (Opcional, default é MVC_LOADFILTER_EQUAL ) MVC_LOADFILTER_EQUAL Igual a MVC_LOADFILTER_NOT_EQUAL Diferente de MVC_LOADFILTER_LESS Menor que MVC_LOADFILTER_LESS_EQUAL Menor que ou Igual a MVC_LOADFILTER_GREATER Maior que MVC_LOADFILTER_GREATER_EQUAL Maior que ou Igual a MVC_LOADFILTER_CONTAINS Contém MVC_LOADFILTER_NOT_CONTAINS Não Contém MVC_LOADFILTER_IS_CONTAINED Está Contido Em MVC_LOADFILTER_IS_NOT_CONTAINED Não Está Contido Em Para os operadores relacionais MVC_LOADFILTER_IS_CONTAINED e MVC_LOADFILTER_IS_NOT_CONTAINED o 2o elemento de cada array deverá ser uma array em formato caracter oModel:GetModel( 'ZA2DETAIL' ):SetLoadFilter( { { 'ZA2_AUTOR', "{'000500','000501','000502','000503','000504'}", MVC_LOADFILTER_IS_CONTAINED } } ) [n][4] Operador Logico (Opcional, default MVC_LOADFILTER_AND ) MVC_LOADFILTER_AND "e" MVC_LOADFILTER_OR "ou" | {} | ||
cLoadFilter | Caracteres | Expressão de filtro - Se for informado o parâmetro de expressão de filtro o 1o parâmetro será ignorado - Deve-se prever no código que a expressão tenha a sintaxe para banco de dados ou não, conforme o caso. | "" |
// Para dado igual a
oModel:GetModel( 'IDGRID' ):SetLoadFilter( { { 'ZA2_AUTOR', "'000500'" } } )
// Para dado igual a um ou outro valor
oModel:GetModel( 'IDGRID' ):SetLoadFilter( { { 'ZA2_AUTOR', "'000500'" }, { 'ZA2_AUTOR', "'000600'",, MVC_LOADFILTER_OR } } )
// Para dado diferente
oModel:GetModel( 'IDGRID' ):SetLoadFilter( { { 'ZA2_AUTOR', "'000500'", MVC_LOADFILTER_NOT_EQUAL } } )
// Para dado maior que valor
oModel:GetModel( 'IDGRID' ):SetLoadFilter( { { 'ZA2_VALOR', "0", MVC_LOADFILTER_GREATER } } )
// Para dado entre um valor e outro
oModel:GetModel( 'IDGRID' ):SetLoadFilter( { { 'ZA2_VALOR', "0", MVC_LOADFILTER_GREATER_EQUAL }, { 'ZA2_VALOR', "100", MVC_LOADFILTER_LESS_EQUAL } } )
// Para dado que contém um valor
oModel:GetModel( 'IDGRID' ):SetLoadFilter( { { 'ZA2_AUTOR', "'0005'", MVC_LOADFILTER_CONTAINS } } )
// Para dado que está contido
oModel:GetModel( 'IDGRID' ):SetLoadFilter( { { 'ZA2_AUTOR', "{'000500','000501'}", MVC_LOADFILTER_IS_CONTAINED } } )
// Usando uma expressão
oModel:GetModel( 'IDGRID' ):SetLoadFilter( , " ( ZA2_AUTOR >= '000500' .AND. ZA2_AUTOR < '000600' ) .OR. ZA2_VALOR > 0 " )
GetLoadFilter
[1] cIdField do submodelo de destino
[2] cIdField ou expressão do submodelo de destino
[3] Operador
SetUniqueLine
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
aUnique | Array | Array unidimensional com os IDs dos campos | X | ||
bUnique | Bloco de Código | Bloco de código de execução quando há linha duplicada. O bloco deve retornar um valor lógico. |
oModel:GetModel( 'ZA2DETAIL' ):SetUniqueLine( { "ZA2_AUTOR" , "ZA2_ITEM"} )
SetDelAllLine
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lDelAllLine | Lógico | Indica se todas as linhas podem ser apagadas | .F. |
DelAllLine
copyDataFromGrid
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
oGrid | Objeto | Objeto do tipo FWFormGridModel que será usado como base para a cópia. | X |
GetQTDLine
Length
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lOnlyActive | Lógico | Se for verdadeiro retorna só a quantidade de linhas ativas (não deletadas) | .F. |
CanInsertLine
CanUpdateLine
CanDeleteLine
SeekLine
como parâmetro. Se houver mais de uma linha com os valores procurados,
o método irá retornar a primeira linha que for encontrada.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
aBusca | Array | Array com os dados de busca na seguinte estrutura: [n] [n][1] ExpC: Id do campo [n][2] ExpX: Conteúdo | X | ||
lDeleted | Lógico | Indica se considera as linhas deletadas na busca | .F. | ||
lLocate | Lógico | Indica se deve posicionar na linha encontrada | .T. |
oGrid:SeekLine({{"XXH_MODULO",cModule},{"XXH_CODIGO",cCode}})
IsFieldUpdated
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cID | Caracteres | Código do Field | X | ||
nLine | Numérico | Numero da Linha | ::NLINE |
SetMaxLine
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nMax | Numérico | Valor máximo | X |
GetMaxLines
IsLineValidate
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Linha a analisar | ::NLINE |
ClearField
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cId | Caracteres | Codigo/Nome do atributo da folha de dados | X | ||
nLine | Numérico | Indica a linha | ::NLINE | ||
lClearTrigger | Lógico | Indica se limpa os campos gatilhados | .F. |
IsEmpty
IsInserted
criada pelo método addLine.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Indica a linha a ser verificada | ::NLINE |
SetOnlyView
Se a operação for inclusão o when dos campos passará a ser falso
e se for qualquer outra operação os campos não permitirão edição.
Além disse não permite inserção e nem exclusão de linhas.
IsModified
GetDataId
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Indica a linha a ser verificada | ::NLINE |
nID ID do registro
InitValue
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cIdField | Caracteres | Codigo/Nome do atributo da folha de dados | X |
Compare
com o próprio objeto. Os dois objetos devem possuir a mesma estrutura, pois esse
método compara apenas os dados, supondo que a estrutura seja a mesma.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
aCompare | Array | Array que deve ser passado por referencia,para que o metodo salve as informações de diferencas [n][1] - ExpC: ID do subModelo
[n][3][4] - {Id do dado de origem, Id do dado destino(modelo passado via parametro} | X | ||
oFWFormGridModel | Objeto | Outro FWFormGridModel para ser feita a comparação, ele deve possuir exatamente a mesma estrutura. | X | ||
lGetID | Lógico | Se .T. retorna os IDs dos dados das alterações, e considera a troca de Id como um alteração tambem. Caso o modelo não tenha ID de dado ou a linha for nova (no caso de grid), voltara o ID 0 | |||
lInvert | Lógico | Se .T. salva o valor da esquerda na direita, e o da direita na esquerda, padrao. .F. | |||
lCompare | Lógico | Indica se deve comparar com o outro modelo (definido como falso quando o grid pai for uma linha nova, não devendo comparar com os valores atuais do modelo) | |||
lVirtual | Lógico | Indica se deve considerar a diferença de campos virtuais sem outras alterações (Caso existam alterações de campos reais, o parâmetro é desconsiderado) |
/*/{Protheus.doc} fCompare Função compare usada para comparar dois objetos e exibe o resultado @Type Static Function @author FRAMEWORK @since 21/11/2024 //-----------------------------------------------------------------*/ Static Function fCompare() Local oModel as object Local oGrid1 as object Local oGrid2 as object Local aCompare as Array oModel := FWModelActive() oGrid1 := oModel:GetModel("ZC4DETAIL") oGrid2 := oModel:GetModel("ZC4DET2") aCompare := {} aCompare := oGrid1:Compare(aCompare, oGrid2) Aviso('retorno', VarInfo('aCompare', aCompare, , .F.), {'ok'}, 4, , , , .T.) Return
LineShift
serão movidos para a linha destino e os dados da linha destino serão
movidos para a linha origem.
Se a linha atualmente posicionada é a origem ou o destino, o número
da linha posicionada irá ser mudado para o numero da origem ou do
destino, porque os dados são trocados porém a linha ainda precisa
ser validada.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLineFrom | Numérico | Numero da linha de origem | ::NLINE | ||
nLineTo | Numérico | Numero da linha de destino | ::NLINE |
oModel:GetModel("ZA2DETAIL"):LineShift(5,6)
GetLinesChanged
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nType | Numérico | Tipo da informação: MODEL_GRID_LINECHANGED_ALL Todas as linhas modificadas MODEL_GRID_LINECHANGED_INSERTED Somente as linhas inseridas MODEL_GRID_LINECHANGED_UPDATED Somente as linhas alteradas MODEL_GRID_LINECHANGED_DELETED Somente as linhas excluidas | MODEL_GRID_LINECHANGED_ALL |
SetLineModify
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nLine | Numérico | Numero da Linha | X |
LdValueByPos
do campo na estrutura. Use esse método somente quando possuir um
grande volume de processamento na rotina.
Para determinar a posição do campo utilize o método GetArrayPos da
estrutura de dados do submodelo (FWFormModelStruct).
O valor será atribuído para a linha que estiver posicionada no grid.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cId | Caracteres | Código/Nome do atributo da folha de dados | X | ||
xValue | Qualquer | Valor a ser atribuído |
aPosFields := oStruZA2:GetArrayPos("ZA2_MUSICA", "ZA2_ITEM")
oModel:GetModel("ZA2DETAIL"):LdValueByPos(aPosFields[1], "00001")
oModel:GetModel("ZA2DETAIL"):LdValueByPos(aPosFields[2], "1")
GetValueByPos
GetArrayPos -> FWFormModelStruct
GetValueByPos
na estrutura, utilize ele somente quando a rotina possui um grande volume
processamento. Para saber a posição do campo use o método GetArrayPos
do objeto de estrutura de dados (FWFormModelStruct).
Atenção!! Esse método não verifica se o campo existe.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
nIdField | Numérico | Posição do campo na estrutura de dados | X | ||
nLine | Numérico | Linha do grid onde o valor será atribuído | ::NLINE |
aPosFields := oStruZA2:GetArrayPos("ZA2_MUSICA", "ZA2_ITEM")
cMusica := oModel:GetModel("ZA2DETAIL"):GetValueByPos(aPosFields[1], 1)
cItem := oModel:GetModel("ZA2DETAIL"):GetValueByPos(aPosFields[2], 2)
GetArrayPos -> FWFormModelStruct
LdValueByPos
SetFldNoCopy
do submodelo.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
aFldNoCopy | Array | Array unidimensional com o IDs do campos que não serão copiados | X |
oModel:GetModel("ZA2DETAIL"):SetFldNoCopy( { 'ZA2_MUSICA', 'ZA2_ITEM' } )
GetFldNoCopy
ClearData
Limpa (apaga da memoria) todo conteúdo do sub-formulário, e de todos os seu filhos.
ATENÇÃO:
Esse método não pode ser utilizado em Modelos que venham de Banco de Dados, no modo de operação ALTERAÇÃO, pois seria gerada inconsistência na base de dados, tendo em vista que este método NÃO APAGA os registros da base.
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
lInit | Lógico | Indica se deve carregar os inicializadores padrão | X | ||
lBlankLine | Lógico | Indica se deve criar a linha em branco |
CanClearData
Se veio de banco não permite.
isEnable
MaxValueField
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cFieldID | Caracteres | cFieldID | X |
Sintaxe
FWFORMGRIDMODEL():ClearData( lInit , lBlankLine ) →
Descrição
Limpa(apaga da memória) todo o conteúdo do sub-formulário, e de todos os seu filhos.
ATENÇÃO:
Esse método não pode ser utilizado em Modelos que venham de Banco de Dados, no modo de Operação ALTERAÇÃO, pois seria gerado inconsistência na base de dados, tendo em vista que este método NÃO APAGA os registros da base.
Parâmetros
Nome | Tipo | Descrição | Obrigatório |
---|---|---|---|
lInit | Lógico | Indica se deve carregar os inicializadores padrões | |
lBlankLine | Lógico | Indica se deve criar a linha em branco |
SetForceLoad
Sintaxe
FWFORMGRIDMODEL():SetForceLoad( lForce ) →
Descrição
Informa que o bloco de carga(load) do subformulário será executado em todas as Operações, inclusive na Inclusão, que não é o padrão.
Parâmetros
Nome | Tipo | Descrição | Obrigatório |
---|---|---|---|
lForce | Lógico | Se .T. irá executar o bLoad em todos |
- Sem rótulos