Master data management can help an enterprise reduce costs, and can result in clean and efficient data that better support business processes and key requirements, such as meeting compliance standards. But getting master data management software up and running can be a daunting task. In this section, you'll find tips for a successful SAP MDM implementation, learn of MDM best practices for SAP MDM tools and read other data management advice and resources.
Privacy Policy
All-in-One Guides: SAP master data management (MDM) tutorial:
Master data management refers to synchronizing "master data" -- a company's most important data about its customers, products or other assets -- for the enterprise. MDM systems manage master data from a central system, whose architecture can be a registry model, a repository or persistent model, or a hybrid approach. In this SAP MDM tutorial, explore master data management concepts, learn about SAP's MDM solution, and check out MDM best practices and SAP MDM case studies
WHAT IS MASTER DATA MANAGEMENT?
Master data is data that is not connected to a particular transaction, but is used in many instances within an enterprise, such as customer information, product descriptions and vendor lists. If you're thinking about implementing an MDM initiative, and are looking for more MDM information, you might ask: What is SAP MDM? In this SAP MDM overview, learn master data management concepts, and find out how experts look at MDM, specifically in SAP environments.
LEARN MORE: WHAT IS MASTER DATA MANAGEMENT?
SAP MDM IMPLEMENTATION AND BEST PRACTICES
Master data management can help an enterprise reduce costs, and can result in clean and efficient data that better support business processes and key requirements, such as meeting compliance standards. But getting master data management software up and running can be a daunting task. In this section, you'll find tips for a successful SAP MDM implementation, learn of MDM best practices for SAP MDM tools and read other data management advice and resources.
LEARN MORE: SAP MDM IMPLEMENTATION AND BEST PRACTICES
CASE STUDIES OF SAP MDM PROJECTS
SAP's MDM product includes content consolidation for organizing data, master data harmonization for cleansing data, and central master data management for a single enterprise repository for master information. In this section, learn more about SAP MDM projects and explore SAP case studies to see how some companies have used SAP MDM to solve critical data management issues.
LEARN MORE: CASE STUDIES OF SAP MDM PROJECTS
TAXONOMIES
A taxonomy is a general term for classification scheme. The purpose of
a taxonomy is to group like things together into categories, usually
based on a set of common, category-specific characteristics, or
attributes.
In the context of master data management, a taxonomy is what makes it
possible to quickly locate a few specific records – or categories – in a
database of thousands, tens of thousands, or even millions of records.
A taxonomy is usually hierarchical, meaning that some categories are
subcategories of other categories. (In the MDM system, taxonomy
tables are always hierarchical.) Most people are familiar, for example,
with at least part of the hierarchical taxonomy used to classify animals,
such as vertebrates mammals primates chimpanzees, and so
on. Another example that you might experience in your daily life is
groceries beverages carbonated decaffeinated. Each level of
the hierarchy gets narrower in terms of what it includes.
MDM uses a hierarchical taxonomy of categories to structure master
data in an MDM repository. A hierarchical taxonomy is typically
represented as a “tree,” as shown in Figure 2.
MDM REPOSITORY STRUCTURE
A thorough understanding of the table and data types at your disposal is
essential for properly creating and maintaining MDM repositories. This
section provides an introduction to these concepts, which will be
addressed again later in this guide.
An MDM repository consists of the following tables:
• Main tables. Every MDM repository has one or more main tables. A
main table contains primary information about a business object such
as a product or supplier. For example, a repository might contain
separate main tables for products and business partners. The
products main table would include an individual record for each
product and individual fields that apply to all products, such as SKU,
product name, product description, manufacturer, price, and
business partner. The business partner main table would then
include an individual record for each partner and individual fields for
each piece of information that describes the partner. Most of the time
you will be looking at information in a main table.
NOTE ►► When you first create a new MDM repository, MDM
automatically creates a main table named Products.
26
MDMConsole
What is an MDM Repository?
• Subtables. An MDM repository can have any number of subtables.
A subtable is usually used as a lookup table to define the set of legal
values to which a corresponding lookup field in the main table can be
assigned; these tables hold the lookup information. For example, a
main table of an MDM repository of product information may include
a field called Manufacturer; the actual list of allowed manufacturer
names would be contained in a subtable. Only values that exist in
records of the subtable can be assigned to the value of the
corresponding lookup field in the main table.
DATA INTEGRITY ►► Lookup subtables are just one of the powerful
ways that MDM enforces data integrity in an MDM repository. The set
of legal values associated with lookup fields also makes the MDM
repository much more searchable, since a consistent set of values is
used across the entire repository.
• Object tables. Object tables, including the Images, Sounds, Videos,
Binary Objects, Text Blocks, Copy Blocks, Text HTMLs, and PDFs
tables, are a special type of lookup subtable, where each object table
is used to store a single type of object. You cannot store an object
directly in a main or subtable field in an MDM repository. Instead,
each object is defined or imported into the repository once and then
linked to a main or subtable field as a lookup into the object table of
that type.
DATA INTEGRITY ►► Object tables eliminate redundant information,
since each object appears only once in the MDM repository even if it is
linked to multiple records.
NOTE ►► When you first create a new MDM repository, MDM
automatically creates the single instance of each object table.
NOTE ►► You can also store text blocks directly in a large text field in
main and subtable records rather than as a lookup into a text block
subtable if you do not intend to reuse the blocks of text.
• Special tables. Special tables include the Image Variants, Masks,
Families, Relationships, Workflows, Named Searches, Tuples, Data
Groups, and Validation Groups tables.
NOTE ►► When you first create a new MDM repository, MDM
automatically creates the single instance of each special table.
NOTE ►► The Data Groups and Validation Groups tables do not
appear anywhere in MDM Console.
MDM Console
27
Part 1: Basic Concepts
• System tables. System tables appear under the Admin node in the
Console Hierarchy and include Roles, Users, Connections, Change
Tracking, Remote Systems, Ports, Links, XML Schemas, and
Reports, and Logs.
NOTE ►► When you first create a new MDM repository, MDM
automatically creates the single instance of each system table.
NOTE ►► The Logs table is MDM Server-specific rather than MDM
repository-specific, and appears in the Console Hierarchy under an
MDM Server node after all of the MDM repository nodes.
What is an MDM Repository?
What is an MDM repository? The incorrect or at best incomplete answer
is often that a master data repository is simply a database, and also
since a SQL-based RDBMS is often used for managing master data.
An MDM repository certainly includes a database of information
consisting of text, images, PDFs, and other data about each record, up
to millions of records for some repositories. But a master data repository
is much more than just a large database, and size by itself does not
make a database a master data repository. Rather, it is the richness and
complexity of the underlying information itself and the ways it can be
searched and published that uniquely characterize an MDM repository.
Moreover, when an MDM repository of product information is published
as a catalog, the repository of master data is also a sales tool, which
lists the products offered for sale by a vendor and allows potential
customers to browse those products in a convenient way. Often, the
published catalog is the only point of contact a customer will have with a
vendor, which makes the presentation of the product information – the
organization and the design of the published catalog – critically
important to creating brand recognition and a distinct vendor identity. So
a published catalog is also about creating and reinforcing a corporate
image.
Hundreds of details, large and small, must be addressed to turn a
database into a meaningful master data repository, including:
• Rich master data. Rich structured, master data is the essential
lifeblood of a usable MDM repository. For example, an MDM
repository of product information must contain much more than basic
transactional data consisting of just a part number, a price, and a
forty-character description for each product. Master data must
include not only fields of information common to all the products in
the repository, such as part number and price, but also detailed
product specifications (attributes) that may apply to only a subset of
the products. Master data should also include rich content such as
images, text blocks, and PDFs (for MSDS and other data sheets).
• Classification. Rich master data is not enough. The records need to
be organized and classified into a taxonomy consisting of an arbitrary
hierarchy of categories and subcategories, the hierarchy may contain
any number of levels, and multiple simultaneous taxonomies may
coexist in the same MDM repository. And a single category must be
able to appear in multiple places within the hierarchy. For example,
in an MDM repository of product information, a printer accessories
category might be placed under both a printers category and an
accessories category.
MDM Console
Part 1: Basic Concepts
• Product families. A printed catalog of product information provides
an excellent model for how information on groups of records within
an MDM repository of product information should be organized into
product families (also called units, presentations, or modules), which
further partition the products in each category into smaller groups of
products based upon the values of other fields and/or attributes. In
addition to the individual products that comprise the family, a product
family includes the family data (such as an image, a descriptive
paragraph, and feature bullets) as well as detailed specifications on
each of the products arranged into a well-structured tabular layout.
• Product relationships. As a sales tool, a published catalog of
product information requires the wide variety of product relationships
that are essential for effective selling. Relationships include structural
relationships, such as assemblies (a “SKU of SKUs”), kits (a “SKU of
non-SKUs”), bundles (a “non-SKU of SKUs”), and matching sets
(e.g. nuts and screws), as well as merchandising relationships, such
as cross-sells, up-sells, accessories, and consumables. An MDM
repository of product information must be able to capture and
represent all of these product relationships.
MDM AUXILIARY SERVERS
In addition to the Master Data Server, an MDM system can include the
following auxiliary servers:
• Master Data Import Server (MDIS). Automates import of data into
an MDM repository.
• Master Data Syndication Server (MDSS). Automates syndication of
data from an MDM repository.
• Master Data Layout Server (MDLS). Processes publication of
master data from an MDM repository.
Each of these auxiliary servers interact independently with an MDM
Server and, like the MDM Server, can be administered from within MDM
Console.
NOTE ►► See “The Master Data Import Server” on page 237 for
more information about MDIS.
NOTE ►► See “The Master Data Syndication Server” on page 261 for
more information about MDSS.
NOTE ►► See the MDM Publisher Reference Guide for more
information about MDLS.
What is an MDM Server?
An MDM Server is the central hub of an MDM system. It manages
access to master data in one or more MDM repositories, which it serves up to various clients across a network.
The various components of an MDM software environment, and how
they interact with the MDM Server; are described below and illustrated in Figure 1.
• MDM Console. MDM Console allows system managers to
administer and monitor MDM Servers, and to create, maintain the
structure of, and control access to the MDM repositories.
• MDM Clients. MDM clients interact with an MDM Server to import,
access, manage, syndicate, and publish master data. Clients include
MDM rich user interfaces such as MDM Data Manager, MDM Import
Manager, and MDM Syndicator, as well as customizable interfaces
such as iViews and APIs.
• DBMS engine. Master data is stored in a commercial SQL DBMS,
access to which is controlled by the MDM Server. MDM supports
Microsoft SQL Server, Oracle, IBM DB2, and SAP MaxDB.
Master-Data Harmonization
Master data is a company asset. The better the data, the better business operation (and the lower the costs)
In addition to the capabilities provided with the master-data consolidation IT scenario, master-data harmonization dramatically improves data quality and minimizes redundancy within the system landscape. Master data information that has been consolidated centrally can be distributed to the client systems to achieve overall quality standards and streamlined business operation.
The main process flow in the master-data harmonization IT scenario is as follows:
*) Can be used in addition to Syndicator/Syndicator Batch
**) Also possible using SAP NetWeaver Portal (iViews)
In summary, master-data harmonization allows the local creation/update of master data with periodical communication to the central hub and subsequent distribution to other clients to ensure data quality while maintaining data in the local/client application.
SAP NetWeaver MDM provides the following benefits:
The SAP NetWeaver MDM approach focusses on globally relevant master data attributes, and leaves locally relevant information up to the local sites.
Hope this helps you to see master data management from a scenario and process perspective.
Best regards,
Master-Data Consolidation
Master data is a company asset. The better the data, the better business operation (and the lower the costs)
Companies need to be able to base critical business decisions on facts, rather than on assumptions. In this context, they must gain a central view on master data information that is spread across the heterogeneous system landscape. Once this information is at hand, it can be used to run reliable company-wide analytics based on consolidated master data.
And this is where SAP NetWeaver MDM comes in: The master-data consolidation IT scenario delivers a means to aggregate master data from various SAP and non-SAP sources, with de-duplication and normalization. Duplicate and/or identical records can be detected, and centrally merged into one consolidated record, while the relevant key mapping information (collection of the different object IDs used in the individual client systems) is kept and can be transfered to SAP NetWeaver BI. SAP NetWeaver BI in turn processes this consolidated inflow of data, which is a prerequisite for reliable cross-group analyses.
For example, this can be effectively utilized to address the challenge of spend analysis and optimizing sourcing and procurement. With SAP NetWeaver MDM, relationships/dependencies between vendors and products can be revealed across the overall system landscape, putting the company in a much better negotiating position, for example, in strategic purchasing processes.
The master data consoliation IT scenario comes in two variants:
1. Consolidation of Business Intelligence Master Data:
In this variant, SAP NetWeaver MDM updates BI master data to provide a solid base for cross-company reporting, such as global spend analyses.
2. Consolidation of Master Data From Client Systems
*) Can be used in addition to MDM Import Manager/Import Manager Batch MDM and Syndicator/Syndicator Batch
In this variant, SAP NetWeaver MDM allows you to identify identical master data objects within heterogeneous landscapes, merge identical objects centrally, and provide the relevant key mapping information for further use in business operations or analytics.
In summary, master-data consolidation is about consolidating (matching, normalizing, and cleansing) and storing master data imported from client systems (including SAP NetWeaver BI) to uncover existing relationships and enable reliable cross-group analyses (for example, global spend).
SAP NetWeaver MDM provides the following benefits:
Hope this helps you to see master data management from a scenario and process perspective.
Central Master-Data Management
Master data is a company asset. The better the data, the better business operation (and the lower the costs)
In addition to enabling reliable cross-group analytics and improving overall master data quality (through the master-data consolidation and master-data harmonization scenarios), companies could want to:
SAP NetWeaver MDM enables centralized maintenance and storage of globally relevant master data information and allows subsequent distribution to client systems. It differs from master-data harmonization in that master data is created centrally using the MDM rich clients or SAP NetWeaver Portal.
With SAP NetWeaver MDM, a central comprehensive repository can be created with enriched content that can be used as the single source of truth for all enterprise master data on an inter and intra-enterprise scale.
The main process flow in the central master-data management IT scenario is as follows:
*) Also possible using SAP NetWeaver Portal (iViews)
**) Can be used in addition to MDM Syndicator/Syndicator Batch
In summary, central master-data management provides a single source of record by creating/updating master data centrally on MDM, supported by workflow-controlled approvals and periodic distribution to client systems.
SAP NetWeaver MDM provides the following benefits:
Hope this helps you to see master data management from a scenario and process perspective.
Best regards,
Data Standardization: Building strong foundation for MDM – Part 1
1.Introduction
Corporations having heterogeneous landscapes today are facing the need for a single source of true “data”. The answer comes in the form of MDM 5.5 which offers the capability for “data” consolidation, “data” harmonization and central “data” management etc.
It is evident that “Data” lies in the core and hence the integrity and quality of data is of vital importance.
Those aware of the concept of Quality Assurance will appreciate that if the process and standards are adhered to; then the delivered products meet the quality requirements. This holds good for data as well. If the process of generation of data( master data or transactional data) follows the standards then quality and integrity of will be ensured.
There may be several initiatives or steps an organization may take in order to ensure integrity and quality of data. One such initiative can be “Data Standardization”.
The ideal time to undertake “Data Standardization” project is prior to the implementation of any integrated ERP system like R/3. However, this looks a bit impractical because today almost all successful organizations run on one or the other good ERP system. In this situation the way out is to undertake “Data Standardization” project prior to MDM implementation. Obviously this will be like “doing the Home work” or “building a strong foundation” for the prospective MDM implementation.
2.What is Data Standardization?
An example of Data Non-Standardization!!
Sometimes it is said - offense is the best form of defense. On the same lines, I would like to put here a crude example of Data Non-Standardization in an organization; this will give a fair idea what I want to talk about.
The Scenario: An organization has three plants at 3 different locations- 001, 0002 and 0003. All these plants use same bearing:
Material: Ball Bearing ID: 25mm OD: 47mm, Width: 12mm Catalog # 6005
However, in each plant it is designated as below:
In each plant it has different material code and description. Even the same bearing is having two different material codes and descriptions in one plant.
This example may sound too exaggerating in the first look. However, reality may not be too different. If analyzed closely the master data team can filter out many such examples.
This is an example of Data Non-Standardization. No unique material code number. No unique or standard way of description.
This kind of situation leads to serious issues like lack of visibility of a material or product across the enterprise, higher inventory – same material purchased under different codes and/or descriptions etc.
So the bold statement is - Problem exists. But then….what is the way out?
3.Time to go back to Basics!?
Let us quickly revise our basics about Data, Information and Knowledge.
May be the answer lies there only!!
Data, Information and Knowledge:
The classical difference between Data, Information and Knowledge still holds good.
Data is factual information, used for analysis or reasoning. Data on its own has no meaning, but becomes information when once it is interpreted. Information is a collection of facts or data. It is this information that gives organizations diagnosis or a health check to enable them make a corrective actions required to align them with business drivers.
We can clearly understand the difference between these three terminologies by defining them with a few examples.
Data: Kind of Symbols. Data is raw. It simply exists and has no significance beyond its existence (in and of itself). It can exist in any form, usable or not. It does not have meaning of itself.
Example: A spreadsheet generally starts out by holding data. In SAP world, a table in SAP contains data, which does not have meaning of itself.
Information: Data that are processed to be useful. Provides answers to “who”, “what”, “where”, and “when” questions.
Information is data that has been given meaning by way of relational connection. This “meaning” can be useful, but does not necessarily have to be.
Example: A relational database makes information from the data stored within it. In SAP world, an ABAP query gives birth to information by joining various tables containing data.
Knowledge: Application of data and information. Answers “how” questions.
Knowledge is the appropriate collection of information, such that its intent is to be useful. Knowledge is a deterministic process.
Example: “Spend data” gets generated continuously thru Purchase Requisition, Purchase Order, Material master, Invoice verification etc. in SAP. Using this “data”, an ABAP query can provide the “information” in the form of reports for the purchases made for a certain material XYZ during the current financial year on parameters like – 1) from which suppliers, 2) at what rates, 3) for which plants etc.
Purchase Manager can come up with “Global Spend Analysis” and use it for Forecasting/Budgeting for next year or to improve cost saving opportunities. This way he is making use of this information by building his “knowledge”.
Obviously the data, being the core, is very significant. And it is the quality and integrity of data that makes it significant.
4.Why Data Standardization?
The “Standardization of Data” is imperative to meet the organizational objectives such as:
• To provide unique definition of Enterprise entities.
• To ensure a single, common, unambiguous identification and description of various entities e.g. materials, vendors, customers, employees etc. across the enterprise.
• To provide the data consistency that is required to enable processes and functions to operate in the future Business Framework.
• To provide an effective foundation for achieving business flexibility.
• To ensure a seamless integration of Business Partners into the Supply Chain of the enterprise through effective support of external data requirements.
• To ensure simplified inter-operability between various system platforms.
• To achieve common understanding and usage of Data Standards within the enterprise.
5.Benefits of Data Standardization
• It is a way to enable standard and integrated systems to meet its business drivers.
• It is a proactive approach which reduces the risk of data duplication, manipulation etc.
• It enables the business to respond quickly and effectively to constantly changing client needs
• It is a way to ensure - Right information to right people at right time
• It provides reliable, accurate, timely data which in turn helps is Cost reduction, reduction in process wastages,
6.How the Data Standardization can be achieved?
This requires a systematic approach to be followed. Typical activities in this approach could be:
1. Planning for the Data Standards
2. Development of Data Standards
3. Implementation of Data Standards
4. Strictly following and adhering to the Data Standards
7.Next Steps
In the next blog we will take a deep dive into nitty-gritty of each of these activities i.e.
1. What Data should be considered for Standardization and what not?
2. Business rules to define the enterprise data
3. Master Data Vs Global Data
4. Typical business processes and functions supported by Data Standardization
We will also walk through those aspects and strategies which go into developing a long term vision about the Data Standardization and putting this vision into action.
Taming the animal - Qualified Tables
Where do we use the Qualified tables:
At times data is stored in such a way that duplication is unavoidable due to the storing mechanism and other factors. It may also happen that the data is sparse. The efficient way of storing data in such scenarios is the use of Qualified tables as it reduces the size of the main table and removes the unnecessarily created duplicates.
Difference between Qualified lookup table and Flat lookup table:
Flat lookup tables normally work on only a single field. It contains the set of legal values to which corresponding lookup field in the main table is assigned.
E.g. suppose we have a flat lookup table for Material Group for an automobile manufacturing company. Here we have a fixed set of legal values that can be looked up into the main table (for example Cars, Bikes, SUVs, etc.)
Qualified tables work on the combination of two types of fields where value of one or more fields (qualifiers) changes depending on the values of one or more other fields (non-qualifiers).
E.g. suppose we have a field “Price” whose values varies with the region for the same product. Here we have a fixed set of related legal values (combination of fields) that can be looked up into the main table. (For example Product A has a price of $30 in Southern region whereas $40 in Central region, then we get a set like Product A | Southern | $30, Product A | Central | $40 in the Lookup Qualified table)
Watch out for the definition of Qualifiers and non-Qualifiers:
This was something which took a long time for me to hunt down.
Qualifiers – are those fields whose values change based on the value of some other field(s) and whose value is different for each main table record
Non Qualifiers – These fields are only the part of qualified lookup table, but they apply not only to the qualified table but also to each association of the qualified table record to the main table record. Simply speaking, they are the fields that will decide the values in the Qualifier (main table)fields.
Our Scenario:
Suppose we have been provided with the following source data –
Manufacturer
Name of Drug
Region
Price
Storage Temp
A
Crocin
North
280
27 Celsius
A
Crocin
South
300
14 Celsius
A
Crocin
Central
260
30 Celsius
A
Disprin
North
380
30 Celsius
A
Disprin
South
360
27 Celsius
A
Disprin
Central
320
14 Celsius
Observation:
Values of ‘Price’ and the ‘Storage Temp’ field change based upon the ‘Name of Drug’ and ‘Region’ field values and also their values are different for each main table record; hence these should be madequalifiers in the qualified lookup table
Since ‘Name of Drug’ and ‘Region’ fields are deciding the qualifier values hence these should be kept as non qualifiers in the qualified lookup table. ‘Manufacturer’ and ‘Price’ will be part of the main table.
Design of repository:
We will discuss only the design of the main table ‘Products’ and the Qualified lookup table ‘Prices’ as they are of our immediate concern.
Products
Field
Field Detail
Manufacturer
Name- Manufacturer
Type - Text
Required – Yes
Display – Yes
Lookup[Price]
Name- Lookup[Price]
Type - Lookup[Qualified Flat] (multi-valued)
Required – None
Display – No
Multi-Valued - Yes
Lookup Table – Prices
Prices
Field
Field Detail
Name of Drug
Name- Name of Drug
Type - Text
Required – No
Display – Yes
Qualifier - No
Region
Name- Region
Type - Text
Required – No
Display – Yes
Qualifier - No
Price
Name- Price
Type - Currency
Required – No
Display – Yes
Symbol - $
Decimal Place - 0
Qualifier - Yes
Cache - Yes
Storage Temp
Name- Storage Temp
Type - Measurement
Required – No
Display – Yes
Dimension – Temperature
Default Unit – Celsius
Qualifier - Yes
Cache - Yes
Note: Caching of qualifiers is strongly recommended as it dramatically improves search performance.
Once the design of the repository is through, we now move on to the trickiest area – the one of the Import Manager
Importing records:
As per the standard practice, we load the lookup table first, here ‘Prices’ and then the main table ‘Products’.
The source preview is as shown:
Loading the Qualified lookup table data:
Select the corresponding tables in the source and destination hierarchy in the Import manager.
Go to Map Fields/Values tab and Map the corresponding fields in the field mapping grid.
Note: Here we can see only two fields (non qualifiers) in the destination field grid, however in the repository design we have created four fields.
The qualifiers (fields) never appear in the destination field of the qualified lookup table in the Import Manager.
Go to Match Records tab and select the non-qualifiers as matching field and Add it as Combination.
Select Import Action as Create as it is an Initial load of data.
Loading the Main table data:
Map all the source fields to corresponding fields in the repository.
Notes:Here we see many fields in destination (including qualifiers (Q) which are defined in the qualified table and not in the main table of the repository structure in Console).
Minimum required field mapping: All non-qualifier fields of the qualified lookup table should be mapped. Qualifier field (Q) is optional.
Now we are left with one field (Lookup [Price]) in destination which is still unmapped and we have no corresponding field left in the source to map it with. For this, go to source field tab and right click to create compound field as shown –
Lookup [Price] will be available in the source field and will get automatically mapped to the corresponding destination field.
Note: If any one of the non-qualifier fields of the qualified lookup table is not yet mapped, we are not allowed to create the compound field.
Do the Record Matching and Import the data into Data Manager Client by selecting the appropriate Import action.
Final Qualified data in main table:
The data is available in the Data Manager as shown –
P.S. If there is only one non-qualifier in a scenario, then the Compound field is not created and direct one to one mappings suffice.
Performing Free Form Searches with MDM Java API
Performing Free Form Searches via MDM Java API
SAP NetWeaver MDM comes along with a powerful Java API which covers almost any functionality offered through the client applications. Using a few examples, this blog explains how to perform free form searches via the Java API.
The examples are based on a very simple MDM Repository. The structure and contents are available at the end of the Blog.
The Java source is also available (exclusively for SDN users ;-) ) as a SAP NetWeaver Developer Studio project here.
Free Form Search in MDM Data Manager
The examples simulate a free form search on the Products table. So let's briefly have a look on how this is done using the MDM Data Manager.
Besides the direct selection of values for searching, you can use the Expression field in the Free-Form Search pane.
A doubleclick on the highlighted area will bring up the Search Expression dialog. Here you can either directly type in the search expression or use the shortcut buttons to create an expression.
I included the equivalent search expression for each example in the source code.
Getting Started: Using one single field
This first example will emulate the search expression
FIND(Name,"Contractor")
on table Products.
The MDM Java API exposes the free form search capabilities via several types of free form search parameters. Each of them is implemented as a separate class and derived from the super class SearchParameter.
Search parameters are added to an instance of a Search object and they will be taken into consideration for the search as soon as it is executed.
So the first thing for us to do is to create a new Search object.
Search search = new Search("Products");
This search object contains a collection of several instances of search parameter classes. This collection is initially empty. We will now add a new search parameter class to this collection.
FreeFormTableParameter fftpNames =
search.GetParameters().NewFreeFormTableParameter("Products");
As you see we are using the class FreeFormTableParameter since we want to restrict our free form search based on fields of a given table (Products). To create a new instance of this search parameter, we use the method NewFreeFormTableParameter() of the SearchParameters collection. This method requires the table name from which we will later on use the fields and will also add this new parameter to the collection.
FreeFormParameterField ffpfName = fftpNames.GetFields().New("Name");
This line of code adds a new FreeFormParameterField based on the field Name of the Products table to the search parameter. This is the field we are using in our expression above.
ffpfName.GetFreeForm().NewString("Contractor", FreeFormParameter.SubstringSearchType);
Here we use the FreeFormParameterField to add the restriction for the value Contractor. We use NewString() because this is a string value and we specify a substring search.
As with any other search
A2iResultSet result = catalog.GetResultSet(search, rsd, "Name", true, 0);
will execute the search and return the result.
The complete source code is available at the end of the blog.
Single Field, More Values
The next thing is to search for multiple values, but still using one single field. Let's take the expression
FIND(Name, "Contractor") AND FIND(Name, "Blade") AND FIND(Name,
"Standard")
on table Products.
The code is exactly the same as above until the instanciation of the FreeFormParameterField:
FreeFormParameterField ffpfName = fftpNames.GetFields().New("Name",
FreeFormParameterField.SEARCH_OPERATOR_AND);
This line of code will combine the search with logical AND.
After that we can simply add each of the values, one after the other.
ffpfName.GetFreeForm().NewString("Contractor",
FreeFormParameter.SubstringSearchType);
ffpfName.GetFreeForm().NewString("Blade",
FreeFormParameter.SubstringSearchType);
ffpfName.GetFreeForm().NewString("Standard",
FreeFormParameter.SubstringSearchType);
Most probably you already guessed, that for the expression
FIND(Name, "Contractor") OR FIND(Name, "Blade") OR FIND(Name,
"Standard")
on table Products, we have to use the coding
FreeFormParameterField ffpfName = fftpNames.GetFields().New("Name",
FreeFormParameterField.SEARCH_OPERATOR_OR);
AND and OR together
The previous example covered expressions using either only OR combinations or AND combinations of the values. Now we want to go for
(FIND(Name, "Contractor") OR FIND(Name, "Blade")) AND FIND(Name,
"Standard")
on table Products.
A litte bit more complicated but still straight forward:
Start with the first sub-expression (the OR combination in brackets):
FreeFormParameterField ffpfName1 = fftpNames.GetFields().New("Name",
FreeFormParameterField.SEARCH_OPERATOR_OR);
ffpfName1.GetFreeForm().NewString("Contractor", FreeFormParameter.SubstringSearchType);
ffpfName1.GetFreeForm().NewString("Blade", FreeFormParameter.SubstringSearchType);
After that add a new FreeFormParameterField.
FreeFormParameterField ffpfName2 = fftpNames.GetFields().New("Name");
ffpfName2.GetFreeForm().NewString("Standard", FreeFormParameter.SubstringSearchType);
Several FreeFormParameterField instances will be AND combined automatically.
Two fields
The expression
FIND(Manufacturer, "Estwing") AND FIND(Name, "Polyurethane")
on table Products uses two fields. But based on what you have already seen, the implementation is easy.
One FreeFormParameterField for the first field:
FreeFormParameterField ffpfManu = fftpProducts.GetFields().New("Manufacturer");
ffpfManu.GetFreeForm().NewString("Estwing", FreeFormParameter.SubstringSearchType);
And one FreeFormParameterField for the second field:
FreeFormParameterField ffpfName = fftpProducts.GetFields().New("Name");
ffpfName.GetFreeForm().NewString("Polyurethane", FreeFormParameter.SubstringSearchType);
Again, the search parameters are AND combined by default.
OR Combination of Search Parameters
In order to override the default AND operator between fields, which is necessary for the expression
FIND(Manufacturer, "Estwing") OR FIND(Name, "Polyurethane")
on table Products, we need to change the default behaviour of the Search object we are using.
search.SetSearchType(Search.GlobalOrSearchCombinationType);
This will have the effect, that all FreeFormParameterField will be OR combined instead of AND.
The rest of the code is exactly the same as above.
Complete Java Source Code
------------------------------------------------------------------
import a2i.core.*;
import a2i.common.*;
import a2i.search.*;
/**
* Examples for free form searches via the MDM Java API.
* * <br>To run these examples, create the following
Classpath Variable in your Developer Studio to link to your local MDM
API JAR:</p>
*Go to <em>Window -> Preferences -> Java
-> Classpath Variables</em> and create this
variable:<br>
*<em>SAP_MDM_MDM4J</em> - Path to the
folder containing MDM4J.jar<br>
*<br>
*Of course you need also an up-and-running MDM Server with a loaded
Repository.<br>
*The connection details are directly maintained in the source
code.<br>
*
*<br><br>
* *This code is copyrighted by SAP AG, Dietmar-Hopp-Allee 16, 69190
Walldorf, Germany.<br><br>
*It has been written to serve educational purposes only. You may reuse,
modify and
*redistribute it as long as the following rules are obeyed:
<br><br>
*<strong>
*SAP AG assumes no responsibility for errors or omissions in this
sample code.<br>
*It is provided "as is" without a warranty of any kind, either express
or implied,
*including, but not limited to, the implied warranties of
merchantability, fitness for a particular purpose,
*or non-infringement.<br>
*SAP AG shall not be liable for damages of any kind including without
limitation direct, special,
*indirect, or consequential damages that may result from the use of
this code.<br>
*SAP AG does not warrant the accuracy or completeness of information,
text, graphics, links or
*other items contained within these materials. SAP AG reserves the
right to modify, replace or
*supplement this documentation and coding without notice.
*</strong>
*
* @author Andreas Seifried (D035740), Copyright SAP AG, 200
*/
public class FreeFormSearchExamples {
CatalogData catalog;
public void login() {
catalog = new CatalogData();
catalog.Login("localhost", 2010, "Admin", "", "English [US]");
}
public void logout() {
try {
catalog.Logout();
} catch (StringException e) {
System.out.println("Logout Failed!");
e.printStackTrace();
}
}
/**
* Search on one single field for one single value
*/
public void searchSingleFieldSimple() {
//FIND(Name, "Contractor") on table Products
// case sensitive substring search in the field "Name"
System.out.println();
System.out.println("Performing searchSingleFieldSimple()");
System.out.println("FIND(Name, \"Contractor\") on table Products");
System.out.println("Expected Hits: 18");
System.out.println("=========================");
ResultSetDefinition rsd = new ResultSetDefinition("Products");
rsd.AddField("Name");
Search search = new Search("Products");
FreeFormTableParameter fftpNames =
search.GetParameters().NewFreeFormTableParameter("Products");
FreeFormParameterField ffpfName = fftpNames.GetFields().New("Name");
ffpfName.GetFreeForm().NewString("Contractor",
FreeFormParameter.SubstringSearchType);
A2iResultSet result;
try {
result = catalog.GetResultSet(search, rsd, "Name", true, 0);
System.out.println("Found " + result.GetRecordCount() + " records.");
// for(int n=0; n<result.GetRecordCount(); n++) {
// System.out.println(result.GetValueAt(n, "Name").GetStringValue());
// }
} catch (StringException e) {
System.out.println("Search Failed!");
e.printStackTrace();
}
}
/**
* Search on one single field for 3 values, AND combination
*/ public void searchSingleFieldAnd() {
//FIND(Name, "Contractor") AND FIND(Name, "Blade") AND FIND(Name,
"Standard") on table Products
System.out.println();
System.out.println("Performing searchSingleFieldAnd()");
System.out.println("FIND(Name, \"Contractor\") AND FIND(Name,
\"Blade\") AND FIND(Name, \"Standard\") on table Products");
System.out.println("Expected Hits: 5");
System.out.println("=========================");
ResultSetDefinition rsd = new ResultSetDefinition("Products");
rsd.AddField("Name");
Search search = new Search("Products");
FreeFormTableParameter fftpNames =
search.GetParameters().NewFreeFormTableParameter("Products");
FreeFormParameterField ffpfName = fftpNames.GetFields().New("Name",
FreeFormParameterField.SEARCH_OPERATOR_AND);
ffpfName.GetFreeForm().NewString("Contractor",
FreeFormParameter.SubstringSearchType);
ffpfName.GetFreeForm().NewString("Blade",
FreeFormParameter.SubstringSearchType);
ffpfName.GetFreeForm().NewString("Standard",
FreeFormParameter.SubstringSearchType);
A2iResultSet result;
try {
result = catalog.GetResultSet(search, rsd, "Name", true, 0);
System.out.println("Found " + result.GetRecordCount() + " records.");
// for(int n=0; n<result.GetRecordCount(); n++) {
// System.out.println(result.GetValueAt(n, "Name").GetStringValue());
// }
} catch (StringException e) {
System.out.println("Search Failed!");
e.printStackTrace();
}
}
/**
* Search on one single field for 3 values, OR combination
*/ public void searchSingleFieldOr() {
//FIND(Name, "Contractor") OR FIND(Name, "Blade") OR FIND(Name,
"Standard") on table Products
System.out.println();
System.out.println("Performing searchSingleFieldOr()");
System.out.println("FIND(Name, \"Contractor\") OR FIND(Name, \"Blade\")
OR FIND(Name, \"Standard\") on table Products");
System.out.println("Expected Hits: 48");
System.out.println("=========================");
ResultSetDefinition rsd = new ResultSetDefinition("Products");
rsd.AddField("Name");
Search search = new Search("Products");
FreeFormTableParameter fftpNames =
search.GetParameters().NewFreeFormTableParameter("Products");
FreeFormParameterField ffpfName = fftpNames.GetFields().New("Name",
FreeFormParameterField.SEARCH_OPERATOR_OR);
ffpfName.GetFreeForm().NewString("Contractor",
FreeFormParameter.SubstringSearchType);
ffpfName.GetFreeForm().NewString("Blade",
FreeFormParameter.SubstringSearchType);
ffpfName.GetFreeForm().NewString("Standard",
FreeFormParameter.SubstringSearchType);
A2iResultSet result;
try {
result = catalog.GetResultSet(search, rsd, "Name", true, 0);
System.out.println("Found " + result.GetRecordCount() + " records.");
// for(int n=0; n<result.GetRecordCount(); n++) {
// System.out.println(result.GetValueAt(n, "Name").GetStringValue());
// }
} catch (StringException e) {
System.out.println("Search Failed!");
e.printStackTrace();
}
}
/**
* Search on one single field for 3 values, nested OR / AND combination
*/ public void searchSingleFieldOrAnd() {
//(FIND(Name, "Contractor") OR FIND(Name, "Blade")) AND FIND(Name,
"Standard") on table Products
System.out.println();
System.out.println("Performing searchSingleFieldOrAnd()");
System.out.println("(FIND(Name, \"Contractor\") OR FIND(Name,
\"Blade\")) AND FIND(Name, \"Standard\") on table Products");
System.out.println("Expected Hits: 11");
System.out.println("=========================");
ResultSetDefinition rsd = new ResultSetDefinition("Products");
rsd.AddField("Name");
Search search = new Search("Products");
FreeFormTableParameter fftpNames =
search.GetParameters().NewFreeFormTableParameter("Products");
FreeFormParameterField ffpfName1 = fftpNames.GetFields().New("Name",
FreeFormParameterField.SEARCH_OPERATOR_OR);
ffpfName1.GetFreeForm().NewString("Contractor",
FreeFormParameter.SubstringSearchType);
ffpfName1.GetFreeForm().NewString("Blade",
FreeFormParameter.SubstringSearchType);
FreeFormParameterField ffpfName2 = fftpNames.GetFields().New("Name");
ffpfName2.GetFreeForm().NewString("Standard",
FreeFormParameter.SubstringSearchType);
A2iResultSet result;
try {
result = catalog.GetResultSet(search, rsd, "Name", true, 0);
System.out.println("Found " + result.GetRecordCount() + " records.");
// for(int n=0; n<result.GetRecordCount(); n++) {
// System.out.println(result.GetValueAt(n, "Name").GetStringValue());
// }
} catch (StringException e) {
System.out.println("Search Failed!");
e.printStackTrace();
}
}
/**
* Search on two fields for single values, AND combination
*/ public void searchTwoFieldsAnd() {
//FIND(Manufacturer, "Estwing") AND FIND(Name, "Polyurethane") on table
Products
System.out.println();
System.out.println("Performing searchTwoFieldsAnd()");
System.out.println("FIND(Manufacturer, \"Estwing\") AND FIND(Name,
\"Polyurethane\") on table Products");
System.out.println("Expected Hits: 3");
System.out.println("=========================");
ResultSetDefinition rsd = new ResultSetDefinition("Products");
rsd.AddField("Name");
rsd.AddField("Manufacturer");
Search search = new Search("Products");
FreeFormTableParameter fftpProducts =
search.GetParameters().NewFreeFormTableParameter("Products");
FreeFormParameterField ffpfManu =
fftpProducts.GetFields().New("Manufacturer");
ffpfManu.GetFreeForm().NewString("Estwing",
FreeFormParameter.SubstringSearchType);
FreeFormParameterField ffpfName = fftpProducts.GetFields().New("Name");
ffpfName.GetFreeForm().NewString("Polyurethane",
FreeFormParameter.SubstringSearchType);
A2iResultSet result;
try {
result = catalog.GetResultSet(search, rsd, "Name", true, 0);
System.out.println("Found " + result.GetRecordCount() + " records.");
// for(int n=0; n<result.GetRecordCount(); n++) {
// System.out.println(result.GetValueAt(n, "Name").GetStringValue() +
"\t\t" + result.GetValueAt(n, "Manufacturer").GetStringValue());
// }
} catch (StringException e) {
System.out.println("Search Failed!");
e.printStackTrace();
}
}
/**
* Search on two fields for single values, OR combination
*/ public void searchTwoFieldsOr() {
//FIND(Manufacturer, "Estwing") OR FIND(Name, "Polyurethane") on table
Products
System.out.println();
System.out.println("Performing searchTwoFieldsOr()");
System.out.println("FIND(Manufacturer, \"Estwing\") OR FIND(Name,
\"Polyurethane\") on table Products");
System.out.println("Expected Hits: 67");
System.out.println("=========================");
ResultSetDefinition rsd = new ResultSetDefinition("Products");
rsd.AddField("Name");
rsd.AddField("Manufacturer");
Search search = new Search("Products");
search.SetSearchType(Search.GlobalOrSearchCombinationType);
FreeFormTableParameter fftpProducts =
search.GetParameters().NewFreeFormTableParameter("Products");
FreeFormParameterField ffpfManu =
fftpProducts.GetFields().New("Manufacturer");
ffpfManu.GetFreeForm().NewString("Estwing",
FreeFormParameter.SubstringSearchType);
FreeFormParameterField ffpfName = fftpProducts.GetFields().New("Name");
ffpfName.GetFreeForm().NewString("Polyurethane",
FreeFormParameter.SubstringSearchType);
search.SetSearchType(Search.GlobalOrSearchCombinationType);
A2iResultSet result;
try {
result = catalog.GetResultSet(search, rsd, "Name", true, 0);
System.out.println("Found " + result.GetRecordCount() + " records.");
// for(int n=0; n<result.GetRecordCount(); n++) {
// System.out.println(result.GetValueAt(n, "Name").GetStringValue() +
"\t\t" + result.GetValueAt(n, "Manufacturer").GetStringValue());
// }
} catch (StringException e) {
System.out.println("Search Failed!");
e.printStackTrace();
}
}
public static void main(String[] args) {
FreeFormSearchExamples ffse = new FreeFormSearchExamples();
ffse.login();
ffse.searchSingleFieldSimple();
ffse.searchSingleFieldAnd();
ffse.searchSingleFieldOr();
ffse.searchSingleFieldOrAnd();
ffse.searchTwoFieldsAnd();
ffse.searchTwoFieldsOr(); ffse.logout();
}
}
------------------------------------------------------------------
Example Repository
Structure
These examples are using a very simple MDM Repository ApiSampleRepositry, which is based on a main table called Products and a flat lookup table Manufacturers. Here are the details:
Products table:
The Manufacturer field references the Manufacturers table.
Manufacturers table:
Contents
The repository was loaded with this XML file:
------------------------------------------------------------------
<?xml
version="1.0" encoding="UTF-8"?>
<Products>
<Product>
<Name>Clear Safety Goggles</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Key-Ring Standard Tip
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Rip Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Rip Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wood Handle Builder's Series Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wood Handle Builder's Series Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Wooden Handle Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Sledge
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Sledge
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Slimline Polyurethane Deadblow
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Sledge
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Slimline Polyurethane Deadblow
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Slimline Polyurethane Deadblow
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Fast-Drying Polyurethane Paint</Name>
<Manufacturer>Minwax Company</Manufacturer>
</Product>
<Product>
<Name>Fast-Drying Polyurethane Paint</Name>
<Manufacturer>Minwax Company</Manufacturer>
</Product>
<Product>
<Name>Fast-Drying Polyurethane Paint</Name>
<Manufacturer>Minwax Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Mallet</Name>
<Manufacturer>Vaughan & Bushnell Mfg.
Co.</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Phillips® Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Phillips® Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Light-Blade/Cabinet Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Standard-Blade/Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Light-Blade/Cabinet Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Standard-Blade/Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>2-pc Standard Fluted Screwdriver
Set</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>BexT Standard Gloves</Name>
<Manufacturer>Best Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>BexT Standard Gloves</Name>
<Manufacturer>Best Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>BexT Standard Gloves</Name>
<Manufacturer>Best Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>BexT Standard Gloves</Name>
<Manufacturer>Best Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Pozidriv® Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Pozidriv® Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Pozidriv® Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Pozidriv® Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Phillips® Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT Square-Head
Style Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Light Blade/Cabinet Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Fluted Light Blade/Cabinet Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Phillips® Standard Fluted Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Phillips® Standard Fluted Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Handyman® Standard Stubby
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Phillips® Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Phillips® Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Phillips® Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Square-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Square-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Cushion-Grip Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Cushion-Grip Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Cushion-Grip Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Cushion-Grip Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Stubby/Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Square-Blade/Standard
Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Square-Blade/Standard
Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Square-Blade/Standard
Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Light-Blade/Cabinet
Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Light-Blade/Cabinet
Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl-Grip Light-Blade/Cabinet
Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT Pocket
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT Pocket
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT Pocket
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Extra-Light-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Extra-Light-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Extra-Light-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Extra-Light-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Extra-Light-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Extra-Light-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Standard-Blade/Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Square-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Square-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Square-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Square-Blade/Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Square-Blade/Standard Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>100 Plus® Contractor GradeT
Standard-Blade/Cabinet Tip Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT 6-pc Combination Screwdriver
Set</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT 8-pc Combination Screwdriver
Set</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Contractor GradeT Vinyl Coated Blade
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>FatmaxT Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>FatmaxT Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>FatmaxT Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>FatmaxT Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>FatmaxT Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>FatmaxT Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Standard Lock Ring Pliers</Name>
<Manufacturer>The Armstrong Tool
Comp.</Manufacturer>
</Product>
<Product>
<Name>Fluted Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Fluted Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Fluted Stubby/Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Fluted Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Fluted Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Fluted Standard Tip
Screwdriver</Name>
<Manufacturer>Stanley®</Manufacturer>
</Product>
<Product>
<Name>Specialty Polyurethane Coating</Name>
<Manufacturer>Rust-Oleum
Corporation</Manufacturer>
</Product>
<Product>
<Name>Specialty Polyurethane Coating</Name>
<Manufacturer>Rust-Oleum
Corporation</Manufacturer>
</Product>
<Product>
<Name>Specialty Polyurethane Coating</Name>
<Manufacturer>Rust-Oleum
Corporation</Manufacturer>
</Product>
<Product>
<Name>Stubby Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Round-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>ProtoblackT Standard Tip Round-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Round-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>ProtoblackT Standard Tip Round-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Round-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Round-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>ProtoblackT Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>ProtoblackT Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>ProtoblackT Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>ProtoblackT Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Square-Shank
Screwdriver</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>6-pc Standard Screwdriver Set</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>4-pc Standard Screwdriver Set</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>6-pc Standard Screwdriver Set</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>6-pc ProtoblackT Standard Screwdriver
Set</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Polyurethane Deadblow Sledge
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Screw Starter</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Screw Starter</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Standard Tip Screw Starter</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Phillips/Standard Tip Screw
Starter</Name>
<Manufacturer>Proto®</Manufacturer>
</Product>
<Product>
<Name>Slimline Polyurethane Deadblow
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Asian Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Asian Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Asian Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Asian Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Crack/Drilling
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Crack/Drilling
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Crack/Drilling
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Long-Handle Crack/Drilling
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>BexT Standard Gloves</Name>
<Manufacturer>Best Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>BexT Standard Gloves</Name>
<Manufacturer>Best Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Deadhead® Black Rubber
Mallet</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Deadhead® Gray Rubber
Mallet</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Deadhead® Black Rubber
Mallet</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Deadhead® Gray Rubber
Mallet</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Rip Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Light-Weight Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Light-Weight Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Rip Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Rip Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip English Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip English Pattern Rip
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip English Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip English Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Drywall Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Bricklayer/Mason's
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ball Peen
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Chisel Edge Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ripping Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Light-Weight Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Light-Weight Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Pointed Tip Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Bricklayer/Mason's
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ball Peen
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ripping Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Drywall Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Bricklayer/Mason's
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Bricklayer/Mason's
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Claw Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Chisel Edge Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ripping Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Pointed Tip Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Latthammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Long-Handle Pointed-Tip Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Bricklayer/Mason's
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Bricklayer/Mason's
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ball Peen
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Chisel Edge Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Builder's Series Large-Face
Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Builder's Series Large-Face
Framing Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip English Pattern Claw
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Carpenter's Hatchet</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Framing
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ball Peen
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Engineer's
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern Berliner Bricklayer
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern Berliner Bricklayer
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Ball Peen
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Shingler's Hammer w/Replaceable Blade &
Gauge</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Shingler's Hammer w/Replaceable
Gauge</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Welding Chipping
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip Pointed Tip Rock Pick
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Leather Grip German Pattern
Schlosserhammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip HammertoothT
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip HammertoothT
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Cross Peen Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip HammertoothT
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip HammertoothT
Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Cross Peen Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Cross Peen Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Cross Peen Hammer</Name>
<Manufacturer>Estwing Manufacturing
Company</Manufacturer>
</Product>
<Product>
<Name>Nylon-Vinyl Grip Engineer's
Hammer</Name>
<Manufactu</img></img></img></img></img></p>
------------------------------------------------------------------