WSO2 BPS - BPEL Assign Activity

BPEL Assign Activity

Assign activity(<assign>) update the values of variables with new data.

Synopsis

<assign validate="yes|no"? standard-attributes>
   standard-elements
   (
   <copy keepSrcElementName="yes|no"? ignoreMissingFromData="yes|no"?>
      from-spec
      to-spec
   </copy>
   |
   <extensionAssignOperation>
      assign-element-of-other-namespace
   </extensionAssignOperation>
   )+
</assign>

Throws following faults

Description

The <assign> activity can be used to copy data from one variable to another, as well as to construct and insert new data using expressions. The <assign> activity can also be used to copy endpoint references to and from partnerLinks. Each <assign> is made up of any number of <copy> entries which are each made up of a "to-spec" (lvalue), and a from-spec (rvalue).

From/To-Spec Variants

The <assign> activity copies a type-compatible value from the source("from-spec") to the destination ("to-spec"), using <copy> element. The from-spec must be one of the following variants:
<from variable="BPELVariableName" part="NCName"?>
   <query queryLanguage="anyURI"?>?
      queryContent
   </query>
</from>
<from partnerLink="NCName" endpointReference="myRole|partnerRole" />
<from variable="BPELVariableName" property="QName" />
<from expressionLanguage="anyURI"?>expression</from>
<from><literal>literal value</literal></from>
<from variable="BPELVariableName" extension="QName" />   <!-- non-standard extension -->
The to-spec must be one of the following variants:
<to variable="BPELVariableName" part="NCName"?>
   <query queryLanguage="anyURI"?>?
      queryContent
   </query>
</to>
<to partnerLink="NCName" />
<to variable="BPELVariableName" property="QName" />
<to expressionLanguage="anyURI"?>expression</to>
<to variable="BPELVariableName" extension="QName" /> <!-- WSO2 BPS SPECIFIC -->
A to-spec must return an lvalue. If a to-spec does not return an lvalue then a bpel:selectionFailure will be thrown. In the context of XPath, an lvalue is a node-list containing a single node from a variable or a partnerLink identified by the to-spec (e.g. the XPath expression concat("foo""bar") is not an lvalue). Assignment is an atomic operation; that is, either all <copy> s succeed, or no changes are made. In WSO2 BPS each <copy> is atomic

Variable Variant

Selects value stored in a BPEL variable
<to|from variable="BPELVariableName" part="NCName"?>
   <query queryLanguage="anyURI"?>?
      queryContent
   </query>
</to|from>

PartnerLink Variant

Allows manipulation of the endpoint references associated with partnerLinks.
<from partnerLink="NCName" endpointReference="myRole|partnerRole" />
<to partnerLink="NCName"  />
For from-specs, the role attribute must be specified, while for the to-spec, the assignment is only possible to the partnerRole, hence there is no need to specify the role. Therefore, the to-spec can only refer to a <partnerLink> of which the declaration specifies the partnerRole attribute. The type of the value referenced by partnerLink-style from/to-specs is always a <sref:service-ref> element. An attempt during process execution to read a partner link before its partnerRole EPR is initialized results in the bpel:uninitializedPartnerRole standard fault. Partner roles of partner links are read when they are referenced in an <invoke> or the <from> part of a <copy> in an <assign> activity.

Property Variant

Allows data manipulation using properties. The property value generated by the from-spec is generated in the same manner as the value returned by the bpel:getVariableProperty() function.
<to|from variable="BPELVariableName" property="QName" />

Expression Variant

In the Expression Variant, an expression language (typically XPath), is used to calculate a value.
<to|from expressionLanguage="anyURI"?>expression</from>
The computed value of the expression must be one of the following:

Literal Variant

The literal variant allows a literal value to be given as the rvalue.
<from><literal>literal value</literal></from>
The type of the literal value may be optionally indicated inline with the value by using XML Schema's instance type mechanism (xsi:type). The literal content must be either a single element or text. An empty <literal/> element is equivalent to an empty text node.

Empty Variant

Empty variant exist for extensibility purposes; it is not supported by WSO2 BPS.
<from|to/>

Insert Variant(non-standard extension)

Faults

Examples

The following assigns a childless element bar in namespace http://example.com to an element-typed variable myFooBarElemVar:
<assign>
   <copy>
      <from>
         <literal xmlns:foo="http://example.com">
            <foo:bar />
         </literal>
      </from>
      <to variable="myFooBarElemVar" />
   </copy>
</assign>
The following assigns the string "FooBar" to a string-typed variable myStringVar:
<assign>
   <copy>
      <from>
         <literal>
            <![CDATA[FooBar]]>
         </literal>
      </from>
      <to variable="myStringVar" />
   </copy>
</assign>
The following assigns the string "" (i.e. the empty string) to a string-typed variable myStringVar:
<assign>
   <copy>
      <from>
         <literal />
      </from>
      <to variable="myStringVar" />
   </copy>
</assign>
The following illustrates copying one variable (c1) to another (c2) as well as copying a variable part (address part of variable c1) to a variable of compatible element type (c3):
<assign>
   <copy>
      <from variable="c1" />
      <to variable="c2" />
   </copy>
   <copy>
      <from>$c1.address</from>
      <to variable="c3" />
   </copy>
</assign>