Método PHP em Mestre\Detalhe

Boa noite!

Após ler alguns tópicos sobre aplicações que utilizam o “Mestre/Detalhe”, resolvi abrir mais um.

Pois bem, tenho uma aplicação onde utilizo como “Mestre” um formulário para Ordens de Serviço (OS) e outro “Detalhes” para as peças utilizadas nesta OS. Sendo que, a cada item/peça incluida (no formulário detalhe) na OS, o valor do campo que totaliza as peças (no formulário mestre) é atualizado corretamente, até ai tudo bem.
Agora, no formulário mestre tenho um Método PHP que faz a soma dos campos - Mão de Obra e Peças. Onde que, no onChange de cada um dos dois campos chamo este método que atuliza então o Total Geral desta OS. Aí vem a minha pergunta:

Em “Teoria” a cada alteração do campo “Peças” o “onChange” deveria disparar o “método php” para fazer a totalização, porém como é a partir do formulário detalhes que é feita a alteração neste campo no formulário mestre, o método não é chamado e a totalização não é feita.

Vamos enfim a pergunta: primeiramente se é possível, e caso seja, como posso disparar um método que está na aplicação de formulário “Mestre” a partir de uma aplicação formulário “Detalhes”.

Grato pela atenção de todos.

Leandro José Hermann

Se o método for PHP então transforme esse método (local) em uma Biblioteca Pública e todas as apps terão acesso…

Agradeço a resposta Jovito!

Tenho pouca experiência na ferramenta ScriptCase, ainda não trabalhei com biblioteca pública, então tenho algumas dúvidas.
Deixa eu lhe explicar melhor o meu caso: esse método php consiste na soma de dois campos do formulário mestre, e o resultado apresentado em um terceiro campo. Para não repetir em cada evento do dois campos que eu quero que aconteça a soma, então, criei o método para, a partir deste somente fazer a chamada. E eu preciso que quando for inserido um item no formulário detalhe seja além da atualização do campo no formulário mestre (que já acontece) ele faça a soma deste campo, e de outro para um terceiro campo, conforme coloquei anteriormente…
Em uma biblioteca pública eu consigo trabalhar com campos de determinado formulário aberto?

Grato pela atenção!

Leandro José Hermann

Leandro,

Vou lhe explicar de forma genérica.

A diferença entre um Método PHP (aqueles que ficam dentro das apps) e uma Biblioteca é que os Métodos só serão acessíveis àquelas aplicações onde elas foram criadas… As bibliotecas podem ser públicas ou de projetos… se públicas todos os projetos poderão utilizá-las, se de projetos apenas estes poderão ter acesso.

No mais, tudo que fosse faz em uma pode executar em outra, não existem limitações com relação a isso.

Para criar uma Biblioteca (Pública/Projeto)

Ferramentas -> Bibliotecas -> Publicas -> Nova

Exemplo de biblioteca para gerar a data por extenso…

<?php [i]function [i][b]DataExtenso[/b][/i]($strDate) { $arrDaysOfWeek = array('Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'); $arrMonthsOfYear = array(1 => 'Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'); $intDayOfWeek = date('w',strtotime($strDate)); $intDayOfMonth = date('d',strtotime($strDate)); $intMonthOfYear = date('n',strtotime($strDate)); $intYear = date('Y',strtotime($strDate)); return $arrDaysOfWeek[$intDayOfWeek] . ', ' . $intDayOfMonth . ' de ' . $arrMonthsOfYear[$intMonthOfYear] . ' de ' . $intYear; } ?>[/i]

Atenção! o nome da Biblioteca tem ser ser o mesmo da função que você definiu na primeira linha… desta forma o nome da biblioteca, para este exemplo, será DataExtenso.

Esta biblioteca recebe um parâmetro $strDate (data - dd/mm/aaaa) e retorna o extenso… você poderá chamá-la da seguinte forma:

$data_extenso = DataExtenso(‘data_de_hoje’);

Por ela ser pública, todos os seus sistemas gerados pelo SC poderão utilizá-la. Para tanto, na aplicação você deverá fazer referência que ela será incluída… Na app Programação -> Bibliotecas e marque a biblioteca desejada.

Simples assim.

Bom proveito!

Jovito fico grato novamente pela resposta!

Infelizmente não consegui resolver meu pequeno problema utilizando uma biblioteca. Então parti para outra possibilidade, como precisava realizar a soma de dois campos e, atribuir o resultado em um terceiro campo no formulário mestre, mas isso a partir de um formulário detalhe.
Levando em consideração que um dos valores tinha em mãos no formulário detalhe e que atualizava no mestre com a função “sc_master_value”, então, busquei resgatar o valor que faltava utilizando uma variável global para isso, e de posse deste, somar com o valor que já tinha e utilizar novamente o “sc_master_value” para atualizar o total.\

Grato pela cooperação!

Leandro José Hermann

Parabéns pela solução… é isso aí!

Forte abraço.