RK
Campos CREATEDAT e UPDATEDAT não retornados ao salvar um TRecord
Criando um formulário de cadastro e usando as constantes CREATEDAT e UPDATEDAT na respectiva classe de modelo, me deparei com a seguinte situação:
Ao persistir os dados no médodo "onSave" do formulário, seja durante uma instrução de INSERT ou mesmo UPDATE, a data de criação e data de atualização do registro são gravados no banco, porém não são atribuidas a classe de modelo, portando não são "retornadas" impossibilitando que sejam enviadas ao formulário com o método "setData".
Após uma breve análise eu consegui resolver o problema de uma forma fácil, porém isso exigiu atualizar a classe "TRecord" do framework, mais precisamente na linha 589. Veja o trecho do código original:
Com as alterações o código ficou assim:
O mesmo padrão de edição foi empregado também na linha 636 da mesma classe, para retornar o valor de UPDATEDAT.
Sei que não é aconselhável alterar as classes do framework e que poderia obter o mesmo resultado explorando os métodos de gancho das classes de modelo, mas isso teria que ser feito em cada classe gerando trabalho repetitivo, o que não é a proposta do fw.
Espero que alguém tenha alguma ideia de como fazer essa alteração a nível de "aplicação", caso não haja sugiro que essa adequação seja incluída no roadmap da próxima versão.
Ao persistir os dados no médodo "onSave" do formulário, seja durante uma instrução de INSERT ou mesmo UPDATE, a data de criação e data de atualização do registro são gravados no banco, porém não são atribuidas a classe de modelo, portando não são "retornadas" impossibilitando que sejam enviadas ao formulário com o método "setData".
Após uma breve análise eu consegui resolver o problema de uma forma fácil, porém isso exigiu atualizar a classe "TRecord" do framework, mais precisamente na linha 589. Veja o trecho do código original:
- <?php
- if (!empty($createdat))
- {
- $info = TTransaction::getDatabaseInfo();
- $date_mask = (in_array($info['type'], ['sqlsrv', 'dblib', 'mssql'])) ? 'Ymd H:i:s' : 'Y-m-d H:i:s';
- //$sql->setRowData($createdat, date($date_mask));
- }
- ?>
Com as alterações o código ficou assim:
- <?php
- if (!empty($createdat))
- {
- $info = TTransaction::getDatabaseInfo();
- $date_mask = (in_array($info['type'], ['sqlsrv', 'dblib', 'mssql'])) ? 'Ymd H:i:s' : 'Y-m-d H:i:s';
- $createdat_value = date($date_mask);
- $sql->setRowData($createdat, $createdat_value);
- $this->{$createdat} = $createdat_value;
- }
- ?>
O mesmo padrão de edição foi empregado também na linha 636 da mesma classe, para retornar o valor de UPDATEDAT.
Sei que não é aconselhável alterar as classes do framework e que poderia obter o mesmo resultado explorando os métodos de gancho das classes de modelo, mas isso teria que ser feito em cada classe gerando trabalho repetitivo, o que não é a proposta do fw.
Espero que alguém tenha alguma ideia de como fazer essa alteração a nível de "aplicação", caso não haja sugiro que essa adequação seja incluída no roadmap da próxima versão.