IBM FileNet P8, Version 5.2.1            

Process Engine Web Service Reference

The Process Engine Web Service essentially wraps a subset of the Process Java™ API, the operations corresponding to particular Process Java API class methods. The portType operations and associated messages are presented here in a more human-readable format than that of the Process Engine Web Service WSDL. For each operation described in this section, refer to the linked Process Java API method for a complete description of the operation and its parameters.

The Process Engine Web Service WSDL is located in the pewsAxis2-xx.war file that is installed in the Content Platform Engine EAR file. The WSDL location in the WAR file is as follows:

   pewsAxis2-xx.war\WEB-INF\ProcessEngineService.wsdl

And (a WS-I compliant WSDL for IBM® Rational® Application Developer 7.x users)

   pewsAxis2-xx.war\WEB-INF\ProcessEngineServiceWS-I.wsdl

The URL for the Process Engine Web Service is as follows:

   http://content_platform_engine_host:port/wsi/ProcessEngineWS

Where content_platform_engine_host is the machine name of the Content Platform Engine host, and port is the port that is assigned to the Content Platform Engine.

Note: When you are using the Process Engine Web Service with IBM Rational Application Developer 7.x or later, specify the following URL to return a WS-I compliant WSDL:
   http://content_platform_engine_host:port/wsi/ProcessEngineWS-I

This ProcessEngineWS-I WSDL does not have the operations getQueues, getRosterNames, and getWorkClassNames. These operations are found in the standard ProcessEngineWS WSDL.

See Code Samples for links to Process Engine Web Service code samples.

The portType operations are as follows:

The operations getQueuesWrapped, getRosterNamesWrapped, and getWorkClassNamesWrapped have been added to address the lack of WSI-compliancy of the getQueues, getRosterNames, and getWorkClassNames operations. In addition, the following query operations have been added to allow passing heterogeneous Value arrays for substitutionVars instead of just String arrays:

The Types Information section briefly lists the data types that are associated with (and linked from) each operation.

createWorkflow

Starts a workflow that is defined by a transferred workflow definition as specified in workflowIdentifier, and returns a step element.

Reference to related Process Java API documentation: VWSession.createWorkflow

  Parameter Elements
Input workflowIdentifier workflowIdentifier : String
Output StepElement_Response StepElement
Fault PEWSException2 PEWSException

deleteWorkObject

Deletes a work object.

Reference to related Process Java API documentation: VWWorkObject.doDelete

  Parameter Elements
Input deleteWorkObjectRequest DeleteWorkObjectRequest
Output n/a n/a
Fault PEWSException PEWSException

getEventLogElements

Returns the EventLogElement array that is retrieved by the query.

Reference to related Process Java API documentation: VWLog.startQuery

  Parameter Elements
Input GetEventLogElementsRequest GetEventLogElementsRequest
Output ArrayOfEventLogElement_Response ArrayOfEventLogElement
Fault PEWSException PEWSException

getEventLogNames

Returns the names of the event logs.

  Parameter Elements
Input n/a n/a
Output response ArrayOfstring
Fault PEWSException PEWSException

getQueueSecurity

Gets the queue read and write security from a queue name.

  Parameter Elements
Input GetQueueSecurityRequest GetQueueSecurityRequest
Output GetQueueSecurityResult GetQueueSecurityResult
Fault PEWSException PEWSException

getMilestoneForRosterElement

Gets the milestone data for the work objects in the specified roster, for milestone elements with a level less than or equal to the milestoneLevel specified.

Reference to related Process Java API documentation: VWSession.fetchMilestonesFromRoster

  Parameter Elements
Input getMilestoneForRosterElementRequest GetMilestoneForRosterElementRequest
Output ArrayOfMilestone_Response ArrayOfMilestone
Fault PEWSException9 PEWSException

getQueueElements

Performs a filtered fetch on a queue, returning an array of queue elements.

Reference to related Process Java API documentation: VWQueue.createQuery

  Parameter Elements
Input getQueueElementsRequest GetQueueElementsRequest
Output ArrayOfQueueElement_Response ArrayOfQueueElement
Fault PEWSException1 PEWSException

getQueueElementsEx

Performs a filtered fetch on a queue, returning an array of queue elements. This operation was added to allow passing an array of Values for the substitutionVars input parameter in the request.

Reference to related Process Java API documentation: VWQueue.createQuery

  Parameter Elements
Input getQueueElementsExRequest GetQueueElementsExRequest
Output ArrayOfQueueElement_Response ArrayOfQueueElement
Fault PEWSException1 PEWSException

getQueues

Returns an array of all queue definitions for the current configuration.

Reference to related Process Java API documentation: VWSession.fetchSystemConfiguration, VWSystemConfiguration.getQueueDefinitions

  Parameter Elements
Input n/a n/a
Output ArrayOfQueueInfo_Response ArrayOfQueueInfo
Fault PEWSException PEWSException

getQueuesWrapped

Returns an array of all queue definitions for the current configuration. This operation was added for WSI-compliance, to supersede the getQueues operation (which is not WSI-compliant). In addition, a checkSecurity parameter has been added to return only the queues to which the current user has Read privileges.

Reference to related Process Java API documentation: VWSession.fetchSystemConfiguration, VWSystemConfiguration.getQueueDefinitions

  Parameter Elements
Input getQueuesWrappedRequest GetQueuesWrappedRequest
Output ArrayOfQueueInfo_Response ArrayOfQueueInfo
Fault PEWSException PEWSException

getRosterElements

Performs a filtered fetch of roster elements.

Reference to related Process Java API documentation: VWRoster.createQuery

  Parameter Elements
Input getRosterElementsRequest GetRosterElementsRequest
Output ArrayOfRosterElement_Response ArrayOfRosterElement
Fault PEWSException11 PEWSException

getRosterElementsEx

Performs a filtered fetch of roster elements. This operation was added to allow passing an array of Values for the substitutionVars input parameter in the request.

Reference to related Process Java API documentation: VWRoster.createQuery

  Parameter Elements
Input getRosterElementsExRequest GetRosterElementsExRequest
Output ArrayOfRosterElement_Response ArrayOfRosterElement
Fault PEWSException11 PEWSException

getRosterNames

Gets a String array of all roster names within the isolated region.

Reference to related Process Java API documentation: VWSession.fetchRosterNames

  Parameter Elements
Input n/a n/a
Output ArrayOfstring_Response ArrayOfstring
Fault PEWSException10 PEWSException

getRosterNamesWrapped

Gets a String array of all roster names within the isolated region. This operation was added for WSI-compliance, to supersede the getRosterNames method (which is not WS-compliant).

Reference to related Process Java API documentation: VWSession.fetchRosterNames

  Parameter Elements
Input getRosterNamesWrappedRequest GetRosterNamesWrappedRequest
Output ArrayOfstring_Response ArrayOfstring
Fault PEWSException10 PEWSException

getStepElementsFromQueue

Performs a filtered fetch of queue items, returning an array of StepElements.

Reference to related Process Java API documentation: VWQueue.createQuery

  Parameter Elements
Input getStepElementsFromQueueRequest GetStepElementsFromQueueRequest
Output ArrayOfStepElement_Response ArrayOfStepElement
Fault PEWSException3 PEWSException

getStepElementsFromQueueEx

Performs a filtered fetch of queue items, returning an array of StepElements. This operation was added to allow passing an array of Values for the substitutionVars input parameter in the request.

Reference to related Process Java API documentation: VWQueue.createQuery

  Parameter Elements
Input getStepElementsFromQueueExRequest GetStepElementsFromQueueExRequest
Output ArrayOfStepElement_Response ArrayOfStepElement
Fault PEWSException3 PEWSException

getStepElementsFromRoster

Returns the step elements from a roster query.

Reference to related Process Java API documentation: VWRoster.createQuery

  Parameter Elements
Input getStepElementsFromRosterRequest GetStepElementsFromRosterRequest
Output ArrayOfStepElement_Response ArrayOfStepElement
Fault PEWSException12 PEWSException

getStepElementsFromRosterEx

Returns the step elements from a roster query. This operation was added to allow passing an array of Values for the substitutionVars input parameter in the request.

Reference to related Process Java API documentation: VWRoster.createQuery

  Parameter Elements
Input getStepElementsFromRosterExRequest GetStepElementsFromRosterExRequest
Output ArrayOfStepElement_Response ArrayOfStepElement
Fault PEWSException12 PEWSException

getWorkClassNames

Returns a String array of the names of all work classes within the isolated region.

Reference to related Process Java API documentation: VWSession.fetchWorkClassNames

  Parameter Elements
Input n/a n/a
Output ArrayOfstring_Response ArrayOfstring
Fault PEWSException13 PEWSException

getWorkClassNamesWrapped

Returns a String array of the names of all work classes within the isolated region. This operation was added for WSI-compliance, to supersede the getWorkClassNames operation (which is not WSI-compliant).

Reference to related Process Java API documentation: VWSession.fetchWorkClassNames

  Parameter Elements
Input getWorkClassNamesWrappedRequest GetWorkClassNamesWrappedRequest
Output ArrayOfstring_Response ArrayOfstring
Fault PEWSException13 PEWSException

getWorkObjectsFromQueueEx

Performs a filtered fetch on a queue, returning an array of work objects.

Reference to related Process Java API documentation: VWQueue.createQuery

  Parameter Elements
Input getWorkObjectsFromQueueExRequest GetWorkObjectsFromQueueExRequest
Output ArrayOfWorkObject_Response ArrayOfWorkObject
Fault PEWSException PEWSException

getWorkObjectsFromRosterEx

Performs a filtered fetch on a roster, returning an array of work objects.

Reference to related Process Java API documentation: VWRoster.createQuery

  Parameter Elements
Input getWorkObjectsFromRosterExRequest GetWorkObjectsFromRosterExRequest
Output ArrayOfWorkObject_Response ArrayOfWorkObject
Fault PEWSException PEWSException

launchWorkflow

Launches the specified workflow.

Reference to related Process Java API documentation: VWSession.createLiveWorkObject

  Parameter Elements
Input launchWorkflowRequest LaunchWorkflowRequest
Output LaunchWorkflowResult_Response LaunchWorkflowResult
Fault PEWSException8 PEWSException

logUserDefinedMessage

Logs a user-defined message. This operation is similar to VWInstructionElement.logMessage, with the exception that only a queue is required to log a message.

Reference to related Process Java API documentation: VWInstructionElement.logMessage

  Parameter Elements
Input request logUserDefinedMessageRequest
Output n/a n/a
Fault PEWSException PEWSException

reassignStep

Reassigns (or delegates) the step to the specified user. The stepElement element contains updated data for the step prior to reassigning or delegating (see updateStep).

Reference to related Process Java API documentation: VWStepElement.doReassign

  Parameter Elements
Input reassignStepRequest ReassignStepRequest
Output n/a n/a
Fault PEWSException7 PEWSException

reassignWorkObject

Reassigns (or delegates) the step associated with the work object to the specified user.

Reference to related Process Java API documentation: VWWorkObject.doReassign

  Parameter Elements
Input reassignWorkObjectRequest ReassignWorkObjectRequest
Output n/a n/a
Fault PEWSException PEWSException

retrieveStep

Retrieves and (optionally) locks a step element based on the specified work object ID.

Reference to related Process Java API documentation: VWQueue.createQuery, VWStepElement.doLock

  Parameter Elements
Input retrieveStepRequest RetrieveStepRequest
Output StepElement_Response StepElement
Fault PEWSException4 PEWSException

terminateWorkObject

Terminates a work object, dispatching it to the terminate instruction sheet.

Reference to related Process Java API documentation: VWWorkObject.doTerminate

  Parameter Elements
Input terminateWorkObjectRequest TerminateWorkObjectRequest
Output n/a n/a
Fault PEWSException PEWSException

unlockStep

Releases the lock on a step element based on the specified work object ID.

Reference to related Process Java API documentation: VWQueue.createQuery, VWStepElement.doAbort

  Parameter Elements
Input unlockStepRequest UnlockStepRequest
Output n/a n/a
Fault PEWSException6 PEWSException

unlockWorkObject

Releases the lock on a step element based on the specified work object ID. To abort the work object, set the dispatch parameter on UnlockWorkObjectRequest to false.

Reference to related Process Java API documentation: VWWorkObject.doSave and VWWorkObject.doAbort

  Parameter Elements
Input unlockWorkObject UnlockWorkObjectRequest
Output n/a n/a
Fault PEWSException6 PEWSException

updateStep

Updates the step element with data, potentially overriding any locks set.

Reference to related Process Java API documentation: VWQueue.createQuery, VWStepElement.doSave(), VWStepElement.doDispatch(), VWStepElement.doReturnToSource()

  Parameter Elements
Input updateStepRequest UpdateStepRequest
Output n/a n/a
Fault PEWSException5 PEWSException

updateWorkObject

Updates the step element that is associated with the work object, potentially overriding any locks set.

Reference to related Process Java API documentation: VWQueue.createQuery, VWWorkObject.doSave, VWWorkObject.doDispatch(), VWWorkObject.doReturnToSource()

  Parameter Elements
Input updateWorkObject UpdateWorkObjectRequest
Output n/a n/a
Fault PEWSException PEWSException

Types Information

The following types are used to specify parameter element values:

Type Value

ArrayOfstring

(0..*) string : String

ArrayOfQueueElement

(0..*) queueElement : QueueElement

QueueElement

Fields : ArrayOfField

MapName : String

StepName : String

StepProcessorID : int

GetQueueElementsRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

queueName : String

substitutionVars : ArrayOfstring

GetQueueElementsExRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

queueName : String

substitutionVars : ArrayOfValue

GetQueuesWrappedRequest

checkSecurity : boolean

GetQueueSecurityRequest

queueName : String

GetQueueSecurityResult

readSecurity : ArrayOfstring

writeSecurity : ArrayOfstring

ArrayOfQueueInfo

(0..*) Queueinfo : QueueInfo

QueueInfo

Name : String

Type : QueueTypeEnum

QueueTypeEnum

"QUEUE_TYPE_USER_CENTRIC"

"QUEUE_TYPE_PROCESS"

ArrayOfEventLogElement

(0..*) EventLogElement : EventLogElement

EventLogElement

Fields : ArrayOfField

Duration : double

EventType : int

MapName : String

OperationName : String

ParentWorkObjectNumber : String

QueueName : String

SequenceNumber : int

StepName : String

Text : String

TimeStamp : Date

UserName : String

WorkClassName : String

WorkflowName : String

WorkflowNumber : String

WorkObjectNumber : String

getEventLogElementsRequest

EventLogName : String

IndexName : String

MinValues : ArrayOfValue

MaxValues : ArrayOfValue

queryFlags : ArrayOfQueryFlagEnum

Filter : String

substitutionVars : ArrayOfValue

ArrayOfField

(0..*) field : Field

Field

IsArray : boolean

IsSystemField : boolean

Modified : boolean

Name : String

Type : FieldTypeEnum

Values : ArrayOfValue

FieldTypeEnum

"FIELD_TYPE_ATTACHMENT"

"FIELD_TYPE_PARTICIPANT"

"FIELD_TYPE_INTEGER"

"FIELD_TYPE_DOUBLE"

"FIELD_TYPE_STRING"

"FIELD_TYPE_BOOLEAN"

"FIELD_TYPE_TIME"

ArrayOfValue

(0..*) value : Value

Value

attachmentField : Attachment

booleanField : boolean

doubleField : double

integerField : int

participantField : String

stringField : String

dateField : Date

Attachment

Description : String

Id : String

Library : String

LibraryType : LibraryTypeEnum

Name : String

Type : AttachmentTypeEnum

Version : String

LibraryTypeEnum

"LIBRARY_TYPE_UNDEFINED"

"LIBRARY_TYPE_CONTENT_ENGINE"

"LIBRARY_TYPE_IDMDS"

"LIBRARY_TYPE_IDMIS"

AttachmentTypeEnum

"ATTACHMENT_TYPE_UNDEFINED"

"ATTACHMENT_TYPE_LIBRARY"

"ATTACHMENT_TYPE_FOLDER"

"ATTACHMENT_TYPE_DOCUMENT"

"ATTACHMENT_TYPE_STORED_SEARCH"

"ATTACHMENT_TYPE_URL"

"ATTACHMENT_TYPE_CUSTOM_OBJECT"

ArrayOfQueryFlagEnum

(0..*) queryFlagEnum : QueryFlagEnum

QueryFlagEnum

"QUERY_NO_OPTIONS"

"QUERY_READ_BOUND"

"QUERY_READ_UNWRITABLE"

"QUERY_READ_LOCKED"

"QUERY_MIN_VALUES_INCLUSIVE"

"QUERY_MAX_VALUES_INCLUSIVE"

"QUERY_LOCK_OBJECTS"

"QUERY_GET_NO_SYSTEM_FIELDS"

"QUERY_GET_NO_TRANSLATED_SYSTEM_FIELDS"

"QUERY_RESOLVE_NAMES"

"QUERY_LITE_ELEMENTS"

Note: Because the Process Engine Web Service QueueElement and RosterElement objects contain more information than the corresponding Process Java API objects, the QUERY_LITE_ELEMENTS flag is provided to limit the number of RPC (fetchWorkObject) calls required. If this flag is specified, the QueueElement or RosterElement object on the Process Engine Web Service side will contain only the information available from the corresponding Process Java API object. If this flag is not specified, an additional RPC call is made for each QueueElement or RosterElement object (to retrieve the extra information from the work object).

ArrayOfRosterElement

(0..*) rosterElement : RosterElement

RosterElement

(optional) Deadline : Date

ExceptionDescription : String

Fields : ArrayOfField

IsTracker : boolean

LaunchedBy : String

(optional) LaunchedOn : Date

OperationName : String

Overdue : Overdue

ParticipantName : String

(optional) ReceivedOn : Date

(optional) Reminder : Date

RosterName : String

StepName : String

Tag : String

WOBName : String

WOBNumber : String

WorkClassName : String

WorkflowName : String

WorkflowNumber : String

GetRosterElementsRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

rosterName : String

substitutionVars : ArrayOfstring

GetRosterElementsExRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

rosterName : String

substitutionVars : ArrayOfValue

GetRosterNamesWrappedRequest

(empty)

Overdue

"NotOverdue"

"ReminderPast"

"DeadlinePast"

ArrayOfStepElement

(0..*) stepElement : StepElement

StepElement

CanReassign : boolean

CanReturnToSource : boolean

CanViewHistory : boolean

CanViewStatus : boolean

CurrentQueueName : String

(optional) Deadline : Date

Description : String

ExceptionDescription : String

ExceptionMapName : String

IsTracker : boolean

LaunchedBy : String

(optional) LaunchedOn : String

OperationName : String

Overdue : Overdue

Parameters : ArrayOfParameter

ParticipantName : String

QueueName : String

(optional) ReceivedOn : Date

(optional) Reminder : Date

Responses : ArrayOfResponse

RosterName : String

StepName : String

Tag : String

WOBName : String

WOBNumber : String

WorkClassName : String

WorkflowIdentifier : String

WorkflowName : String

WorkflowNumber : String

GetStepElementsFromQueueRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

queueName : String

substitutionVars : ArrayOfstring

GetStepElementsFromQueueExRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

queueName : String

substitutionVars : ArrayOfValue

GetStepElementsFromRosterRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

rosterName : String

substitutionVars : ArrayOfstring

GetStepElementsFromRosterExRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

rosterName : String

substitutionVars : ArrayOfValue

ReassignStepRequest

delegate : boolean

newUserName : String

stepElement : StepElement

RetrieveStepRequest

bLock : boolean

bOverrideLock : boolean

queryFlags : ArrayOfQueryFlagEnum

queueName : String

wobNum : String

UnlockStepRequest

queueName : String

wobNum : String

UpdateStepRequest

stepElement : StepElement

updateFlag : UpdateFlagEnum

ArrayOfParameter

(0..*) parameter : Parameter

Parameter

CompareValue : boolean

Description : String

IsArray : boolean

IsSystemParameter : boolean

Mode : ModeTypeEnum

Modified : boolean

Name : String

Type : FieldTypeEnum

Values : ArrayOfValue

ModeTypeEnum

"MODE_TYPE_IN"

"MODE_TYPE_OUT"

"MODE_TYPE_IN_OUT"

ArrayOfResponse

Response : ArrayOfstring

Selected : String

UpdateFlagEnum

"UPDATE_DISPATCH"

"UPDATE_SAVE_RETURN"

"UPDATE_SAVE_UNLOCK"

"UPDATE_SAVE"

MilestoneQueryEnum

"MILESTONE_QUERY_WOBNUMBER"

"MILESTONE_QUERY_WORKFLOW_NUMBER"

ArrayOfMilestone

(0..*) milestone : Milestone

Milestone

Id : int

Level : int

Map : String

Message : String

Name : String

(optional) Reached : Date

StepId : int

GetMilestoneForRosterElementRequest

milestoneLevel : int

queryEnum : MilestoneQueryEnum

queryValue : String

rosterName : String

LaunchWorkflowRequest

fields : ArrayOfField

workflowName : String

LaunchWorkflowResult

rosterName : String

workfObjectNumber : String

DeleteWorkObjectRequest

queueName : String

wobNum : String

bOverrideLock : boolean

bForce : boolean

TerminateWorkObjectRequest

queueName : String

wobNum : String

GetWorkObjectsFromQueueExRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

queueName : String

substitutionVars : ArrayOfValue

GetWorkObjectsFromRosterExRequest

filter : String

indexName : String

maxValues : ArrayOfstring

minValues : ArrayOfstring

nToReturn : int

queryFlags : ArrayOfQueryFlagEnum

queueName : String

substitutionVars : ArrayOfValue

ReassignWorkObjectRequest

workObject : WorkObject

newUserName : String

delegate : boolean

queueName : String

UnlockWorkObjectRequest

queueName : String

wobNum : String

dispatch : boolean

UpdateWorkObjectRequest

workObject : WorkObject

updateFlag : UpdateFlagEnum

ArrayOfWorkObject

(0..*) workObject : WorkObject

WorkObject

IsLocked : boolean

CallMap : string

Comment : string

CurrentQueueName : string

DateReceived : dateTime

Deadline : dateTime

LastErrorNumber : string

LastErrorText : string

LaunchDate : dateTime

LockedUser : string

OperationName : string

Originator : string

Overdue : Overdue

ParticipantName : string

Reminder : dateTime

RosterName : string

SelectedResponse : string

StepName : string

Subject : string

StepResponses : ArrayOfstring

WOBName : string

WOBNumber : string

WorkClassName : string

WorkflowName : string

WorkflowNumber : string

Fields : ArrayOfField

PEWSException

message : String

GetWorkClassNamesWrappedRequest

(empty)

LogUserDefinedMessageRequest

QueueName : String

LoggingOption : int

The following logging options are valid:
  • 410: LOGGING_OPTION_TYPE_USER1_MESSAGE1
  • 420: LOGGING_OPTION_TYPE_USER1_MESSAGE2
  • 430: LOGGING_OPTION_TYPE_USER1_MESSAGE3
  • 440: LOGGING_OPTION_TYPE_USER1_MESSAGE4
  • 450: LOGGING_OPTION_TYPE_USER2_MESSAGE1
  • 460: LOGGING_OPTION_TYPE_USER2_MESSAGE2
  • 470: LOGGING_OPTION_TYPE_USER2_MESSAGE3
  • 480: LOGGING_OPTION_TYPE_USER3_MESSAGE4
Message : String


Last updated: March 2016
ws_reference.htm

© Copyright IBM Corporation 2016.