ShowTable of Contents
The XML data retrieved from a back-end server is frequently not in the format needed by your WEF application. Sometimes the structure of the data needs to be changed; sometimes the values of the data need to be changed. This sample shows how to use transform builders to change both the structure and the values of the XML data.
To run this sample in Web Experience Factory Designer, you will need to download the attached project ZIP file
, and import it into a WEF project. Once imported, the project should look like this:
Figure 1. Project Explorer
The project has both a provider model and a consumer model. This is a best practice for WEF projects that access data from a back-end server. The provider model contains all of the builders associated with accessing the back-end data, including a Service Definition builder that exposes the service to the consumer model. The consumer model contains all of the builders associated with the user interface, including a Service Consumer builder that is associated with the service from the provider model. The builders we're interested in for this sample are in the provider model.
REST Service Call builder
In order to use data from a back-end server in a WEF application, you first need to know how to access the data. In this sample we will access a publicly accessible REST service -- an RSS feed from the Web Experience Factory Forum. The REST Service Call builder in the sample model contains the URL to the forum, and specifies a "threadId" parameter. The value for this parameter has has been left blank, which indicates that it is an input for this builder.
Figure 2. Inputs for the REST Service Call builder
So that it can generate the correct schema for the specified REST service, the REST Service Call builder needs information about how to access sample data. In this case, we will just specify the same REST service URL as before, and supply a known value for the "threadId" parameter.
Figure 3. Schema inputs for the REST Service Call builder
Running the consumer model (with no transform builders) will produce results that look like this:
Figure 4. REST Service Call builder results before transforming
To illustrate how the REST Service Call builder results can be modified using transform builders, we will use a transform builder to add a <creationTime> element and give it an initial value equal to the value of the <creationDate> element. Then we will use a second transform builder to change the values of the <author>, <creationDate>, and <creationTime> elements. This is an example of transform "chaining", since the second transform builder operates on the results of the first transform builder.
The first builder we use will be a Transform Map builder. This builder is used to map elements between schemas in schema-typed XML data. In this sample, we will first map the "rss/channel/items/item" elements from the REST Service Call builder results to "items/item" in the transformed schema, copying the child elements. This effectively removes the first two levels of the schema and copies all of the repeating items we're interested in.
Figure 5. Inputs to the Transform Map builder
Figure 6. Inputs to the Transform Modify builder
Service Operation - Action to Call
Figure 7. REST Service Call builder results after transforming
The shaded area shows the changes made by the transforms. For each result item, the author value now specifies whether the author is an IBM employee, the creation date now contains only the date value, and a new creation time column has been added that contains only the time value.