Este exemplo mostra como criar uma cesta de compras utilizando objetos do 4D Ajax Framework. Esta página usa 3 data grids: um para mostrar a lista de produtos, um para o nosso ícone e um para mostrar a lista atual da cesta de compras. Os objetos podem ser arrastados da lista de produtos e serem soltos no data grid da cesta de compras. Quando isso acontece, o conteúdo da cesta de compras será atualizado de acordo com algumas regras que nós definirmos.
A lista de produtos terá um conteúdo de texto e uma imagem. O objeto data grid não suporta imagens nativamente, mas aceita o conteúdo html, que podemos utilizar para inserir imagens.
Uma tabela é definida com toda a informação dos produtos, incluindo imagens. Esta tabela é utilizada para fecha o DCS para o data grid, com exceção do campo imagem. Para adicionar a imagem como conteúdo html, simplesmente criamos a chamada para a URL na qual obtemos a imagem da tabela 4D e esta URL é adicionada ao DCS. Esta é a sintaxe da URL para obter uma imagem de uma tabela 4D.
Sintaxe: /DAX/GetImage/x.y.z?sessionId=sID)
onde:
x = o número da tabela
y = o número do campo
z = o número do registro
sID = identificador da sessão (DAX_Dev_Session_SessionID devolverá este valor)
Agora, para mostrar o datagrid como uma célula que pode ser arrastada, é criado um conteúdo html e outros valores de data grid são incorporados no conteúdo html. A outras células se ocultam, deixando só uma célula para ser mostrada e arrastada.
Sintaxe: var myContent = ' ... html ... + myGrid.getCellValue(row,column) + ... html ...';
myGrid.setCellValue (row, column, myContent);
Para ativar a opção arrastável em um data grid, o comando setDragCells deve ser executado no objeto data grid. Este comando também deve ser executado depois da contrução do objeto data grid (dragGrid.go();)
Sintaxe: dragGrid.setDragCells(row, column, isDroppable);
Um data grid é utilizado para representar nosso ícone de cesta de compras porque pode ser definido para permitir soltar. O ícone da cesta de compras é um data grid de 1x1 que não contém dados e a imagem exibida é contralada via CSS.
1) Para especificar quais células são áreas de soltar, chame a função 'setDropCells'. Esta função é utilizada para ativar e desativar as áreas de soltar. Por padrão, todas as células de um data grid são definidar como área de soltar.
Sintaxe: myGrid.setDropCells(row, column, isDroppable);
2) Para ativar a opção soltável em um datagrid, o evento 'ondragrelease' deve ser ativado para o objeto data grid, neste caso, a célula 1 no data grid.
Sintaxe: myGrid.ondragrelease = YourFunction;
3) Para oferecer um indicador visual de que uma célula está sendo arrastada, o evento 'ondragover' é ativado para o objeto data grid. Definimos a função javascript para este evento que devolve a folha de estilos que queremos ver, a qual, neste exemplo é uma imagem de uma cesta de compras cheia.
Sintaxe: myGrid.ondragover = YourFunction;
//javascript
function onDragOverEvent(cellRef, event) {
return 'carthover_style';
}
//CSS
.dax_datagrid .carthover_style {
background-image: url('/dax/images/sc_full.jpg');
border:2px solid #FFFFFF;
}
É utilizado um data grid para mostrar o conteúdo da cesta de compras. Cada vez que um objeto de um data grid é solto no data grid da cesta de compras, o data grid da cesta de compras é atualizado. Para este exemplo, isso significa que o elemento é inserido na cesta ou se o elemento já foi adicionado a cesta, então preço e a quantidade é atulizada. A medida que os elementos são adicionados a cesta, eles são ordenados alfabeticamente pelos nomes dos elementos.
Para criar o data grid da cesta de compras utilizamos a função 'dax_dataGrid'. Utilizamos um DCS como a seleção que contém os campos que necessitamos e especificamos uma linha de cabeçalho.
Sintaxe: myGrid = new dax_dataGrid(selection, location, headerRows, lockedLeftColumns, useControlColumn);
Para criar as linhas de rodapé de página para nosso data grid de dados e preenchê-los com a informação que necessitamos, necessitamos executar 3 comandos.
1) Criar a linha do rodapé de página.
Sintaxe: displayGrid.setFooterRows(número de linhas de página);
2) Uma a uma, obter a linha atual de cada número de linha de rodapé de página (a qual é diferente do número de fila do rodapé).
Sintaxe: myRowNumber = myGrid.getFooterRowNumber(footerRowNumber);
3) Preencha as células do rodapé de página individuais com a informação que queremos, utilizando a função 'setCellValue'.
Sintaxe: myGrid.setCellValue(myRowNumber, column, content);
Depois que um objeto é solto no data grid do ícone de compras, a função de evento 'ondragrelease' que asignamos anteriormente é chamada e tratamos o que se sucede neste momento. Chamamos nossa função onDragReleaseEvent que contém 3 funções que utilizamos para realizar os passos que queremos.
1) Nossa primeira chamada é para uma função chamada getCurrentRow, a qual extrai a informação que necessitamos do objeto solto. Primeiro, necessitamos obter a célula que se soltou utilizando a função 'dragObjectSource'. Logo utilizamos este número de linha de objeto para extrair os valores de suas células do data grid correspondente.
//obter célula objeto solta
Sintaxe: var originCell = dax_bridge.hoverDragging.dragObjectSource;
//salvar o conteúdo do campo espeficidado
Sintaxe: field_value1 = myGrid.getCellValue(originCell.row, column);
2) Neste ponto temos os valores do objeto solto e podemos proceder como queremos. De maneira que a próxima chamada será a função 'UpdateCart', a qual insere ou atualiza os conteúdos do data grid da cesta de compras. A função contém lógica sobre onde e quando inserir ou atualizar uma fila, mas por último só fazemos diferentes chamadas da função 'setCellValue'.
Sintaxe: myGrid.setCellValue(row, col, content);
3) A última chamada é a uma função chamada 'updateFooters', a qual atualiza os valores das linhas de rodapé de página (subtotal, imposto e total). Para fazer isto utilizamos 'setCellValue' junto com a função 'getFooterRowNumber'.
Sintaxe: myGrid.setCellValue(myGrid.getFooterRowNumber(footerRowNumber), col, content);