Mover-se para selecções de entidades partilháveis sem percalços

Tradução automática de Deepl

Nestepost do blogue , descobriu o poder que as selecções de entidades partilháveis podem oferecer. 4D centra-se na partilha de dados porque, a longo prazo, conduz ao desempenho.

Mas estamos conscientes de que esta estratégia pode não ser a sua estratégia actual. Seguimos as discussões no fórum e compreendemos os seus comentários e sentimentos.

Para suavizar este passo e dar-lhe mais flexibilidade e ferramentas, fizemos alguns melhoramentos relativamente à natureza (partilhável ou não partilhável) das selecções de entidades.

Antes de continuar, recomendamos vivamente que leia este post no blogue e este para que possa fazer sentido das melhorias descritas abaixo.

HDI: Melhorias nas selecções de entidades

4D v18 R5 oferece mais possibilidades de lidar com selecções de entidades não partilháveis (alteráveis). Ajuda-o a trabalhar da forma a que está habituado.

Por outro lado, se estiver disposto a trabalhar com selecções de entidades partilháveis, ajudámo-lo a preparar-se para esta nova era em 4D v18 R5. Em 4D v18, introduzimos uma forma flexível que pode utilizar de forma transparente para preparar o seu código.

Em poucas palavras: prepare-se em 4D v18, corra em 4D v18 R5, e prepare-se para mais desempenho!

sobre as selecções de entidades alteráveis

adicionar uma entidade à selecção de uma entidade

Um caso de utilização frequente é exibir uma selecção de entidade numa caixa de listagem (produtos, facturas, etc.) e permitir que o utilizador adicione novas entidades.

Vamos trabalhar num dataclass de Produtos.

Quando o formulário é carregado, Form.products é criado, é a fonte de dados da caixa de listagem:

Case of
: (Form event code=On Load)
Form .products:=ds.Products.all()
End case

Quando o utilizador adiciona um novo produto:

Form.products.add(Form.product)

Se correr este código como em 4D v18 R5, receberá um erro ao correr o add() porque ds.Products.all() devolve uma selecção de entidade partilhável (não alterável).

Estamos cientes deste inconveniente. É por isso que vai descobrir que o 4D v18 copy() está disponível para preparar o seu código para se preparar para 4D v18 R5.

Se copy() é executado em 4D v18: apenas copia a sua selecção de entidade

Se copy() é executado em 4Dv18 R5, por defeito, copia a sua selecção de entidade não alterável como alterável para que não tenha problemas com a acção de adição!

Por isso, basta preparar o seu código desta forma:

Case of
: (Form event code=On Load)
Form .products:=ds.Products.all()
.copy()
End case

manter a natureza das selecções de entidades

As selecções de entidades criadas a partir de uma selecção de entidade original mantêm a mesma natureza.

exemplos

Ordenar uma caixa de listagem

Vamos trabalhar novamente no exemplo dos produtos expostos. Esta selecção de entidades expostas foi definida como alterável porque o utilizador necessita de adicionar novos produtos.

Qualquer tipo de acção nas colunas da caixa de listagem mantém a natureza alterável da selecção da entidade para que ainda se possam adicionar produtos.

Executar uma consulta

Se efectuar uma consulta sobre uma selecção de entidade, a natureza da selecção da entidade é mantida para o resultado.

No nosso exemplo, se o utilizador executar uma pesquisa sobre os produtos apresentados:

Form.products:=Form.products.query("nome = :1"; Form.search)

O resultado da consulta é alterável, pelo que ainda podem ser adicionados novos produtos porque Form.products é alterável.

Estes são apenas dois exemplos. Verifique a documentação para verificar todos os casos em que a natureza da selecção original é mantida.

código genérico

Pode ser útil verificar a natureza da selecção de uma entidade em código genérico, a fim de a utilizar da forma apropriada. Imagine um método que receba uma selecção de entidade que possa ou não ser partilhável.

No exemplo abaixo, recebemos uma selecção de entidade em Products. Antes de a passarmos a um TRABALHADOR, temos de verificar se é partilhável. Se não for, tornamo-lo numa selecção de entidade partilhável.

Para isso, utilizamos a nova OB Is shared() função.

var $products; $1: cs.ProductsSelection
$products :=$1

If (Not(OB Is shared($products))))
$products :=$products.copy(ck shared)
End if
//Generate the catalog of products
CALL WORKER ("trabalhador"; "buildCatalog"; $products; Current form window)

Nota: Há também uma nova função isAlterable() disponível nas selecções de entidades para verificar se estas são alteráveis.

Descarregue o IDH acima para mais exemplos!

Continue a trabalhar como antes

Se quiser continuar o comportamento das versões 4D anteriores (sem quaisquer conceitos de selecção de entidades partilháveis), pode utilizar a função makeSelectionsAlterable() função de classe disponível no objecto de datastore.

Isto tornará as alterações trazidas com 4D v18 R5 completamente transparentes para si.

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.