Giermek Pawel
Giermek Pawel
Pawel Giermek
Bachelor’s Thesis
04.2012
Pages Language
45 English
Confidential Permission for web
publication
( ) Until (X)
Title
PROCESSING BUSINESS DATA AND STATISTICS FROM IBM WEBSPHERE COMMERCE
Degree Programme
Software Engineering
Tutor(s)
Salmikangas, Esa
Assigned by
Descom Oy
Abstract
The objective of the thesis is to illustrate how business data can be retrieved and
modified based on Groovy use. A variety of possibilities to extract and ways to change
information required by a customer are presented.
First, the thesis presents simple examples to acquaint the reader with the topic. Tasks
and changes made are more advanced and complex with time. To make it simple
enough for people not familiar with SQL or WebSphere commerce application,
examples are based on previous examples, thus it is only a matter of expanding the
sample applications shown on the beginning.
The presented examples are fundamental: if a script is once written within Groovy aid,
it can be reused any time it is needed for a similar task. Numerous samples that were
listed during implementations prove the usefulness of developed applications.
The results shown are based on an existing application; however, not all presented data
is authentic due to confidentiality issues. The conclusions chapter summarizes and
proves the legitimacy of the topic: comparing additional examples based on previously
shown working applications highlights all benefits for user.
Keywords
WebSphere, Groovy, database access, data retrieval, Java 2 Enterprise Edition, chart
generating, HTML file generating, differences between Java and Groovy
Miscellaneous
CONTENTS
1 INTRODUCTION ....................................................................................................... 5
2 THEORETICAL BASIS ............................................................................................. 6
2.1 Welcome to the Groovy world ............................................................................. 6
2.2 WebSphere content .............................................................................................. 9
2.2.1 WebSphere introduction ................................................................................ 9
2.2.2 Java 2 Enterprise Edition............................................................................. 10
2.2.3 Foundation of J2EE ..................................................................................... 12
3 IMPLEMENTATION ............................................................................................... 16
3.1 Setting environment ........................................................................................... 16
3.2 Basic database connection .................................................................................. 19
3.3 Advanced database connection .......................................................................... 21
3.4 Sending data to HTML file ................................................................................ 24
3.5 Data chart generator ........................................................................................... 27
3.5.1 Pie chart ....................................................................................................... 28
3.5.2 Line chart..................................................................................................... 33
3.6 URLs parsing...................................................................................................... 35
4 RESULTS.................................................................................................................. 37
5 DISCUSSION ........................................................................................................... 43
REFERENCES ............................................................................................................. 45
APPENDICES .............................................................................................................. 46
4
FIGURES
1 INTRODUCTION
An important fact is to divide clients: in this project, despite the fact that it is written
based on WebSphere Commerce application, a client is not a customer who buys
products on a website. A client is someone, who reports issues such as a not existing
tag or a broken link, and usually works within a support team of a company using
Commerce application.
An additional important objective was to make all scripts written in Groovy clear and
universal, thus a little modification of task (like change of number URL link returned)
would not cause necessity to diametrically change whole code. This is significant for a
company, which supports many WebSphere Commerce applications, because it helps
to save time, money, and helps to limit unnecessary work.
6
2 THEORETICAL BASIS
This whole paragraph is based on books about Groovy listed in references alongside
with http://groovy.codehaus.org/. It is important to understand how it works and
what connections it has to IBM implementations.
Other good enhancements are closures – anonymous code blocks that are possible
to declare outside of method or class (they will be executed only when called, not
when defined). Generally, closure is assigned to a variable (it is identifier of this
closure), which later is used to call on it. The real benefit that comes out of this is
that it can be used anywhere in the program – thanks to that closures can be passed
as arguments to other closures or methods.
What also comes with Groovy is support for collections (lists, maps and new
structures: ranges). The most important difference between Java is that types of
items belonging to one collection can be different without special declaration (it can
be anything that is a subclass of java.lang.Object):
Java examples:
List<String> examp1 = new ArrayList<String> (Arrays.asList("John",
"Doe", "male", "Chicago", "teacher"));
1
except when there is need to change course or default behavior
8
Groovy examples:
def examp1 = ['John', 'Doe', 'male', 'Chicago', 'teacher']
def examp2 = ['John', 'Doe', false, 22, 1]
Range is a sequence, which has a start and an end, as follows in the example below:
New classes, which helps with for example Extensible Markup Language
(XML) processing or allows access to database
Methods to an existing class of JDK (it can be done, because of object calls
redirecting through its metaclass)
New operators:
Searching: =~ (string on the left side will be used to create Matcher
object; string on the right side will be pattern; in other words, it can be
treated as two-dimensional array)
Matching: ==~ (depending on comparing string from left side to the
pattern on the ride side appropriate Boolean will be returned)
For the regex pattern: ~Pattern (string will be compiled as regex
pattern).
work with regexes easier (other are: enhancement of Pattern and Matcher with
additional methods and syntax that was simplified).
In addition, there are two types of string supported: default Java strings
(java.lang.String) and those introduced by Groovy, GStrings (groovy.lang.GString);
important is that GStrings are not extending String, because it is final. Instances of
those can still be used as normal Strings – they are coerced into Java Strings. GStrings
are especially useful, when strings have to be built dynamically.
This chapter with all its content was based on IBM WebSphere V4.0 Advanced
Edition Handbook – WebSphere commerce application is product of IBM that is why
the most accurate information can be found in their tutorial book.
The IBM WebSphere software platform is a set of solutions designed for e-business.
It uses standards, which makes it easy to change and it also allows quick adaptation
for the required purposes. Functionalities coming with it are listed below:
Integrated support for key Web services open standards, which is production-
ready for the deployment of enterprise Web service solutions for
interoperability and business-to-business applications
A graphical user interface (GUI), the WebSphere Administrative Console, for
administering the components of the Advanced Edition environment
Unparalleled connectivity provided by a preview implementation of Java 2
Connectivity (J2C).
(Compliete list taken from IBM WebSphere V 4.0 Advanced Edition
Handbook)
Applications based on WebSphere are mostly integrated with Web clients (thin or
thick) and can be integrated with (running in application servers) procedural
applications. Within the application there are components responsible for fulfilling
different objectives, like:
suite (used for verification of harmony between products and platform standards)
and reference implementation.
There are also defined roles, which are performed through the development and
deployment of application:
The most significant benefits of Java 2 Enterprise Edition belong to the customers.
Unified approach to securing application components, integration with legacy
security schemas and single sign-on support are provided by elastic security model.
Database connection pooling and distribution of containers across multiple systems
improves scalability. The architecture is based on standards, which take advantage of
Java run-anywhere technology. Vendors’ unique solutions provide a wide choice of
components and tools intended for application development. Reliable business
transactions are achieved thanks to the services which provide integration with
existing systems.
SUN defined Enterprise JavaBeans (EJB) specification and that is base for Java 2
Enterprise Edition (IBM WebSphere V4.0 Advanced Edition Handbook). It is used by
13
Services for enterprise bean instances are provided by EJB containers – they create
bean instances, manage pools and destruction of those. Besides that, containers
allow services such as security and persistency to the beans they manage. Services of
a container are used to call out an enterprise bean and its service level is specified at
deployment time. The container must communicate with the enterprise server (with
services implementation) to get access to the service of the enterprise-bean instance
– transaction and naming services of JNDI (Java Naming Directory Interface) must be
provided by EJS (e.g. WebSphere Application Server). It is required that for each
14
application component type in Java 2 Enterprise Edition there must be one container.
Thanks to the existence of container between components of the application and the
set of services a view of the APIs can be provided. Different containers provide
different services:
Session instance bean belongs to a client. Its task is to maintain all the information as
long as a client is connected (which all are lost when e.g. a server crashes or a client
leaves). As/For example, a shopping cart can be used. As long as clients are
connected, all their chosen products must be stored, however, when they leave,
everything is deleted. Usually, a container must serve multiple clients, so it creates a
pool of session bean instances. As was shown on Figure 3, there are two types of
session beans:
Stateful – the same bean instance must be allocated by the container for
every method call. New instances are created? when (on the home interface)
create() is called out by the client
Stateless – different bean instance can be allocated by the container for every
method call, which means two various methods invokes can be served by a
different bean instance. These session beans are effective, because the
container does not need a great number of instances in order to serve a large
number of clients.
3 IMPLEMENTATION
To start the development of an application written with the aid of Groovy, there is
necessity to prepare an appropriate environment. There are few common
possibilities:
Using basic console is good to get to know language and its differences compare to
Java, but it could be difficult to implement any advanced solutions. In addition,
console does not feature text correction, hints about methods, imports and any
advanced possibilities provided by other IDE. Eclipse and IntelliJ IDEA IDEs allow
integrated plugins, which work as the console, but have additional helpful features.
During implementation, following technologies will be used:
The installation of first three listed above was made with the default settings of
Windows installers, thus it is not shown here. To work on IntelliJ IDEA with Groovy
projects it is required to go to the File -> Settings -> Plugins, choose Groovy and
install it. During creation of a new project, JSDK and Groovy SDK must be chosen – it
is important to do it correctly, since otherwise there is no possibility to correctly
compile and run the applications. These settings can be changed later by modifying
done in File -> Project Structure. Default paths to those (after installation with
default settings, which was mentioned earlier) are shown on Figure 4 and Figure 5:
After that, the environment is set and ready for some basics applications, like Hello
World. For enabling a possibility of creating more advanced applications, additional
libraries must be installed and added in File -> Project Structure -> Modules->
Dependencies listed below are as follows:
Database connection:
db2jcc.jar
db2jcc_license_cu.jar
Charts handling:
jfreechart-1.0.14.jar
jcommon-1.0.17.jar
poi-ooxml-3.8-beta5-20111217.jar
poi-oxml-schemas-3.8-beta5-20111217.jar
poi-scratchpad-3.8-beta5-20111217.jar.
java.lang.ClassNotFoundException: driver
After searching, the solution was found - it was necessary to import two libraries
required for correct connection with the database - see 3.1 Setting environment
(Fadel, A. 2011. DB2 java.lang.ClassNotFoundException: com.ibm.db2.jccDB2Driver.
http://ahmedfadelblog.blogspot.com/2011/06/db2-
javalangclassnotfoundexception.html). When the connection was established, it was
possible to start working with data such as retrieving it from database:
20
There is also possibility to enhance the way queries are executed, by using additional
feature provided by Groovy, which is DataSet - it is a class that provides help in
establishing connection with database and processing queries, using for this purpose
operators and POGO fields (Stevenson, C., King, P., Strachan, J. DataSet class
documentation. Accessed on 15 March 2012.
http://groovy.codehaus.org/api/groovy/sql/DataSet.html)
21
The example shown in section 3.1 is straightforward and its aim is to show how easily
data can be obtained and presented. However, it is not a good idea to maintain
connection establishment, query and other methods (if there are any) in one file, due
to security and confidentiality. To improve those it can be divided into separate files,
which would also make parts of script easier for implementing in other scripts. That
kind of solution does not require advanced implementation and can be easily
conducted. Starting from this paragraph, divide shown on Figure 7 will be used as
basic configuration thus later it will not be discussed anymore.
Query.groovy contains (in this and next examples) every query, which was used to
retrieve data from database with methods responsible for access to those queries. In
main.groovy, connection with db2 is established. Variable environment enables the
possibility of switching between “workspaces”, e.g. from production server to
localhost (without necessity of changing URL, login and others every time). Next,
GroovyClassLoader and ConfigSlurper are used to load configuration from
ConfigProperties:
Finally, a new connection is established and queries can be called out by using
variable connection and the results are printed in console. Figure 10 presents how
queries are executed on the Query object qu:
That kind of division has many benefits: the code is cleaner, the connection and
queries are gathered into separated places, thus finding and modifying them is
easier.
Previous examples are very useful for users who know basic SQL alongside with the
meaning of different fields of database, because all returned data were printed in
basic console output. However, when a person is inexperienced with those or has no
need of knowing anything about technical details, the situation requires other
solutions. Exporting all retrieved data to HTML file is one of the possibilities.
Connection to database and handling queries does not change (compering to the last
example). By following instructions on generating HTML report (Bashar, A.-J., Groovy
and Grails Recipes, 2009, 146), it is required to add a fragment responsible for
handling HTML part to the last example. For this purpose, two additional features
will be used:
First, FileWriter variable holding path and name for output file is required so it can be
passed to MarkupBuilder. When this is done, the task limits to HTML knowledge and
proper setting of each attribute as described below:
Configuration of HTML structure that was just mentioned is shown on Figure 11:
To enhance final appearance of generated table, normal HTML coding style can be
used, like:
Borders
Margins
Background color of specific elements
26
Alignment
Nested tables
Grouping.
Data presented in that way can be shown to client or investor. By proper descriptions
of fields, this is clear information to a person who receives it. An additional benefit is
the mobility - .html file can be easily sent via mail or chat.
Although last example showed that exporting to .html file is user-friendlier than raw
console output, it still is not in form for business meetings or negotiations. Data
obtained from database can also be used for creating presentations and showing
statistics. Information retrieved can be typed manually into more advanced programs
(MATLAB or Excel) which are able to create charts or have other methods for
processing those, however it requires time and at least one person attention each
time data would have to be typed. Groovy alongside with Java methods gives
possibility to make whole process semi-automatic.
For creating a pie chart a different approach was taken than when creating a line
chart. Instructions for this purpose were found on webpage from reference,
therefore methods and solutions shown there are not described here in detail
(Vishal, S. 2010. Generating Dynamic charts in Grails. Accessed on 22 March 2012.
http://www.intelligrape.com/blog/2010/03/31/generating-dyanmic-charts-in-
grails/).
First of all two libraries, which were already mentioned, had to be imported
(jfreechart-1.0.10.jar and jcommon-1.0.13.jar). When it was done, it was necessary to
create the whole catalogue structure, basing on the fundaments created in
paragraph 3.3.
29
The main issue after implementing methods responsible for chart and label
generation was to export and convert the data retrieved by queries, therefore the
method drawPieChart would be able to use it for its purpose. One of possible
solution is to modify the way of handling query results already shown:
connection.eachRow(qu.firstQuery())
{println "${it.firstQueryResult}"}
Into call out which will allow holding and reusing the retrieved data – in place of
println method it is enough to put assigning to a variable, like in the example below:
def result1
connection.eachRow(qu.firstQuery())
{result1 = "${it.firstQueryResult}"}
30
Where width and height are fixed sizes of a chart, keys are labels for descriptions and
values are data, which creates the chart. It is not visible, but List values must contain
only Integer elements – for this reason, variable result1 must be cast from its current
type, to Integer (variable could not be declared as Integer, because later it is used as
container for String). In Groovy it can be done as shown on the code snippet
presented below:
int result1_toInt
result1_toInt = result1.toInteger()
When all results were cast into Integer, the only issue that was left to be done was to
create two lists containing labels and data. After that, all acquired values had to be
inserted into them – so that drawPieChart could be called out with all its arguments
(without explicit cast, compiler returns an error stating about missing method call
out). The snippet presented below shows how it can look in practice (values typed as
width and height are typed manually, but those can also be asked from user):
def labelList = []
def valueList = []
labelList = [label1, label2, label3, label4, label5, labe6]
valueList = [result1_toInt, result2_toInt, result3_toInt,
result4_toInt, result5_toint, result6_toInt]
drawPieChart( labelList, valueList, 700, 500)
31
Depending on the complexity of the called out queries obtaining result could take
some time. After it is finished, on the default location, a .png is created, which is
presented on FIGURE 14:
To create complete line chart with using Groovy, sample from reference was taken as
starting point (Accessed on 22 March 2012.
http://groovy.codehaus.org/Plotting+graphs+with+JFreeChart). This example creates
line chart with static data using for that purpose Swing library. In this
implementation, the following elements were exchanged:
When chart was generated it had to be saved as file. It was possible to achieve
thanks to use of method presented on the snippet below (image does not have to be
saved as PNG with only those results – method saveChartAsPNG has also other call
outs; alternatively saveChartAsJPEG can be used):
Creating a product catalogue requires the latest information – the folder must be
accurate and consistent with content, which is available for customer to see and
obtain using the application. For that purpose, products have two unique numbers:
their ID and barcode, both stored in database. When the catalogue was to be
created, there was a request for confirming cohesion between what a client had and
what was stored in database. For this purpose, parsing URLs (basing on .xls / .xlsx
files) was the main execution method.
The first important issue was to correctly handle .xls / .xlsx file. After connection with
the database was established (for this purpose, the example from the previous
paragraphs was used), there was a necessity to open Microsoft Office Excel file, to
obtain data that would serve as the source for what the queries should concern. For
this purpose, additional features had to be used:
At this point, .xls / .xlsx file was open; however, there was no possibility to work with
data provided that way (without additional methods). Changing this fact was possible
by converting Microsoft Office Excel basic structures (cells) into a format that can be
handled by Groovy (e.g. Integer or String). That kind of parsing was achieved by
writing method cellToString – it was responsible for creating a new (null) cell and
assigning its type as String, copying the content of an important cell into that new
cell.
When it was done, all unwanted symbols were cast out and the content could be
returned as basic String, which is shown on Figure 16:
Next, that returned String had to be checked and (eventually) corrected – the proper
length, symbols and confirmation, so that nothing was lost in Microsoft Office Excel
cells due to the format or conversion. Assuming that String fulfilled all requirements,
it was sent to be part of queries – retrieving product ID depended on it. When ID was
obtained, there was a way of getting all the remaining details, like name (alongside
with normalizing it) and the whole URL address (also, with checking that the category
structure was preserved). The output can be adjusted, depending on clients’ needs. It
can be a raw console output pasted into an email or the links can be directly saved
into text file, which can be sent as an attachment.
37
4 RESULTS
The implementation shows that the data obtained from database can be handled in
many ways, where the condition was: what should be the final result? Smoothing the
console output was shown by implementing data processing into:
.html file
Charts, depending on the situation
Pie (PiePlot3D; .png file created)
Line (ChartFactory; Swing packet output or .png file)
Besides that, the last example in the implementation (paragraph 3.6 URLs parsing)
proves, how great help Groovy provides: in a few minutes, all products which were
required for catalogue creation were obtained based on their barcodes, whereas
without using the parsing script it could take few hours to check those manually.
The benefits, which come alongside with using Groovy, are numerous, which was
proven during the implementation process and can be shown in a form of list:
As a proof, a comparison between basic Java and Groovy Java Beans size and
complexity can be done, as shown on Figure 17 and Figure 18:
For confirming also that the data was retrieved as a basic console output, an
additional example can be presented – such as obtaining promotion codes of specific
promotion from database. To fulfill this purpose, the following query was used:
Using the presented query for this purpose in the application shown in paragraph
3.3, the information retrieved looks like the one presented on Figure 19:
To show the contrast in output, this query was also used also in the application
presented in paragraph 3.4 (with a modification of HTML file) – the output of this is
presented on Figure 20:
The difference in those two outputs is obvious and undeniably shows the advantage
of .html file. When it adds with other benefits that were listed, it makes the script
destined for processing data into webpage a useful tool.
The most significant dissimilarity can be observed between the console output and
the charts. Despite the fact that the second one is better when a quick analysis of
data is needed and use information is provided in the work (e.g. fixing missing
products or analyzing why status of order stopped on ‘pending’ and is not processing
to ‘sent to the customer’) in situations that require attention and understating of a
third person (e.g. client), charts are better for presenting the gathered information.
To visualize it, the queries below (showing how much products from the database
could be bought) were used in applications from paragraphs 3.3 and 3.5.1:
A result presented in that way is totally useless for someone not familiar with
database structure. The output shown in the Figure 22 presents results of execution
of the second mentioned application, which is more convenient and user-friendly:
There are many ways to improve the applications presented in the implementation:
During the whole research, data (like queries, labels) was input manually by
the programmer, which normally is forbidden for a simple reason: the client
usually does not have access to that part of the code, therefore everything
should be available to be input dynamically. It is possible to write additional
scripts that would handle the data input, by dialog windows or by asking for
input file with all required Strings
Charts presented in paragraph 3.5 (despite the fact that they present
different data gathered) were all made by using JFreeChart library. It is not
43
5 DISCUSSION
The main idea of the thesis was to show a dialog between database and client, which
has to be served by a third person from a support team – that implicates the way of
data input: manual, not using additional scripts. Implementing also that part of the
problem would make the code too complex and could give the reader a false view of
the objective of this research.
Initially, there was an idea to show also a different approach in retrieving data from a
database, namely by using (include in groovy) Dataset, however, this idea was
dropped in the process of the implementation. Despite the fact that it is relatively
simple to understand and implement it would have made unnecessary complications.
Dataset use is good in applications designed for real alongside WebSphere commerce
applications; as far as research that is focused on showing an idea is concerned, it
would be a case of ‘form over content’.
During the research process there was a great deal of new issues. The first and the
most important one was Groovy language itself. Helpful with getting familiar with it
were the facts that it was based on Java language with only additional features.
There were many clues and hints for beginners listed in the sources below:
http://groovy.codehaus.org/Getting+Startd+Guide
Beginning Groovy and Grails by Judd Christopher M.
Groovy and Grails Recipes by Bashar A.-J
It is quite simple to start developing with the aid of Groovy, thanks to the
hypertrophied community and easy access to sources. Documentation on
44
Groovy is not designed only for this concrete platform (WebSphere commerce) - it is
a multiplatform and can be implemented in many environments. Despite that, it is
not a great trouble to make it work properly on that kind of highly specialized
platform. It would not have taken a considerable amount of time to prepare a whole
environment working (for basic applications) and a little longer to make more
advanced program functioning.
Knowing basics was fundamental for solving later issues, namely such as the one
described in paragraph 3.2 or Caught:groovy.lang.MissingMethodException: No
signature of method (which can occur if wrong arguments are passed).
After getting familiar with the basics of Groovy, it was possible to start developing all
planned applications. During the implementation, different approaches were chosen
to present possibilities of data processing and ways of showing it to the third person.
Creating .html file enables mobility of data and also remote access to it without
interference with the input. The same benefits come from creating charts;
additionally in those cases data is available in the form proper for presentations. In
addition, information shown that way is not too complex and is easier to understand.
URL parsing shown in the last paragraph of the implementation serves as a practical
example that could be ‘as is’ implemented into working WebSphere commerce
application, without the necessity of great load of code refactoring.
Charts were created only by the use of JFreeChart library to make the complexity of
code as simple as possible. It was not the only possible way for drawing those (which
also had been mentioned), however, it was the only manner shown and it was done
on purpose – again it was for the sake of the main objective of this thesis.
45
REFERENCES
Bashar, A.-J. 2009. Groovy and Grails Recipes. New York: Apress
Endrei, M., Cluning, R., Daomanee, W., Heyward, J., Iyengar, A., Mauny, I., Naumann,
T., Sanchez, A. 2002. IBM WebSphere V4.0 Advanced Edition Handbook.
Judd, C. M., Nusairat, J. F., Shingler, J. 2009. Beginning Groovy and Grails: From
Novice to Professional. New York: Apress.
Koenig, D., Glover, A., King, P., Laforge, G. & Skeet, J. 2007. Groovy in Action. New
York: Manning.
http://docs.oracle.com/
http://groovy.codehaus.org/
www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/ChartUtilities.html
46
APPENDICES
APPENDIX 1. WebSphere Commerce database table: CATENTRY
NULL
INTEGER
FIELD2 Customizable.
NULL
DECIMAL (20,5)
FIELD3 Customizable.
NULL
VARCHAR (254)
FIELD4 Customizable.
NULL
VARCHAR (254)
FIELD5 Customizable.
NULL
Indicates whether this CatalogEntry can
INTEGER
BUYABLE be purchased individually: 1=yes and
NULL
0=no.
VARCHAR (64)
OID Reserved for IBM internal use.
NOT NULL
The BaseItem that this CatalogEntry
relates to. This column should only be
BIGINT populated for CatalogEntries that are of
BASEITEM_ID
NULL type ProductBean, PackageBean or
DynamicKitBean. BaseItems are used for
fulfillment.
CHARACTER (1)
STATE NULL, DEFAULT Reserved for IBM internal use.
'1'
DOUBLE
RANK Relative search ranking.
NULL
48
This table defines all possible types of CatalogEntries. Examples of CatalogEntry types
are ProductBean, ItemBean, PackageBean, BundleBean and DynamicKitBean.
The inventory table. Each row of this table contains a quantity amount representing
the inventory for a particular CatalogEntry available to be shipped from a
FulfillmentCenter on behalf of a Store. This table cannot be used in conjunction with
Available To Promise (ATP) inventory allocation. It is used only when ATP inventory is
not enabled (refer to the ALLOCATIONGOODFOR column of the STORE table), and is
used by the default implementations of the non-ATP inventory task commands:
ResolveFullmentCenterCmd, CheckInventoryCmd, UpdateInventoryCmd, and
ReverseUpdateInventoryCmd.
multiple of CATENTSHIP.QUANTITYMULTIPLE,
and represents the actual quantity being
purchased, in the unit of measurement
specified by
CATENTSHIP.QUANTITYMEASURE.
DECIMAL The total sales taxes associated with this
TAXAMOUNT (20,5) OrderItem, in the Currency specified by
NULL CURRENCY.
DECIMAL
The total of the monetary amounts of the
(20,5)
TOTALADJUSTMENT OrderItemAdjustments for this OrderItem, in
NULL,
the Currency specified by CURRENCY.
DEFAULT 0
DECIMAL The total shipping taxes associated with this
SHIPTAXAMOUNT (20,5) OrderItem, in the Currency specified by
NULL CURRENCY.
An estimate of when sufficient inventory will
TIMESTAMP
ESTAVAILTIME be available to fulfill this OrderItem. This
NULL
estimate does not include the shipping offset.
INTEGER
FIELD1 Customizable.
NULL
A mnemonic description of the OrderItem,
VARCHAR suitable for display to the customer. This field
DESCRIPTION (254) is usually NULL when CATENTRY_ID is not
NULL NULL, since in that case the CatalogEntry
description can be displayed.
VARCHAR
FIELD2 (254) Customizable.
NULL
BIGINT
ALLOCATIONGROUP Reserved for IBM internal use.
NULL
DECIMAL The shipping charge associated with this
SHIPCHARGE (20,5) OrderItem, in the currency specified by
NULL CURRENCY.
If PRICE was converted from a currency
DECIMAL
different from the OrderItem currency,
BASEPRICE (20,5)
BASEPRICE is the price that was converted to
NULL
arrive at PRICE.
CHARACTER
BASECURRENCY (3) The currency of BASEPRICE.
NULL
VARCHAR (64)
TRACKNUMBER Reserved for IBM internal use.
NULL
TIMESTAMP
TRACKDATE Reserved for IBM internal use.
NULL
INTEGER Contains the following bit flags indicating
PREPAREFLAGS
NOT NULL, special processing to be performed by the
52
INTEGER
FIELD1 Customizable.
NULL
BIGINT
ADDRESS_ID The billing address, if known.
NULL
DECIMAL (20,5)
FIELD2 Customizable.
NULL
PROVIDERORDERNU INTEGER
Reserved for IBM internal use.
M NULL
CHARACTER (1)
SHIPASCOMPLETE NOT NULL, Reserved for IBM internal use.
DEFAULT 'Y'
VARCHAR (254)
FIELD3 Customizable.
NULL
DECIMAL (20,5) The sum of
TOTALADJUSTMENT NULL, DEFAULT ORDERITEMS.TOTALADJUSTMENT for the
0 OrderItems in the Order.
BIGINT
ORDCHNLTYP_ID Reserved for IBM internal use.
NULL
VARCHAR (254)
COMMENTS Comments from the customer.
NULL
Notification identifier referring to the rows
in the NOTIFY table that store notification
BIGINT
NOTIFICATIONID attributes. These attributes override the
NULL
defaults for notifications related to this
order.
This table contains all the promotion code information for relationships with a
promotion.
INTEGER NOT
VERSION The version number of this promotion.
NULL
INTEGER NOT
REVISION The version number of this promotion.
NULL
If this promotion is a private promotion, this
column defines how many days after the
EFFECTIVE INTEGER
coupon is issued the coupon becomes
active.
If this promotion is a private promotion, the
value in this column deterimines whether
INTEGER the coupons generated for this promotion
TRANSFER
DEFAULT 0 are transferrable or not. A value of 0, which
is the default, does not allow the coupon to
be transferred among customers.
CDREQUIRED INTEGER NOT A flag that determines whether a promotion
58
TIMESTAMP NOT
STARTDATE The overall starting date for this promotion.
NULL
TIMESTAMP NOT
ENDDATE The overall end date for this promotion.
NULL
TGTSALES DECIMAL (20,5) The target sales figure for this promotion.
VARCHAR(128)
NAME The name of the promotion.
NOT NULL
This table contains all users of the WebSphere Commerce system: registered users,
guest users, and generic users.