Páginas filhas
  • FWFormModel
Classe: FWFormModel


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ãoTodas


Descrição

Classe responsável pelo controle das regras de negócio.
Esta classe permite o encapsulamento das regras de negócio baseadas em Submodelos,
Estrutura de Dados e validações em código. Por conta disto cria um ambiente
padronizado, extensível a diversas midias e propício a reutilização de código.

O Model é composto basicamente por Submodelos. Um SubModelo representa uma entidade
e permite manipular registros. Existem basicamente dois tipos de Submodelo, o
formfield e o formgrid. O primeiro permite manipular somente um registro por vez
e o segundo permite manipular vários registros ao mesmo tempo.

A regra de negócio pode definir os seguintes itens:
- Submodelos de edição, tais como FormField(edição de apenas uma linha) e
FormGrid(edição de várias linhas)
- Regras de Dependência entre os Submodelos
- Validação de Campos
- Validação de Submodelo
- Validação Geral
- Persistência(gravação) dos dados
- Estrutura de Dados para os submodelos

O Model é totalmente segregado, ele pode ser usado em uma interface ou pode
ser usado em WebServices, Rotinas Automáticas ou outras opções sem interação
visual com o usuário.

Como o Model é separado da interface, não é permitido usar nenhum componente
de interface no código, tais como Alert, MsgAlert e etc.. A única exceção à regra
é a função Help. O MVC trata essa função e quando a mesma é usada no Model
e não há interface, a mensagem de erro fica guardada no model e pode ser acessada
usando o método GetErrorMessage()


Veja também

Submodelos:
FWFormGridModel
FWFormFieldsModel

Estrutura de Dados:
FWFormModelStruct
FWFormStruct

New

Sintaxe
FWFORMMODEL():New([ cID ], [ bPre ], [ bPost ], [ bCommit ], [ bCancel ])-> NIL

Descrição
Método construtor da classe


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIDCaracteresIdentificador do modelo
X
bPreBloco de CódigoBloco de código de pré-validação do modelo.
O bloco recebe como parametro o objeto de Model e deve retornar um valor lógico.
Quando houver uma tentativa de atualização de valor de qualquer Submodelo o bloco de código será invocado.
Caso o retorno seja verdadeiro, a alteração será permitida, se retornar falso não será possível concluir a alteração e um erro será atribuido ao model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bPostBloco de CódigoBloco de código de pós-validação do modelo, equilave ao "TUDOOK".
O bloco recebe como parametro o objeto de Model e deve retornar um valor lógico.
O bloco será invocado antes da persistência dos dados para validar o model.
Caso o retorno seja verdadeiro e não haja nenhum submodelo invalido, será feita a gravação dos dados.
Se retornar falso não será possível realizar a gravação e um erro será atribuido ao model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bCommitBloco de CódigoBloco de código de persistência dos dados, ele é invocado pelo método CommitData.
O bloco recebe como parametro o objeto do Model e deve realizar a gravação dos dados.

X
bCancelBloco de CódigoBloco de código de cancelamento da edição, ele é invocado pelo método CancelData.
O bloco recebe como parametro o objeto do Model.

X


 

Exemplo

Static Function ModelDef()
Local oModel := FWFormModel():New('COMP011MODEL', , { |oMdl| COMP011POS( oMdl ) }, {|oModel| commit()},{|oModel| cancel()})
Return

Static Function COMP011POS( oModel )
Local nOperation := oModel:GetOperation()
Local lRet := .T.

If nOperation == MODEL_OPERATION_UPDATE
   If Empty( oModel:GetValue( 'ZA0MASTER', 'ZA0_DTAFAL' ) )
      oModel:SetErrorMessage('ZA0MASTER', 'ZA0_DTAFAL' , 'ZA0MASTER' , 'ZA0_DTAFAL' , "Erro", 'Data incorreta', 'Informe a data')      
      lRet := .F.
   EndIf
EndIf

Return lRet

Static Function commit()
Return

Static Function cancel()
Return

Observações

Se a aplicação é uma Function, o identificador (cID) do modelo de dados (Model) pode
ter o mesmo nome da função principal e esta prática é recomendada para facilitar a
codificação. Por exemplo, se estamos escrevendo a função XPTO, o identificador (cID) do
modelo de dados (Model) poderá ser XPTO.
Se a aplicação é uma User Function o identificador (ID) do modelo de dados (Model)
NÃO pode ter o mesmo nome da função principal, isso por causa dos pontos de entrada
que já são criados automaticamente quando desenvolvemos uma aplicação em MVC.

User Function COMP011_MVC
Local oModel := FWFormModel():New("COMP011",,,{|oModel| commit()},{|oModel| cancel()})
Return

Function COMP012_MVC
Local oModel := FWFormModel():New("COMP012_MVC",,,{|oModel| commit()},{|oModel| cancel()})
Return

Veja também

Método setErrorMessage
Activate

Sintaxe
FWFORMMODEL():Activate([ lCopy ])-> NIL

Descrição
Método de ativação da classe. Esse método deve ser usado depois
que o objeto já foi completamente definido, pois após a ativação
não será mais possível realizar definições, tais como addField,
addGrid, setActivate e etc..
Quando a classe é ativada, os dados do submodelo são carregados.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lCopyLógicoInforma se o model deve carregar os dados do registro posicionado em operações de inclusão.
Essa opção é usada quando é necessário fazer uma operação de cópia.
.F.


 

Observações
Este método realiza algumas validações no preenchimento dos
parametros de operação da classe, gerando uma exceção caso haja
algum problema de configuração.
DeActivate

Sintaxe
FWFORMMODEL():DeActivate()-> NIL

Descrição
Método de desativação da classe. Quando a classe é desativada, os dados
do submodelo são perdidos e o objeto passa a aceitar novamente
os métodos de parametrização, tais como addField, setActivate e etc.
Este método deve ser utilizado para reparametrizar a classe ou para
reinicializar o preenchimento do submodelo.

Destroy

Sintaxe
FWFORMMODEL():Destroy()-> NIL

Descrição
Destroy o objeto e suas referencias a outros objetos.
O Objeto não pode ter sido desativado.
Importante chamar principalmente quando instanciamos o mesmo em loop.

ClassName

Sintaxe
FWFORMMODEL():ClassName()-> cClassName

Descrição
Fornece o nome da classe


Retorno
cClassName Nome da classe
GetId

Sintaxe
FWFORMMODEL():GetId()-> Id

Descrição
Fornece o Id do objeto informado no método new.


Retorno
Id Id do objeto
SetDescription

Sintaxe
FWFORMMODEL():SetDescription([ cDescription ])-> NIL

Descrição
Atribui ao modelo um texto explicativo sobre o objetivo do Modelo.
O objetivo é mostrado em diversos operações, tais como web services,
relatórios e schemas (xsd).


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cDescriptionCaracteresDescrição do objetivo do modelo
X


 

Observações
Este método somente pode ser utilizado se o objeto estiver desativado
GetDescription

Sintaxe
FWFORMMODEL():GetDescription()-> cDescription

Descrição
Fornece um texto contendo a descrição do modelo, que é informado
no método SetDescription.


Retorno
cDescription Descrição do objetivo do modelo

Veja também
SetDescription
AddFields

Sintaxe
FWFORMMODEL():AddFields([ cId ], [ cOwner ], [ oModelStruct ], [ bPre ], [ bPost ], [ bLoad ])-> NIL

Descrição
Adiciona ao modelo um submodelo de edição por campo (FormField).
Um submodelo do tipo Field permite manipular somente um
registro por vez. Ele tem um relacionamento do tipo 1xN ou 1x1 com outros
SubModelos ou então não tem nenhum relacionamento.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdCaracteresIdentificador do modelo. O Id será solicitado em diversas operações com este submodelo.
X
cOwnerCaracteresIdentificador superior do submodelo, o Owner é o submodelo que se relaciona diretamente com o formfield.""

oModelStructObjetoObjeto com a estrutura de dados do tipo FWFormModelStruct.
X
bPreBloco de CódigoBloco de Código de pré-validação do submodelo.
Esse bloco é invocado quando há uma tentativa de atribuição de valores. O bloco recebe por
parametro o objeto do FormField(FWFormFieldsModel), a identificação da ação e a identificação
do campo que está sofrendo a atribuição. As identificações que podem ser passadas são as seguintes:
- "CANSETVALUE" : valida se o submodelo pode ou não receber atribuição de valor.
- "SETVALUE" : valida se o campo do submodelo pode receber aquele valor. Nesse caso o bloco recebe
um quarto parametro que contem o valor que está sendo atribuido ao campo.
Para todos os casos o bloco deve retornar um valor lógico, indicando se a ação pode ou não ser executada.
Se o retorno for falso um erro será atribuido no Model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bPostBloco de CódigoBloco de Código de pós-validação do submodelo, ele é equivalente ao "TUDOOK".
O bloco de código recebe como parametro o objeto de model do FormField(FWFormFieldsModel) e deve retornar um valor lógico.
Este bloco é invocado antes da persistência(gravação) dos dados, validando o submodelo .
Se o retorno for verdadeiro a gravação será realizada se os demais submodelos também estiverem validos, do contrário um erro será atribuido no Model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bLoadBloco de CódigoBloco de carga dos dados do submodelo.
Este bloco será invocado durante a execução do método activate desta classe.
O bloco recebe por parametro o objeto de model do FormField(FWFormFieldsModel) e um valor lógico indicando se é uma operação de cópia.
Espera-se como retorno um array com os dados que serão carregados no objetp, o array deve ter a estrutura abaixo:
[1] Array com os dados, a ordem dos dados deve seguir exatamente a mesma ordem dos campos da estrutura de dados
[1][1] "Nome"
[1][2] "Cidade"
[2] ExpN: Id do registro (RecNo)




 

Exemplo


Static Function ModelDef()
Local oModel
Local oStruZA1:= FWFormStruct(1,'ZA1')
Local bPre := {|oFieldModel, cAction, cIDField, xValue| validPre(oFieldModel, cAction, cIDField, xValue)}
Local bPos := {|oFieldModel|fieldValidPos(oFieldModel)}
Local bLoad := {|oFieldModel, lCopy| loadField(oFieldModel, lCopy)}


oModel := FWFormModel():New('COMP021',,,{|oModel| commit()},{|oModel| cancel()})
oModel:addFields('ZA1MASTER',,oStruZA1,bPre,bPos,bLoad)

Return oModel

Static Function fieldValidPos(oFieldModel)
Local lRet := .T.
   
   If "MUSICA" $ Upper(oFieldModel:GetValue("ZA1_TITULO"))
      lRet := .F.
      oFieldModel:GetModel():SetErrorMessage('ZA1MASTER', "ZA1_TITULO" , 'ZA1MASTER' , 'ZA1_TITULO' , "Erro", 'Título incorreto', 'O texto "musica" não pode estar contido no título.')      
   EndIf
   
Return lRet

Static Function validPre(oFieldModel, cAction, cIDField, xValue)
Local lRet := .T.

If cAction == "SETVALUE" .And. cIDField == "ZA1_FILIAL"
   lRet := .F.
   oFieldModel:GetModel():SetErrorMessage('ZA1MASTER', "ZA1_FILIAL" , 'ZA1MASTER' , 'ZA1_FILIAL' , "Erro", 'Filial', 'Não possível atribuir valor ao campo Filial.')
Return

Return lRet

Static Function loadField(oFieldModel, lCopy)
Local aLoad := {}

   aAdd(aLoad, {xFilial("ZA1"), "000001", "Musica 1", Date(), "R"}) //dados
   aAdd(aLoad, 1) //recno
      
Return aLoad

Static Function commit()
Return

Static Function cancel()
Return

Observações

O primeiro SubModelo do Model deve ser, obrigatoriamente, um FormField.

Veja também

FWFormModelStruct
FWFormStruct
FWFormFieldModel
Método SetErrorMessage
AddGrid

Sintaxe
FWFORMMODEL():AddGrid([ cId ], [ cOwner ], [ oModelStruct ], [ bLinePre ], [ bLinePost ], [ bPre ], [ bPost ], [ bLoad ])-> NIL

Descrição
Adiciona ao modelo um submodelo de edição por grid (FormGrid).
Um submodelo do tipo Grid permite manipular diversos registros por
vez. Ele tem um relacionamento do tipo Nx1 ou NxM com outros Submodelos.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdCaracteresIdentificador do modelo.
O Id será solicitado em diversas operações com este submodelo.

X
cOwnerCaracteresIdentificador superior do submodelo.
O Owner é o submodelo que se relaciona diretamente com o formgrid.

X
oModelStructObjetoObjeto com a estrutura de dados do tipo FWFormModelStruct.
X
bLinePreBloco de CódigoBloco de Código de pre-edição da linha do grid.
O bloco é invocado na deleção de linha, no undelete da linha e nas tentativas de atribuição de valor.
Recebe como parametro o objeto de modelo do FormGrid(FWFormGridModel), o número da linha atual e a identificação da ação.
A Identificação da ação pode ser um dos itens abaixo:
- "UNDELETE"
- "DELETE"
- "SETVALUE" : nesse caso, serão passados mais três parametros. O 4º parametro é o identificador do campo que está sendo atualizado,
o 5º parametro é o valor que está sendo atribuido e o 6º parametro é o valor que está atualmente no campo.
- "CANSETVALUE" : nesse caso será passado mais um parametro. O 4º parametro é o identificador do campo que está tentando ser atualizado.
O retorno do bloco deve ser um valor lógico que indique se a linha está valida para continuar com a ação.
Se retornar verdadeiro, executa a ação do contrário atribui um erro ao Model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bLinePostBloco de CódigoBloco de código de pós validação da linha do grid, equivale ao "LINHAOK"
Recebe como parametro o objeto de modelo do FormGrid(FWFormGridModel) e o número da linha que está sendo validada.
O bloco será invocado antes da gravação dos dados e na inclusão de uma linha.
Espera-se um retorno lógico do bloco indicando se a linha está ou não valida.
Caso o retorno seja falso um erro será atribuido no Model e a gravação não será realizada, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bPreBloco de CódigoBloco de Código de pré-validação do submodelo.
O bloco é invocado na deleção de linha, no undelete da linha, na inserção de uma linha e nas tentativas de atribuição de valor.
Recebe como parametro o objeto de modelo do FormGrid(FWFormGridModel), o número da linha atual e a identificação da ação.
A Identificação da ação pode ser um dos itens abaixo:
- "UNDELETE"
- "DELETE"
- "ADDLINE" : nesse caso não será passado nada para o parametro de numero de linha
- "SETVALUE" : nesse caso, serão passados mais três parametros. O 4º parametro é o identificador do campo que está sendo atualizado,
o 5º parametro é o valor que está sendo atribuido e o 6º parametro é o valor que está atualmente no campo.
- "CANSETVALUE" : nesse caso será passado mais um parametro. O 4º parametro é o identificador do campo que está tentando ser atualizado.
O retorno do bloco deve ser um valor lógico que indique se a linha está valida para continuar com a ação.
Se retornar verdadeiro, executa a ação do contrário atribui um erro ao Model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.


O bloco de código recebe como parametro o objeto de modelo do FormGrid(FWFormGridModel) e deve retornar um valor lógico.
Este bloco é invocado em toda tentativa de atualização dos valores do submodelo.
Se o retorno do bloco for verdadeiro a atualização é permitida, do contrário um erro será atribuido no Model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bPostBloco de CódigoBloco de Código de pós-validação do submodelo, ele é equivalente ao "TUDOOK".
O bloco de código recebe como parametro o objeto de model do FormGrid(FWFormGridModel) e deve retornar um valor lógico.
Este bloco é invocado antes da persistência(gravação) dos dados, validando o submodelo .
Se o retorno do bloco for verdadeiro a gravação será realizada se os demais submodelos também estiverem validos, do contrário um erro será atribuido no Model, sendo necessário indicar a natureza do erro através do método SetErrorMessage.
{|| .T.}

bLoadBloco de CódigoBloco de carga dos dados do submodelo.
Este bloco será invocado durante a execução do método activate desta classe.
O bloco recebe por parametro o objeto de model do FormGrid(FWFormGridModel) e um valor lógico indicando se é uma operação de cópia.
Espera-se como retorno um array com os dados que serão carregados no objeto, o array deve ter a estrutura abaixo:
[n]
[n][1] ExpN: Id do registro (RecNo)
[n][2] Array com os dados, os dados devem seguir exatamente a mesma ordem da estrutura de dados
{|| {} }


 

Exemplo

Static Function ModelDef()
Local oModel
Local oStruZA1:= FWFormStruct(1,'ZA1')
Local oStruZA2 := FWFormStruct( 1, 'ZA2')
Local bLinePre := {|oGridModel, nLine, cAction, cIDField, xValue, xCurrentValue| linePreGrid(oGridModel, nLine, cAction, cIDField, xValue, xCurrentValue)}
Local bLoad := {|oGridModel, lCopy| loadGrid(oGridModel, lCopy)}

oModel := FWFormModel():New('COMP021',,,{|oModel| commit()},{|oModel| cancel()})
oModel:AddFields('ZA1MASTER',,oStruZA1)
oModel:AddGrid( 'ZA2DETAIL', 'ZA1MASTER', oStruZA2, bLinePre, , , ,bLoad)
Return oModel

Static Function loadGrid(oGridModel, lCopy)
Local aLoad := {}

   aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "01", "000100","AUTOR1","AUTOR"}})
   aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "02", "000102","AUTOR2","AUTOR"}})
   aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "03", "000104","AUTOR3","AUTOR"}})
   aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "04", "000105","AUTOR4","AUTOR"}})
   aAdd(aLoad,{0,{xFilial("ZA2"), "000001", "05", "000106","AUTOR5","AUTOR"}})

Return aLoad

Static Function linePreGrid(oGridModel, nLine, cAction, cIDField, xValue, xCurrentValue)
Local lRet := .T.   

   If cAction == "SETVALUE"
      If oGridModel:GetValue("ZA2_TIPO") == "AUTOR"
         lRet := .F.
         oGridModel:GetModel():SetErrorMessage('ZA2DETAIL', 'ZA2_TIPO' , 'ZA2DETAIL' , 'ZA2_TIPO' , 'Erro', 'Não é possível alterar linhas do tipo Autor', '')
      EndIf
   EndIf
   
Return lRet

Static Function commit()
Return

Static Function cancel()
Return

Observações

O Model deve sempre iniciar com um submodelo do tipo Field

Veja também

Método SetErrorMessage
FWFormGridModel
FWFormModelStruct
AddCalc

Sintaxe
FWFORMMODEL():AddCalc([ cId ], [ cOwner ], [ cIdForm ], [ cIdField ], [ cIdCalc ], [ cOperation ], [ bCond ], [ bInitValue ], [ cTitle ], [ bFormula ], [ nTamanho ], [ nDecimal ])-> NIL

Descrição
Adiciona ao modelo um submodelo de campos calculados baseado em campos de
um submodelo do tipo grid. Esse submodelo deve ser usado para
fazer calculos, por exemplo, pode-se criar um calc para somar a coluna
valor total do item, tendo assim o total de todos os itens.
Pode-se criar um calc do tipo média e fazer a média das quantidades
de um grid, por exemplo.
O submodelo calc suporta diversos campos de calculo, precisando ter
no minimo 1 e no máximo N. Ou seja, pode-se criar um calc "TOTAIS"
e dentro dele criar dois campos calculado, um para o total e outro para
a média.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdCaracteresIdentificador do submodelo. O Id será solicitado em diversas operações.
X
cOwnerCaracteresIdentificador owner do submodelo. Esse ID correponde ao owner do grid usado como base para o submodelo calc.
X
cIdFormCaracteresIdentificador do submodelo do tipo grid que será a base para os calculos.
X
cIdFieldCaracteresIdentificador do campo que será a base do calculo.
X
cIdCalcCaracteresIdentificador para o campo que será calculado.
X
cOperationCaracteresIdentificador da operação a ser realizada ( SUM, COUNT, AVERAGE, FORMULA )"SUM"

bCondBloco de CódigoBloco de código referente a condicão para avaliação do campo calculado.
Recebe como parametro o objeto do model(FwFormModel) e deve retornar um valor lógico.
Se o retorno for verdadeiro, executa a operação para o campo calculado.



bInitValueBloco de CódigoBloco de codigo para com o valor inicial para o campo calculado.
Recebe como parametro o objeto do modelo e deve retornar o valor inicial.



cTitleCaracteresTitulo do campo calculado.CIDCALC

bFormulaBloco de CódigoFormula a ser utilizada quando o parametro operacao é do tipo FORMULA.
Recebe como parametros:
- o objeto do model (FwFormModel)
- o valor da atual do campo calculado
- o conteudo do campo do submodelo Grid
- campo logico indicando se é uma execuçao de soma (.T.) ou subtracao (.F.).
O valor retornado será atribuido ao campo calculado.
Exemplo: {|oModel,nTotalAtual,xValor,lSomando| Calculo(oModel,nTotalAtual,xValor,lSomando)}

X
nTamanhoNuméricoTamanho do campo calculado, se nao for informado usa o tamanho do campo base.
X
nDecimalNuméricoNumero de casas decimais do campo calculado, se nao for informado usa o tamanho do decimal do campo base.
X


 

Exemplo


Static Function ModelDef()
// Cria a estrutura a ser usada no Modelo de Dados
Local oStruZA1 := FWFormStruct( 1, 'ZA1')
Local oStruZA2 := FWFormStruct( 1, 'ZA2')
Local oModel

oModel := FWFormModel():New( 'COMP022M',,,{|oModel| commit()},{|oModel| cancel()})
oModel:AddFields( 'ZA1MASTER', , oStruZA1)
oModel:AddGrid( 'ZA2DETAIL', 'ZA1MASTER', oStruZA2)

oModel:AddCalc( 'COMP022CALC1', 'ZA1MASTER', 'ZA2DETAIL', 'ZA2_AUTOR', 'ZA2__TOT01', 'COUNT', { | oMld | COMP022CAL( oMld, .T. ) },,'Total Pares' )
oModel:AddCalc( 'COMP022CALC1', 'ZA1MASTER', 'ZA2DETAIL', 'ZA2_AUTOR', 'ZA2__TOT02', 'COUNT', { | oMld | COMP022CAL( oMld, .F. ) },,'Total Impares' )

oModel:SetRelation( 'ZA2DETAIL', { { 'ZA2_FILIAL', 'xFilial( "ZA2" ) ' } , { 'ZA2_MUSICA', 'ZA1_MUSICA' } } , ZA2->( IndexKey( 1 ) ) )

oModel:SetDescription( 'Modelo de Musicas' )
oModel:GetModel( 'ZA1MASTER' ):SetDescription( 'Dados da Musica' )
oModel:GetModel( 'ZA2DETAIL' ):SetDescription( 'Dados do Autor' )

Return oModel

Static Function COMP022CAL( oModel, lPar )
Local lRet := .T.

If lPar
   lRet := ( Mod( Val( oModel:GetValue( 'ZA2DETAIL', 'ZA2_AUTOR' ) ) , 2 ) == 0 )
Else
   lRet := ( Mod( Val( oModel:GetValue( 'ZA2DETAIL', 'ZA2_AUTOR' ) ) , 2 ) <> 0 )
EndIf
Return lRet

Static Function commit()
Return

Static Function cancel()
Return

Observações

Um submodelo de calc somente pode ser criado abaixo de um submodelo do tipo grid
AddRules

Sintaxe
FWFORMMODEL():AddRules([ cIDSubModel ], [ cIDField ], [ cIDTargetSubModel ], [ cIDFieldTarget ], [ nType ])-> NIL

Descrição
Adiciona uma relação de dependência entre dois campos, definindo que o
preenchimento de um campo depende do preenchimento de outro.
Por exemplo, podemos definir que o campo Código da Loja só pode ser
preenchido após o preenchimento do campo Código do Cliente.
A regra pode ser criada com campos do mesmo submodelo ou com campos de submodelos diferentes.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIDSubModelCaracteresIdentificador do submodelo do campo receptor
X
cIDFieldCaracteresIdentificador do campo receptor
X
cIDTargetSubModelCaracteresIdentificador do submodelo do campo disparador
X
cIDFieldTargetCaracteresIdentificador do campo disparador""

nTypeNuméricoIdentificador da operacao de relacionamento. Existem três opções:
Tipo 1 - Pré Validação: Adiciona uma relação de dependência entre os
campos, impedindo a atribuição de valor caso os campos de dependência
não tenham valor atribuído. Por exemplo, o preenchimento do campo
Código da Loja só pode ser preenchido após o preenchimento do
campo Código do Cliente.

Tipo 2 - Pós Validação: Adiciona uma relação de dependência entre o receptor
e o disparador, provocando uma reavaliação em caso de atualização do campo receptor.
Por exemplo, após o preenchimento do campo Código da Loja a validação é reavaliado
caso o Código do Cliente seja alterado.

Tipo 3 - Ambas : Aplica a pré e a pós validação simultaneamente.
3


 

Exemplo

//campo Loja dependendo do preenchimento do campo Cliente
oModel:AddRules( 'ZA1MASTER', 'A1_LOJA', 'ZA1MASTER', 'A1_CLIENTE', 3)

//Campo autor do submodelo GRID depende do preenchimento do campo data do submodelo FIELD
oModel:AddRules( 'ZA2DETAIL', 'ZA2_AUTOR', 'ZA1MASTER', 'ZA1_DATA', 3)
GetDependency

Sintaxe
FWFORMMODEL():GetDependency([ cId ])-> aModels

Descrição
Fornece a relacao de modelos que são dependentes (filhos) do modelo ou de um submodelo


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdCaracteresIdentificador do modelo de proprietário, caso não seja passado
esse parametro o método irá retornar os filhos do modelo




 

Retorno
aModels Estrutura
[n][1] Tipo do objeto FIELD ou GRID
[n][2] Id do objeto
[n][3] Objeto do modelo (FWFormFieldModel ou FWFormGridModel)
[n][4] Array com a estrutura dos filhos no mesmo formato
GetModelStruct

Sintaxe
FWFORMMODEL():GetModelStruct([ cId ])-> aModels

Descrição
Fornece a Estrutura do modelo ou de um submodelo


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdCaracteresIdentificador do modelo ou de um submodelo



 

Retorno
aModels Estrutura
[n][1] Tipo do objeto FIELD ou GRID
[n][2] Id do objeto
[n][3] Objeto do modelo (FWFormFieldModel ou FWFormGridModel)
[n][4] Array com a estrutura dos filhos no mesmo formato
GetModel

Sintaxe
FWFORMMODEL():GetModel([ cId ])-> oRetorno

Descrição
Localiza o submodelo referente ao ID passado por parametro e retorna,
o objeto do submodelo, podendo ser do tipo FWFormFieldsModel ou
FWFormGridModel


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdCaracteresId do objeto. Se não informado será retornado o próprio model.



 

Retorno
oRetorno Objeto do submodelo(FWFormFieldsModel ou
FWFormGridModel). Se o cID for vazio, retorna o próprio model.
GetXMLData

Sintaxe
FWFORMMODEL():GetXMLData([ lDetail ], [ nOperation ], [ lXSL ], [ lVirtual ], [ lDeleted ], [ lEmpty ], [ lDefinition ], [ cXMLFile ])-> cXML

Descrição
Fornece uma string com os dados do modelo no formato XML, conforme o modo de operação especificado ( SetOperation ) e
se o objeto esta ativado ( Activate ) ou não (deactivate). Quando o objeto esta desativado ou a operação é de inclusão
uma folha de dados em branco é fornecida.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lDetailLógicoIndica se o xml gerado deve incluir as tags de detalhamento dos dados. Aconselha-se a evitar o detalhamento
dos dados, uma vez que eles estão contido no Schema do XML ( GetXMLSchema ).
.F.

nOperationNuméricoIndica a operação que será indicada na exportação do XML::NOPERATION

lXSLLógicoInforme se o layout deve ser gerado.F.

lVirtualLógicoIndica se os campos virtuais devem estar contidos no xml gerado.T.

lDeletedLógicoIndica se as linhas deletadas dos grids devem estar contidas no xml gerado.T.

lEmptyLógicoIndica se gera xml com campos nao obrigatorios vazios (utilizado na geracao do XSLT).F.

lDefinitionLógicoIndica se gera xml com a definicao (tratamento para o E4X do javascript utilizado no BPM).T.

cXMLFileCaracteresNome do arquivo XML a ser gerado com path (default StartPath). Se este parametro for informado a geracao sera em arquivo automaticamente""


 

Retorno
cXML XML com do modelo e os dados

Veja também
SetOperation,GetXMLSchema
GetJSONData

Sintaxe
FWFORMMODEL():GetJSONData([ lDetail ], [ nOperation ], [ lVirtual ], [ lDeleted ], [ lEmpty ])-> cJson

Descrição
Fornece uma string JSON de dados do modelo, conforme o modo de operação especificado ( SetOperation ) e
se o objeto esta ativado ( Activate ) ou não (deactivate). Quando o objeto esta desativado ou a operação é de inclusão
uma folha de dados em branco é fornecida.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lDetailLógicoIndica se deve incluir as tags de detalhamento dos dados.F.

nOperationNuméricoIndica a operação que será indicada na exportação::NOPERATION

lVirtualLógicoIndica se os campos virtuais devem estar contidos.T.

lDeletedLógicoIndica se as linhas deletadas dos grids devem estar contidas.T.

lEmptyLógicoIndica se gera com campos nao obrigatorios vazios.F.


 

Retorno
cJson JSON com o modelo e os dados

Veja também
SetOperation
GetXMLSchema

Sintaxe
FWFORMMODEL():GetXMLSchema([ lVirtual ], [ lTypeDef ], [ lOnlyStruct ])-> cXSD

Descrição
Fornece uma string com o schema ( XSD ) do modelo de dados. Este método fornece a descrição dos elementos do XML, as
validações em lista, as validações de tamanho e tipo de dados e os campos de preenchimento obrigatório.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lVirtualLógicoInforma se os campos virtuais devem ser adicionados no schema.T.

lTypeDefLógicoInforma se a definição dos campos devem ser adicionadas. Isto é importante quando o arquivo é gerado com mais de um modelo..T.

lOnlyStructLógicoInforma se somente a estrutura do schema deve ser gerada. Neste caso, os campos obrigatório não são exportados.F.


 

Retorno
cXSD Schema ( XSD ) do modelo de dados

Veja também
GetXMLData
GetXMLLayout

Sintaxe
FWFORMMODEL():GetXMLLayout([ cID ])-> cXSL

Descrição
Fornece uma string com o layout ( XSL ) de apresentação do modelo de dados. Este método fornece o
layout de exibição dos elementos do XML.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIDCaracteresIdentificação dos dados do layout
X


 

Retorno
cXSL Layout de apresentação do modelo de dados

Veja também
GetXMLData
LoadXMLPk

Sintaxe
FWFORMMODEL():LoadXMLPk([ cXML ])-> aResult

Descrição
Identifica a chave primária do modelo de dados. Este método pode ser utilizado para identificar e extrair os dados da
chave primária contidas no XML fornecido como parametro.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cXMLCaracteresXML com os dados do modelo
X


 

Retorno
aResult Array com a seguinte estrutura:
            [1] ExpN: Codigo da Operacao
            [2] Array com os dados da Primary Key

Veja também
GetXMLSchema, GetXMLData
LoadXMLOperation

Sintaxe
FWFORMMODEL():LoadXMLOperation([ cXML ])-> nResult

Descrição
Identifica a operacao do modelo de dados. Este método pode ser utilizado para identificar e extrair operacao
contida no XML fornecido como parametro.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cXMLCaracteresXML com os dados do modelo
X


 

Retorno
nResult Numero da operacao

Veja também
GetXMLSchema, GetXMLData
LoadXMLData

Sintaxe
FWFORMMODEL():LoadXMLData([ cXML ], [ lForce ])-> lLoad

Descrição
Carrega o modelo com base na folha de dados em XML. Este método pode ser utilizado para processar a validação e carga
dos dados contidos no XML fornecido, porém não efetua a gravação dos dados


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cXMLCaracteresXML com do modelo e os dados
X
lForceLógicoForça a carga dos dados sem validar o modelo..F.


 

Retorno
lLoad Indica se o modelo foi carregado com sucesso

Exemplo

            ::MODELXML := oModel:LoadXMLData(::ModelXML)
            If oModel:VldData()
               oModel:CommitData()
               ::lOk := .T.
            Else
               ::lOk := .F.
               aError := oModel:GetErrorMessage()
               SetSoapFault(aError[MODEL_MSGERR_IDFORM]+":"+;
                           aError[MODEL_MSGERR_IDFIELD]+":"+;
                           aError[MODEL_MSGERR_IDFORMERR]+":"+;
                           aError[MODEL_MSGERR_IDFIELDERR]+":"+;
                           aError[MODEL_MSGERR_ID],;
                           aError[MODEL_MSGERR_MESSAGE]+"/"+aError[MODEL_MSGERR_SOLUCTION])
               lRetorno := .F.
            EndIf
SetLoadXML

Sintaxe
FWFORMMODEL():SetLoadXML([ bLoadXML ])-> NIL

Descrição
Configura o modelo para ser ativado com uma folha de dados em XML.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
bLoadXMLBloco de CódigoBloco de código que recebe o modelo por parametro e
espera como retorno um XML com os dados baseado no modelo

X


 
SetValue

Sintaxe
FWFORMMODEL():SetValue([ cIdForm ], [ cIdField ], [ xValue ])-> lRetorno

Descrição
Atribui um valor a folha de dados do objeto executando sua validação conforme o tipo de operação configurado ( SetOperation ).
Caso o objeto não possa receber dados um erro pode ser gerado ( SetErrorMessage ) ou uma exceção de usuário ( queda do sistema ).


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo do Modelo que terá uma atribuicao
X
cIdFieldCaracteresCodigo/Nome do atributo da folha de dados
X
xValueQualquerValor a ser atribuido
X


 

Retorno
lRetorno Indica se o valor foi atribuido

Veja também
CanSetValue,GetErrorMessage,SetErrorMessage
LoadValue

Sintaxe
FWFORMMODEL():LoadValue([ cIdForm ], [ cIdField ], [ xValue ])-> lRetorno

Descrição
Carrega um valor a folha de dados do objeto. Este metodo somente pode ser utilizado quando há SetValue na pilha de chamadas
de função ( CallStack ). Diferentemente do metodo 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 utíl quando dentro de uma validação de campo, necessitamos
alterar valores de outros campos, sem que isto implique em valida-los.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo do Modelo que terá uma atribuicao
X
cIdFieldCaracteresCodigo/Nome do atributo da folha de dados
X
xValueQualquerValor a ser atribuido
X


 

Retorno
lRetorno Indica se o valor foi carregado
VldData

Sintaxe
FWFORMMODEL():VldData([ cIDModel ], [ lVldOwner ])-> lRetorno

Descrição
Valida toda a folha de dados do objeto modelo, ou um sub-parte dela, assegurando que o mesmo possa ser gravado com toda a integridade de
dados garantida. Este método verifica se todos os elementos da estrutura do modelo estão validos e executa o code-block
de pos-validação de cada um deles, bem como o code-block de validação final do modelo. O objeto é considerado valido
se todas as validações retornarem verdadeiro, caso contrário um erro ( SetErrorMessage ) será gerado.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIDModelCaracteresID inicial que se deve fazer a validação, no caso que se queira validar uma parte do model, passando esse
parametro o metodo ira validar o modelo passado e seus filhos, e não irá setar o modelo geral como validado.
""

lVldOwnerLógicoVerifica se será validado o ID do model e seus filhos (.T.) ou se será validado apenas o contexto do ID (.F.).T.X


 

Retorno
lRetorno Folha de dados valida

Veja também
SetErrorMessage, GetErrorMessage
CommitData

Sintaxe
FWFORMMODEL():CommitData()-> lRetorno

Descrição
Grava a folha de dados do objeto modelo. A gravação somente é permitida se o objeto do modelo está valido.
A gravação não é feita diretamente por esta classe, mas sim, pelo code-block informado no método new. Este método
apenas assegura que todos os procedimentos necessários para gravar os dados do objeto modelo foram cumpridos.


Retorno
lRetorno Folha de dados gravada

Veja também
new
CancelData

Sintaxe
FWFORMMODEL():CancelData()-> lRetorno

Descrição
Cancela a folha de dados do objeto modelo. Da mesma forma como o método CommitData, este método apenas assegura que
todos os procedimentos necessários ao cancelamento da gravação do objeto modelo foram cumpridos e invoca o code-block
configurado no método new.


Retorno
lRetorno Folha de dados cancelada

Veja também
new
SetErrorMessage

Sintaxe
FWFORMMODEL():SetErrorMessage([ cIdForm ], [ cIdField ], [ cIdFormErr ], [ cIdFieldErr ], [ cId ], [ cMessage ], [ cSoluction ], [ xValue ], [ xOldValue ])-> lRetorno

Descrição
Atribui uma mensagem de erro ao modelo. Quando uma mensagem de erro é atribuida, ela somente pode ser retirada pelo
evento que a provocou.
O controle de mensagens de erro do modelo, permite identificar o Id´s do submodelo e campo de origem do erro e qual
Id do subdmodelo e campo que provocou o erro. Isto significa que caso um erro seja gerado por um gatilho de campo
este possa ser identificado.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresId do subdmodelo em validação


cIdFieldCaracteresId do campo do submodelo em validação


cIdFormErrCaracteresId do submodelo em que ocorreu o erro


cIdFieldErrCaracteresId do campo do submodelo em que ocorreu o erro


cIdCaracteresId da mensagem de help


cMessageCaracteresMensagem de erro


cSoluctionCaracteresMensagem de solução


xValueQualquerValor especificado do campo


xOldValueQualquerValor anterior do campo



 

Retorno
lRetorno indica que a mensagem de erro foi reinicializada
GetErrorMessage


Sintaxe
FWFORMMODEL():GetErrorMessage([ lClear ])-> aErrorMessage

Descrição
Fornece uma estrutrura com a pilha de erro


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lClearLógicoIndica se a mensagem de erro deve ser limpa apos o retorno.F.


 

Retorno
aErrorMessage Array com a estrutura a seguinte estrutura para tratamento de erro
[1] ExpC: Id do submodelo de origem
[2] ExpC: Id do campo de origem
[3] ExpC: Id do submodelo de erro
[4] ExpC: Id do campo de erro
[5] ExpC: Id do erro
[6] ExpC: mensagem do erro
[7] ExpC: mensagem da solução
[8] ExpX: Valor atribuido
[9] ExpX: Valor anterior

Veja também
SetErrorMessage


GetErrorMsgText


Disponível a partir da LibLabel 20210104


Sintaxe
FWFORMMODEL():GetErrorMsgText([ lClear ], [cSeparator])-> cErrorMsgText

Descrição
Fornece as mesmas informações de GetErrorMessage só que no formato Texto.



Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lClearLógicoIndica se a mensagem de erro deve ser limpa apos o retorno.F.

cSeparatorCaracterIndica o separador usado na mensagem de textoCRLF


 

Retorno
cErrorMsgText Texto com a informação do erro no seguinte formato: 

Erro: valor + cSeparator +
Solução: valor + cSeparator +
Valor Atribuido: valor + cSeparator +
Valor anterior: valor + cSeparator +
Id origem: valor + cSeparator +
Id campo origem: valor + cSeparator +
Id form erro: valor + cSeparator +
Id campo erro: valor + cSeparator +
Id Erro: valor

Veja também
GetErrorMessage, SetErrorMessage

HasErrorMessage

Sintaxe
FWFORMMODEL():HasErrorMessage()-> Se

Descrição
Retorna se o model possui algum erro


Retorno
Se .T. o Model possui algum erro pendente.

Veja também
GetErrorMessage
GetValue

Sintaxe
FWFORMMODEL():GetValue([ cIdForm ], [ cIdField ])-> xRetorno

Descrição
Recupera o valor da folha de dados do objeto.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo
X
cIdFieldCaracteresCodigo/Nome do atributo da folha de dados
X


 

Retorno
xRetorno Conteudo do campo

Veja também
SetValue
CanSetValue

Sintaxe
FWFORMMODEL():CanSetValue([ cIdForm ], [ cIdField ])-> lRetorno

Descrição
Valida se é possível atribuir um valor a folha de dados do objeto.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo que terá uma atribuicao
X
cIdFieldCaracteresCodigo/Nome do atributo da folha de dados
X


 

Retorno
lRetorno Indica se o valor pode ser atribuido
SetRelation

Sintaxe
FWFORMMODEL():SetRelation([ cIdForm ], [ aRelation ], [ cOrderBy ])-> NIL

Descrição
Atribui o critério de relacionamento entre os submodelos. A especificação do relacionamento
entre os submodelos de dados do objeto modelo, garante a carga dos dados e a correta atualização das chaves estrangeiras
durante a execução do método FWCommit.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo do Modelo de destino do relacionamento
X
aRelationArrayEstrutura de relacionamento
[n]
[n][1] ExpC: ID do campo do submodelo origem
[n][2] ExpC: ID do campo do submodelo destino

X
cOrderByCaracteresOrdem de apresentação



 

Exemplo

Static Function ModelDef()
Local oModel
Local oStruZA1:= FWFormStruct(1,'ZA1')
Local oStruZA2 := FWFormStruct( 1, 'ZA2')

oModel := FWFormModel():New('COMP021',,,{|oModel| commit()},{|oModel| cancel()})
oModel:AddFields('ZA1MASTER',,oStruZA1)
oModel:AddGrid( 'ZA2DETAIL', 'ZA1MASTER', oStruZA2)
oModel:SetRelation( 'ZA2DETAIL', { { 'ZA2_FILIAL', 'xFilial( "ZA2" )' }, { 'ZA2_MUSICA', 'ZA1_MUSICA' } }, ZA2->( IndexKey( 1 ) ) )
Return oModel

Static Function commit()
Return

Static Function cancel()
Return
GetRelation

Sintaxe
FWFORMMODEL():GetRelation([ cIdForm ])-> aRelation

Descrição
Fornece o critério de relacionamento entre os submodelos


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo de destino do relacionamento
X


 

Retorno
aRelation Estrutura do relacionamento entre as tabelas.
[1][n][1] IdField do submodelo de destino
             [2] IdField ou expressão do submodelo de destino
[2] Ordem de relacionamento no padrão ISAM.

Veja também
SetRelation
SetPrimaryKey

Sintaxe
FWFORMMODEL():SetPrimaryKey([ aPK ])-> NIL

Descrição
Atribui a PrimaryKey da entidade Modelo. A primarykey é imprescindivel para a correta operação
das rotinas automáticas, web-services, relatórios, etc... Não é necessário informar uma para
cada submodelo, a Primary Key é definida somente para o primeiro submodelo do tipo FormField.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
aPKArrayArray unidimensional com o ID dos campos
X


 

Observações

Se a tabela do submodelo for um metadado e possuir chave primária informada no SX2, não é necessário
fazer uso desse método pois o MVC irá considerar o que está declarado no SX2.
GetPrimaryKey

Sintaxe
FWFORMMODEL():GetPrimaryKey()-> NIL

Descrição
Fornece a Primary Key do modelo de dados


Veja também
SetPrimaryKey
SetOperation

Sintaxe
FWFORMMODEL():SetOperation([ nOperation ])-> NIL

Descrição
Indica ao modelo a operacao de manipulacao de dados que será realizada. A classe utiliza esta informação para
definir como serão inicializadas as informações do modelo.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
nOperationNuméricoIndica a operação que será realizada com o modelo, sendo:
[1] View
[3] Insert
[4] Update
[5] Delete

X


 
GetOperation

Sintaxe
FWFORMMODEL():GetOperation()-> nOperation

Descrição
Fornece o tipo de operacao de manipulacao de dados que foi configurado.


Retorno
nOperation Indica a operação que será realizada com o modelo, sendo:
               1 - View
               3 - Insert
               4 - Update
               5 - Delete
               6 - only Update
               

Veja também
SetOperation
ReportDef

Sintaxe
FWFORMMODEL():ReportDef([ cPergunte ], [ bImpress ], [ aFields ])-> oReport

Descrição
Fornece um objeto de TReport com as definicoes de impressão do modelo.
O TReport tem as seções e células baseado nos submodelos e estrutura
de dados.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cPergunteCaracteresId do grupo de perguntas do relatório


bImpressBloco de CódigoBloco de código do controle de fluxo de impressão. Deve retornar verdadeiro para imprimir, não recebe nenhum parametro.


aFieldsArrayInforme a lista de campos que deve ser impressa, no formato
[1] Id do submodelo
[2] Id do campo
[3] Picture
[4] ComboBox




 

Retorno
oReport Objeto do tipo TReport com as definições de impressão

Exemplo

Static Function ModelDef()
Local oStruZA1 := FWFormStruct( 1, 'ZA1')
Local oStruZA2 := FWFormStruct( 1, 'ZA2')
Local oModel

oModel := MPFormModel():New( 'COMP022M')
oModel:AddFields( 'ZA1MASTER', NIL, oStruZA1 )
oModel:AddGrid( 'ZA2DETAIL', 'ZA1MASTER', oStruZA2)
oModel:SetRelation( 'ZA2DETAIL', { { 'ZA2_FILIAL', 'xFilial( "ZA2" ) ' } , { 'ZA2_MUSICA', 'ZA1_MUSICA' } } , ZA2->( IndexKey( 1 ) ) )
Return oModel

Static Function ViewDef()
Local oModel := ModelDef()
Local oView
Local oStr1:= FWFormStruct(2, 'ZA1')
Local oStr2:= FWFormStruct(2, 'ZA2')

oView := FWFormView():New()
oView:SetModel( oModel )
oView:AddField('ZA1MASTER' , oStr1)
oView:AddGrid('ZA2DETAIL' , oStr2)
oView:CreateHorizontalBox( 'BOXFORM2', 50)
oView:CreateHorizontalBox( 'BOXFORM4', 50)
oView:SetOwnerView('ZA1MASTER','BOXFORM2')
oView:SetOwnerView('ZA2DETAIL','BOXFORM4')

oView:AddUserButton("Imprimir TReport","",{|oView| print(oView)})

Return oView

Static Function Print(oView)
Local oModel := oView:GetModel()
Local oReport

   oReport := oModel:ReportDef()
   oReport:PrintDialog()
   
Return
SetReportTotal

Sintaxe
FWFORMMODEL():SetReportTotal([ lTotal ])-> NIL

Descrição
Configura se o relatório gerado pelo metodo ReportDef deverá totalizar todos os campos numéricos.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lTotalLógicoSe verdadeiro o relatório deve ter totalização..T.


 
GetModelIds

Sintaxe
FWFORMMODEL():GetModelIds()-> aArray

Descrição
Fornece um Array com os ids de Todos os submodelos do Model


Retorno
aArray Array unidimensional que contém os Ids do submodelos
SetActivate

Sintaxe
FWFORMMODEL():SetActivate([ bBloco ])-> NIL

Descrição
Seta um bloco que será chamado logo após o Activate do model. Esse bloco recebe como parametro o proprio model(FWFormModel).


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
bBlocoBloco de CódigoCode-Block a ser chamado



 

Exemplo

   bBloco := {|oModel| MinhaFunc(oModel)}
   oModel:SetActivate(bBloco)
   
SetDeActivate

Sintaxe
FWFORMMODEL():SetDeActivate([ bBloco ])-> NIL

Descrição
Seta um bloco que será chamado logo após o DeActivate do model. Esse bloco recebe como parametro o proprio model.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
bBlocoBloco de CódigoCode-Block a ser chamado



 

Exemplo

   bBloco := {|oModel| MinhaFunc(oModel)}
   oModel:SetDeActivate(bBloco)
SetVldActivate

Sintaxe
FWFORMMODEL():SetVldActivate([ bBloco ])-> NIL

Descrição
Seta um bloco que será chamado antes do Activate do model. Ele pode
Ser utilizado para inibir a inicialização do model. Se o retorno for negativo
uma exceção de usuário será gerada. O code-block recebe como parametro
o objeto model.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
bBlocoBloco de CódigoCode-Block a ser chamado
X


 

Exemplo

   bBloco := {|oModel| MinhaFunc(oModel)}
   oModel:SetVldActivate(bBloco)

Veja também
CanActivate
CanActivate

Sintaxe
FWFORMMODEL():CanActivate()-> NIL

Descrição
Verifica se o model pode ser ativado.


Veja também
SetVldActivate
SetOptional

Sintaxe
FWFORMMODEL():SetOptional([ cIdForm ], [ lOp ])-> NIL

Descrição
Define que um submodelo é opcional. Quando um modelo é opcional ele tem seu preenchimento
não obrigatório, podendo realizar a gravação dos dados sem preenche-lo


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo
X
lOpLógicoValor verdadeiro para deixar o submodelo opcional
X


 
IsOptional

Sintaxe
FWFORMMODEL():IsOptional([ cIdForm ])-> lOp

Descrição
Retorna se o submodelo é opcional


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresIdentificador do submodelo
X


 

Retorno
lOp Se verdadeiro o submodelo é opcional
SetOnlyQuery

Sintaxe
FWFORMMODEL():SetOnlyQuery([ cIdForm ], [ lOp ])-> NIL

Descrição
Define que o submodelo não será gravado, ele é apenas usado para consulta.
Se um submodelo é onlyquery e possui submodelos abaixo dele, os filhos serão
gravaveis por padrão. Mesmo o pai sendo onlyquery, os filhos irão
fazer a gravação, exceto se o(s) submodelo(s) filho for definido como
setonlyquery verdadeiro.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo
X
lOpLógicoSe verdadeiro faz com que o submodelo não seja gravado.
X


 
IsOnlyQuery

Sintaxe
FWFORMMODEL():IsOnlyQuery([ cIdForm ])-> lRet

Descrição
Retorna se o submodelo é apenas para visualização, ou seja, tem a gravação é inibida.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresCodigo do submodelo
X


 

Retorno
lRet Se verdadeiro o submodelo não é gravado
ClearField

Sintaxe
FWFORMMODEL():ClearField([ cIdForm ], [ cIdField ])-> lRetorno

Descrição
Limpa o conteudo de um campo de um submodelo


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresIdentificação do submodelo
X
cIdFieldCaracteresCodigo/Nome do atributo da folha de dados
X


 

Retorno
lRetorno Indica se a operação foi concluida com sucesso
IsActive

Sintaxe
FWFORMMODEL():IsActive()-> NIL

Descrição
Retorna se o modelo está ativo

isEnable

Sintaxe
FWFORMMODEL():isEnable([ cIdForm ])-> lRet

Descrição
Execulta o bloco de bPre do submodelo, retornando se ele está disponivel para edição


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresIdentificador do submodelo que será analisado
X


 

Retorno
lRet - Se verdadeiro indica que o submodelo está disponivel
InitValue

Sintaxe
FWFORMMODEL():InitValue([ cIdForm ], [ cIdField ])-> xRetorno

Descrição
Recupera o valor do inicializador padrao da folha de dados do objeto.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresIdentificador do Submodelo
X
cIdFieldCaracteresCodigo/Nome do atributo da folha de dados
X


 

Retorno
xRetorno Conteudo do campo
Compare

Sintaxe
FWFORMMODEL():Compare(oOtherModel, [lGetID] )-> NIL

Descrição
Faz a comparação entre os dados de um objeto do tipo Model passado por referência com o próprio model. Os dois objetos devem possuir os mesmos submodelos, pois esse método compara apenas os dados, supondo que a estrutura seja a mesma.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
oOtherModelObjetoobjeto do tipo FWFormModel ou MPFormModel
X
lGetIDLogico

Se verdadeiro 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

.F.


Retorno

Array contendo as diferenças de dados encontradas entre os dois modelos. Em cada linha do array vai conter uma das estruturas abaixo, de acordo com o tipo do submodelo, field ou grid:
    
         Field:
            [n]
            [n][1] - ExpC: Id do Formulario
            [n][2] - ExpC: Tipo (F)
            [n][3] - SubArray com os campos alterados
            [n][3][1] - ExpC: ID do campo
            [n][3][2] - ExpX: Valor do Modelo(self)
            [n][3][3] - ExpX: Valor do modelo passado no segundo parametro
            [n][4] - ExpN: Operação do modelo
            Se lGetID == .T.
            [n][5] - {Id do dado de origem, Id do dado destino(modelo passado via parametro}
    
         Grid:
            [n][1] - ExpC: Id do subModelo
            [n][2] - ExpC: Tipo (G)
            [n][3] - SubArray com os campos alterados
            [n][3][1] - ExpN: Número da linha no submodelo do Model
            [n][3][2] - ExpC: Operação da linha (3 - Inclusão , 4 - Alteração ou 5 - Exclusão )
            [n][3][3][1] - ExpC: ID do Campo
            [n][3][3][1] - ExpX: Valor do Modelo(self)
            [n][3][3][1] - ExpC: Valor do modelo passado no segundo parametro   
            Se lGetID == .T.
            [n][3][4] - {Id do dado de origem, Id do dado destino(modelo passado via parametro}

 
HasField

Sintaxe
FWFORMMODEL():HasField([ cIdForm ], [ cIdField ])-> NIL

Descrição
Informa de um determinado campo existe na estrutura


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cIdFormCaracteresIdentificador do submodelo
X
cIdFieldCaracteresIdentificador do campo
X


 
SetCancel

Sintaxe
FWFORMMODEL():SetCancel([ bBloco ], [ lAcumula ])-> NIL

Descrição
Seta um bloco que será chamado quando o submodelo é cancelado


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
bBlocoBloco de CódigoCode-Block a ser chamado
X
lAcumulaLógicoSe verdadeiro não substitui o bloco de cancelamento anterior
e sim adiciona a validação no final
.F.


 
SetCommit

Sintaxe
FWFORMMODEL():SetCommit([ bBloco ], [ lAcumula ])-> NIL

Descrição
Seta um bloco que será chamado na gravação do submodelo


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
bBlocoBloco de CódigoCode-Block a ser chamado
X
lAcumulaLógicoSe verdadeiro não substitui o bloco anterior e sim
adiciona a validação no final
.F.


 
SetOnDemand

Sintaxe
FWFORMMODEL():SetOnDemand([ lOnDemand ])-> NIL

Descrição
Define se a carga dos dados será por demanda.
Quando o model é por demanda, os dados do submodelo não serão carregados
de uma vez no activate. Conforme eles forem manipulados eles serão
carregados. O método é útil em modelos que contem muitos submodelos
e que podem ficar lentos devido a grande quantidade de dados.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
lOnDemandLógicoSe verdadeiro a carga será por demanda.T.


 
IsCopy

Sintaxe
FWFORMMODEL():IsCopy()-> lRetorno

Descrição
Indica se o modelo esta em uma operacao com origem em uma copia de dados


Retorno
lRetorno Se verdadeiro indica que é uma operação de cópia
SetProcess

Sintaxe
FWFORMMODEL():SetProcess([ nProcess ])-> NIL

Descrição
Define um valor para o processo. Util para se efetuar algum controle alem
da operação.


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
nProcessNuméricoValor a ser atribuido ao processo
X


 

Veja também
GetProcess
GetProcess

Sintaxe
FWFORMMODEL():GetProcess()-> NIL

Descrição
Obtem o valor do processo que foi definido pelo método SetProcess


Veja também
SetProcess
SetWKDef

Sintaxe
FWFORMMODEL():SetWKDef([ cWKDef ])-> NIL

Descrição
Define o Código do processo do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKDefCaracteresCódigo do processo
X


 
SetWKVersDef

Sintaxe
FWFORMMODEL():SetWKVersDef([ cWKVersDef ])-> NIL

Descrição
Define a versão do processo do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKVersDefCaracteresVersão do processo
X


 
SetWKNumProces

Sintaxe
FWFORMMODEL():SetWKNumProces([ cWKNumProces ])-> NIL

Descrição
Define o Número da solicitação de processo do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKNumProcesCaracteresNúmero da solicitação de processo
X


 
SetWKNumState

Sintaxe
FWFORMMODEL():SetWKNumState([ cWKNumState ])-> NIL

Descrição
Define o Número da atividade do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKNumStateCaracteresNúmero da atividade
X


 
SetWKCurrentState

Sintaxe
FWFORMMODEL():SetWKCurrentState([ cWKCurrentState ])-> NIL

Descrição
Define o Número da atividade atual do processo do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKCurrentStateCaracteresNúmero da atividade atual
X


 
SetWKCompany

Sintaxe
FWFORMMODEL():SetWKCompany([ cWKCompany ])-> NIL

Descrição
Define o número da empresado Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKCompanyCaracteresNúmero da empresa
X


 
SetWKUser

Sintaxe
FWFORMMODEL():SetWKUser([ cWKUser ])-> NIL

Descrição
Define o Código do usuario do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKUserCaracteresCódigo do usuario
X


 
SetWKUserEmail

Sintaxe
FWFORMMODEL():SetWKUserEmail([ cWKUserEmail ])-> NIL

Descrição
Define o e-mail do usuario do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKUserEmailCaracteresE-mail do usuario
X


 
SetWKCompletTask

Sintaxe
FWFORMMODEL():SetWKCompletTask([ cWKCompletTask ])-> NIL

Descrição
Indica se tarefa foi completada (true/false) do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKCompletTaskCaracterestrue/false
X


 
SetWKNextState

Sintaxe
FWFORMMODEL():SetWKNextState([ cWKNextState ])-> NIL

Descrição
Define o Número da próxima atividade (destino) do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKNextStateCaracteresNúmero da atividade
X


 
SetWKCardId

Sintaxe
FWFORMMODEL():SetWKCardId([ cWKCardId ])-> NIL

Descrição
Define o código do formulário do processo do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKCardIdCaracteresCódigo do formulário
X


 
SetWKFormId

Sintaxe
FWFORMMODEL():SetWKFormId([ cWKFormId ])-> NIL

Descrição
Define o Código da definição de formulário do processo do Fluig BPM


Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cWKFormIdCaracteresCódigo da definição de formulário
X


 
GetWKDef

Sintaxe
FWFORMMODEL():GetWKDef()-> cWKDef

Descrição
Retorna o Código do processo do Fluig BPM


Retorno
cWKDef Código do processo
GetWKVersDef

Sintaxe
FWFORMMODEL():GetWKVersDef()-> cWKVersDef

Descrição
Retorna o Versão do processo do Fluig BPM


Retorno
cWKVersDef Versão do processo
GetWKNumProces

Sintaxe
FWFORMMODEL():GetWKNumProces()-> cWKNumProces

Descrição
Retorna o Número da solicitação de processo do Fluig BPM


Retorno
cWKNumProces Número da solicitação de processo
GetWKNumState

Sintaxe
FWFORMMODEL():GetWKNumState()-> cWKNumState

Descrição
Retorna o Número da atividade do Fluig BPM


Retorno
cWKNumState Número da atividade
GetWKCurrentState

Sintaxe
FWFORMMODEL():GetWKCurrentState()-> cWKCurrentState

Descrição
Retorna o Número da atividade atual do processo do Fluig BPM


Retorno
cWKCurrentState Número da atividade
GetWKCompany

Sintaxe
FWFORMMODEL():GetWKCompany()-> cWKCompany

Descrição
Retorna o Número da empresa do processo do Fluig BPM


Retorno
cWKCompany Número empresa
GetWKUser

Sintaxe
FWFORMMODEL():GetWKUser()-> cWKUser

Descrição
Retorna o Código do usuario do Fluig BPM


Retorno
cWKUser Código do usuario
GetWKUserEmail

Sintaxe
FWFORMMODEL():GetWKUserEmail()-> cWKUserEmail

Descrição
Retorna o e-mail do usuario do Fluig BPM


Retorno
cWKUserEmail E-mail do usuario
GetWKCompletTask

Sintaxe
FWFORMMODEL():GetWKCompletTask()-> cWKCompletTask

Descrição
Retorna se tarefa foi concluída do Fluig BPM


Retorno
cWKCompletTask true/false
GetWKNextState

Sintaxe
FWFORMMODEL():GetWKNextState()-> cWKNextState

Descrição
Retorna o Número da próxima atividade (destino) do processo do Fluig BPM


Retorno
cWKNextState Número da atividade
GetWKCardId

Sintaxe
FWFORMMODEL():GetWKCardId()-> cWKCardId

Descrição
Retorna o código do formulário do processo do Fluig BPM


Retorno
cWKCardId Código do formulário
GetWKFormId

Sintaxe
FWFORMMODEL():GetWKFormId()-> cWKFormId

Descrição
Retorna o Código da definição de formulário do processo do Fluig BPM


Retorno
cWKFormId Código da definição de formulário
SetPKIndexOrder

Sintaxe
FWFORMMODEL():SetPKIndexOrder([ nIndexOrder ])-> NIL

Descrição
Define a ordem de indice utilizada pela PK do model

Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
nIndexOrderNuméricoOrdem
X