Jump to: navigation, search

Scout/Tutorial/3.9/webservices/Create WsLogForm

< Scout‎ | Tutorial‎ | 3.9‎ | webservices


Scout
Wiki Home
Website
DownloadGit
Community
ForumsBlogTwitter
Bugzilla
Bugzilla


Create Ws Log Form

On the client node, go to Forms. Right click on the node to create the WsLogForm.

Create WsLogForm

As the name of the form, enter Ws Log and choose to create the Form ID which is the primary key of the log entry.

Create WsLogForm

Click next to choose from the artifacts which also should be created by Scout SDK.

Create WsLogForm artefacts

Uncheck all permissions as Authorization is not part of this tutorial. As the WS log is read-only, also uncheck NewHandler.

Because the form does only display read-only data, change the ModifyHandler as follows:

public class ModifyHandler extends AbstractFormHandler {
 
  @Override
  public void execLoad() throws ProcessingException {
    IWSLogService service = SERVICES.getService(IWSLogService.class);
    WSLogFormData formData = new WSLogFormData();
    exportFormData(formData);
    formData = service.load(formData);
    importFormData(formData);
 
    // disable whole form 
    setEnabledGranted(false);
  }
}

Create Form Fields

On the WsLogForm node, go to the MainBox. Right click on the MainBox to create the following 4 form fields:

DateField
Type: Date Field
Name: Date
Class name: DateField
ServiceField
Type: String Field
Name: Service
Class name: ServiceField
PortField
Type: String Field
Name: Port
Class name: PortField
OperationField
Type: String Field
Name: Operation
Class name: OperationField

To display the SOAP message for request and response, we create a TabBox that contains the two tabs 'Request' and 'Response', respectively.

SoapMessageBox
Type: Tab Box
Name: <leave empty as no label>
Class name: SoapMessageBox

Because the tab box SoapMessageBox should not have a label, go to that node and uncheck the Label Visible property in the 'Advanced Properties' section of the Scout Property View. Next, we will create the two tabs. Therefore, right click on SoapMessageBox and create the following two boxes:

Create Tab Box

RequestBox
Name: Request
Class name: RequestBox
ResponseBox
Name: Response
Class name: ResponseBox

Finally, add two String fields to hold request and response to the boxes.

Right click on RequestBox to create the 'Request' String field:

Create Request tab

RequestField
Type: String Field
Name: <leave empty as no label>
Class name: RequestField

Right click on ResponseBox to create the 'Response' String field:

Create Response tab

ResponseField
Type: String Field
Name: <leave empty as no label>
Class name: ResponseField

In both fields, adjust their properties in Scout Property View as following:

Update properties of Request / Response fields

  • Set Grid H to 5
  • Set Grid W to 0 (FULL_WIDTH)
  • Set Label Visible to false
  • Set Max Length to inf (Integer.MAX_VALUE)
  • Set Multiline Text to true
  • Set Wrap Text to true

Associate WsLogForm with WsLogTablePage

To view a log record, you have to add a VIEW menu to the WsLogTablePage. On client node, go to the node Desktop > Outlines > StandardOutline > Child Pages > WsLogTablePage > Table > Menus. Right-click on the menu node to create the following menu:

Create view menu on WsLogTablePage

VIEW menu
Name: View WS Log...
Class Name: ViewWsLogMenu
Super Type: AbstractMenu
Form to start: WsLogForm
Form handler: ModifyHandler

We also have to provide the WsLogNr primary key as argument to the WsLogForm. For that reason, double click the ViewWsLogMenu to modify the code in execAction() as follows:

@Override
protected void execAction() throws ProcessingException {
  WsLogForm form = new WsLogForm();
 
  // Add the following line to set the primary key of the selected log record to the form
  form.setWSLogNr(getWsLogNrColumn().getSelectedValue());
 
  form.startModify();
  form.waitFor();
  if (form.isFormStored()) {
    reloadPage();
  }
}

Load WS Log data

Scout SDK already created WsLogService in order to load WS log data. Because we are only reading but not updating log entries, you can remove all operations except load.

Please implement the load-method stub as following:

public class WsLogService extends AbstractService implements IWsLogService {
 
  @Override
  public WsLogFormData load(WsLogFormData formData) throws ProcessingException {
    SQL.selectInto("" +
        "SELECT EVT_DATE, " +
        "       SERVICE, " +
        "       PORT, " +
        "       OPERATION, " +
        "       REQUEST, " +
        "       RESPONSE " +
        "FROM   WS_LOG " +
        "WHERE  WS_LOG_NR = :wSLogNr " +
        "INTO   :date, " +
        "       :service, " +
        "       :port, " +
        "       :operation, " +
        "       :request, " +
        "       :response"
        , formData);
    return formData;
  }

You can continue the webservices tutorial.