Ir diretamente para o conteúdo principal

Adicionar/Modificar campos de pesquisa automática

Bandeira Nota: o tópico abaixo aplica-se apenas a relatórios personalizados (não aos relatórios padrão que utilizam o modo «Design»)

Os valores predefinidos dos campos do pipeline de dados do AutoSearch podem ser configurados através do código do separador «Calc». Para tal, certifique-se primeiro de que o campo está configurado com AutoSearch = True no separador Dados; em seguida, aceda ao separador Cálculo, selecione o objeto Relatório de nível superior na árvore de estrutura e crie um evento em ReportBeforeAutoSearchDialogCreate. Segue-se um exemplo de código, seguido de uma explicação:

var

ppTemp : TppAutoSearchField;

begin

ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');

if ppTemp <> nil then

begin

ppTemp.SearchExpression := 'ABC COMPANY';

end;

se ReplaceSpecialFields('!PROFILE!') = 'Administrador do sistema' then

begin

ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'DEPARTMENT');

if ppTemp <> nil then

begin

ppTemp.SearchOperator := soInList;

ppTemp.SearchExpression := 'DEPT1,DEPT2,DEPT3';

end;

end;

ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'EVENT_DATE');

if ppTemp <> nil then

begin

ppTemp.SearchExpression := DateToStr(CurrentDate - 7) + ',' + DateToStr(CurrentDate);

end;

end;

O código acima pressupõe que existem três campos configurados como campos de pesquisa automática no separador «Dados» do pipeline da tabela EVENTS: COMPANY, DEPARTMENT e EVENT_DATE. Este código define novos valores predefinidos para os três campos da Pesquisa Automática. A primeira secção do código procura um campo de pesquisa automática existente no pipeline «EVENTS» denominado «COMPANY». O valor é então definido como «ABC COMPANY». É verdade que, neste caso, o valor «ABC COMPANY» poderia ter sido definido como predefinido diretamente no separador «Dados». No entanto, muitas vezes é útil definir um valor «padrão» para os campos de pesquisa automática no separador «Dados», de modo a garantir ao utilizador que quaisquer chamadas iniciais para ativar este pipeline ANTES da caixa de diálogo de pesquisa automática não irão devolver muitos (ou quaisquer) registos. Portanto, o separador «Calc» é um bom local para garantir que o valor predefinido é reposto para um valor adequado.

Na segunda secção do código, o campo «DEPARTAMENTO» é alterado em relação ao seu valor de filtro predefinido, mas apenas quando o relatório é executado por um «Administrador do Sistema». O valor de filtro predefinido para «DEPARTAMENTO», tal como configurado no separador «Dados», é «= DEPT3». Esta é normalmente uma boa opção predefinida, mas se for um «administrador de sistemas» a gerar o relatório, este terá geralmente de apresentar dados relativos a vários departamentos ao mesmo tempo, pelo que a opção predefinida deveria ser a inclusão dos três. Note, portanto, que, em primeiro lugar, o SearchOperator foi alterado para soInList (em vez da configuração padrão soEqual [=] definida no separador «Dados»). É raro ter de alterar o SearchOperator no código do separador «Calc», mas, se for necessário, estes são os valores aceitáveis:

soEqual = O valor do campo deve ser igual ao valor da pesquisa.

soNotEqual = O valor do campo não pode ser igual ao valor da pesquisa.

soLessThan = O valor do campo deve ser inferior ao valor de pesquisa.

soLessThanOrEqualTo = O valor do campo deve ser menor ou igual ao valor de pesquisa.

soGreaterThan = O valor do campo deve ser superior ao valor de pesquisa.

soGreaterThanOrEqualTo = O valor do campo deve ser maior ou igual ao valor de pesquisa.

soLike = O valor do campo deve começar com o valor da pesquisa. É automaticamente inserido um curinga no final do valor do critério de pesquisa que utilize este operador, fazendo com que funcione como um «começa por».

soNotLike = O valor do campo não deve começar pelo valor da pesquisa.

soBetween = O valor do campo deve situar-se entre os dois valores dos critérios de pesquisa.

soNotBetween = O valor do campo não deve situar-se entre os dois valores dos critérios de pesquisa.

soInList = O valor do campo deve constar na lista de valores de pesquisa.

soNotInList = O valor do campo não deve constar na lista de valores de pesquisa.

soBlank = O valor do campo deve ser nulo. (Não é necessário introduzir nenhum valor de pesquisa para este operador.)

soNotBlank = O valor do campo não pode ser nulo. (Não é necessário introduzir nenhum valor de pesquisa para este operador.)

Em seguida, neste segundo exemplo, a SearchExpression é definida como «DEPT1, DEPT2, DEPT3». Uma vez que o SearchOperator é agora «soInList», o SearchExpression aceita uma lista de valores separados por vírgulas.

Por fim, definimos dinamicamente as duas datas para um intervalo de datas. Ao definir o valor do filtro predefinido no separador «Dados», é pouco comum/improvável que os utilizadores saibam quais são as melhores datas predefinidas, uma vez que, normalmente, essas datas são relativas à data em que o relatório é executado. Este exemplo pressupõe que o campo EVENT_DATE está configurado como «Between» ['Between'] no separador «Dados». Assim, neste caso, a SearchExpression também exigirá uma lista das duas datas, separadas por vírgulas: a data «de» e a data «até». Utilize a função DateToStr para converter datas em valores de cadeia de caracteres (texto). Consulte a janela «Code Toolbox» (canto inferior direito)... na secção «Language» para se lembrar de outras funções úteis, como a CurrentDate.

Segue-se um segundo exemplo que define por predefinição o campo EVENT_DATE para todos os eventos do mês atual:

var

, ppTemp : TppAutoSearchField;

iYear, iMonth, iDay, iToYear, iToMonth : Integer;

begin

ppTemp := Report.AutoSearchCriteriaByName('EVENTEQUIP', 'EVENT_DATE');

if ppTemp <> nil then

begin

DecodeDate(CurrentDate, iYear, iMonth, iDay);

if iMonth = 12 then

begin

iToMonth := 1;

iToYear := iYear + 1;

end else

begin

iToMonth := iMonth + 1;

iToYear := iYear;

end;

ppTemp.SearchExpression := DateToStr(EncodeDate(iYear, iMonth, 1)) + ',' +

DateToStr(EncodeDate(iToYear, iToMonth, 1));

end;

end;

Também é possível criar critérios de pesquisa automática totalmente novos no código do separador «Calc» (em vez de se limitar a modificar os valores dos campos de pesquisa automática existentes). Segue-se um exemplo que permite adicionar novos critérios ou modificar os critérios existentes, conforme o caso:

ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');

if ppTemp = nil then

Report.CreateAutoSearchCriteria('EVENTS', 'COMPANY', soEqual, 'ABC COMPANY', False)else

ppTemp.SearchExpression := 'ABC COMPANY';

O procedimento Report.CreateAutoSearchCriteria aceita cinco parâmetros:

1.nome do pipeline

e 2.nome do campo (omita quaisquer prefixos de tabela, como «GAGES.» ou «EVENTS.», etc.)

3.o tipo de comparação - consulte a lista acima para conhecer os valores possíveis

4.valor padrão para o filtro AutoSearch; é aceitável que os campos de texto fiquem em branco

5.se o filtro AutoSearch é obrigatório - introduza «True» ou «False»

Nota: Se for possível utilizar o código do separador «Calc» para definir os valores de todos os campos da Pesquisa Automática na íntegra e tiver a certeza de que os utilizadores finais não precisarão de os alterar na caixa de diálogo da Pesquisa Automática (ou não devem ter permissão para os alterar), então é possível desativar essa caixa de diálogo da Pesquisa Automática imediatamente antes de ela ser chamada. Basta adicionar a linha de código abaixo em algum ponto do evento ReportBeforeAutoSearchDialogCreate mencionado acima:

Report.ShowAutoSearchDialog := False; |