6 exemplos práticos sobre como utilizar macros

Tradução automática de Deepl

4D 18 R5 introduziu macros de forma. Podem ser incrivelmente úteis, por exemplo, proporcionando uma forma ideal de poupar tempo em tarefas repetitivas. Neste post do blog, vamos mostrar-lhe alguns exemplos básicos para aprender mais sobre como as macros funcionam e as possibilidades que oferecem. Todos os exemplos seguintes estão disponíveis no GitHub.

Exemplo 1: Alterar um atributo de objecto de formulário

Esta é uma macro para definir a cor da fonte a vermelho para todos os objectos de formulário seleccionados.

No ficheiro FormMacros.json, eu declaro a minha macro:

{
   "macros": {
      "Set Red": {
         "class": "SetRedColor"
      }
}

Crio uma classe e com a propriedade“currentSelection“, recupero a colecção de objectos de formulário seleccionados. Depois altero a propriedade do objecto de formulário. Finalmente, devolvo o atributo“currentPage” que contém as modificações para informar 4D.

O código:

Function onInvoke($editor: Object) : Object
var $name : Text
If ($editor.editor.currentSelection.length. >0)
// Set stroke to red for each selected objects
For each ($name;$editor.editor.currentSelection)
$editor .editor.currentPage.objects[$name].stroke:="red"
End for each
Else
ALERT ("Por favor, seleccione um objecto de formulário")
End if
// Notifique à 4D a modificação
$0 :=New object("currentPage";$editor.editor.currentPage)

A classe“SetRedColor” contém o código da macro, está disponível no componente“HDI_FormMacro” no GitHub.

Exemplo 2: Utilizar parâmetros no ficheiro da macro JSON

Alguns textos devem estar em vermelho, outros em verde. Posso criar duas macros com as suas próprias classes associadas, ou posso criar duas macros com parâmetros como a cor, e associá-las à mesma classe.

No ficheiro FormMacros.json, declaro duas macros que utilizam a mesma classe e o parâmetro de cor:

{
   "macros": {
      "Set Font Color to Red": {
         "class": "SetFontColor",
         "color": "red"
      },
      "Set Font Color to Green": { 
         "class": "SetFontColor", 
         "color": "green"
      },
}

No construtor da classe, recupero o parâmetro de cor:

Class constructor
var : . := . $1 Object
Thiscolor$1color

Na função onInvoke, posso usar o mesmo código do Exemplo 1. A única diferença é que em vez de utilizar a string “red”, utilizamos a variável “This.color“.

A classe“SetFontColor” contém o código da macro, está disponível no componente“HDI_FormMacro” no GitHub.

Exemplo 3: Adicionar objecto de formulário com um método

Com uma macro, também é possível adicionar objectos de formulário ao formulário com um método. Há várias maneiras de associar ou adicionar um método. Recomendo que leiaesta página da documentação que explica todas as possibilidades.

Neste exemplo, apenas a linha de código do método é dada a 4D. Ao executar, 4D irá criar e nomear o ficheiro do método correspondente.

Function onInvoke($editor: Object)->$result: Object
var $btnHello : Object

// Create a "Hello" button
$btnHello :=New object("type"; "button";\
"text"; "Hello World!";\
"method";New object("source"; "ALERT(\"coucou\")");\
"events";New collection("onClick");\
"width";120;\
"height";20;\
"top";0;\
"left";0)

// Add button in the current page
$editor.editor
.currentPage.objects.btnHello.
:=$btnHello $result // Select the new button in the form editor
. $editor.editor.currentSelection.clear()
$editor.editor .currentSelection.push("btnHello")

// Notify 4D of the modification
$result :=New object
.currentSelection:=$editor.editor.currentSelection $result .currentPage:=$editor.editor.currentPage

Para posicionar facilmente o objecto de formulário no formulário e modificar outras propriedades (se necessário), selecciono o objecto de formulário com um simples clear() e push() na“currentSelection“, sem esquecer de devolver a“currentSelection” para notificar 4D sobre as modificações.

A classe“AddButton” contém o código da macro, está disponível no componente“HDI_FormMacro” no GitHub.

Exemplo 4: Verificar caminhos de imagem de uma forma

Também se podem escrever macros que não modificam o formulário. Em vez disso, estas macros permitem-lhe validar informações, atributos, ou propriedades no seu formulário. Por exemplo, validar os caminhos de imagem do seu formulário de várias páginas.

A classe“CheckImagePath” contém o código da macro, está disponível no componente“HDI_FormMacro” no GitHub.

Exemplo 5: Utilizar o diálogo modal na macro

Uma macro pode também exibir um diálogo modal. Por exemplo, para exibir a lista de objectos da página actual com o seu tipo, nome, e classe CSS, ou qualquer outro parâmetro que deseje. Quando o programador clica no botão Seleccionar no diálogo, os objectos seleccionados são também seleccionados no editor de formulários.

blank

A classe“ObjectList” contém o código da macro, está disponível no componente“HDI_FormMacro” no GitHub.

Exemplo 6: Alinhamento a um objecto

Para alinhar objectos com um objecto de referência em 4D, é necessário passar pelo diálogo de alinhamento. Porque não seleccionar vários objectos e decidir que o objecto abaixo do contexto do clique é o objecto de referência? Assim, no seu código:

  • recebe a lista de objectos seleccionados na classe “currentSelection” propriedade
  • e o nome do objecto sob o contexto do clique está no “target” propriedade.

blank

Voilà! Graças a esta informação, pode criar todos os alinhamentos ou distribuições que desejar. Na classe“AlignOnTarget“, tem um exemplo de alinhamento esquerdo, direito, superior e inferior em relação a um objecto. Nesta macro, os grupos não são implementados, por isso se adicionar esta opção, sinta-se à vontade para a partilhar de novo no GitHub!

Vanessa Talbot
• Proprietário do produto - Vanessa Talbot entrou ao time 4D Program em Junho de 2014 como Proprietária do Produto e 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. Desde sua chegada, trabalhou na definição de funcionalidades chaves em 4D. Trabalhou na maioria das novas funcionalidades multithread preemptivo e também em um tema muito complexo: a nova arquitetura para a aplicação engined. Vanessa é formada pela Telecom Saint-Etienne. Começou sua carreira no Instituto de Investigação Criminal como desenvolvedora do departamento audiovisual. Também trabalhou em meios de comunicação e no âmbito médico como especialista em assistência técnica, produção e documentação de novas funcionalidades.