Novidades em 4D v17

Este documento é uma compilação de todas a propriedades disponíveis em 4D v17, que foram introduzidas durante o programa lançamento R v16 ou na transição de 4D v16 R6 a 4D v17. Note que cada propriedade tem  um blog post relacionado para servir de guia com exemplos concretos. Esses blogs podem ser acessados clicando no título da propriedade.

Considere também que seções com a etiqueta estão relacionadas com todas as novas propriedades de lançamento entre 4D v16 R6 e 4D v17.

Este documento é dividido em sete partes:

ORDA 

4D v17 introduz um conceito inovador que permite manejar seu banco de dados com uma abordagem orientada a objeto: ORDA (Object Relational Data Access).

Aqui estão as propriedades que estão prontas neste lançamento:

Criar atualização e deletar dados

Com ORDA, operações CRUD (Create, Read, Update and Delete) podem sesr feitas em seu banco de dados através de uma camada de abstração: a datastore, que é um objeto que oferece uma interface ao modelo de banco de dados e dados através de objetos. Com ORDA, as operações CreateUpdate e Delete não são realizadas em uma seleção atual ou em um registro atual mas em entidades:

  • Create: pode ser atingido ao instanciar uma nova entidade com o método new() e então salvar com o método save().
  • Update: realizado em uma entidade usando o mesmo método save().
  • Delete: realizado em uma entidade ou uma seleção de entidades usando o método drop().

Leia a documentação

 

Pesquisa de banco de dados

Com ORDA, a datastore é um objeto que oferece uma interface ao modelo de banco de dados e dados através de objetos. Também não é mais necessário manejar seleção atual para cada tabela e registro atual, mas ao invés disso manejar entidades que são objetos. Pode facilmente pesquisar várias tabelas linkadas, gerenciar relações recursivas em uma mesma tablea, assim como usar vários operadores lógicos em uma única pesquisa. 4D v17 oferece várias maneiras de permitir que pesquise sua dataClass (ou seja, tabela): pode fornecer a pesquisa como uma única string ou fornecer a pesquisa e os valores separadamente usando placeholders ou fornecer a pesquisa e valores separadamente usando uma coleção criada dinamicamente. Leia a documentação

 

Alternando entre seleção atual e  ORDA 

ORDA pode ser integrado com seu código existente!É possível atualizar a seleção atual de uma tabela de uma seleção de entidades assim como  obter uma seleção de entidades da seleção de tabela atual! Novos comandos foram adicionados para esse propósito: o comando USE ENTITY SELECTION para atualizar a seleção atual na tabela correspondente, e o comando Create entity selection para obter uma seleção de entidades relaacionada com a DataClass correspondente. Leia a documentação

 

Converter à entidades, objetos e coleções

Com ORDA pode separar entidades e seleções de entidadedo banco de dados para trabalhar com elas separadamente. Também, é possível mover objetos e coleções existentes ao banco de dados. Para exportar uma entidade a um objeto, use o método toObject() ; e o método toCollection() se quiser exportar uma seleção de entidades à coleção. E importar uma entidade via objeto pode ser feito graças ao método fromObject()e importar uma seleção de entidades via uma coleção pode então ser feito com o método fromColletion(). Leia documentação

 

Gerenciar bloqueios

Bloqueio otimista

ORDA permite que trabalhe com bloqueio otimista ao oferecer um conjunto completo de métodos para gerenciar erros que podem surgir durante o salvamento de uma entidade no banco de dados. O processo é bem simples: depois de recarregar a entidade do banco de dados com o método reload(), o método touchedAttributes() permite que saiba quais propriedades foram alteradas desde o último carregamento ou salvamento e também pode comparar as duas entidades usando o método diff(). Leia a documentação


Bloqueio pessimista

Além do bloqueio otimista, ORDA também permite que trabalhe com um bloqueio pessimista usando o método lock() que bloqueia uma entidade impedindo que se salve uma referência nesta entidade em outros processos até que a entidade seja desbloqueada. Assim, de agora em diante não há necessidade de checar se uma entidade está bloqueada antes de carregá-la, porque quando tentar atualizá-la, o método  save()vai retornar um status detalhado indicando as razões de bloqueio. Leia a documentação

 

Manejar entidades em seleção de entidades

ORDA oferece métodos simples para criar e adicionar seleções de entidades assim como métodos para navegar através de entidades em um objeto de seleção de entidades, o que permite manejar diversas seleções de entidades ao mesmo tempo e navegar entre elas independentemente. Uma seleção de entidade é criada usando o método newSelection(), e entidades são adicionadas usando o método  add(). Uma seleção de entidades oferece os métodos first() e last() para obter a primeira e última entidade, e uma entidade oferece  previous() e next() para obter as entidades prévia e próxima. Leia a documentação

 

Operadores lógicos em seleções de entidades

Operadores lógicos podem ser usados em seleções de entidades, permitindo que obtenha a intersecção, união ou diferença entre duas seleções de entidades da mesma forma que com conjuntos em linguagem clássica. Leia a documentação

 

Cálculos em seleções de entidades

ORDA oferece uma ótima propriedade para passar os dados através de filtros e obter valores agregados, permite um conjunto de operadores de agregação que examinam e realizam cálculos nos conjuntos de dados. Por exemplo os métodos sum(), average(), count(), min() e max() são usados para realizar operações descritas em seus nomes! Leia a documentação

Linguagem 4D  

Aqui estão as maiores melhorias trazidas para a linguagem 4D para fazer com que sua experiência de codificação seja mais fácil e intuitiva:

Notação de objeto

As propriedades de Notação de objeto mudaram drasticamente a maneira com que se escreve código e usa o motor de banco de dados, seu código é mais rápido e fácil de entender. Por exemplo, pode simplesmente escrever $myobject.attribute.subattribute:=5 ou acessar um atributo com $person.children[2].firstname, também pode usar notação de objeto como uma expressão. Por exemplo, criar um objeto de formulário como uma variável de texto e atribuir o atributo de objeto diretamente, ou seja, [person]relatives.grandfather.grandfather.firstname. Não é mais necessário usar recursivamente OB Get

para ler os valores e atribuí-los à variáveis temporariamente, só para exbição. Um dos benefícios da notação de objeto é o uso de  propriedades e valores indefinidos, já que a linguagem 4D agora aceita valores indefinidos em qualquer parte de uma expressão. E, onde quer que atribua um valor indefinido a uma variável, será estabelecida a um valor padrão de acordo com seu tipo. Isso significa que ler a propriedade de um objeto não existente não gera um erro e nem para a execução do código. Leia a documentação

 

Objetos e coleções compartilhadas 

Objetos e coleções compartilhadas são uma forma fácil e eficiente de partilhar informações entre processos preemptivos. Objetos e coleções compartilhadas funcionam como os normais, exceto que devem ser declarados como “shared” durante sua instanciação com os novos comandosNew shared object e New shared collection. Quando instanciados, podem ser usados diretamente, como qualquer outra variável, para leitura. Para escrita e modificação, devem ser cercadas pelas palavras chaves Use e End use. Leia a documentação

 

Nova interação: For each/ End for each 

Um novo tipo de loop foi criado na linguagem 4D: For each / End for each,que permite a interação sobre tipos avançados de dados como coleções e não há necessidade de ter conhecimento avançado sobre quantos itens pertencem à coleção antes de iniciar o loop. Também pode ser usado para iterar propriedades de objeto. Isso é útil se quiser escrever código genérico sem saber os nomes das propriedades de objeto antecipadamente. Ler documentação

 

Coleções

Coleções é um novo tipo adicionado à linguagem 4D. Coleções são flexíveis e podem acelerar seu tempo de desenvolvimento. Á primeira vista a coleção parece com um array, mas enquanto um array é uma lista altamente otimizada do mesmo tipo (Array longint, Array Text, …), uma coleção é um tipo de contâiner que armazena uma lista de tipos individuais (um longint, então um texto, depois um número depois uma imagem, um objeto, mesmo outra coleção, etc); e podem ser acessados com notação de objetos. O comando New collection cria uma nova coleção vazia ou pré-preenchida. E para facilitar a manipulação de coleções, vários novos métodos a usar com Notação de Objeto são oferecidos. Esses métodos permitem, por exemplo, adicionar ou remover elementos, e muito mais. Mais de 40 novos métodos já estão disponíveis. Aqui estão alguns deles: pop(), push(), concat(), resize(), query(), slice(), …  Leia documentação

 

Null command

O novo comando Null pode ser usado para checar se um atributo de objeto ou um membro de coleção tem um valor desconhecido ou faltando (note a diferença entre o valor 0 e uma string vazia “” com um valor não estabelecido). Também permite estabelecer um valor de atributo para desconhecido. Esse comando pode ser usado com notação de objeto. Leia a documentação

 

Desenvolvendo com objetos

Datas dentro de objetos 

Datas podem agora ser estabelecidas como datas em um objeto e não como strings, fazendo com que o uso de datas dentro de objetos seja mais fácil e intuitivo. Assim OB SET e OB Get podem ser usados sem exigir a constante is date, e a notação de objeto pode ser aplicada a eles como em qualquer outro objeto típico. Para usar datas dentro de objetos, basta marcar a opção “Use date type instead of ISO date format in objects” na página de configurações de compatibilidade em Configurações de Banco de dados.  Leia a documentação

Compatibilidade de imagens em objetos

Imagens podem agora ser armazenadas em um campo objeto ou em uma variável objeto. Os comandos  OB Get  e OB SET são compatíveis com o novo tipo Is picture e podem armazenar uma imagem em um campo objeto. E a notação de objeto também pode ser usada. Leia a documentação

Validar um objeto JSON

Uma nova opção foi adicionada para ajudar a reduzir o tempo de debuggin quando usar strings JSON. O parâmetro de opção * de JSON Parse cria informação adicional de debug  (__symbols property) que oferece rota, posição de linha e offset (deslocamento) de linha de cada propriedade e sub-propriedade do objeto. Mesmo se um objeto for bem formado, pode ser que ele não preencha especificações ou normas de conteúdo. O novo comando JSON Validate permite que cheque se a estrutura do objeto é adequada a uma dada especificação (JSON schema).  Leia a documentação

Uma forma fácil de iniciar um objeto

O comando New Object permite que se crie um objeto ou vazio ou que seja criado com propriedades e valoes iniciais em uma única linha de código.  Leia a documentação

Pesquisa uma lista de elementos em um único objeto

Agora é possível pesquisar em um array dentro de um objeto usando argumentos linkados. O comando QUERY BY ATTRIBUTE permite que a execução de pesquisas complexas dentro de uma lista de elementos em um único objeto. Quando pesquisar em atributos de array com múltiplos argumentos de pesquisa unidos pelo operador AND, existe a opção de escolher obter os registros nos quais os argumentos estão em pelo menos um elemento ou no mesmo elemento.  Leia a documentação

Ordenar os registros por atributo de objeto

Agora é possível ordenar os registros baseado em um atributo de objeto específico quando exibir uma seleção, por exemplo em uma list box, graças ao novo comando ORDER BY ATTRIBUTE. Leia a documentação

 

Multi-threading  preemptivo

Multi-thread preemptivo permite aproveitar ao máximo de computadores multi-núcleo. Como resultado, suas aplicações rodam mais rápido e podem aguentar mais usuários conectados. Mais de vinte comandos existentes foram melhorados para que possam ser usados em processos preemptivos. Leia a documentação

 

Formulários dinâmicos

Agora é possível criar e usar formulários dinâmicos. Armazenados em um formato baseado em texto (JSON), abrem uma ampla lista de novas oportunidades: criar formulários totalmente adaptados ao contexto de usuário-final, compartilhar o mesmo formulário entre diversos bancos de dados. A descrição textual do formulário pode ser salva em um objeto 4D ou um arquivo. Então os formulários podem ser carregados em tempo de execução. Os comandos abaixo foram ativados para que um objeto 4D ou uma rota de arquivo JSON possa ser passada: Open form window, DIALOG, FORM SET INPUT, FORM SET OUTPUT, OBJECT SET SUBFORM, OBJECT GET SUBFORM, FORM LOAD, Print form. Leia a documentação

 

Comunicação simplificada entre formulários

Livre-se do código complexo e variáveis globais ao conectar um objeto a um formulário e usá-lo internamente com o novo comando Form. Tudo que é preciso é passar parâmetros em um objeto para um formulário usando o comando DIALOG. Qualquer propriedade deste objeto estará disponível de dentro do formulário via o comando Form. Isso também é válido para subformulários. Leia a documentação

 

Novas possibilidades de programação com ações padrão

Ações padrão – tais como  First Record  ou color?value=red  – podem ser atribuidas a um botão ou a um item de menu na interface de usuário ou por programação. Além disso, dois novos comandos foram adicionados à linguagem 4D para manejar facilmente ações padrão por programação:

  • INVOKE ACTION pode ser usada para ativar qualquer ação padrão, opcionalmente no contexto alvo (formulário atual ou formulário principal)
  • Para saber se uma ação padrão é aplicável e válida no contexto atual, pode usar o comando Get action info.

Leia a documentação

 

Gerenciar o controle de prioridade de cache

4D 64-bit inclui um novo gerenciador de cache otimizado baseado em um mecanismo de gerenciamento automático de prioridades para objetos em memória cache. Controle total de prioridade é dado par amanejar objetos em memória cache permitindo sintonia fina avançada.

Para uso avançado e casos específicos, pode personalizar as prioridades de cache usando dois conjuntos de comandos 4D:

Leia a documentação

 

Segurança

4D v17 dá um grande passo em segurança com as melhorias abaixo:

Para mais detalhes em ferramentas built-in e técnicas envolvidas em criar um ambiente de segurança para suas aplicações de negócio, veja o Guia de Segurança.

Categoria A+ para web sites 4D Web 

Agora é possível obter uma categoria A+ (categoria superior) de SSL Labs para seus web sites, simplesmente ativando a propriedade HSTS (HTTP Strict Transport Security) em seu servidor 4D Web!  HSTS permite a servidores web declarar aos navegadores que devem interagir com eles apenas via conexões seguras HTTPS. Ao ser ativado, servidor web 4D vai automaticamente adicionar informação relacionada a HSTS para todos os cabeçalhos de resposta. Quando um navegador receber a resposta inicial do servidor 4D Web com a informação HSTS, vai gravá-la. Desse ponto em diante, qualquer petição futura HTTP vai automaticamente ser transformada a HTTPS. E pode ser especificada o tamanho de tempo para o navegador armazenar esta informação com a opção Web HSTS max age. Leia a documentação

 

Ativação de Perfect Forward Secrecy em servidor 4D Web

A segurança padrão do servidor 4D Web foi aumentada através da compatibilidade com  Perfect Forward Secrecy (PFS). Esta implementação oferece a sua aplicação com uma maior conformidade de propriedades de segurança de rede, assim como uma melhor cataegoria em testes de auditoria de segurança web. PFS é automaticamente ativado quando TLS for ativado no servidor. O comando WEB Get server info pode ser usado para garantir que PFS esteja ativado. O valor de novo atributo perfectForwardSecrecy é true quando todas as condições necessárias para usar PFS sejam encontradas. Lembre que o algoritmo RC4 agora é obsoleto em Servidor 4D Web como resultado de problemas de segurança conhecidos. Leia a documentação

 

Segurança melhorada para servidor  4D web

4D é compatível com Transport Layer Security (TLS v1.0, TLS v1.1, e TLS v1.2) para ativar comunicação criptografada entre clientes e servidores. A versão padrão compatível mínima é TLS v1.2, versões anteriores serão rejeitadas pois podem ser inseguras. Mas se quiser compatibilidade com navegadores antigos (ou ferramentas) que não são compatíveis comTLS v1.2, é possível diminuir o nível de segurança com novo seletor  Min TLS version para os comandos Get database parameter e SET DATABASE PARAMETER . Leia a documentação

 

Verificação de Hash e senha

O mecanismo de hashing é ideal para armazenar senhas.Dois novos comandos foram criados para gerenciar e verificar senhas hashed: Generate password hash e Verify password hash. Ambos são baseados no algoritmo bcrypt, que é lento propositadamente. Isso faz com que ataques de força bruta sejam minimizados. Leia a documentação

 

Compatibilidade com SHA-2

As funções digest são úteis quando usamos verificações de integridade de dados durante trocas de dados ou comparações. O comando Generate digest foi melhorado para ser compatível com SHA-2. Agora é compatível com dois algoritmos da família  SHA-2: SHA-256 e SHA-512. A sintaxe permanece a mesma, e as constantes SHA256 digest e SHA512 digest foram adicionadas. Leia a documentação

 

Restaurar último backup de banco de dados como padrão

Para proteger seus dados de danos, a opção Restaurar o último backup se o banco de dados está danificado” da página de ConfiguraçõesBackup” é marcada como padrão para novos bancos de dados, o que oferece um maior nível de proteção. Leia a documentação

4D Write Pro

 

Documentos Multi-coluna

Agora é possível criar documentos multi-coluna com 4D Write Pro assim como converter seus documentos 4D Write existentes que contém colunas múltiplas. Os comandos WP SET ATTRIBUTES e WP GET ATTRIBUTES foram atualizados para ser compatíveis com os novos atributos de gerenciamento de colunas:

  • wk column count: define o número de colunas para o documento ou a seção
  • wk column spacing: define o espaçamento entre duas colunas
  • wk column rule style, wk column rule color, wk column rule width: definem o estilo de separador vertical de coluna (pontilhado, tracejado, etc.), cor ou largura.

Leia a documentação

 

Obtenha a posição de qualquer parte de um documento 4D Write Pro 

Um novo comando, dedicado a 4D Write Pro agora está disponível: WP Get position. Dado uma seleção específica, elemento ou referência, este comando retorna uma variável de objeto com cinco informações de dados importantes de uma vez: o número da seção onde a seleção começa, o número de página, o número de coluna, o número de linha e mesmo a posição do primeiro caractere da seleção de faixa na linha. Leia a documentação

 

Acessar elementos por programação em  4D Write Pro 
O comando WP Get elements  retorna uma coleção de elementos de qualquer tipo (parágrafos, tabelas, imagens, etc. Se uma typed range for passada, o comando retorna uma coleção que contém apenas os elementos do tipo correspondente (a não ser que especificado no segundo parâmetro).  Senão, o comando retorna uma coleção que contém todos os elementos disponíveis, sem importar o tipo. Leia a documentação

 

Como manejar facilmente a inserção de texto

O comando WP SET TEXT permite que escreva texto em qualquer posição dentro de um documento. Esse comando é usado da mesma maneira que a maioria dos comandos “inserir” em 4D Write Pro. Precisa de três argumentos: o objeto range (onde o texto deve ser inserido), o texto propriamente dito, e uma constante para definir se o texto deve ser colocado antes, depois ou substituir a range. Leia a documentação

 

Tabelas 4D Write Pro

Tabelas em 4D Write Pro! são tabelas reais, com células individuais, se entrar um texto grande em uma célula, o texto será automaticamente quebrado e a largura de célula continua a mesma. Pode criar uma tabela do nada e modificar seu estilo de tabela, suas colunas, linhas e até mesmo células individuais, tudo isso por programação.

O comando WP Insert table permite que crie uma tabela com um número de células, linhas ou vazia. Os comandos abaixo foram criados para permitir que se gerencia tabelas no documento 4D Write Pro: WP Table append row, WP Table get rows, WP Table get columns, WP Table get cells. Todos os novos comandos são  thread-safe. Leia a documentação

 

Mecanismos de Ação padrão Standard estendidos a 4D Write Pro

Mais de 80 novas ações padrão dedicadas a 4D Write Pro foram criadas, permitindo que facilmente gerencie áreas 4D Write pro com novas ações tais como Bold, Color, Spell Check, Freeze expression, Show System Font Picker Dialog…Mais de 80+ ações estão disponíveis. Agora é possível criar sua própria interface de usuário 4D Write Pro sem escrever uma linha de código. Leia a documentação

 

Crie sua própria barra de ferramentas usando ações padrão

Facilmente crie sua barra de ferramentas personalizada 4D Write Pro, sem programação. O mecanismo de ações padrão de forma simples mas poderosa, foram estendidos para que possam ser atribuídos para marcar boxes e menus pop-ups.

Usar ações padrão permitem aproveitar os mecanismos automáticos, poupando tempo: a ativação/desativação de objeto é automaticamente manejada por 4D dependendo no contexto e o estado atual (para check boxes) ou valor (para menus pop-up) é automaticamente atualizada de acordo com a seleção de texto atual. Leia a documentação

 

Crie seu próprio menu contextual para  4D Write Pro

O comando  Dynamic pop up menu foi atualizado fazendo com que seja possível criar seus próprios menus contextuais 4D Write Pro baseados em ações padrão. Leia a documentação

 

Manejo de imagens 4D Write Pro

Imagens em posição absoluta

Controle total sobre a inserção de imagens em uma posição específica é dado: na frente ou atrás do texto, assim como ancorado na página ou em partes específicas do documento (por exemplo cabeçalho, rodapé, seções). O comando WP Add picture adiciona a imagem para a página, e então defina sua posição exata assim como outras propriedades, e é possível usar ações padrão ou usar o conjunto de seletores que foram adicionados aos comandos WP GET ATTRIBUTES e WP SET ATTRIBUTESLeia a documentação

Compatibilidade de expressões de imagem

4D Write Pro agora é compatível com expressões de imagem. O comando ST INSERT EXPRESSION foi espandido para ser compatível com qualquer expressão que retorne uma imagem. Uma expressão pode ser uma variável 4D, campo, função ou um método definido pelo usuário. Lembre que antes de usar um método 4D em uma expressão, precisa ativar o uso deste método com o comando SET ALLOWED METHODSLeia a documentação

Imagems de fundo de tamanho completo

Criar imagems de fundo preenchendo a página inteira é possível com 4D Write Pro, graças ao atributo de estilo de fundo clipping e origem. Este atributo pode ser controlado através de:

  • 4D linguagem: Pode usar o comando WP SET ATTRIBUTES e estabelecer o novo valor wk paper box para a imagem de fundo clipping ou origin.
  • Ações padrão: O comando INVOKE ACTION pode ser usado, em modo design, assim como qualquer outra ação padrão.
  • 4D Write Pro widget: Quando selecionar os itens “background picture” e “document”, as opções de clip e origem vai ter uma nova opção de paper box disponível.

Leia a documentação

 

Gerenciar cabeçalhos e rodapés por programação

Cabeçalhos e rodapés podem ser manejados por programação para criar outros documentos baseados em um modelo, graças aos novos comandos, divididos entre duas categorias:

  • Comandos para obter referências para qualquer cabeçalho, rodapé ou corpo dentro de documentos, que podem ser usados para obter ranges associadas, criar documentos para uma seção específica: WP Get header, WP Get body e WP Get footer.
  • Comandos para mover o cursor para uma posição específica: WP Get frame é usada para obter uma referência a frame onde o cursor está atualmente localizado, enquanto  WP SET FRAME estabelece o  cursor em uma frame específica. 

Leia a documentação

 

Hiperlinks 4D Write Pro

Pode adicionar um link para o logo ou nome de sua empresa com o atributo wk link url. Hiperlinks podem ser adicionados em imagens, texto ou uma combinação dos dois, usando os comandos WP SET ATTRIBUTES e WP GET ATTRIBUTES. Leia a documentação

 

Usar caracteres guia para abas

4D Write Pro oferece uma funcionalidade adicional para a sintonia fina de seu design: caracteres guia (leading characters) (ou seja, reticências ou qualquer outro caractere em uma tabela de conteúdos por exemplo). Caracteres guia podem ser controlados seja pelo menu contextual, quando clicar em uma aba existente na área de régua, ou por programação, graças ao novo seletor wk tab stop leadings e o comando WP SET ATTRIBUTES. Leia a documentação

 

Régua horizontal 4D Write Pro

Use a régua horizontal em uma área 4D Write Pro para ajustar margens, indentações e alinhamento horizontal de texto, gráficos, abas, e outros elementos em seus documentos. Leia a documentação

4D View Pro

 

Converter documentos para 4D View Pro

O primeiro passo converter seus documentos 4D View existentes é fácil. Graças ao novo comando VP Convert from 4D View a maioria das propriedades e informações armazenadas em documentos 4D View são automaticamente convertidas, incluindo a estrutura de documentos, valores, formatos, estilos, bordas e fórmulas! Leia a documentação

 

Folhas de Cálculo 4D View Pro

Graças ao novo objeto de formulário 4D View Pro, e o novo comando 4D View Pro, pode agora criar folhas de cálculo 4D View Pro. Crie um novo documento com VP NEW DOCUMENT, salve em disco com VP EXPORT DOCUMENT ou no banco de dados usando VP Export to object e reabra com VP IMPORT DOCUMENT ou VP IMPORT FROM OBJECT. Leia a documentação

 

Altura de linha variável de List box automaticamente

4D View Proé compatível com altura de linha variável automaticamente, o que significa que uma list box adapta a altura de cada linha aos seus conteúdos de maneira que o texto ou imagem inteiro pode ser exibido, evitando todos os tipos de problemas de quebra de texto. Três novas propriedades estão disponíveis na Lista de Propriedades: Automatic Row Height, Min Row Height e Max Row Height. Estas configurações permitem que os desenvolvedores definem se a list box usa o modo de altura automática de linha, além da altura máxima e mínima permitidas.

Estas configurações também podem ser gerenciadas por programação, usando o comando LISTBOX SET PROPERTY e o novo comando LISTBOX SET AUTO ROW HEIGHTLeia a documentação

 Mais capacidades de programação

 

Obter informação de hardware da máquina

O comando Get system info recupera todos os detalhes de hardware e detalhes de sistema para a máquina rodando, as informações incluem: que OS está sendo usado, quais processadores, quanta RAM está disponível, e mais. Leia a documentação

 

Informação detalhada sobre o 4D Web Server

O comando WEB Get server info recupera informação detalhada sobre o servidor 4D Web. Este comando tem um parâmetro de input opcional,  withCacheInfo, que é útil se a informação de cache do servidor web for necessária. Este atributo é estabelecido como  “False” por padrão. Leia a documentação

 

Informação detalhada sobre usuários e processos

O comando Get process activity oferece um retrato instantâneo das sessões de usuários conectados, processos executando relacionados, e todos os processo atuais incluindo processos internos que não são alcançáveis pelo comando PROCESS PROPERTIES. Além disso, um atributo systemID é incluido para identificar unicamente qualquer processo: usuário, 4D, e disponíveis. Pode também computar a  informação da sessão/processo retornando o tempo de CPU consumido pelo processo desde a conexão (em segundos) e a porcentagem de atividade (por exemplo 2%). Além disso, o comando faz a análise de resultados mais fácil. Leia a documentação

 

Informação detalhada sobre licenças

O comando Get license info retorna informação detalhada sobre as licenças instaladas e as licenças de usadas/disponíveis. Leia a documentação

 

Melhor gerenciamento de arquivos e extensões de pastas

Dois comandos foram criados para facilitar o gerenciamento de arquivos e rotas de pastas. O Comando Path to object  retorna um objeto contendo as propriedades específicas (pasta pai, nome de arquivo ou pasta, extensão de arquivo ou pasta) ou a rota a passar no parâmetro. O comando Object to path constrói uma rota dos atributos do bojeto passados no parâmetro. Assim, para compor uma nova rota, modifique os atributos de objeto que precisar e apenas recombine-os.
Estes comandos poderiam ser usados ao invés dos comandos obsoletos _o_Document type e _o_SET DOCUMENT TYPE . Leia a documentação

 

Acesso fácil a arquivos de histórico

O comando Get 4D file foi ativado para um acesso melhor a arquivos de histórico. Agora é possível achar facilmente um arquivo de histórico particular ao invés de obter a pasta contendo todos os logs. Um conjunto de novos seletores foi criado para este comando: Request log file, Debug log file, Backup log file, Verification log file, Compacting log file, Repair log file, HTTP debug log file e Build application log file. Leia a documentação

 

Comando de Timestamp

O comando Timestamp permite obter uma time stamp precisa UTC que inclui milissegundos. Leia a documentação

 Experiência de Usuário

 

Finalização de texto e sugestão de atributos de objeto

O editor de método foi ativado para oferecer a função de auto-completar para atributos de objeto. Uma lista de atributos sugeridos é exibida, qualquer que seja o caractere de ponto digitado depois de um objeto, para melhorar a velocidade de código e evitar erros de digitação. O comportamento do auto-completar pode ser personalizado a partir do painel  “4D preferences“,para definir se a lista de sugestão será automaticamente aberta depois de digitar um caractere de ponto (opção marcada), ou apenas usando a tecla tab (opção não marcada).  Leia a documentação

 

Linha de Produtos Altura-free 4D Windows 64-bit

A linha completa de produtos  4D Windows 64-bit não se baseia mais na biblioteca Mac2Win de Altura. 4D Server Windows 64 bits foi o último passo a completar e isso foi feito com 4D v16 R4. Isso permitiu que 4D use internamente tecnologias modernas da plataforma Windows e traga benefícios como SDI. Leia a documentação

 

Compatibilidade SDI em Windows

Aplicações 4D Windows costumavam ter uma janela principal cinza (chamada MDI – Multiple Document Interface)com todas as janelas de aplicação exibidas (como janelas filhas). Aplicações SDI (Soingle Document Interface) tem uma janela principal que podem abrir várias janelas adicionais que são independentes da janela principal. Podem ser movidas em outras telas, ficam visíveis mesmo se a janela principal estiver oculta…. porque 4D agora permite ambos os modos em Windows 64-bits para aplicações fusionadas.  Leia a documentação

 

Dicas de ajuda em  list boxes

É possível desativar ou ativar por programação todas as dicas de ajuda dentro de uma aplicação 4D usando o comando SET DATABASE PARAMETER.Pode também definir o delay de exibição e a duração máxima da exibição por linguagem. Mas isso não é tudo, também é possível modificar dinamicamente o texto de uma dica de ajuda usando o comando OBJECT SET HELP TIP. Além disso, o comando LISTBOX GET CELL POSITION agora é compatível com dois novos parâmetros opcionais (posição x e y em pixels) e retorna a coluna correspondente e números de linha, para ajudar a exibir dicas em uma coluna, linha ou célula particular de uma list box. Leia a documentação

 

Definir a ordem de tabulação de formulário por programação

Definea ordem de input de objeto em um formulário por programação, para que possa controlar em qual será o próximo objeto de formulário que cairá o foco quando o usuário pressionar a tecla TAB. Dois novos comandos  – FORM SET ENTRY ORDER e FORM GET ENTRY ORDER – permitem que estabeleça e obtenha dinamicamente a ordem de entrada dos objetos de formulário atual para o processo atual. Leia a documentação

 

Melhoria de interface de usuário IPv6 relacionada

A UI foi melhorada para uma melhor experiência de usuário para os usuários com configurações de rede IPv6.  Leia a documentação

 

Exportar resultados depois de  “Buscar em desenho”

O diálogo “Buscar em desenho” foi melhorado com duas novas funcionalidades relacionadas com a janela de resultado. Um novo botão foi adicionada para permitir a interrupção de uma pesquisa corrente. Além disso, uma nova opção de filtro está disponível para que possa selecionar os itens resultantes que quiser manter e remover todos os outros itens exceto esta seleção. Também, os resultados de uma operação “Buscar em desenho” são exibidos em uma lista hierárquica. Pode também exportar os resultados da pesquisa para um arquivo de texto que pode ser aberto depois em uma folha de cálculo por exemplo, permitindo que facilmente compartilhe ou armazene os resultados. Para fazer isso, selecione o novo item Exportar os resultados, disponível no menu de ação “Buscar em desenho”.  Leia a documentação

 

Personalizar a cor de destaque da seleção de list box

Agora é possível ter controle detalhado sobre a cor de destaque, para cada linha ou mesmo célula. Uma nova opção foi adicionada para a lista de propriedades do list box: Esconder o realce de seleção Quando esta opção for marcada, o desenvolvedor precisa fazer seleções de list box visíveis usando opções de interface disponíveis. Então podem definir um cor de fundo específica, cores de fundo ou estilos de fonte por programação para atualizar a aparência de linhas selecionadas. Isso pode ser feito com arrays ou expressões, dependendo do tipo de list box sendo exibida (seleções ou arrays). Leia a documentação

 

Janelas em abas em modo 4D Design para  MacOS Sierra

Em macOS Sierra, aplicações agora possuem a oportunidade de usar janelas em abas, ao invés de janelas múltiplas. O 4D Developer Edition 64-bit agora pode aprovietar esta nova propriedade de Apple no ambiente design graças à nova opção Janelas a abas (somente no macOS) disponível em as Preferências 4D. Quando a nova preferência estiver ativa, as janelas de Método e Editor de Formulário podem ser combinadas em uma janela única com abas.  leia a documentação

 

Tabela cruzada em editor de relatório rápido

Editor de Relatório Rápido 64-bit agora é compatível com relatórios de tabela cruzada, além de listar relatórios, permitindo que os usuários finais apreciem uma experiência de usuário confortável quando criar relatórios. Escolher o modo tabela cruzada permite que exiba seu relatório em uma tabela Pivot. Note que reabrir um relatório existente criado com os produtos de 32 bits ainda é possível. Leia a documentação

 

Novo motor de geração para áreas web

4D está atualizando seus componentes internos para áreas web embebidas em objetos em 4D 64-bits to Blink, tanto para uma melhor experiência de usuário quanto para compatibilidade melhorada de novas propriedades HTML,  (também usado por Google Chrome). Blink é o motor de geração mais atualizado e bem mantido em existência. A troca para o framework de Blink não exige nenhuma mudança de código para sua aplicação e não tem impactos em usos da área Web; todos os comandos e eventos para Áreas Web embebidas trabalham da mesma forma que antes, exceto as novas preferências que não são compatíveis e são ignoradas. Quando a opção Use o motor de renderização Web integrado for marcada, 4D usa WebKit em versões 32-bit e Blink em versões 64-bit.  Leia a documentação

 R-releases em detalhe