ORDA – Partilhar a selecção de uma entidade entre processos

Tradução automática de Deepl

4D v16 R6 introduziu um novo conceito de comunicação entre processos: objecto partilhado e variáveis de colecção partilhadas! Graças a isto, é possível partilhar facilmente informação entre processos.

Até agora, as selecções de entidades não eram partilháveis entre processos. Contudo, isso mudou… temos o prazer de anunciar que em 4D v18 R5 as selecções de entidades são partilháveis!

Já lá vão os dias da construção de uma lista de chaves primárias para mover uma selecção de entidades para outro processo. Melhore o seu código multi-processo , incluindo as selecções de entidades ORDA como objectos partilhados.

Continue a ler para saber mais.

HDI: Partilhar as selecções de entidades ORDA

princípio

Com 4D v18 R5, a maioria das selecções de entidades são partilháveis . Isto significa:

  • são não alteráveis (não permite a adição de novas entidades).
  • podem ser partilhadas entre vários processos ou trabalhadores.

Algumas selecções de entidades são não partilháveis (por exemplo, se tiverem sido criadas com dataClass.newSelection() ou Create entity selection()) Isto significa:

  • são alteráveis (permite a adição de novas entidades)
  • não podem ser partilhados entre vários processos

selecções de entidades partilháveis

Começando com 4D v18 R5, a maioria das selecções de entidades usadas (recuperadas com consulta(), all(), …) são partilháveis.

Vejamos um exemplo para melhor compreender.

Exemplo

No exemplo abaixo, construímos duas selecções de entidades:

  • uma para facturas pagas.
  • uma para as facturas não pagas.

Podemos querer passá-los a um trabalhador para delegar o envio:

  • e-mails de reconhecimento de facturas pagas.
  • mensagens de correio electrónico de lembrete para facturas não pagas.

Aqui está o código:

If //Put entity selections in a shared object
End use

CALL WORKER Storageinfo(Storage.info=Null)
Use (Storage)
Storage .info:=New shared object()
End use
Storage

End if (Storage.info)
Use
Storage .info.paid:=ds.Invoices.query("status=:1"; "Paid")
.info.unpaid:=ds.Invoices.query("status=:1"; "Unpaid") xml-ph-0034@de

Aqui está o método sendMails :

var $info

host; $1: Object
var $paid ; $unpaid: cs.InvoicesSelection
$server $invoice : cs.InvoicesEntity
var $server Object ; $transporter; $email; $status: //Prepare emails s
$server :=New object
.var:="exchange.company.com"
$server .user
:="$email" myName@company.com$server.password:="minha senha"

$transporter :=SMTP New transporter($server)

:=New object
$email .from:=" "

//Get entity selections
$info :=$1
$paid :=$info.paid
$unpaid:=$info.unpaid

//Loops on entity selections
For each ($invoice; $paid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Pagamento OK para factura # "+String($invoice.number)
$status :=$transporter.send($email)
End for each $email

For each ($invoice; $unpaid)
$email .to:=$invoice.customer.address // email address of the customer
$email .subject:="Por favor pague a factura # "+String($invoice.number)
$status :=$transporter.send( )
End for each

Como pode ver, o trabalhador pode lidar com as selecções da entidade!

indo e vindo entre as selecções de entidades partilháveis / não partilháveis

Em alguns casos, poderá ter uma selecção de entidade não partilhável. Se precisar de a partilhar com outro processo, basta utilizar o novo .copy() função de classe disponível nos objectos de selecção de entidades.

Aqui está um exemplo disso mesmo:

O Form.products é uma nova selecção de entidade vazia obtida com a nova função de classeSelection(). Assim, não é partilhável e aceita a adição de uma entidade.

Form.products:=ds.Products.newSelection()

//Form.product is entered by the user
Form .products.add(Form.product)

Se tentar colocá-lo “como está” no objecto partilhado $sharedObj, receberá um erro:

var $sharedObj : Object
$sharedOb j:=New shared object()

Use ($sharedObj)
//Error "Not supported value type in a shared object or a shared collection"

$sharedObj.products:=Form.products
End use

Uma vez que a ORDA pensa em tudo, há uma nova função .copy() função de classe disponível nos objectos de selecção de entidades.

Devolve uma cópia da selecção da entidade em questão, para que possamos pedir esta cópia para ser partilhada ou não.

var $sharedObj : Object
$sharedObj
:=New shared object()
Use ($sharedObj)
//Returns a shareable copy of the Form.products entity selection
$sharedObj .products:=Form.products.copy(ck shared)
End use

É isso mesmo!

Claro que com esta nova função de classe, também se pode transformar uma selecção de entidade partilhável numa não partilhável, omitindo o parâmetro opcional.

Note-se que o comando OB Copy também foi actualizado:

  • aceita uma selecção de entidade como parâmetro.
  • As selecções de entidade aninhadas no objecto a copiar são também copiadas de acordo com a opção passada.

Descarregue o IDH e verifique a documentação para saber mais!

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.