Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Scout/Tutorial/3.7/Minicrm/Add a search form"

< Scout‎ | Tutorial‎ | 3.7
(Create Search Form)
(Replaced content with "The Scout documentation has been moved to https://eclipsescout.github.io/.")
 
(32 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{note|Scout Tutorial|This page belongs to the {{ScoutLink|Tutorial|Minicrm Step-by-Step|Minicrm Step-by-Step Tutorial}}. It explains how to add a search form to a table page. You need to {{ScoutLink|Tutorial|Write The First Page|have a table page in your application}} in order to continue.}}
+
The Scout documentation has been moved to https://eclipsescout.github.io/.
 
+
Once we have '''created a table page''' and '''implemented the service''' to get the table data we can take advantage of a feature the Scout SDK offers: it can '''create a search form''' based on the information it already has.
+
 
+
The alternative, of course, is to create the search form manually.
+
 
+
== Create Search Form ==
+
 
+
Go to the ''CompanyTablePage'', right click and choose '''Create Search Form'''. The created Search Form will contain a field for each column of the table based on who it is created.
+
 
+
[[Image:Newsearchform.jpg]]
+
 
+
Use ''Company'' as the name and click ''Next''.
+
 
+
[[Image:Newsearchformwizard.jpg]]
+
 
+
{{note|Form Data|When creating a ''form'', Scout SDK will automatically create a ''form data'' class in the background. The ''form data'' class will be created in the '''shared''' plugin. It is the data transfer object use to communicate between client and server. Every form has a context menu called '''Update Form Data''' to regenerated the ''form data'' class based on the form.}}
+
 
+
Done! What did Scout SDK do?
+
 
+
# it created a '''CompanySearchForm''' in the client plugin
+
# it created a '''CompanySearchFormData''' in the shared plugin
+
# it set the '''Search Form property''' of the ''CompanyTablePage'' to ''CompanySearchForm''
+
 
+
{{note|How does it work?|The Scout runtime will create the ''search form'' when showing the ''company table page''. Using it will generate a ''SearchFilter'' object that is  passed on to the <tt>execLoadTableData</tt> method of the ''table page''. The search filter contains the ''form data'' of the ''SearchForm''.}}
+
 
+
== Adapt the outline service operation getCompanyTableData ==
+
 
+
In order to constrain the SQL statement for the Company Outline we have to adapt the service operation ''getCompanyTableData'' and add a parameter ''searchFilter'' of the type ''CompanySearchFormData'' to the method. Do that for both the service interface and service implementation (''IStandardOutlineService'' and ''StandardOutlineService'').
+
 
+
Now simply change the SQL statement in the following way:<source lang="java">public Object[][] getCompanyTableData(CompanySearchFormData filter) throws ProcessingException {
+
  StringBuilder statement = new StringBuilder();
+
  statement.append(
+
    "SELECT COMPANY_NR, SHORT_NAME, NAME " +
+
    "FROM  COMPANY " +
+
    "WHERE  1=1 ");
+
  if(!StringUtility.isNullOrEmpty(filter.getShortname().getValue())){
+
    statement.append("AND UPPER(SHORT_NAME) LIKE UPPER(:shortname || '%')");
+
  }
+
  if(!StringUtility.isNullOrEmpty(filter.getName().getValue())){
+
    statement.append("AND UPPER(NAME) LIKE UPPER(:name || '%')");
+
  }
+
  return SQL.select(statement.toString(), filter);
+
}</source>
+
You can use ''''':<name of field in formdata>''''' to directly access the FormData object and the values that are held in its inner classes (corresponding to the field on the Form associated to the FormData). You don't need to surround the value by ' as it would have been necessary in a common SQL statement as this is already done by Scout itself.
+
 
+
 
+
 
+
Now we need to forward the ''CompanySearchFormData'' to the server. Therefore go to the method ''execLoadTableData'' in the ''CompaniesTablePage'' and add a new parameter to the service call according to its interface definition. The needed ''CompanySearchFormData'' is held in the parameter ''filter'' of type ''SearchFilter'' which is passed to the method ''execLoadTableData''.
+
<source lang="java">return SERVICES.getService(IStandardOutlineService.class).getCompanyTableData((CompanySearchFormData)filter.getFormData());</source>
+

Latest revision as of 07:24, 18 March 2024

The Scout documentation has been moved to https://eclipsescout.github.io/.

Back to the top