Problema

Você deseja preencher dinamicamente campos de formulário em uma caixa de diálogo no CQ. Por exemplo, você deseja definir uma caixa de seleção configurando um componente Selecionar em dialog.any dessa forma:

... /Type "AtomLine" /Sub { /mySelectAtom { /Type "Select" /Option { /option0 { /value "red" /text "Scarlet" } /option1 { /value "green" /text "Lime" } /option2 { /value "blue" /text "Azure" } } } } ... 

Solução

Para o exemplo acima, você codifica tudo para as opções de seleção em dialog.any. No entanto, você pode definir e gerenciar essas opções como um recurso externo e preencher o diálogo dinamicamente.

Use um tipo OwnerDraw em dialog.any em vez de Select para especificar um script que desenha um componente CFC programaticamente. No script, você pode recuperar os valores de um recurso externo e preencher a caixa de diálogo. Portanto, para alterar o exemplo Seleção para usar um OwnerDraw, faça o seguinte.

  1. Altere dialog.any para chamar um script personalizado para desenhar o campo de formulário por meio do tipo OwnerDraw ... /Type "AtomLine" /Sub { /mySelectAtom { /Type "OwnerDraw" /file "/apps/[yourApp]/components/dynamicDialogComponent/dynamicSelect.esp" } } ... 
  2. Defina uma classe Java para acessar um recurso externo e retorne java.util.Map com todas as opções. public class DialogValues { public static Map getSelectOptions(String atomName) { Map optionsMap = new LinkedHashMap(); // obtenha opções de seleção e as coloque em um mapa // ... return optionsMap; } }
  3. Defina /apps/[yourApp]/components/dynamicDialogComponent/dynamicSelect.esp que chame a classe Java e renderize o objeto selecionado CFC com as opções retornadas em java.util.Map. Coloque o código abaixo em dynamicSelect.esp.

O exemplo usa CFC.Controls.Select. Mas você pode usar a mesma abordagem do OwnerDraw com outros objetos CFC. Na verdade, você pode usar o OwnerDraw para desenhar qualquer seção da caixa de diálogo que não pode ser definida usando a notação .any.

Os objetos de criação de scripts do CFC estão documentados em http://docs.day.com, em cfclib.pdf, distribuídos com o Communiqué 4.x e por meio do sistema de Ajuda da sua instância.