﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>StrataFrame Forum » StrataFrame Application Framework - V1 » WinForms (How do I?)  » (Brazil) - Processamento direto/inverso em tabela estrangeira</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Tue, 09 Jun 2026 06:06:07 GMT</lastBuildDate><ttl>20</ttl><item><title>(Brazil) - Processamento direto/inverso em tabela estrangeira</title><link>http://forum.strataframe.net/FindPost16569.aspx</link><description>Ivan... Boa Tarde...&lt;P&gt;Necessito de seu auxílio. &lt;/P&gt;&lt;P&gt;Como utilizar o BO para controlar processamento em tabelas estrangeiras? Por exemplo: A adição/alteração/exclusão de um registro na tabela "C" afetará o campo "Contador" na tabela "A". Um caso típico é a inclusão/alteração/exclusão de um item em um lote de saída com atualização dinâmica do saldo de estoque na tabela produto.&lt;/P&gt;&lt;P&gt;Situações possíveis:&lt;/P&gt;&lt;P&gt;a) Inclusão de item de saída em um lote subtrai a qtde do saldo da tabela produto a partir do relacionamento "ItensSaida.IdProduto &amp;lt;-&amp;gt; TbProduto.IdProduto".&lt;/P&gt;&lt;P&gt;b) Exclusão do registro de item de saída, adiciona (devolve)&amp;nbsp;a qtde ao saldo da tabela produto, considerando o mesmo relacionamento.&lt;/P&gt;&lt;P&gt;c) Alterações no item de saída provocariam&amp;nbsp;duas operações: 1)&amp;nbsp;Adiciona(devolve) a 'qtde original'&amp;nbsp;ao saldo da tabela produto, considerando o 'IdProduto original' e subtrai a 'qtde atual' da tabela produto tomando como chave o 'IdProduto atual' (que poderá ou não ter sido alterado).&lt;/P&gt;&lt;P&gt;Enfim... Pensei em montar isso diretamente na classe do BO levando em consideração os eventos AfterSave, BeforeSave, etc. No entanto, como o BO pode salvar várias 'rows' ao mesmo tempo não estou conseguindo encontrar a maneira de implementar essa regra diretamente na classe. Na verdade estou tentando aí substituir&amp;nbsp;eventos de 'disparador' que normalmente configuro no SQL Server. Acredito que no BO eu teria mais controle, caso necessitasse alterar a regra e criar outras condições de análise (até porque o DDT do StrataFrame ainda não&amp;nbsp;oferece recursos para configuração de&amp;nbsp;Triggers 'disparadores').&lt;/P&gt;&lt;P&gt;Bom, você que já tem uma vasta experiência com a ferramenta, poderia me ajudar a 'poupar o tempo' de pesquisa ?!!!&amp;nbsp; :D&lt;/P&gt;&lt;P&gt;Abraços...</description><pubDate>Mon, 26 May 2008 09:30:43 GMT</pubDate><dc:creator>Rogerio Mauri</dc:creator></item><item><title>RE: (Brazil) - Processamento direto/inverso em tabela estrangeira</title><link>http://forum.strataframe.net/FindPost16578.aspx</link><description>Ivan... Bom Dia...&lt;P&gt;Na realidade não gostaria de ficar dependente de ações no form de edição, pois são regras que pertencem à própria natureza do registro e assim ficariam mais seguras se estivessem implementadas diretamente no BO (regra de negócio e camada de persistência).&lt;/P&gt;&lt;P&gt;Pelo que pude verificar o correto seria o BO ter os eventos (Before/After) também implementados&amp;nbsp;para o row e não apenas para o próprio BO. Os eventos Before proporcionariam a opção de cancelamento e os eventos After trariam uma versão do&amp;nbsp;DataRow com o status de ação ajustado&amp;nbsp;antes da efetivação do&amp;nbsp;update no banco de dados. Isso possibilitaria a execução das ações de lançamento direto/inverso em bases relacionadas. Nem sempre um lançamento filho refletirá uma alteração no campo da tabela pai. Às vezes o lançamento/processamento precisa também ser&amp;nbsp;executado em uma outra tabela referenciada. &lt;/P&gt;&lt;P&gt;Pense, por exemplo, em uma tabela de títulos com um campo 'StatusTitulo' que aceita 1-Liberado e 2-Vendido. Quando o título fosse vendido (inclusão de um registro na tabela de venda de títulos) o StatusTitulo seria alterado para 2. No entanto, se a venda for cancelada o StatusTitulo deve voltar para a condição anterior. Esse é um caso típico de processamento direto/inverso. Essa regra de processamento no campo StatusTitulo estaria configurada nos eventos AfterSave (row) da tabela de venda do título. Sendo uma regra incondicional (sempre acontecerá), seria correto codificá-la na camada que antecede&amp;nbsp;a persistência dos&amp;nbsp;dados (o BO). Ou seja, se o BO fosse referenciado em vários Forms (para contemplar modelos diferentes de venda do título) a regra de alteração do StatusTitulo seria herdada.&lt;/P&gt;&lt;P&gt;Utilizo desde 1997 a ferramenta GAS (atualmente na versão GAS2007) que configura processos e lançamentos direto/inverso no form de edição. &lt;/P&gt;&lt;P&gt;Uma outra maneira de garantir esse tipo de regra seria criar os triggers no banco de dados. No entanto o DDT não disponibiliza recursos para isso (teria que criar uma classe que gerasse os scripts no banco de dados).&lt;/P&gt;&lt;P&gt;Fica aí levantada a questão... :)</description><pubDate>Mon, 26 May 2008 09:30:43 GMT</pubDate><dc:creator>Rogerio Mauri</dc:creator></item><item><title>RE: (Brazil) - Processamento direto/inverso em tabela estrangeira</title><link>http://forum.strataframe.net/FindPost16576.aspx</link><description>Olá Rogério.&lt;/P&gt;&lt;P&gt;Você pode sempre forçar um Save individual&amp;nbsp;em alguma ação no seu ChildDialog, e isto irá sempre executar um AfterSave. Neste ponto você pode ir ao banco de dados e alterar o conteúdo de sua tabela pai. É isto que está querendo dizer?</description><pubDate>Mon, 26 May 2008 07:57:19 GMT</pubDate><dc:creator>Ivan George Borges</dc:creator></item><item><title>RE: (Brazil) - Processamento direto/inverso em tabela estrangeira</title><link>http://forum.strataframe.net/FindPost16571.aspx</link><description>Ivan... Boa Tarde... &lt;/P&gt;&lt;P&gt;Este tópico está relacionado com o que deixei para Trent analisar: &lt;A href="http://forum.strataframe.net/Topic16570-7-1.aspx"&gt;http://forum.strataframe.net/Topic16570-7-1.aspx&lt;/A&gt;&lt;/P&gt;&lt;P&gt;Com o seu bom inglês acho que poderemos encontrar uma resposta para a questão.&lt;/P&gt;&lt;P&gt;Observei que os eventos de BO BeforeSave, AfterSave, BeforeDelete e AfterDelete reagem de forma distinta quando estão agregados ao Form Principal ou quando estão relacionados como filhos de um BO principal. &lt;/P&gt;&lt;P&gt;Considerando a questão do 'processamento direto/inverso' em tabelas relacionadas você ou Trent teriam um exemplo de implementação de código com as características elencadas neste tópico (post inicial) ?</description><pubDate>Sun, 25 May 2008 10:57:41 GMT</pubDate><dc:creator>Rogerio Mauri</dc:creator></item></channel></rss>