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.
Introduction
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
Transform builders
To illustrate how the REST Service Call builder results can be modified using transform builders, we will use one transform builder to restructure the results schema. Then we will use a second transform builder to change the values. This is an example of transform "chaining" -- the results of the REST Service Call builder are used as the inputs to the first transform builder, and the results of the first transform builder are used as the inputs to the second transform builder.
The first transform builder in the chain is a Transform Map builder. This builder is used to map elements between schemas in schema-typed XML data. The first transform action in this sample maps the "rss/channel/items/item" elements from the REST Service Call builder results to "items/item" elements in the transformed results, copying the child elements. This action effectively removes the first two levels of the schema and copies all of the repeating items we're interested in. The second transform action maps the "rss/channel/items/item/creationDate" elements from the REST Service Call builder results to "items/item/creationTime" elements in the transformed results, copying the text. This action effectively adds a <creationTime> element with the same value as the <creationDate> element. The Transform Map builder also contains a Result Schema Preview section that displays the transformed results structure.
Figure 5. Inputs to the Transform Map builder
The second transform builder in the chain is a Transform Modify builder. This builder is used to modify elements in schema-typed XML data. Note that the Target Operation input specifies the Transform Map builder -- this is how the transform chain is constructed. The first transform action in this builder modifies the value of the creationDate element to remove the day and time portions of the string. The second transform action modifies the value of the creationTime element to remove the day and date portions of the string. The third and fourth transform actions modify the value of the author element to add an IBM indicator for IBM employees.
Figure 6. Inputs to the Transform Modify builder
In addition to the REST Service Call builder, each transform builder generates a data service and a schema for the transformed results. Any of these data services can be specified as the Action to Call in the Service Operation builder, but to get the fully transformed results, the transform at the end of the chain should be specified. In this sample, that's the Transform Modify builder.
Figure 7. Inputs for the Service Operation builder
Running the consumer model will produce results that look like this:
Figure 8. 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.