Erro ao utilizar a função GlideRecord.operation()

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-26-2022 08:46 AM
Olá, tudo bem com vocês?
Estou tentando realizar um teste simples para entender o metodo operation() do objeto GlideRecord Server Scoped em uma PDI.
De acordo com a documentação este método serveria para identificar se o objeto GlideRecord está sofrendo um evento de "insert", "update" ou "delete".
Fiz uma BR simples, apenas para logar as informações, em uma tabela de minha aplicação escopada com a seguinte configuração:
- When: Before
- Insert: True
- Delete: True
- Update: True
- Script:
(function executeRule(current, previous /*null when async*/) {
gs.info("***DEBUG previous.getTableName()" + previous.getTableName());
gs.info("***DEBUG current.getTableName()" + previous.getTableName());
gs.info("***DEBUG previous.getUniqueValue()" + previous.getUniqueValue());
gs.info("***DEBUG current.getUniqueValue()" + previous.getUniqueValue());
gs.info("***DEBUG previous.operation()" + previous.operation());
gs.info("***DEBUG current.operation()" + current.operation());
})(current, previous);
Nessa versão de código ocorre um warning do Rhino informando que a propriedade "operation" não pode ser executada por se tratar de um objeto, explodindo o seguinte registro na syslog:
com.glide.script.RhinoEcmaError: Cannot call property operation in object [object GlideRecord]. It is not a function, it is "object".
sys_script.f5212186875c11109efdfcc5dabb35ee.script : Line(7) column(0)
5: gs.info("***DEBUG previous.getUniqueValue()" + previous.getUniqueValue());
6: gs.info("***DEBUG current.getUniqueValue()" + previous.getUniqueValue());
==> 7: gs.info("***DEBUG previous.operation()" + previous.operation());
8: gs.info("***DEBUG current.operation()" + current.operation());
9:
10: })(current, previous);
Aqui uma imagem com todo o log do node que executou a transação:
Tentando entender o que está ocorrendo, refiz o script fazendo um parse desse suposto objeto para String:
(function executeRule(current, previous /*null when async*/) {
gs.info("***DEBUG previous.getTableName()" + previous.getTableName());
gs.info("***DEBUG current.getTableName()" + previous.getTableName());
gs.info("***DEBUG previous.getUniqueValue()" + previous.getUniqueValue());
gs.info("***DEBUG current.getUniqueValue()" + previous.getUniqueValue());
gs.info("***DEBUG previous.operation()" + previous.operation.toString());
gs.info("***DEBUG current.operation()" + current.operation.toString());
})(current, previous);
Para minha surpresa o script é executado sem nenhum alerta ou erro na syslog ou no node log, porém exibe fixamente o valor de 'insert' conforme o log abaixo, independetemente se eu realizo um insert, update ou delete na tabela da BR.
A imagem abaixo o log da transação quando executei um delete direto da lista de registro
Alguem faz alguma ideia do que está ocorrendo?
Existe um erro de documentação ou minha PDI está tendo um comportamento anormal?
Obrigado

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-27-2022 04:41 PM
Oi, Fabio!
Bom, pelo o que eu entendi, vc está testando operation() e não está funcionando corretamente, certo?
Testei aqui na minha PDI, e consegui obter os 3 eventos (Update, Insert e Delete).
Vc tentou utilizar só o current.operation para ver o retorno?
(function executeRule(current, previous /*null when async*/ ) {
var currentOperation = current.operation();
gs.info('BR Operação current.operation(): ' + currentOperation);
if(currentOperation == 'update'){
current.setValue('u_text', 'Teste update');
}
})(current, previous);
Nos testes que fiz usando o previous.operation() está retornando null. Entendo que não é possível buscar pelo evento anterior uma vez que para BR rodar ela está esperando um evento atual