Fala aí devs!
Estou com um problema aqui e não estou conseguindo entender. O cenário é o seguinte. Eu tenho um grid MVC que possui um campo chamado Ordem, o conteúdo desse campo pode ser modificado a qualquer momento pelo usuário, inclusive alteração da ordem. Quando o usuário insere uma linha, ele define uma ordem para essa linha, como uma atividade a ser executada. Contudo, imagine que no grid nós temos 3 linhas com a ordem 01, 02 e 03. O usuário está tentando inserir uma nova linha, nesse caso seria uma ordem 02. O meu código deve inserir a linha nova como ordem 02 e as linhas ordem 02 e 03 devem virar 03 e 04. Resultando em uma ordem nova como 01, 02, 03 e 04. Algo similar a isso é o configurador. Quando queremos alterar a ordem de um campo, editamos o campo, inserimos o valor e automaticamente o campo é posicionado na ordem informada e todos os outros campos são ajustados pra frente. Agora, partindo para o código, estou com o seguinte trecho:
oModel:AddGrid('GRIDZ12','FIELDZ11',oStrZ12,,{|| bLinePos()})
Quando o usuário edita a linha e insere uma nova ou confirma, a função bLinePos() é chamada. Essa função 'varre' todo o grid e verifica a ordem da linha nova. Caso a ordem da linha nova seja maior ou igual a ordem da linha em leitura, ele faz uma SOMA1() na linha utilizando um oModel:setValue() O problema é que após ele fazer o setValue, ele chama novamente a mesma função bLinePos(), repetindo o processo e entrando em um LOOP bizarro que derruba o sistema.
Alguém sabe uma forma de fazer essa atualização das ordens?
Já tentou usar o oModel:LoadValue() ao invés de SetValue() ?
Segue dica: https://mvcadvpl.wordpress.com/tag/loadvalue/
— Raphael Neves Pinheiro 02 de May de 2022