The IBM WebSphere Business Integration Adapter for SWIFT supports two kinds of mapping:
The structure of the top-level business object for a SWIFT message, or Msg BO, reflects that of the SWIFT message. WebSphere requires a business object for each SWIFT block. As shown in Table 21, the top-level business object must have at least 5 attributes, one for each SWIFT block.
Table 21. Top-level business object structure
Name | Type | Key | Required | Application specific info |
---|---|---|---|---|
UUID (MQSA prepended) | String | Yes | No | block=0;parse=no |
Swift_01Header | Swift_BasicHeader | No | Yes |
block=1; parse=fixlen |
Swift_02Header |
Swift_Application Header |
No | No |
block=2; parse=fixlen |
Swift_03Header | Swift_UserHeader | No | No |
block=3; parse=delim |
Swift_Data | Swift_Text | No | No | block=4;parse=field |
Swift_05Trailer | String | No | No | block=5;parse=no |
Swift_BlockS (MQSA appended) | String | No | No | block=6;parse=no |
The following rules apply to the top-level business object:
BOPrefix_MTMessageType
where:
BOPrefix = an attribute of the meta-object (MO). For further information on the meta-object, see Static meta-object.
_MT = a constant string.
MessageType = an attribute of block 2 of the SWIFT message. For further information, see All Things SWIFT: the SWIFT User Handbook
An example of a top-level business object name is Swift_MT502.
See Table 20 for the attribute application-specific information.
Figure 6 shows a business object definition for a top-level business object of a SWIFT message. This Msg BO definition was created in the WebSphere development environment.
The application-specific information contains the block number and parsing parameters for each attribute. For further information on attribute application-specific text, see Table 20. The Swift_ attributes correspond to child business objects discussed in the following sections. For a full specification of this sample business object definition, see "Sample top-level Business Object (Msg BO) definition". Of special note is the type for the data block attribute, Swift_MT502Data, which indicates SWIFT message type 502, an order to buy or sell. This attribute corresponds to a child object of the top-level Msg BO that represents block 4 of the SWIFT message. The child object is a message data business object (MsgData BO).
All SWIFT top-level business object definitions are identical to that shown in Figure 6 with one exception: Block 4, shown as Swift_MT502Data, reflects the actual data definition of a specific SWIFT message.
Figure 6. Definition for top-level business
object of a SWIFT message
This section presents a sample definition of a top-level business object, or Msg BO, for a SWIFT message of type MT502--an order to buy or sell.
[BusinessObjectDefinition] Name = Swift_MT502 Version = 1.1.0 [Attribute] Name = UUID Type = String Cardinality = 1 MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false AppSpecificInfo = block=0;parse=no IsRequiredServerBound = false [End] [Attribute] Name = Swift_01Header Type = Swift_BasicHeader ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = block=1;parse=fixlen IsRequiredServerBound = false [End] [Attribute] Name = Swift_02Header Type = Swift_ApplicationHeader ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = block=2;parse=fixlen IsRequiredServerBound = false [End] [Attribute] Name = Swift_03Header Type = Swift_UserHeader ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = block=3;parse=delim IsRequiredServerBound = false [End] [Attribute] Name = Swift_MT502Data Type = Swift_MT502Data ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = block=4;parse=field IsRequiredServerBound = false [End] [Attribute] Name = Swift_05Trailer Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = block=5;parse=no IsRequiredServerBound = false [End] [Attribute] Name = Swift_BlockS Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = block=6;parse=no IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Retrieve [End]
The MsgBlck BO, Swift_BasicHeader, has the format and attributes shown in Table 22. The SWIFT data handler converts each of the SWIFT fields in this block into attributes in the Swift_BasicHeader business object. Note that there is no attribute application-specific information for this business object.
Table 22. Block 1 business object structure
Name | Type | Key | Foreign key | Required | Cardinality | Default | Max length |
---|---|---|---|---|---|---|---|
BlockIdentifier | String | Yes | No | Yes | 1 | 1:a | 2 |
ApplicationIdentifier | String | No | No | Yes | 1 | 1 | |
ServiceIdentifier | String | No | No | Yes | 1 | 2 | |
LTIdentifier | String | No | No | Yes | 1 | 12 | |
SessionNumber | String | No | No | Yes | 1 | 4 | |
SequenceNumber | String | No | No | No | 1 | 4 | |
a The BlockIdentifier attribute includes the delimiter ":" as in "1:". |
See Table 20 for the attribute application-specific information.
Figure 7 shows a block 1 business object definition that has been manually created in a WebSphere development environment. Each attribute name (ApplicationIdentifier, ServiceIdentifier, and so on) corresponds to a field in this SWIFT message block. For further information on this SWIFT message block, see Appendix C, SWIFT message structure, and All Things SWIFT: the SWIFT User Handbook. Specify Type String for each named attribute. Note that there is no attribute application-specific information for the components of this business object.
Figure 7. Block 1 business object
definition
This section presents a sample definition of a block 1 business object for a SWIFT message of type MT502--an order to buy or sell.
[BusinessObjectDefinition] Name = Swift_BasicHeader Version = 1.1.0 [Attribute] Name = BlockIdentifier Type = String Cardinality = 1 MaxLength = 2 IsKey = true IsForeignKey = false IsRequired = true DefaultValue = 1: IsRequiredServerBound = false [End] [Attribute] Name = ApplicationIdentifier Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = ServiceIdentifier Type = String Cardinality = 1 MaxLength = 2 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = LTIdentifier Type = String Cardinality = 1 MaxLength = 12 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = SessionNumber Type = String Cardinality = 1 MaxLength = 4 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = SequenceNumber Type = String Cardinality = 1 MaxLength = 6 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String Cardinality = 1 MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End]
The block 2 MsgBlk BO, Swift_ApplicationHeader, has the format and attributes shown in Table 23. The SWIFT data handler converts each of the SWIFT fields in this block into attributes in the Swift_ApplicationHeader business object. Note that there is no attribute application-specific information for this business object.
Table 23. Block 2 business object structure
Name | Type | Key | Required | Cardinality | Default | Max length |
---|---|---|---|---|---|---|
Block Identifier | String | No | Yes | 1 | 2:a | 2 |
IOIdentifier | String | No | Yes | 1 | 1 | |
MessageType | String | No | Yes | 1 | 3 | |
I_ReceiverAddress | String | No | Yes | 1 | 12 | |
I_MessagePriority | String | No | Yes | 1 | 1 | |
I_DeliveryMonitoring | String | No | No | 1 | 1 | |
I_ObsolescencePeriod | String | No | No | 1 | 3 | |
O_InputTime | String | No | Yes | 1 | 4 | |
O_MessageInputReference | String | No | Yes | 1 | 28 | |
O_OutputDate | String | No | No | 1 | 6 | |
O_OutputMessagePriority | String | No | No | 1 | 6 | |
a The BlockIdentifier attribute includes the delimiter ":" as in "2:". |
The first three attributes in Table 23 are I/O attributes. Attributes that start with I_ are input attributes and are populated during SWIFT-to-business-object conversion. Attributes that start with O_ are output attributes and are populated in business-object-to-SWIFT conversions. The CxIgnore property must be set for business-object-to-SWIFT conversions.
See Table 20 for the attribute application-specific information.
Figure 8 shows a block 2 business object definition that has been manually created in a WebSphere development environment. Each attribute name (BlockIdentifier, IOIdentifier, and so on) corresponds to a field in this SWIFT message block. The definition shown is for the input attributes ( I_) are populated during SWIFT-to-business-object conversion. For further information on this SWIFT message block, see Appendix C, SWIFT message structure, and All Things SWIFT: the SWIFT User Handbook. Specify type String for each named attribute. Note that there is no attribute application-specific information for the components of this business object.
Figure 8. Block 2 business object
definition
This section presents a sample definition of a block 2 business object for a SWIFT message of type MT502--an order to buy or sell.
[BusinessObjectDefinition] Name = Swift_ApplicationHeader Version = 1.1.0 [Attribute] Name = BlockIdentifier Type = String Cardinality = 1 MaxLength = 2 IsKey = false IsForeignKey = false IsRequired = true DefaultValue = 2: IsRequiredServerBound = false [End] [Attribute] Name = IOIdentifier Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = true DefaultValue = O IsRequiredServerBound = false [End] [Attribute] Name = MessageType Type = String Cardinality = 1 MaxLength = 3 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = O_InputTime Type = String Cardinality = 1 MaxLength = 4 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = O_MessageInputReference Type = String Cardinality = 1 MaxLength = 28 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = O_OutputDate Type = String Cardinality = 1 MaxLength = 6 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = O_OutputTime Type = String Cardinality = 1 MaxLength = 4 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = O_OutputMessagePriority Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = I_ReceiverAddress Type = String Cardinality = 1 MaxLength = 12 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = I_MessagePriority Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = true IsRequiredServerBound = false [End] [Attribute] Name = I_DeliveryMonitoring Type = String Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = I_ObsolescencePeriod Type = String Cardinality = 1 MaxLength = 3 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String Cardinality = 1 MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End]
The block 3 MsgBlk BO, Swift_UserHeader, has the format and attributes shown in Table 24. Note that there is attribute application-specific information for this business object: the Tag parameter. For Tag parameters see Table 20.
Table 24. Block 3 business object structure
Name | Type | Key | Foreign | Required | Cardinality | Application specific information | Max length |
---|---|---|---|---|---|---|---|
Tag103 | String | Yes | No | No | 1 | Tag=103 | 6 |
Tag113 | String | No | No | No | 1 | Tag=113 | 6 |
Tag108 | String | No | No | No | 1 | Tag=108 | 6 |
Tag119 | String | No | No | No | 1 | Tag=119 | 6 |
Tag115 | String | No | No | No | 1 | Tag=115 | 6 |
Figure 9 shows a block 3 business object definition that has been manually created in a WebSphere development environment. Each attribute name (Tag103, Tag113, and so on,) corresponds to a field in this SWIFT message block. For further information on this SWIFT message block, see Appendix C, SWIFT message structure, and All Things SWIFT: the SWIFT User Handbook. Specify type String for each named attribute. Note that the application-specific information for the components of this business object are SWIFT tags.
Figure 9. Block 3 business object
definition
This section presents a sample definition of a block 3 business object for a SWIFT message of type MT502--an order to buy or sell.
[BusinessObjectDefinition] Name = Swift_UserHeader Version = 1.1.0 [Attribute] Name = Tag103 Type = String Cardinality = 1 MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false AppSpecificInfo = Tag=103 IsRequiredServerBound = false [End] [Attribute] Name = Tag113 Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = Tag=113 IsRequiredServerBound = false [End] [Attribute] Name = Tag108 Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = Tag=108 IsRequiredServerBound = false [End] [Attribute] Name = Tag119 Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = Tag=119 IsRequiredServerBound = false [End] [Attribute] Name = Tag115 Type = String Cardinality = 1 MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = Tag=115 IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String Cardinality = 1 MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End]
SWIFT block 4 contains the body of the SWIFT message. Block 4 is made up of fields of message tags and their contents on the one hand, and on the other, of sequences of message tags. This data content makes the block 4 business object structure unlike that of blocks 1, 2, and 3. The block 4 business object is the message data business object (MsgData BO).
Every tag and sequence in a SWIFT message is modeled as a child business object of the MsgData BO. Accordingly, a MsgData BO has child objects of two types: field business objects (MsgField BO) and sequence business objects (MsgSeq BO). These business objects reflect how the SWIFT data is formatted in block 4. More specifically, attributes in these business objects model the content (message tags and their content) and order (sequence) that is specified in a SWIFT message format specification. The sequence of the message tags is crucial if the business object definition is to faithfully represent the SWIFT message. For further information on MsgField BOs and MsgSeq BOs, see "Sequence and field business objects".
As an example, view the format specification from the SWIFT Standards Release Guide for MT502, an order to buy or sell.Figure 10 below shows the portion of a business object definition that corresponds to MT502. The business object definition reflects the structure of the message tags and sequences in the SWIFT message:
The format of a MsgData BO is summarized in the sections below.
The naming convention for the MsgData BO representing block 4 of a SWIFT message is as follows:
Swift_MT<message_type>Data
For example:
Name = Swift_MT502Data
Each attribute of the MsgData BO represents one of the following:
Accordingly, the attribute names are the same as those for MsgSeq BOs and MsgField BOs. The naming convention for MsgField BO attributes is as follows:
Swift_<tag_number>_<position_in_the_SWIFT_message>
For example:
Name = Swift_94_1
The naming convention for MsgSeq BO attributes is as follows:
Swift_MT<message_type>_<SWIFT_sequence_name>
For example:
Name = Swift_MT502_B
For further information see "Sequence business object structure" and "Field business object definitions".
The type for MsgData attributes is as follows:
For MsgField BO attributes:
Swift_Tag_<tag_number>
For example:
Type = Swift_Tag_94
For MsgSeq BO attributes:
Swift_MT<message_type>_<SWIFT_sequence_name>
For example:
Type = Swift_MT502_B
The contained object version for the MsgData BO as well as for the its MsgSeq BO attributes is 1.1.0. For example:
[Attribute] Name = Swift_MT502_B Type = Swift_MT502_B ... ContainedObjectVersion = 1.1.0 ... [End]
The relationship attribute property for MsgData BO and its MsgSeq BO attributes is Containment. For example:
[Attribute] Name = Swift_MT502Data Type = Swift_MT502Data ... Relationship = Containment ... [End]
The MsgData BO and its MsgSeq BO attributes have a cardinality property of n. MsgField BO attributes that represent repeating fields also have cardinality n. All others attributes have cardinality 1. For example:
[Attribute] Name = Swift_16_1 Type = Swift_Tag_16 ... Cardinality = n ... [End]
Each MsgData BO definition must contain at least one attribute defined as the key attribute (IsKey = true). The rule is that the first single cardinality attribute in each BO definition must be defined as key attribute.
For example:
[Attribute] Name = Swift_16.1 Type = Swift_Tag_16 ... Cardinality = 1 IsKey = true [End]
In MsgData BO definitions, only MsgField BO attributes have application-specific information; this property is always null for MsgSeq BO attributes. The convention for application-specific information for MsgField BO attributes is as follows:
Tag=nn;Letter=xx;Content=string
where nn is the SWIFT tag number of the field, xx is one or a list of supported letter options for the tag, and string is the value of the qualifier for a non-generic field as described in Table 20. For example:
[Attribute] Name = Swift_16_22 Type = Swift_Tag_16 ... AppSpecificInfo = Tag=16;Letter=S;Content=OTHRPRTY ... [End]
When MsgField BO attributes appear in MsgSeq BOs and the application specific information indicates:
...;Union=True
The MsgField child object--a TagUnion business object and its child objects, TagLetterOption objects--will be populated instead of the DataField attribute. For information on TagUnion business objects, see "Field business object definitions".
As noted above, the connector models sequences and tags in SWIFT messages as sequence business objects (MsgSeq BO) and field business objects (MsgField BO), respectively. Figure 11 illustrates the hierarchical relationship of these business objects.
Figure 11. Field and sequence business
objects in the (block 4) MsgData BO
Figure 12 shows part of a definition for a SWIFT message (MT502) that illustrates a sequence containing field and sequence attributes. The sequence attribute Swift_MT02_B_Order_Details not only includes several attributes of type Tag (for example, Swift_Tag_16, Swift_Tag_94), but also the subsequence Swift_MT502_B1_Price. This subsequence is a repeating optional sequence, and its properties reflect this (Required= no; Cardinality=n). Note that the sequences contain no application-specific information.
Figure 12. A Sequence containing tag and
subsequence attributes
As shown in Figure 13, each sequence business object (MsgSeq BO) attribute indicates one of the following:
There is no limit to the number of subsequences that a MsqSeq BO can nest.
Figure 13. Field and Subsequence Business
Objects in the MsgSeq BO
Figure 14 shows another excerpt of a MsgSeq BO. In this excerpt, the Swift_Tag_ attributes represent MsgField BOs. The Swift_MT502_A1_Linkages attribute is for a child object that is a subsequence MsgSeq BO.
Figure 14. Excerpt from a sequence business
object (MsgSeq BO)
The following rules apply to sequence business objects:
For a sample sequence business object, see "Sample sequence business object definition".
Like a MsgData BO, a MsgSeq BO consists of attributes that are either MsgSeq BOs or MsgField BOs. For information on the format of these attributes, see "MsgData BO format".
This section presents a sample definition of a MsgSeq BO for a SWIFT message of type MT502--an order to buy or sell. The definition is of a Mandatory Sequence A Order to Buy or Sell.
[BusinessObjectDefinition] Name = Swift_MT502_A_General_Information Version = 1.0.0 [Attribute] Name = Start_Of_Block Type = Swift_Tag_16 ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = true IsForeignKey = false IsRequired = true AppSpecificInfo = Tag=16;Letter=R;Content=GENL IsRequiredServerBound = false [End] [Attribute] Name = Senders_Reference Type = Swift_Tag_20 ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = true AppSpecificInfo = Tag=20;Letter=C IsRequiredServerBound = false [End] [Attribute] Name = Function_Of_The_Message Type = Swift_Tag_23 ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = true AppSpecificInfo = Tag=23;Letter=G IsRequiredServerBound = false [End] [Attribute] Name = Preparation_DateTime Type = Swift_Tag_98 ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = Tag=98;Letter=A|C IsRequiredServerBound = false [End] [Attribute] Name = Indicator Type = Swift_Tag_22 ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = n MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = true AppSpecificInfo = Tag=22;Letter=F IsRequiredServerBound = false [End] [Attribute] Name = Swift_MT502_A1_Linkages Type = Swift_MT502_A1_Linkages ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = n MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = End_Of_Block Type = Swift_Tag_16 ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 1 IsKey = false IsForeignKey = false IsRequired = true AppSpecificInfo = Tag=16;Letter=S;Content=GENL IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Retrieve [End]
WebSphere represents every SWIFT tag as a field business object (MsgField BO). Each MsgField BO is modeled using the SWIFT generic field structure, even if the field is non-generic. WebSphere uses two additional business object models to represent the combination of letters and options used to represent and combine SWIFT message components as subfields in business objects:
As shown in Figure 15, each MsgField BO contains five attributes, including one and only one TagUnion BO, with the data type shown in parentheses () below:
Figure 15. Attributes and business objects
in the MsgField BO
The content and order of all subfields other than the SWIFT Qualifier and Issuer Code (IC) are captured in the child object of DataField, which is the TagUnion BO and its child objects, TagLetterOption BOs. The attributes and business objects shown in Figure 15 are discussed in the section below.
The naming convention for a MsgField BO is as follows:
Swift_Tag_<N>
where N stands for the message number. For example:
Name = Swift_Tag_22
The naming convention for a TagUnion BO is as follows:
Swift_Tag_Union_<tag_number>
where tag_number is the numeric representation of tag number. For example:
Name = Swift_Tag_Union_20
The naming convention for a TagLetterOption BO is as follows:
Swift_Tag_Union_<tag_number>_Opt_[<letter_option>]
where tag_number is the numeric representation of tag number and [<letter_option>] is the letter option when a tag is associated with a letter. If the tag has no letter associated with it, then the name ends at Opt.For example:
Name = Swift_Tag_Union_20_Opt_C
The names of the five attributes in a MsgField BO are as follows:
The names of attributes in TagUnion BOs are as follows:
Swift_<tag_number>_[<letter_option>]
where tag_number is the numeric representation of the tag number and the square brackets signify that the letter is appended only when it is associated with the tag. For example:
Swift_20_C
The name of the attribute in TagLetterOption BOs is the concatenation of words in the subfield name shown in the SWIFT format specification table. The first letter of each word in the concatenated string is always capitalized, with subsequent letters in the word appearing in lowercase, regardless of how the words are spelled in the SWIFT format specification. Spaces and non-alphabetic symbols are left out of the concatenated name. If a field has no subfield, the word Subfield is used as an attribute name. For example, for the subfield "Proprietary Code" in 95R, the corresponding attribute name in the definition of TagLetterOption BO Swift_Tag_Union_95_Opt_R is as follows:
Name = ProprietaryCode
The type for MsgField attributes is as follows:
For example, in a MsgField BO definition, the type for a Swift_Tag_20 attribute would be listed as follows:
[Attribute] Name = DataField Type = Swift_Tag_Union_20
The type for attributes in the TagUnion BO is the name of the TagLetterOption BO child object. For example, in a TagUnion BO definition for Swift_Tag_Union_20, the type for the TagLetterOption attribute is as follows:
[Attribute] Name = Swift_20_C Type = Swift_Tag_Union_20_Opt_C
The type for attributes in TagLetterOption BOs is always String.
The contained object version for the MsgField BO, the TagUnion BO, and the TagLetterOption BO is 1.1.0. For example:
as well as for the its MsgSeq BO attributes is 1.1.0. For example:
[Attribute] Name = Swift_20_C Type = Swift_Tag_Union_20_Opt_C ... ContainedObjectVersion = 1.1.0 ... [End]
The cardinality of attributes in TagUnion BOs and TagLetterOption BOs is always set to 1. For example:
[Attribute] Name = Swift_20_C Type = Swift_Tag_Union_20_Opt_C ... Cardinality = 1 ... [End]
In each MsgField BO, the attribute Letter must be defined as the key attribute.
For example:
[Attribute] Name = Letter Type = String IsKey = true ... [End]
The first attribute of a TagUnionBO is defined as key.
The first attribute of TagLetterOption BO is defined as key.
The AppSpecificInfo attribute definition of a TagLetterOption BO provides crucial SWIFT message formatting information for business object subfields. The AppSpecificInfo attribute must contain the following information:
Format=***;Delim=$$$
where
*** stands for the SWIFT subfield format specification, which excludes delimiter information
$$$ stands for one or more letters that constitute the delimiter between the current subfield and the next subfield.
When the delimiters are CrLf, the symbol string CrLf specifies that a carriage return is immediately followed by a line feed.
For example, the AppSpecificInfo attribute for a TagLetterOption BO, Swift_Tag_Union_95_Opt_C, might appear as follows:
[Attribute] Name = CountryCode Type = String ... AppSpecificInfo = Format=2!a;Delim=/ ... [End]
For a sample object and attribute definitions, see "Sample MsgField BO, TagUnion BO, and TagLetterOption BO definitions".
This section presents a sample definition of a MsgField BO definition that illustrates TagUnion and TagLetterOption attributes and objects.
The sample MsgField BO, Swift_Tag_21, is as follows:
[BusinessObjectDefinition] Name = Swift_Tag_21 Version = 3.0.0 [Attribute] Name = Letter Type = String MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Qualifier Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = IC Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Data Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = DataField Type = Swift_Tag_Union_21 ContainedObjectVersion = 3.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Delete [End] [Verb] Name = Retrieve [End] [Verb] Name = Update [End] [End]
Note that the DataField attribute indicates a TagUnion BO, whose name is defined by the Type attribute, Swift_Tag_Union_21. Here is that TagUnion BO, which lists as attributes all the letter options for Swift_Tag_21.
[BusinessObjectDefinition] Name = Swift_Tag_Union_21 Version = 1.1.0 [Attribute] Name = Swift_21 Type = Swift_Tag_Union_21_Opt ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = true IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_A Type = Swift_Tag_Union_21_Opt_A ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_B Type = Swift_Tag_Union_21_Opt_B ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_C Type = Swift_Tag_Union_21_Opt_C ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_D Type = Swift_Tag_Union_21_Opt_D ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_E Type = Swift_Tag_Union_21_Opt_E ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_F Type = Swift_Tag_Union_21_Opt_F ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_G Type = Swift_Tag_Union_21_Opt_G ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_N Type = Swift_Tag_Union_21_Opt_N ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_P Type = Swift_Tag_Union_21_Opt_P ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = Swift_21_R Type = Swift_Tag_Union_21_Opt_R ContainedObjectVersion = 1.0.0 Relationship = Containment Cardinality = 1 MaxLength = 0 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Retrieve [End] [End]
Note that IsKey = true for the first attribute in the TagUnion BO above, Swift_21.
The attribute Swift_21_A indicates a child object TagLetterOption BO. This child object's name is defined by the attribute's Type attribute, Swift_Tag_Union_21_Opt_A. Here is that TagLetterOption BO:
[BusinessObjectDefinition] Name = Swift_Tag_Union_21_Opt_A Version = 1.0.0 [Attribute] Name = ReferenceOfTheIndividualAllocation Type = String MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false AppSpecificInfo = Format=16x IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Retrieve [End]
Note that the only attribute of this TagLetterOption BO, ReferenceOfTheIndividualAllocation, is a concatenation of the corresponding SWIFT subfield name for this tag option, with the first letter of each word in uppercase. The Qualifier and Issuer Code subfields are excluded from the attribute of the TagLetterOption BOs. The IsKey property is also true for this attribute.
The TagLetterOption BO can represent simple and complex SWIFT field and subfield formatting. Here is a business object definition for Swift_Tag_Union_22_Opt, a TagLetterOption BO whose attributes and application-specific information specify the subfield formatting for SWIFT Field 22, a function for a Common Reference between a sender and receiver. Notice that the AppSpecificInfo for Function specifies the format and the delimiter with which to parse the data in the SWIFT message. CommonReference is the concatenation of the subfield name. The AppSpecificInfo for CommonReference corresponds to that shown in Figure 16.
[BusinessObjectDefinition] Name = Swift_Tag_Union_22_Opt Version = 1.0.0 [Attribute] Name = Function Type = String MaxLength = 255 IsKey = true IsForeignKey = false IsRequired = false AppSpecificInfo = Format=8a;Delim=/ IsRequiredServerBound = false [End] [Attribute] Name = CommonReference Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false AppSpecificInfo = Format=4!a2!c4!n4!a2!c IsRequiredServerBound = false [End] [Attribute] Name = ObjectEventId Type = String MaxLength = 255 IsKey = false IsForeignKey = false IsRequired = false IsRequiredServerBound = false [End] [Verb] Name = Create [End] [Verb] Name = Retrieve [End] [End]