Mudar propriedade readonly de campo mvc

É possivel deixar um campo readonly de acordo com o conteúdo de outro campo ? Preciso habilitar ou desabilitar a edição de um campo se outro campo for preenchido.

Você pode configurar a edição do campo em um cadastro MVC de duas formas:


1) Através do Configurador, edite o campo desejado e informe a regra de edição do mesmo no campo Modo Edição.

Digamos que o nome do seu campo seja ZRG_TIPO e você deseja que ele esteja desabilitado caso o campo ZRG_CLIENT esteja preenchido. Dessa forma, seu modo de edição do campo ZRG_TIPO deve ser preenchido da seguinte maneira:


Empty(FwFldGet('ZRG_CLIENT'))

Essa configuração irá ser aplicada em qualquer cadastro/tela que utilize a tabela/campo em questão.

Documentação: https://centraldeatendimento.totvs.com/hc/pt-br/articles/360018799211-Cross-Segmento-TOTVS-Backoffice-Linha-Protheus-ADVPL-Desabilitar-campo-para-edi%C3%A7%C3%A3o


2) Opcionalmente, você pode configurar isso diretamente no modelo do seu fonte MVC, dentro da função ModelDef.

Exemplo:


oStruct := FwFormStruct(1, 'ZRG')

oStruct:SetProperty('ZRG_TIPO', MODEL_FIELD_WHEN, { || Empty(FwFldGet('ZRG_CLIENT')) })

Porém, desta forma, essa configuração ficará restrita apenas ao seu cadastro MVC, não sendo obedecida em outras telas ou cadastros que utilizem o campo em questão.

Documentação: https://tdn.totvs.com/display/public/framework/FWFormModelStruct

Sim, estou trabalhand na segunda opção, mas dessa maneira a mudança só acontece na hora que o modelo é ativado, eu preciso mudar isso dentro do cadastro, ou seja na hora da ediçao.

A segunda opção irá funcionar dentro do cadastro também, seja em edição ou inclusão. No seu caso a configuração não está sendo aplicada?

Não, me parece que ele só atribui a propriedade na ativação do modelo. Se eu aterar o campo que define se o campo alvo vai ser editavel ou não ele não atualiza a propriaedade.

Lembrando que é um mvc tipo 2 e a validação é de um campo na grid.