Business Objects
E-Mail Brazil_Mark@yahoo.com
Individual Taxpayer
Names (CI_PER_NAME)
Type Name
Elements
Primary Brazil, Mark
Taxpayer ID
Name (Name)
E-mail
Ids (CI_PER_ID)
Name
E-mail Type ID Number
SSN (ID) SSN 777
Home Phone (Phone)
Work Phone (Phone) Phones (CI_PER_PHONE)
Type Phone Number Ext
Work Extension
Phone Ext. (Phone) Home 973-777-7777
Date of Birth (Char)
Work 973-451-7777 111
…
Characteristics (CI_PER_CHAR)
Type Value
DOB 1961-11-15
Premise MO
MO
Single family
Apartment
A utility package may use BO's
to define different types of Multi-unit home – single meter
premises Business
Object Multi-apartment building
Partnership
These have an
owner flag of C1 Sole Proprietorship
Business
Business
Object Corporation
Object
<taxpayerId />
<name />
<email />
<socialSecurityNumber />
Notice how each element is <homePhone />
surrounded with < … />; this is <birthDate />
because we’ve adopted an XML-
like schema definition language
MO Table Field
MO / Table Table / Field
Business
Object IndividualTaxpayer Schema
<taxpayerId />
<name />
<email />
<socialSecurityNumber />
<homePhone /> This schema is invalid as
<birthDate />
its elements don’t have
mapping rules…
Both of these elements are easy to Id Type Phone Type Char Type
map because they reside on the
MO’s primary table (CI_PER)
Flattening Elements
• is= uniquely identifies the row that holds the element’s value
• default= defines the default values of other columns on the row
is= also defines the default is= means that the element mapped to the row on the
values of the identifying columns CI_PER_NAME where PRIM_NAME_SW = ‘Y’ is returned
...
<name mapField="ENTITY_NAME"> Person
Person
<row mapChild="CI_PER_NAME"> Char
<PRIM_NAME_SW is="true" />
<NAME_TYPE_FLG default="PRIM"/> Person
Name Person
</row> Person Id
Phone
</name>
...
Id Type Phone Type Char Type
This mapping means that 3 fields will be populated on
CI_PER_NAME when this BO element is added:
• ENTITY_NAME (holds the entered / supplied name)
• PRIM_NAME_SW is set to Y
• NAME_TYPE_FLG is set to PRIM (primary)
rowRef= saves you from defining the mapping again (and this
saves lots of time when many elements live on the same row)
Notice that mapField= references the column that holds the effective
date; also notice the rowRef= references the effective-dated element
• Rather than use dataType=, you can use mdField= and reference the
meta-data field whose format controls how the field’s value is
validated
IndividualTaxpayer Schema
...
<birthDate mapField="ADHOC_CHAR_VAL"
dataType="date">
Both do the same thing - the bottom <row mapChild="CI_PER_CHAR">
means that you’ve created a meta-data <CHAR_TYPE_CD is="BIRTHDT" />
field with a type of "date" and a label of <EFFDT default="%CurrentDate" />
"Birth Date"; this is more work up front, but </row>
you discover later in this course that this </birthDate>
...
allows for a multi-lingual and translatable
application IndividualTaxpayer Schema
...
<birthDate mapField="ADHOC_CHAR_VAL"
For base-package development, every mdField="BIRTH_DT">
element that doesn't map to a "true ...
column" must have an mdField= attribute, </birthDate>
no exceptions (otherwise the system won't ...
be translatable or multi-lingual)
IndividualTaxpayer Schema
...
<primaryContract mapField="CHAR_VAL_FK1" fkRef="SA" >
<row mapChild="CI_PER_CHAR">
<CHAR_TYPE_CD is="PRIMCON" /> Person MO
<EFFDT default="%CurrentDate" />
</row>
</propertyManager>
... Person
Person Person
Name Char
Person
While the MO logic will validate this char value is a Person Id
Phone
FK (as per the char type), the error message will
be "nasty" (it'll reference the char type). The above
technique means you'll get a good message Id Type Phone Type Char Type
Person
Name Person
Person Id
Phone
IndividualTaxpayer Schema
...
ResidentialAccount Schema
<birthDate mapField="ADHOC_CHAR_VAL"
...
dataType="date" >
<customerType mapField="CUST_CLASS_CD"
<row mapChild="CI_PER_CHAR">
required="true" default="R" />
<CHAR_TYPE_CD is="BIRTHDT" />
<mngGroup mapField="ACCT_MGMT_GRP_CD"
<EFFDT default="%CurrentDate" />
default="ALL" />
</row>
...
</birthDate>
...
Naming Conventions
<taxpayerId mapField="PER_ID"/>
<name mapField="ENTITY_NAME">
Person Maintenance Object (MO)
<row mapChild="CI_PER_NAME">
<PRIM_NAME_SW is="true"/>
<NAME_TYPE_FLG default="Primary"/>
</row> Person
Person
</name> Char
<email mapField="EMAILID"/>
Person
<version mapField="VERSION" /> Name Person
Person Id
Phone
Mapping Elements To
Character Large Object (CLOB) Columns
Person
Remember, when you see this on an ERD,
CLOB it means that this table contains a CLOB
...
<messageTypeCode mapXML="BO_DEFN_AREA" />
<versionNumber mapXML="BO_DEFN_AREA" /> Inbound
<marketTimeStamp mapXML="BO_DEFN_AREA" /> Message
<senderID mapXML="BO_DEFN_AREA" />
CLOB
<recipientID mapXML="BO_DEFN_AREA" />
<txRefNbr mapXML="BO_DEFN_AREA" />
...
These elements are stored in a CLOB
column called BO_DEFN_AREA that
resides on the inbound message table
...
<messageTypeCode mapXML="BO_DEFN_AREA" />
<versionNumber mapXML="BO_DEFN_AREA" />
<marketTimeStamp mapXML="BO_DEFN_AREA" />
<senderID mapXML="BO_DEFN_AREA" />
<recipientID mapXML="BO_DEFN_AREA" /> Inbound
<txRefNbr mapXML="BO_DEFN_AREA" />
... Message
CLOB
<messageTypeCode>AA-101</messageTypeCode>
<versionNumber>123</versionNumber>
... How a given message’s CLOB
looks (this is just simple xml)
...
<messageType mapXML="BO_DEFN_AREA" mdField="MSG_TYPE_CD" required="true" />
<versionNumber mapXML="BO_DEFN_AREA" />
<marketTimeStamp mapXML="BO_DEFN_AREA" />
Notice how we properly used mdField=
<senderID mapXML="BO_DEFN_AREA" />
<recipientID mapXML="BO_DEFN_AREA" /> rather than dataType=
<taxReferenceNumber mapXML="BO_DEFN_AREA" />
<receiveDate mapXML="BO_DEFN_AREA" mdField="RCV_DT" />
...
...
<messageType mapXML="BO_DEFN_AREA" />
Inbound <versionNumber mapXML="BO_DEFN_AREA" />
Message <marketTimeStamp mapXML="BO_DEFN_AREA" />
CLOB <senderId mapXML="BO_DEFN_AREA" />
<recipientId mapXML="BO_DEFN_AREA" />
<taxReferenceNumber mapXML="BO_DEFN_AREA" />
<receiveDate mapXML="BO_DEFN_AREA" dataType="date" />
Char Type Charact.
<serviceAgreementId mapField="FK_CHAR_VAL" >
<row mapChild="CI_CASE_CHAR">
<CHAR_TYPE_CD is="SA ID" />
</row>
Because we will likely have an SQL join </serviceAgreementId>
to a case’s SA ID, you need to put it into ...
a characteristic rather than the CLOB
(can't have indexes for elements in
CLOB's (at least not today))
<messageHeader>
<messageTypeCode>ASDF</messageTypeCode>
<versionNumber>123</versionNumber> Notice the group node
...
</messageHeader>
...
<messageHeader type="group" mapXML="BO_DEFN_AREA">
<messageTypeCode required="true" /> Inbound
<versionNumber required="true" />
<marketTimeStamp required="true" />
Message
<senderID required="true" /> CLOB
<recipientID required="true" />
<txRefNbr required="true" />
</messageHeader>
...
<formType mapField="CASE_TYPE_CD"
StandardTaxpayerElements Standalone Schema default="1040a.07" />
Form1040a BO Schema
<formType mapField="CASE_TYPE_CD"
StandardTaxpayerElements Standalone Schema default="1040a.07" />
Performance
XAI
Summary