AgileApps Support Wiki Pre Release

Difference between revisions of "Lab B.1: Hello World"

From AgileApps Support Wiki
imported>Aeric
imported>Aeric
Line 25: Line 25:


:; As a [[Web Tab]]:
:; As a [[Web Tab]]:
:: In the normal course of events, the platform [[Workspace]] shows the high-level objects the user will interact with. Clicking on one opens a Web Tab that displays the object. You can also use a JSP Page as a Web Tab. When you do, it appears as an entry in the Workspace. And when the user clicks on it, the Page opens as a platform tab.
:: In the normal course of events, the platform shows tabs for the high-level objects the user will interact with. Clicking on one opens displays records in the object. You can also use a JSP Page as a Web Tab. When the user clicks on it, the Page opens as a platform tab.
:::[[File:NavBar-Workspace.png]]
:::[[File:NavBar-Workspace.png]]



Revision as of 19:56, 24 May 2013

Goals
  • Set up a development environment
  • Create a JSP page
  • Visit the page in the platform
Prerequisites

Overview of JSP Pages

A Java Server Page (JSP) is a file that contains a mixture of Java code and HTML. A JSP page is compiled to a Java Class, and must therefore have a name that qualifies as a Java class name (so no spaces, underscores, or punctuation marks). The name must also have a .jsp extension.

And by using Static Resources, the JSP pages can incorporate CSS and JavaScript libraries to give you complete control of their look and feel.

The Many Uses of JSP Pages

Objects contain your data, but you work with your data and interact with the platform using JSP Pages. In fact, the platform itself is mostly a giant collection of JSP Pages that you use to interact with the underlying database.

Once you know how to create JSP Pages, you will be able to do extensive front-end customization for your users:

By visiting the page URL
Every page has a URL of the form: https://{domain}/networking/pages/xyz.jsp
You link to that URL from anywhere. As long as the user is logged in, they can see the page.
(If they are not already logged in, the platform prompts them for their login credentials.)
As a Dashboard Widget
A JSP Page can be used as a Widget in a Dashboard (also known as the Home Page). There, it can display any data, graphics, or summary information needed to give your users up-to-the minute information.
As a Web Tab
In the normal course of events, the platform shows tabs for the high-level objects the user will interact with. Clicking on one opens displays records in the object. You can also use a JSP Page as a Web Tab. When the user clicks on it, the Page opens as a platform tab.
NavBar-Workspace.png
In a Site
A Site allows external users to access your data, using the Pages you create.
As a Custom Form
Using the interactive Form builder, you can create forms with pre-defined styling in a variety of layouts. Using a Page, you gain total control of the CSS styling. Plus, you can have any layout you want, and include any additional information that may be needed to help the user.
As a Custom Lookup
When users go to a standard page, they see a table that shows the Record Locator defined for the object they are referencing. (For example, the Record Locator when looking up a Company object might show the Company name and location.) But you can also define a JSP Page for that purpose, and use it to display the information the user needs displaying graphics, styling, and data you choose.

Coding Patterns

There are only a few patterns you need to know to do some serious work with JSP pages:

Execute code Insert data into the HTML stream
<% ... code ... %> <%= variable %>

And:

Conditional display of HTML Loops for repeated HTML

<% if (...) { %>
  ... HTML ...
<% } %>

<% for (item:List) { %>
  ... HTML ...
<% } %>

Of course, you can loop using Parameters Class iterators, or any other looping construct that Java allows.

Accessing Incoming Parameters

To get all of the parameters available in the request object, and their values:

<%
  String[] params = request.getParameterValues();
  for (int i=0; i<params.length; i++)
  {
    String paramName = params[i];
    String paramValue = request.getParameter( paramName );
  }
%>

To obtain a record identifier from a request object sent by the platform:

With the object ID and record ID, use the getRecord API to retrieve the record.
<%
  String object_id = request.getParameter("object_id");
  String record_id = request.getParameter("record_id");
%>

Notepad.png

Note: Although the object_id is alphanumeric, it can be used in any API that requires an object name.

To obtain a record identifier from a request object sent by a Custom Action button:

This code gets the record IDs and uses the searchRecords API to retrieve the records:
<%
  // Get the object ID and the comma separated list of record IDs
  String object_id = request.getParameter("object_id");
  String selectedRecords = request.getParameter("selectedRecords"); 

  // Break the comma-separated list into record IDs. 
  // Join them with "OR" operands for use when searching for the records
  String filterCriteria = "";
  if (selectedRecords != null)
  {
    StringTokenizer st = new StringTokenizer(selectedRecords,",");
    while (st.hasMoreTokens())
    {
      if ( !"".equals(filterCriteria.trim()))
      {
         // Criteria string isn't empty, and we're adding another expression
         // Prefix the new expression with a boolean OR operator
         filterCriteria += " OR "
      }
      filterCriteria += "record_id = "+ st.nextToken();
    }
  }

  // Use the filter criteria to fetch the selected records
  // Here, we ask for the record_id and name fields
  Result results;
  results = Functions.searchRecords(object_id , "record_id,name", filterCriteria);
  int resultCode = results.getCode();
  if (resultCode < 0)
  {
     // Error occurred
  }
  else if (resultCode == 0)
  {
    // No records found. (This situation should never occur.)
  }
  else
  {
    // Records retrieved successfully
    // Process them here
    ParametersIterator iterator = results.getIterator();
    while(iterator.hasNext())
    {
      Parameters params = iterator.next();
      String recordID = params.get("record_id");
      String recordName = params.get("name");
      // Take additional action according to your business logic
    }
  }
%>

To access record IDs for multiple records parameter:

<%
  // Get the object ID and a comma-separated list of record IDs.
  // (Or a single record ID, if only one record was returned)
  String object_id = request.getParameter("object_id");
  String selectedRecords = request.getParameter("selectedRecords"); 

  // Fetch record details using the searchRecords function
%>

Exercise

Set up a development environment

  1. In the navigation pane, click Setup.
  2. If you don't see an entry called Develop, then:

Create a JSP Page

  1. Click GearIcon.png > Developer Resources > Pages > [New Page]

Notepad.png

Note: If this is the first development activity to occur, you may see an error message like the following at the top of the screen:

    To create a new class, page, or execute Java code in Data Policies,
    namespace needs to be set in Company Information. Click here ...

The link takes you to the Developer Configuration page, where you can specify your organization's namespace--typically, the company name or an abbreviation of it that corresponds to the company URL. (The lab exercises use "demo".)

  1. Enter the page name: HelloWorld.jsp
    Note: It is necessary to add the .jsp extension when specifying the page name.
  2. Add content for the page:
    <h1 align="center">Hello World!</h1>
    
  3. Click [Save]

Visit the page to confirm that it exists

The page you created appears.
Next
Lab B.2: Simple Interaction