À medida que cada nova versão é lançada, temos em conta o feedback que recebemos dos nossos clientes sobre a utilização geral de 4D Write Pro e dos seus comandos. Enquanto permanecem 100% compatíveis, alguns comandos e funções de linguagem estão evoluindo!
Alguns comandos, cuja sintaxe foi melhorada em 4D 20 R8, agora permitem o uso de parâmetros modernos como objetos ou coleções. Outros são agora funções, tornando-os mais fáceis de usar. Finalmente, um número de novas funções foram criadas. Tudo isso vai tornar seu código mais simples, mais genérico e mais fácil de manter!
WP GET/SET ATRIBUTOS: Todos os atributos num único objeto!
Um dos comandos mais populares é WP SET ATTRIBUTES, porque pode ser utilizado para todos os tipos de objectivos, desde um único carácter até ao documento inteiro. Este comando pode agora receber um objeto como parâmetro, em vez de pares atributo-valor.
Exemplo de código
$attributes:={color: "red"; fontBold: 0; fontItalic: 1; fontSize: "16pt"}
WP SET ATTRIBUTES($range1; $attributes)
WP SET ATTRIBUTES($range2; $attributes)
WP SET ATTRIBUTES($range3; $attributes)
Da mesma forma, é possível receber num objeto todos ou parte dos atributos de qualquer intervalo ou elemento. Isto é muito útil se quiser aplicar os mesmos atributos a outro destino… Se passar apenas um parâmetro, o objeto devolvido conterá todos os atributos, mas pode limitar isso usando uma coleção!
$attributes:=WP Get attributes($range; ["color"; "fontItalic"])
Finalmente, o comando WP RESET ATTRIBUTES aceita agora uma coleção em vez de vários parâmetros (claro que a sintaxe anterior continua a ser válida)
$attributes:=["color"; "fontBold"; "fontItalic"; "fontSize"]
WP RESET ATTRIBUTES($range1; $attributes)
WP RESET ATTRIBUTES($range2; $attributes)
WP RESET ATTRIBUTES($range3; $attributes)
WP TABLE APPEND ROW: fórmulas, colecções e retornos de funções!
Os parâmetros deste comando podem agora ser do tipo fórmula ou uma fórmula nomeada (Lembrete: uma fórmula nomeada é um objeto que contém tanto a fórmula como o nome da fórmula… ver este BLOG).
Depois, os parâmetros podem ser passados para o comando como uma coleção e o melhor de tudo, o comando agora devolve um elemento de linha!
$row:=WP Table append row($table; "Reference"; "Date"; "Time"; "rnd 1"; "rdn 2")
WP SET ATTRIBUTES($row; wk background color; "lightgrey")
$colItems:=[]
$colItems.push("KX-825")
$colItems.push(Formula(Current date))
$colItems.push(Formula(String(Current time; HH MM SS)))
$colItems.push(Formula(Random))
$colItems.push({name: "RND NUMBER"; formula: Formula(Random)})
$row:=WP Table append row($table; $colItems)
WP INSERIR IMAGEM
Ao inserir um elemento num documento, é geralmente útil ter acesso imediato a esse elemento. O comando WP INSERT PICTURE torna-se assim uma função WP Insert picture e devolve um elemento de imagem. Por exemplo, pode querer enquadrar uma imagem imediatamente após a sua inserção. Além disso, este comando pode agora aceitar um ficheiro 4D.File como argumento!
$pictureFile:=File(Folder(fk resources folder).path+"bullet.png"; fk posix path)
$picture:=WP Insert picture(WParea; $pictureFile; wk append)
$attributes:={}
$attributes[wk margin]:="8pt"
$attributes[wk padding]:="5pt"
$attributes[wk border width]:="2pt"
$attributes[wk border style]:=wk solid
$attributes[wk border color]:="navy"
WP SET ATTRIBUTES($picture; $attributes)
DOCUMENTOS e IMAGENS
Os comandos WP IMPORT DOCUMENT, WP EXPORT DOCUMENT, WP INSERT PICTURE e WP Add picture também foram modernizados, e agora aceitam argumentos 4D.File além dos tipos de argumentos usuais.
$documentFile:=File("/RESOURCES/reference.4wp")
WParea:=WP Import document($documentFile)
$documentFile:=File("/DATA/CopyOfReference.4wp")
WP EXPORT DOCUMENT(WParea; $documentFile)
$pictureFile:=File("/RESOURCES/bullet.png")
$picture3:=WP Insert picture(WParea; $pictureFile; wk append)
$pictureFile:=File("/RESOURCES/bullet.png")
$picture:=WP Add picture(WParea; $pictureFile)
“INSERIR CORPO DO DOCUMENTO” EM VEZ DE “INSERIR DOCUMENTO”
Para maior clareza, o comando WP INSERT DOCUMENT foi renomeado WP Insert document body, pois é isso que ele faz de facto.
Quando é chamado, o corpo do documento é inserido. Os cabeçalhos, rodapés, imagens ancoradas e caixas de texto são ignorados. A única exceção: as folhas de estilo também são importadas!
Como pode ver no exemplo abaixo, este comando devolve agora um intervalo correspondente ao corpo do documento importado!
$file:=File("/RESOURCES/Main.4wp")
$main:=WP Import document($file)
$pictureFile:=File("/RESOURCES/bullet.png")
$sub:=WP Import document($pictureFile)
$range:=WP Insert document body($main; $sub; wk append)
MAIS INFORMAÇÕES SOBRE O INTERVALO
Alguns comandos eram silenciosos e devolviam… nada, quando muitas vezes um intervalo teria sido bastante útil. Os comandos a seguir fazem exatamente isso, e todos retornam intervalos de texto!
- WP INSERT FORMULA
- WP INSERT BREAK
- WP INSERT DOCUMENT BODY (anteriormente WP INSERT DOCUMENT)
$range:=WP Insert formula(WParea; Formula(Current date); wk append)
WP SET ATTRIBUTES($range; {color: "red"; fontItalic: 1; fontBold: 0})
BEM-VINDO ÀS NOVAS FUNCIONALIDADES
Secções
As secções têm nomes e índices (estes são atributos), mas aceder a esta informação não era fácil.
Agora é uma brincadeira de crianças com as novas funções This.sectionIndex e This.sectionName, que podem ser inseridas como fórmulas diretamente nos seus documentos!
Índices de páginas
Se necessário, pode agora aceder ao índice da página com a função This.pageIndex.
Uma explicação rápida: ao contrário da função This.pageNumber, cujo valor pode variar (pode ser definido ou reposto por secção), o índice de página começa sempre em 1 e depende exclusivamente da paginação.
Por exemplo, um documento pode conter três secções cujos números de página começam sistematicamente em 1. A parte do preâmbulo vai de 1 a 30, a parte principal de 1 a 200 e a parte do apêndice de 1 a 8. Neste caso, o índice de páginas vai de 1 a 238.
Conclusão
Não há dúvida de que os comandos simplificados facilitarão a vida dos desenvolvedores de 4D Write Pro, e simplificarão a revisão e manutenção do código. Esperamos seu feedback no fórum!