You are on page 1of 124

Title Page

Flat File Schema Developer’s Guide

Version 8.2

April 2011
Copyright
& Docu-
ment ID

This document applies to webMethods Integration Server Version 8.2, webMethods Developer Version 8.2, and Software AG Designer
Version 8.2 and to all subsequent releases.
Specifications contained herein are subject to change and these changes will be reported in subsequent release notes or new editions.
Copyright © 1998–2011 Software AG, Darmstadt, Germany and/or Software AG USA, Inc., Reston, VA, United States of America, and/or
their licensors.
Detailed information on trademarks and patents owned by Software AG and/or its subsidiaries is located at
http://documentation.softwareag.com/legal/.
Use of this software is subject to adherence to Software AG’s licensing conditions and terms. These terms are part of the product
documentation, located at http://documentation.softwareag.com/legal/ and/or in the root installation directory of the licensed product(s).
This software may include portions of third-party products. For third-party copyright notices and license terms, please refer to "License
Texts, Copyright Notices and Disclaimers of Third Party Products." This document is part of the product documentation, located at
http://documentation.softwareag.com/legal/ and/or in the root installation directory of the licensed product(s).

Document ID: IS-FFS-DG-82SP1-20110401


Table of Contents

About This Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7


Deprecation of webMethods Developer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Document Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Documentation Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Online Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

1. Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
What Is a Flat File? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
What Types of Flat Files Does webMethods Support? . . . . . . . . . . . . . . . . . . . . . . . . 13
What Is a Flat File Schema? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
What Type of Flat File Constraints Can You Define? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
How Is a Flat File Schema Used to Parse Records? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Record Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Record Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Extractors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Undefined Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Default Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
What Is a Flat File Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
When Should I Create a Flat File Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
What Is the Flat File Schema Editor? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Flat File Structure Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2. Processing Flat Files Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25


Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Formatting Inbound and Outbound Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Processing Inbound Flat Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Step 1: Create Appropriate Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Step 2: Receive the Flat File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Step 3: Parse, Convert, and Validate Flat File Data to an IS Document . . . . . . . . . . . 29
Step 4: Process the IS Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Mapping Flat File Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Handling Large Flat Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Processing Outbound Flat Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Step 1: Create Appropriate Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Step 2: Convert the IS Document to a Flat File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Step 3: Send/Process the Flat File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

3. Creating and Editing Flat File Schemas and Dictionaries . . . . . . . . . . . . . . . . . . . . . . . 37


Creating a Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Flat File Schema Developer’s Guide Version 8.2 3


Table of Contents

Step 1: Add and Configure the Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38


Step 2: Specify Flat File Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Floating Records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Examples: Parsing Inbound Floating Records . . . . . . . . . . . . . . . . . . . . . . . . 45
Examples: Parsing Outbound Floating Records . . . . . . . . . . . . . . . . . . . . . . . 49
Step 3: Define the Structure of the Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Flat File Schema Property Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Extractors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Conditional Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Field Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Length Validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Code List Validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Byte Count Validator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Format Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Creating Format Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Working with Format Error Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Disabling Format Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Managing Dictionary Dependencies on Format Services . . . . . . . . . . . . . . . . 67
Displaying Element Descriptions and Alternate Names in the Flow Editor . . . . . . 67
Step 4: Test the Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Creating a Flat File Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Editing a Flat File Schema or Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Managing Flat File Dictionary Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Setting Access Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Customizing the Flat File Configuration Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

4. Sending and Receiving Flat Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79


Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Flat File Content Handler and Content Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Choosing the Service to Receive the Flat File from the Content Handler . . . . . . . . . . . . . . 81
Submitting a Flat File to Integration Server in a String Variable . . . . . . . . . . . . . . . . . . . . . 81
Submitting a Flat File to Integration Server via HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Building a Client that Posts a Flat File to a Service . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Submitting a Flat File to Integration Server via FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
FTPing a File From a webMethods Integration Server . . . . . . . . . . . . . . . . . . . . . . . . . 84
Getting Results from an FTP’d Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Submitting a Flat File to Integration Server via File Polling . . . . . . . . . . . . . . . . . . . . . . . . . 86
Submitting a Flat File to Integration Server via an E–mail Message . . . . . . . . . . . . . . . . . . 86
Requirements for Submitting a Flat File Document via an E-mail Message . . . . . . . . . 87
Getting Results from an Emailed Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

A. Validation Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Validation Error Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
General Error Entries in the errors Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

4 Flat File Schema Developer’s Guide Version 8.2


Table of Contents

Entries for Conditional Validator Errors in errorDetails Array . . . . . . . . . . . . . . . . . . . . 91


Validation Error Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

B. Programmatically Creating Flat File Schemas and Dictionaries . . . . . . . . . . . . . . . . . . 97


Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Creating Flat File Dictionary Entries, Dictionaries, and Schemas . . . . . . . . . . . . . . . . . . . . 99
Creating Flat File Dictionary Entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Creating an Entire Flat File Dictionary with Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Creating an Empty Flat File Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Creating a Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Modifying Flat File Dictionary Entries, Dictionaries, and Schemas . . . . . . . . . . . . . . . . . . . 102
Modifying an Existing Flat File Dictionary Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Modifying an Existing Flat File Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Modifying an Existing Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Deleting Flat File Dictionary Entries, Dictionaries, and Schemas . . . . . . . . . . . . . . . . . . . . 109
Sample Flow Services for Working with XML Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Creating a Service that Retrieves the XML File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Retrieving Namespace Data to Write to an XML File . . . . . . . . . . . . . . . . . . . . . . . . . . 110

C. Flat File Byte Count Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113


Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Handling Partial Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Reading Partial Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Writing Partial Character Encodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Stateful Encodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Writing Stateful Encodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Flat File Schema Developer’s Guide Version 8.2 5


Table of Contents

6 Flat File Schema Developer’s Guide Version 8.2


About This Guide

The webMethods Integration Server provides the WmFlatFile package to enable you to
exchange and process flat files using its built–in services. This guide is for users who
want to use Software AG Designer or webMethods Developer to create flat file schemas
and dictionaries to parse and validate inbound flat files and produce outbound flat files.
To use this guide effectively, you should be familiar with the basic concepts described in
Administering webMethods Integration Server, webMethods Service Development Help, and
Developing Integration Solutions: webMethods Developer User’s Guide.

Note: This guide describes features and functionality that may or may not be available
with your licensed version of webMethods Integration Server. For information about the
licensed components for your installation, see the Settings > License page in the
webMethods Integration Server Administrator.

Deprecation of webMethods Developer


webMethods Developer is deprecated and does not support all the features of
webMethods Integration Server 8.2. Software AG recommends the use of Software AG
Designer for service development.

Document Conventions

Convention Description
Bold Identifies elements on a user interface.
Narrow font Identifies storage locations for services on webMethods Integration
Server Administrator, using the convention folder.subfolder:service.
UPPERCASE Identifies keyboard keys. Keys you must press simultaneously are
joined with a plus sign (+).
Italic Identifies variables for which you must supply values specific to your
own situation or environment. Identifies new terms the first time they
occur in the text.
Monospace Identifies text you must type or messages displayed by the system.
font

{} Indicates a set of choices from which you must choose one. Type only
the information inside the curly braces. Do not type the { } symbols.
| Separates two mutually exclusive choices in a syntax line. Type one of
these choices. Do not type the | symbol.

Flat File Schema Developer’s Guide Version 8.2 7


About This Guide

Convention Description
[] Indicates one or more options. Type only the information inside the
square brackets. Do not type the [ ] symbols.
... Indicates that you can type multiple options of the same type. Type
only the information. Do not type the ellipsis (...).

Documentation Installation
You can download the product documentation using the Software AG Installer.
Depending on the release of the webMethods product suite, the location of the
downloaded documentation will be as shown in the table below.

For webMethods... The documentation is downloaded to...


6.x The installation directory of each product.
7.x A central directory named _documentation in the main
installation directory (webMethods by default).
8.x A central directory named _documentation in the main
installation directory (Software AG by default).

Online Information
You can find additional information about Software AG products at the locations listed
below.

Note: The Empower Product Support Web site and the Software AG Documentation Web
site replace Software AG ServLine24 and webMethods Advantage.

If you want to... Go to...


Access the latest version of product Software AG Documentation Web site
documentation.
http://documentation.softwareag.com

8 Flat File Schema Developer’s Guide Version 8.2


About This Guide

If you want to... Go to...


Find information about product releases and Empower Product Support Web site
tools that you can use to resolve problems.
https://empower.softwareag.com
See the Knowledge Center to:
 Read technical articles and papers.
 Download fixes and service packs.
 Learn about critical alerts.
See the Products area to:
 Download products.
 Get information about product
availability.
 Access older versions of product
documentation.
 Submit feature/enhancement requests.
 Access additional articles, demos, and Software AG Developer Community
tutorials. for webMethods
 Obtain technical information, useful http://communities.softwareag.com/
resources, and online discussion forums, webmethods
moderated by Software AG professionals,
to help you do more with Software AG
technology.
 Use the online discussion forums to
exchange best practices and chat with
other experts.
 Expand your knowledge about product
documentation, code samples, articles,
online seminars, and tutorials.
 Link to external Web sites that discuss
open standards and many Web
technology topics.
 See how other customers are streamlining
their operations with technology from
Software AG.

Flat File Schema Developer’s Guide Version 8.2 9


About This Guide

10 Flat File Schema Developer’s Guide Version 8.2


1 Concepts

 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
 What Is a Flat File? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
 What Is a Flat File Schema? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
 What Type of Flat File Constraints Can You Define? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
 How Is a Flat File Schema Used to Parse Records? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
 What Is a Flat File Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
 When Should I Create a Flat File Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
 What Is the Flat File Schema Editor? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Flat File Schema Developer’s Guide Version 8.2 11


1 Concepts

Overview
The webMethods Flat File package (WmFlatFile) is a set of services that enables you to
translate documents into and from flat file formats. To set up the translation, you use a
flat file schema to define how to identify individual records within a flat file and what
data is contained in each of those records.

What Is a Flat File?


When different applications attempt to communicate with one another, they may not
speak the same “language.” Flat files enable you to send data to any application in a
mutually agreed upon format so that the data in the files can be read and processed.
Flat files present complex hierarchical data in a record–based storage format, which
unlike XML does not embed structural information (metadata) within the data. In other
words, the metadata of a flat file is separated from the data and contained in a flat file
schema. A single logical record of application data is externalized as a set of records
without any structural information. Therefore, the application receiving the flat file must
have knowledge of the structure of the flat file, through the flat file schema, to read the
flat file. This structural information identifies the parent–child relationships between
different records in the flat file. The actual data has been “flattened” by removing this
hierarchical relationship. By nesting records in the flat file schema (adding a record to a
record) you can represent the hierarchical structure of the data in the flat file schema.
All flat files consist of a list of records containing fields and composites:
 Fields are atomic pieces of data (for example, postal code).
 Composites contain multiple fields (for example, ID and ID qualifier, Date and time).
The fields within a composite are referred to as subfields. A composite definition
contains the same information as a record definition, except that composites are not
allowed inside composites.
 Records (also known as segments) are sequences of fields and/or composites.
For example, the following flat file data and its list of delimiters enables you to see how
elements (records, composites, and fields) within a flat file can be identified.

Field record delimiter = !

Rec1*C1Field1+C1Field2*FieldA*C2Field1+C2Field2! field delimiter = *


subfield delimiter = +
Composite Composite
Record

To communicate using flat files, users must create a flat file schema that contains a
particular flat file’s structural information, including how to identify records and
separate those records into fields. This enables receivers of flat file documents to parse
and validate inbound flat files for use by their back–end systems, and senders of
documents to convert outbound documents to flat file format for delivery to another
back–end system.

12 Flat File Schema Developer’s Guide Version 8.2


1 Concepts

What Types of Flat Files Does webMethods Support?


The WmFlatFile package can exchange all types of flat files but can process only certain
types of flat files. The WmFlatFile package can process flat files in which:
 The records in the flat file are defined using one of the following methods:
 Delimiters. Each record in the flat file is separated by a delimiter.
 Fixed length. Each record is a fixed number of bytes (for example, mainframe
punch or print records).
 Variable length. Each record is preceded by two bytes that indicate the length of the
record. Records in the flat file can have different lengths.
 Each distinct record structure has a record identifier, or if no record identifier is
present, the record must be parsed using a default record definition. For more
information about default records, see “Default Records” on page 19.
 If the flat file contains record identifiers, the record identifiers must be located in the
same location in all records in the file.
The WmFlatFile package then can identify fields in these records based on either:
 Delimiters. Each field is separated by a delimiter, and the Nth delimited field is
identified in the record. This can be used only when a field delimiter (and, if necessary,
subfield delimiter) has been specified.
 Byte position. Each field is defined by 1) the number of bytes from the beginning of the
record and 2) the field length. This can be used regardless of whether a field delimiter
has been specified.
To parse a flat file that does not conform to these restrictions, you can create a custom
service using Software AG Designer or webMethods Developer. For more information,
see webMethods Service Development Help or Developing Integration Solutions: webMethods
Developer User’s Guide.

What Is a Flat File Schema?


A flat file schema is the blueprint that contains the instructions for parsing or creating a
flat file and is created as a namespace element in the webMethods Integration Server.
This blueprint details the structure of the document, including delimiters, records, and
repeated record structures. A flat file schema also acts as the model against which you
can validate an inbound flat file.
A flat file schema consists of hierarchical elements that represent each record, field, and
subfield in a flat file. Each element is a record, composite, or field, and either a definition or
reference. You then configure each element with the necessary constraints.
For instructions to create a flat file schema, see Chapter 3, “Creating and Editing Flat File
Schemas and Dictionaries”, in this guide.

Flat File Schema Developer’s Guide Version 8.2 13


1 Concepts

What Type of Flat File Constraints Can You Define?


Flat file schemas contain information about the document, record, and field levels of flat
files. A flat file schema can define three types of constraints:
 Structural constraints describe the sequence of records, composites, and fields in a flat
file. For example, a flat file schema might describe an address record that consists of a
Street Address field, followed by a City field, State field, and ZIP Code field. You
define structural constraints for each parent element in the flat file schema.
 Content type constraints describe the possible values or minimum/maximum values for
elements in a flat file. For example, the State field might have a content constraint
specifying that its value must be exactly two digits. These types of constraints are
referred to as validators. In flat file dictionaries, you can define validators only for
parent records.
 Conditional constraints describe the valid combinations of fields and subfields allowed
in records and composites. For example, you can use the Required (R) conditional
validator to require that at least one of the specified fields be present.
During data validation, the validation engine in the WmFlatFile package compares the
records, composites, and fields in a flat file with the constraints described for those
records and fields in the flat file schema. An inbound flat file is considered valid when it
complies with the constraints outlined in its related flat file schema. For more
information about setting flat file schema constraints, see Chapter 3, “Creating and
Editing Flat File Schemas and Dictionaries” in this guide. For more information about
data validation, see Appendix A, “Validation Errors” in this guide.
The following table identifies the types of flat file schema constraints you can set for the
document, record, and field levels.

Level Constraint
Document  How the records are parsed
 What records can appear in the document
 Whether the records are record definitions or record references
 The order in which the records can appear
 Whether a record is mandatory or optional
 Whether a record can repeat, and if so, how many times

14 Flat File Schema Developer’s Guide Version 8.2


1 Concepts

Level Constraint
Record/  How fields and composites are extracted from a record
Composite
 Delimited field. Extracts the Nth delimited field from the record.
This can be used only when a field delimiter has been specified.
Fields within a character–delimited composite are separated by a
subfield delimiter.
 Positional field. Each field is defined by an offset from the
beginning of the record and length. This can be used regardless of
whether a field delimiter has been specified.
 Whether a field or composite is mandatory or optional
 How to conditionally validate each field
Field  Minimum and maximum field lengths
 List of valid values
 Range of valid values
 Partition of valid values

Important! All lengths and positions specified in a flat file schema refer to byte lengths and
positions, not character lengths and positions. This is important to note because the byte
count can differ from the character count for encodings that have multi–byte characters.

How Is a Flat File Schema Used to Parse Records?


The WmFlatFile package provides the pub.flatFile:convertToValues service, which uses a flat
file schema to parse flat files inbound to the Integration Server. The convertToValues service
uses a record parser (Delimited, Fixed Length, or Variable Length) to parse the records in a
flat file. For more information about the pub.flatFile:convertToValues service, see the
webMethods Integration Server Built-In Services Reference.
After each record in a flat file has been parsed, each record must be identified. This is
done using the record identifier. Identifying the record provides the definition of that
record, as defined in the flat file schema using the Flat File Schema Editor. The field
values then are pulled from the record using the extractors defined in the flat file schema.

Flat File Schema Developer’s Guide Version 8.2 15


1 Concepts

If the record cannot be identified (known as undefined data) and you have selected a
default record, the field values are extracted from the record using the definition of the
default record. If the record cannot be identified and you have not selected a default
record, the field values are not extracted from the record. You also can format flat file data
to meet the requirements of your back–end system or application using the Format Service
property on the Flat File Structure tab of the Flat File Schema Editor. For information about
how to specify field format services, see “Format Services” on page 66.
Finally, the parsed record is placed in the output data based on the structure defined in
the flat file schema. This process is repeated until all records in the flat file have been
parsed.

Record Parsers
A record parser breaks a flat file into individual records. In the WmFlatFile package, you
can choose from one of its four record parsers:
 Delimited Record Parser. This parser expects a specific delimiter to indicate the end of a
record. For a record delimiter, you can specify:
 A character (for example, !) or character representation (for example, \r\n for
carriage return)
 Hexidecimal value (for example, 0X09)
 Octal value (for example, 009)
 Unicode characters (for example, \uXXXX, where XXXX represents the unicode
value of the character)
The occurrence of the record delimiter signals the end of one record and the
beginning of the next record.
 Fixed Length Record Parser. This parser splits a file into records of the same
pre-specified length.

Note: This parser measures the lengths and positions of records in terms of bytes,
rather than characters. Prior to 6.5, Service Pack 2, the parser measured lengths and
positions in terms of characters. This change does not affect users who currently
parse/compose flat files using single-byte encodings because one byte equals one
character. In this case, there is no functional difference between specifying bytes or
characters.

The parser supports both single-byte and multi-byte encodings. Multi-byte encoded
files must run on JVM version 1.4 or later. (The behavior of delimited fields and
records remain the same.) For details, see Appendix C on page 113.

16 Flat File Schema Developer’s Guide Version 8.2


1 Concepts

 Variable Length Record Parser. This parser expects each record to be preceded by two
bytes that indicate the length of the record. Each record may be a different length.
 EDI Document Type Record Parser. This parser is used only for EDI flat files and provides
additional functionality needed to properly parse EDI documents. Documents using
this record parser should be created using the webMethods EDI Module, not the
WmFlatFile package. For more information, see the webMethods EDI Module User’s
Guide.

Record Identifiers
A record identifier looks at a record and extracts an identifier out of the data. The
WmFlatFile package uses that identifier to connect the record definition in a flat file
schema with a particular record in the flat file. The name of the record definition must
match the value obtained by the record identifier. In the WmFlatFile package, you can
choose from one of two methods of record identification:
 Starts at position record identifiers compare the value that occurs in the record, at the
specified offset, to all the record names defined in the flat file schema. Note that the
Starts at position identifier cannot distinguish between all types of record names. For
example, if you name records “Rec1” and “Rec,” some instances of “Rec1” may be
identified as “Rec,” because “Rec1” begins with “Rec.”
 Nth Field record identifiers use the value of the specified field as the record identifier.
These identifiers count from zero (0). For example, if 2 is specified, the third field is
used as the record identifier.
The WmFlatFile package processes the longer record identifiers first and then the shorter
record identifiers.
The WmFlatFile package does not perform any kind of normalization on input provided
in the flat file schema or when comparing or processing values retrieved from a file. You
must enter carefully the exact Unicode character values you want to search for in an
instance of the flat file you are describing. For example, you should differentiate wide
(sometimes called multi–byte or zenkaku) characters from their narrow (or single–byte)
equivalents when processing Asian characters. Another example is the use of Unicode
combining and pre–composed sequences. In all cases, fields are matched using a strict
binary comparison of Unicode character values in the separate fields.
You also should exercise care when selecting the encoding of the file being processed.
Some encodings are very similar to one another. For example, the Shift–JIS and MS932
encodings commonly used with Japanese language text are very similar, but they map
some characters differently. This can result in the WmFlatFile package not finding a
match where you otherwise would expect one to exist.

Flat File Schema Developer’s Guide Version 8.2 17


1 Concepts

Extractors
Extractors take data out of a parsed record and place it in the output of the
pub.flatFile:convertToValues service. If extractors are not defined in the flat file schema, the
parser returns a series of records that contain no fields or composites. For information
about the pub.flatFile:convertToValues service, see webMethods Integration Server Built-In
Services Reference.
Fields and composites are extracted from a record based on the position of the field
delimiter. From the beginning of the record to the first field delimiter is the first field in
the record. From the first field delimiter to the second field delimiter is the second field in
the record, and so on. Everything from the last field delimiter to the record delimiter (the
end of the record) is considered part of the final field.

Note: Although fixed length and variable length record parsers do not use record
delimiters, they can have field delimiters.

Fields also can be extracted from a record based on a substring of the original record
starting at a particular byte count and ending at a particular byte count. The user
specifies the start of the field by specifying the number of bytes from the beginning of the
record to the start of the field and specifying the number of bytes from the beginning of
the record to the end of the field.
If a value is a composite, it is simply a field that can be further parsed into more fields.
Instead of a field delimiter, a subfield delimiter is used to separate a composite into fields.
Fields are extracted from a composite based on either the position of the subfield
delimiter in the composite or on a substring of the composite. Remember that all
positions used in extracting fields from a composite are referenced from the beginning of
the composite, not the start of the record.

Undefined Data
In some cases, the data resulting from the pub.flatFile:convertToValues service might contain
records that were not recognized, known as undefined data. This could be a result of the
complexity of the flat file, or of the lack of detail in the flat file schema (such as no record
identifier). When the convertToValues service processes an unrecognized record, it puts a
placeholder named unDefData in the resulting IS document (IData object) and stores the
record as a string in the pipeline. For more information about the pub.flatFile:convertToValues
service, see webMethods Integration Server Built-In Services Reference.

Note: If the file is encoded using a multi-byte encoding, and if you use a fixed length or
variable length parser, the service puts two placeholders into the pipeline: unDefData and
unDefBytes.

You can select a default record when creating a flat file schema. Any record that cannot be
recognized will be parsed using this default record. If a default record is not selected,
unrecognized records will be placed into the output IS document with the undefined
data tag, which might produce errors.

18 Flat File Schema Developer’s Guide Version 8.2


1 Concepts

Note: If your flat file does not contain record identifiers, you must select a default record.
By selecting a default record, a CSV (comma separated values) file can be parsed as a
special case of record with no record identifier, but with fixed field and record delimiters.

For some types of documents, undefined data should not be allowed in the document
and if encountered should generate validation errors in the output. In other cases,
undefined data is expected and should not generate validation errors. In still other cases,
all unidentified records should be parsed using a default record definition, as described
in “Default Records” on page 19.
You can choose whether you want errors to be generated for a flat file schema when
undefined data is encountered. You do so using a combination of two fields:
 The Allow Undefined Data check box on the Settings tab
 The Allow Undefined Data check box for each record in the flat file schema on the Flat File
Structure tab
When the Allow Undefined Data check box on the Settings tab is selected, which it is not the
default, and the Allow Undefined Data check box for a particular record is selected, no errors
will be generated if the record contains undefined data. If either the Allow Undefined Data
check box on the Settings tab or the Allow Undefined Data check box for a particular record is
cleared, errors will be generated if the record contains undefined data.
Working with undefined data involves three steps:
1 Configuring the flat file schema and record–level Allow Undefined Data settings.
2 Ignoring undefined data, OR parsing the undefined data in each record based on the
document structure.
3 Writing logic to handle the parsed data, such as logic to map the parsed data to
another service or perform error handling.

Default Records
If the pub.flatFile:convertToValues service cannot recognize a record (for example, the record
does not have a record identifier), the record will be treated as undefined data unless you
specify a default record definition to be used to parse all unrecognized records of a
particular type. In fact, if your flat file schema does not contain any record identifiers,
you must specify a default record. A default record can only be defined in a flat file
dictionary.
For example, if you have a CSV (comma separated values) flat file that simply lists the
name, address, and phone number of a group of customers, none of the records would
have a record identifier:
John Doe, 123 Main St Washington DC, 888–555–1111;
Jane Smith, 321 Oak Dr Memphis TN, 800–555–2222;

Flat File Schema Developer’s Guide Version 8.2 19


1 Concepts

If you specified a default record definition to parse this particular type of record, the file
can be properly parsed and converted to an IS document (IData object) of the name
recordWithNoID. By default, each recordWithNoID record appears as a child of the record
above it, in an array. To modify this default behavior, see “Customizing the Flat File
Configuration Settings” on page 73.
If a default record has not been specified, the record will be treated as undefined data, as
described in “Undefined Data” on page 18.

What Is a Flat File Dictionary?


A flat file schema can contain either record definitions or references to record definitions
that are stored elsewhere in the namespace in a flat file dictionary. A flat file dictionary is
simply a repository for elements that you reference from flat file schemas. This allows
you to create record definitions in a dictionary that can be used across multiple flat file
schemas. Reusing record definitions reduces the amount of memory consumed by a flat
file schema.
Flat file dictionaries are created as namespace elements in the Integration Server and
contain definitions of records, composites, and fields. When you change a definition in a
flat file dictionary that is referenced in multiple flat file schemas, the element definition is
updated automatically in all of the flat file schemas.

Note: You can reference a flat file dictionary definition in any flat file schema regardless of
whether the dictionary and schema are located in the same package.

When creating an element definition in a flat file dictionary, you specify only certain
properties. You then specify the remaining properties in the instance of the element
definition in a particular flat file schema.

When Should I Create a Flat File Dictionary?


The decision to define records in a flat file dictionary versus in a flat file schema depends
on the type of flat files that you intend to parse. The Electronic Document Interchange
(EDI) ANSI X12 standard defines a large set of document structures that reuse the same
record, field, and composite definitions many times. Defining these records, fields, and
composites in a dictionary allows for them to be reused throughout the entire set of EDI
ANSI X12 document flat file schemas. Reusing definitions reduces the amount of
memory consumed by the webMethods Integration Server.
EDI ANSI X12 also has different versions of these documents (for example, 4010). Each
version of the document set should have its own dictionary. In this way, you can be
certain that changes to a record, field, or composite between versions are maintained.
A more complex scenario would involve multiple families of documents and multiple
versions of those families. An example of this is EDI ANSI X12 and UN/EDIFACT
documents. One dictionary should be created for each version of EDI ANSI X12

20 Flat File Schema Developer’s Guide Version 8.2


1 Concepts

documents and one dictionary should be created for each version of EDI UN/EDIFACT
documents. A separate dictionary would not be required for each flat file schema in the
same version. All flat file schemas in one version of the same family should use the same
dictionary.
In a scenario in which you intend to parse only one flat file, or flat files that do not share
record, composite, or field definitions, you can define these elements directly in the flat
file schema. This allows for the entire document to be edited in a single view, without
referencing a flat file dictionary.
If a clear choice does not exist between these two scenarios, the best approach is to create
the definitions in the flat file dictionary and reference them in a flat file schema. The
definitions then can be reused at a later time.

What Is the Flat File Schema Editor?


When you select a flat file schema or dictionary Software AG Designer or webMethods
Developer, the contents of the flat file schema or dictionary is displayed in the Flat File
Schema Editor.

Identifying Flat File Schemas and Dictionaries

Name of Flat File Schema

Navigation Flat File


Panel Schema Editor

Flat File Schema Developer’s Guide Version 8.2 21


1 Concepts

The following table identifies the symbols for flat file schemas and dictionaries.

Symbol Description
Flat File Schema. Identifies a flat file schema in the Navigation Panel.

Flat File Dictionary. Identifies a flat file dictionary in the Navigation Panel.

Note: A green check mark next to a flat file schema or dictionary ( ) indicates that the
flat file schema or dictionary is locked and available to be edited. When the check mark is
absent, the schema or dictionary is unlocked and cannot be edited.

The Flat File Schema Editor is divided into the following sections:
 Flat File Definition tab. This tab enables you to specify what type of flat file you are
parsing or creating.
 Flat File Structure tab. This tab enables you to specify the structural, content type, and
conditional constraints of your flat file schema. For detailed information, see “Flat
File Structure Tab” below.
 Properties panel. This panel enables you to configure a default record, allow undefined
data, add areas, and set up the ACL (access control lists) permissions for your flat file
schema or dictionary.

Flat File Structure Tab


When creating your flat file schema, you will create new records, composites and fields.
The Flat File Schema Editor uses unique symbols to represent the components of flat file
schemas and dictionaries. The following table identifies the symbols for each component
that can appear in a flat file schema.

Symbol Description
Record Definition. Identifies a record definition in a flat file schema.

Record Reference. Identifies a record reference in a flat file schema.


If “Reference not found” appears after the reference name, your reference is
broken. A broken reference indicates that the referenced element no longer
exists. Flat file schemas that contain broken references will not parse
correctly. To fix a broken reference, either delete the reference or re–create
the definition in the appropriate dictionary.
Composite Definition. Identifies a composite definition in a flat file schema. A
composite definition contains the same information as a record definition,
except that composites are not allowed inside of a composite.

22 Flat File Schema Developer’s Guide Version 8.2


1 Concepts

Symbol Description
Composite Reference. Identifies a composite reference in a flat file schema. See
Record Reference in this table for information about “Reference not found.”
Field Definition. Identifies a field definition in the flat file.

Field Reference. Identifies a field reference in a flat file schema. See Record
Reference in this table for information about “Reference not found.”

An element definition is an element that is contained in a flat file schema or dictionary.


An element reference refers to an element definition in a flat file dictionary. For the
element name you have selected in the Flat File Schema Editor, when you add a new
element it will be added as a child of the selected element. The appropriate new element
selections will be displayed for that element level. For example, when you have a record
selected, you can add record, composite, or field references or definitions to this record. If
you create a composite and then select that composite, you can add only a field reference
or field definition.
You use the buttons at the top of this tab to edit the structure of your schema. The
following table provides a description of each of these buttons.

Button Description
Select the desired element, and then click to delete the selected element.

Select the desired element, and then click to move the element up or
down in the flat file schema structure.
Select the desired element, and then click to move the element left or
right in the flat file schema structure.
Creates an IS document type for this flat file schema. The IS document
type is used to map the output of the convertToValues service to another
format. For more information, see “Mapping Flat File Data” on page 29
of Chapter 2, “Processing Flat Files Overview” of this guide.

Flat File Schema Developer’s Guide Version 8.2 23


1 Concepts

24 Flat File Schema Developer’s Guide Version 8.2


2 Processing Flat Files Overview

 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
 Processing Inbound Flat Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
 Processing Outbound Flat Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Flat File Schema Developer’s Guide Version 8.2 25


2 Processing Flat Files Overview

Overview
As discussed in Chapter 1, “Concepts” in this guide, the webMethods WmFlatFile
package enables you to exchange all types of flat files and process certain types of flat
files. You create flat file schemas to convert and validate inbound flat files and to create
outbound flat files.
The following diagram summarizes the services that the WmFlatFile package provides to
process flat files: pub.flatFile:convertToValues and pub.flatFile:convertToString. For descriptions,
see the table that follows the diagram below.

Note: If you also are using Trading Networks, see the sections about flat file TN document
types in Understanding webMethods B2B: webMethods Trading Networks Concepts Guide and
Building B2B Integrations: webMethods Trading Networks Administrator’s Guide for
information about how Trading Networks processes flat files.

Processing Flat Files

webMethods Integration Server


Flat File Package
Conversion/Validation Services
Flat File
(ffData) Inbound Receive flat file

convertToValues IS Doc
(optional validation) (ffValues)

Process IS Document
Flat File Schema
IS Doc
Process IS Document
(ffValues)

convertToString
Flat File Send/Process
(ffData) Outbound Flat File

26 Flat File Schema Developer’s Guide Version 8.2


2 Processing Flat Files Overview

Item Description
Flat File (ffData) Flat file input with type of String, InputStream, or ByteArray
(received by the Integration Server via File Polling, HTTP, FTP, etc.
For more information, see Chapter 4, “Sending and Receiving Flat
Files” in this guide.)
Conversion/ WmFlatFile package provides services (pub.flatFile:convertToValues and
Validation pub.flatFile:convertToString) that parse, validate, and convert inbound
Services flat files to IS documents (IData objects), and construct outbound
documents from IS documents. For more information about these
services, see webMethods Integration Server Built-In Services Reference.
Flat File Schema Flat File schema containing the structure of the flat file.
IS Doc (ffValues) An IS document (IData object) represents the structure and values of
your flat file for eventual mapping or other processing. All inbound
documents must be converted to IS documents before being
processed further.

Formatting Inbound and Outbound Data


You can format flat file data to meet the requirements of your back–end system or
application. The Format Service property in the Flat File Schema Editor enables you to
specify the service you want to invoke for a particular field when convertToValues or
convertToString is called. For example, when using the convertToValues service to convert a
date field in a flat file into an IS document, you can specify that a particular format
service be invoked for that field during parsing. To alter the format of the date field, you
might invoke a service that changes the format of the field from YYYYMMDD to
MMDDYYYY.
For information about how to specify field format services, see “Format Services” on
page 66.

Processing Inbound Flat Files


The WmFlatFile package provides the pub.flatFile:convertToValues service, which uses a flat
file schema to parse flat files inbound to a webMethods Integration Server. The input of
this service is a flat file and the name of a flat file schema, and the output of this service is
an IS document (IData object). The output IS document is created based on the structure
defined in the flat file schema. You can also specify to validate the flat file against the flat
file schema, which generates errors as output based on the constraints placed on the
records and fields in the flat file schema. For more information about the
pub.flatFile:convertToValues service, see webMethods Integration Server Built-In Services
Reference.

Flat File Schema Developer’s Guide Version 8.2 27


2 Processing Flat Files Overview

Note: Validation is turned off by default. To enable validation, you must set the validate
variable of the convertToValues service to true.

You should use this service as part of customized flow services. You then can use
Integration Server services to process the resulting data as necessary, (for example, map
data from one format to another). For more information about creating flow services, see
webMethods Service Development Help or Developing Integration Solutions: webMethods
Developer User’s Guide. For more information about mapping data, see “Mapping Flat File
Data” on page 29.
The general process for inbound flat files is as follows:

Inbound Flat File Process

Conversion/Validation

Flat File convertToValues IS Doc


(ffData) (optional validation) (IData)

Process IS Document Is Valid


Flat File Schema
errors

The flat file schema provides the convertToValues service with the information necessary to
detect the boundaries between records and fields. After a record boundary is detected,
the service matches the record in the flat file with a record defined in the flat file schema
using the record identifier.

Note: When parsing a file, the flat file parser ignores any data that appears before the first
valid record in the file.

Step 1: Create Appropriate Flat File Schema


Before you start working with an inbound flat file, you must create a flat file schema to be
used for conversion and validation of the document. Use the Software AG Designer or
webMethods Developer to create the flat file schemas used to parse, convert, and validate
inbound flat files. For steps to create flat file schemas, see Chapter 3, “Creating and
Editing Flat File Schemas and Dictionaries” in this guide.

Step 2: Receive the Flat File


The webMethods Integration Server provides a number of ways to send and receive flat
files. For more information, see Chapter 4, “Sending and Receiving Flat Files” in this
guide.

28 Flat File Schema Developer’s Guide Version 8.2


2 Processing Flat Files Overview

Step 3: Parse, Convert, and Validate Flat File Data to an IS Document


To parse a flat file using a flat file schema, and to convert the data into IS documents
(IData objects), you call the convertToValues service.
During flat file parsing, it is an option to validate the flat file against the document,
record, and/or field constraints you defined in a flat file schema. For a list of the
constraints you can set, see “What Type of Flat File Constraints Can You Define?” on
page 14. To set or change the constraints for a particular flat file schema, see Chapter 3,
“Creating and Editing Flat File Schemas and Dictionaries” in this guide.
To validate a flat file against the flat file schema used to parse the file, you must set the
validate variable of the convertToValues service to true, which returns errors describing how
the given ffData violates the constraints described in the flat file schema. For a list of
validation error codes and messages, see Appendix A, “Validation Errors” in this guide.
For more information about the convertToValues service, see webMethods Integration Server
Built-In Services Reference.

Step 4: Process the IS Document


Software AG Designer or webMethods Developer provides tools for processing IS
documents (IData objects), including mapping data into other formats.

Mapping Flat File Data


In many cases it is necessary to map the output of the convertToValues service to another
format. Creating an IS document type from your flat file schema enables you to reference
and view the document structure in a flow service.
These steps enable you to map data into other formats, such as your back–end, or user–
defined format.

Note: The following procedure describes how to map data using Developer. You can also
use Designer to map data into other formats.

Flat File Schema Developer’s Guide Version 8.2 29


2 Processing Flat Files Overview

To map flat file data


1 In the Developer Navigation Panel, select the saved flat file schema, click the Flat File
Structure tab, and then click . This creates an IS document type in the same folder as
the schema.

This IS document type is named the same as the flat file schema, with “DT”
appended. For example, as shown in the figure above, if your flat file schema name is
“PurchaseOrder,” the related IS document type name is “PurchaseOrderDT.”

2 Click to save the IS document type.


3 For the flow service you are creating or editing, on the Flow Editor of the Developer
select the INVOKE pub.flatFile:convertToValues flow operation.

30 Flat File Schema Developer’s Guide Version 8.2


2 Processing Flat Files Overview

4 On the Pipeline tab under Service In, in the ffSchema variable specify the location and
name of the flat file schema (for example, “Test:PurchaseOrder”). Specify other
inputs as necessary.
5 Perform the following to add a Document Reference to the IS document type that is
based on the flat file schema.

a On the Pipeline tab click under Pipeline Out, then click . Select Document
Reference to add a new document reference variable.
b In the Select dialog box, navigate to the IS document type created in step 1 of this
procedure (for example, “PurchaseOrderDT”). The name appears in the Name
box. Click OK.
6 On the Pipeline tab under Service Out, map the value of the ffValues variable to the
document reference variable created in this procedure.

Flat File Schema Developer’s Guide Version 8.2 31


2 Processing Flat Files Overview

7 Click to save the service.

Handling Large Flat Files


As installed, the WmFlatFile package processes all flat files in the same manner,
regardless of their size. That is, the WmFlatFile package receives a flat file and keeps the
file content in memory during processing. However, if you receive large files, the
WmFlatFile package can encounter problems when working with these files because the
system does not have enough memory to hold the entire parsed file.
If some or all of the files that you process using the WmFlatFile package encounter
problems because of memory constraints, you can set the iterator variable in the
pub.wmflatFile:convertToValues service to true to process top level records (children of the
document root) in the schema one at a time. After all child records of the top level record
are parsed, the convertToValues service returns and the iterator moves to the top level of the
next record in the schema, until all records are parsed. This parsing should be done in a
repeat step where each time the convertToValues service returns, the results are mapped and
dropped from the pipeline to conserve memory. If the results were kept in the pipeline,
out–of–memory errors might occur.
The service generates an output object (ffIterator variable) that encapsulates and keeps
track of the input records during processing. When all input data has been parsed, this
object becomes null. When the ffIterator variable is null, you should exit from the repeat
step to discontinue processing.

32 Flat File Schema Developer’s Guide Version 8.2


2 Processing Flat Files Overview

Processing Outbound Flat Files


The WmFlatFile package provides the pub.flatFile:convertToString service, which uses a flat
file schema to create a flat file outbound from a webMethods Integration Server. The
input of this service is an IS document (IData object) and a flat file schema, and the output
of this service is a flat file. For more information about the pub.flatFile:convertToString service,
see webMethods Integration Server Built-In Services Reference.

Note: The flat file resulting from convertToString will be only as complete as the information
translated from the original flat file to the IS document. If you specified only certain parts
of the flat file to translate to the IS document (via the flat file schema), of course, only
those parts will be translated back to the flat file.

The general process for outbound documents is as follows:

Outbound Flat File Process

Conversion
IS Doc Flat File
(IData) convertToString (ffData)

Send/Process
Flat File
Flat File Schema

Step 1: Create Appropriate Flat File Schema


Before you start working with an IS document (IData object), you must create a flat file
schema to be used for conversion of the object. You use Software AG Designer or
webMethods Developer to create the flat file schemas used to create outbound flat files.
For steps to create flat file schemas, see Chapter 3, “Creating and Editing Flat File
Schemas and Dictionaries” of this guide.

Step 2: Convert the IS Document to a Flat File


The WmFlatFile package provides the convertToString service to convert flat file IS
documents (IData objects) to outbound flat files using the flat file schema you created.
This service enables you to specify delimiters to be used as record, field, and subfield
separators as well as optionally specify an outputFileName so that the output also will be
written to a file.

Example
In many cases it is necessary to map the output of the convertToString service to another
format. Creating an IS document type from your flat file schema enables you to reference
and view the document structure in a flow service.

Flat File Schema Developer’s Guide Version 8.2 33


2 Processing Flat Files Overview

The following steps provide an example of how you might convert an IS document to a
flat file.

Note: The following example describes how to convert an IS document to a flat file using
Developer. You can also use Designer to convert an IS document to a flat file.

To convert an IS document to flat file data


1 In the Developer Navigation Panel, select the saved flat file schema, click the Flat File
Structure tab, and then click . This creates an IS document type in the same folder
as the schema.

This IS document type is named the same as the flat file schema, with “DT”
appended. For example, as shown in the figure above, if your flat file schema name is
“PurchaseOrder,” the related IS document type name is “PurchaseOrderDT.”

2 Click to save the IS document type.


3 For the flow service you are creating or editing, on the Flow Editor of the Developer
select the INVOKE pub.flatFile:convertToString flow operation.
4 On the Pipeline tab under Service In, in the ffSchema variable specify the location and
name of the flat file schema (for example, “Test:PurchaseOrder”). Specify other
inputs as necessary.
5 Perform the following to add a Document Reference to the IS document type that is
based on the flat file schema.

34 Flat File Schema Developer’s Guide Version 8.2


2 Processing Flat Files Overview

a On the Pipeline tab, click under Pipeline In, then click . Select Document Reference
to add a new document reference variable.
b On the Select dialog box, navigate to the IS document type created in step 1 of this
procedure (for example, “Test:PurchaseOrder”). The name appears in the Name
box. Click OK.
6 On the Pipeline tab, map the document reference variable created in this procedure to
the value of the ffValues variable under Service Out.

7 Click to save the service.

Step 3: Send/Process the Flat File


After the flat file is created, you can send or process the file as necessary. You can send a
flat file using many methods, including via HTTP, SMTP, and FTP. For more information,
see Chapter 4, “Sending and Receiving Flat Files” in this guide.

Flat File Schema Developer’s Guide Version 8.2 35


2 Processing Flat Files Overview

36 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and
Dictionaries

 Creating a Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38


 Step 1: Add and Configure the Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
 Step 2: Specify Flat File Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
 Step 3: Define the Structure of the Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
 Step 4: Test the Flat File Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
 Creating a Flat File Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
 Editing a Flat File Schema or Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
 Managing Flat File Dictionary Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
 Setting Access Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
 Customizing the Flat File Configuration Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Flat File Schema Developer’s Guide Version 8.2 37


3 Creating and Editing Flat File Schemas and Dictionaries

Creating a Flat File Schema


Creating a flat file schema consists of a number of steps. To simplify the steps needed to
create a flat file schema, this procedure is broken down into sections:
 “Step 1: Add and Configure the Flat File Schema” on page 38
 “Step 2: Specify Flat File Properties” on page 43
 “Step 3: Define the Structure of the Flat File Schema” on page 50
 “Step 4: Test the Flat File Schema” on page 68

Note: The following sections that provide the steps to create a flat file schema describe
how to use webMethods Developer. For information about how to use Software AG
Designer, see webMethods Service Development Help.

Step 1: Add and Configure the Flat File Schema

To add a new flat file schema

1 Create a package with a dependency on the WmFlatFile package by clicking and


typing WmFlatFile in the Package box and its version number in the Version box. If you
need instructions for creating packages within the Developer, see Developing
Integration Solutions: webMethods Developer User’s Guide.
2 Create a new folder within the new package.
3 If you want to reuse element definitions in other flat file schemas, create a flat file
dictionary. (Note that any flat file schemas sharing records, fields, or composite
definitions should use a common dictionary.) For more information about creating
and using a flat file dictionary, see “Creating a Flat File Dictionary” on page 69.
4 In webMethods Developer, click File  New in the menu bar.
5 In the New dialog box, select Flat File Schema, and then click Next.
6 Type the name of the new flat file schema, select its location (the folder you created in
the WmFlatFile–dependent package), and then click Finish.
The flat file schema you created is automatically selected, and the Flat File Schema
Editor displays in the right pane.
7 On the Flat File Definition tab under Record Parser, select the type of parser for this flat
file schema:
 Delimiter. Each record is separated by a delimiter.
 Fixed Length. Each record is of a fixed length (for example, mainframe punch or
print records).

38 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

 Variable Length. The first two bytes of the input data stream contains the length of
each record.
 EDI Document Type. Do not select this option.

Important! If you are using the webMethods EDI Module to process EDI
documents, you should use the wm.b2b.edi services to create your flat file schemas.
This guide does not provide information about creating EDI flat file schemas for
use with the webMethods EDI Module. For more information and steps, see the
webMethods EDI Module User’s Guide. The EDI Document Type option is displayed
for you to view existing EDI flat file schemas. Although you can create EDI flat
file schemas using the Flat File Schema Editor, Software AG does not recommend
it.

Note: In subsequent steps you can specify delimiters using the Character property.
When you specify delimiters, use the following syntax:

— One character or character representation (for example, *, \n for line


terminator, \t for tab). For the Record delimiter, you can also select carriage
return line feed (or specify \r\n) if a record ends with the two–character
CRLF.

— Hexidecimal value with prefix “0X” (for example, 0X09, 0X13)

— Octal value with prefix “0” or decimal value (for example, 009, 013)

— Unicode characters (for example, \uXXXX, where XXXX represents the


unicode value of the character)

— The space character is allowed as a delimiter.

8 For all types of record parsers, specify the following fields:


a For Field or Composite:

Property Description

Character Optional – Character that separates fields in a flat file


document.
–OR–
Character Optional – Starting from the beginning of the document and
position counting from zero (0), the character position at which the
field delimiter for this document is located.
For example, if you specify 4 as the Character position, you
have indicated that the field delimiter appears in the fifth
character position from the beginning of the document.

Flat File Schema Developer’s Guide Version 8.2 39


3 Creating and Editing Flat File Schemas and Dictionaries

b For Subfield:

Property Description

Character Optional – Character that separates subfields in a flat file


document.
–OR–
Character Optional – Starting from the beginning of the document and
position counting from zero (0), the character position at which the
subfield delimiter for this document is located.
For example, if you specify 5 as the Character position, you
have indicated that the subfield delimiter appears in the sixth
character position from the beginning of the document.

c For Release Character:


Specify either Release Character –or– Quoted Release Character. If you specify both,
the convertToString service uses Quoted Release Character.

Property Description

Character Optional – Character used to enable a delimiter to be used for


its intended, original meaning. The character following the
release character will not be treated as a delimiter.
For example, your field delimiter is + and your release
character is \. When using + within a field as text, you must
preface it with your release character. When using the
convertToValues service to create the strings a+b+c and d+e+f,
the record would appear as a\+b\+c+d\+e\+f. When using the
convertToString service to create a\+b\+c+d\+e\+f, the value of
the record would be a+b+c and d+e+f.

–OR–
Character Optional – Starting from the beginning of the document and
position counting from zero (0), the character position at which the
release character for this document is located.
For example, if you specify 5 as the Character position, you
have indicated that the release character appears in the sixth
character position from the beginning of the document.

40 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

d For Quoted Release Character:


Specify either Release Character –or– Quoted Release Character. If you specify both,
the convertToString service uses Quoted Release Character.)

Property Description

Character Optional – Character used to enable a section of text within a


field to be represented as its literal value. Any delimiter
characters that appear within this section will not be treated
as delimiters.
For example, your field delimiter is (,) and your release
character is “. When you want to use (,) within a field as text,
you must preface it with your quoted release character. When
using the convertToValues service to create the strings Doe, John
and Doe, Jane, the record would appear as “Doe,
John”,“Doe, Jane”. When using the convertToString service to
create “Doe, John”,“Doe, Jane”, the value of the record
would be Doe, John and Doe, Jane.
When using the convertToString service, if you have specified
both the Release Character and the Quoted Release Character, the
Quoted Release Character will be used.
–OR–
Character Optional – Starting from the beginning of the document and
position counting from zero (0), the character position at which the
quoted release character for this document is located.
For example, if you specify 5 as the Character position, you
have indicated that the quoted release character appears in
the sixth character position from the beginning of the
document.

9 If you selected Delimiter for Record Parser, complete the following Record fields:

Property Description

Character Character that separates records in a flat file document.

–OR–
Character Starting from the beginning of the document and counting from
position zero (0), the character position at which the record delimiter for
this document is located.
For example, if you specify 3 as the Character position, you have
indicated that the record delimiter appears in the fourth
character position from the beginning of the document.

Flat File Schema Developer’s Guide Version 8.2 41


3 Creating and Editing Flat File Schemas and Dictionaries

Important! If records use a fixed position extractor, the Delimiter record parser does not
include the record delimiter character in the parsed record. You will not be able to
extract the record delimiter character in a fixed position field.

Important! If you use the webMethods EDI Module, set the


useReadableDelimiterReporting variable to false. This variable controls how the
Delimiter record parser parses non-readable characters, such as \r (carriage return),
\n (line feed), or \t (tab). For details, see “Customizing the Flat File Configuration
Settings” on page 73.

10 If you selected Fixed Length for Record Parser, complete the following Record Parser
field:

Property Description

Record length Length, in characters, of each record in the flat file.

11 To define the record identifier for this flat file schema, complete the appropriate
Record Identifier property:

Property Description

Starts at Counting from zero (0), the character position at which the record
Position identifier is located.
For example, if you specify 5 as the Starts at Position, you have
indicated that the record identifier appears in the sixth character
position in each record. The default for this field is zero (0).

–OR–
Nth Field Counting from zero (0), indicates which field in each record you
want used as the record identifier.
This value cannot be null and must be an integer greater than or
equal to zero (0). This field is available only if you have specified
a field delimiter.

42 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Step 2: Specify Flat File Properties

To specify properties for the flat file schema


1 View the Properties panel.
2 Under Default Record, configure the following properties:

Property Description

Set Optional – Under Value, click Set to select the default record for this flat
file schema from a flat file dictionary. This record is used to parse an
undefined data record when the convertToValues service fails to find a
match between the flat file and the flat file schema.
If the default record is specified when creating the flat file schema, any
record that cannot be recognized will be parsed using this default
record. If a default record is not selected, the record will be treated as
undefined data.
If the Undefined Data property is set to False and the validate variable of
the convertToValues service is set to true, convertToValues will generate
errors when it encounters undefined data. For more information about
the Undefined Data property, see page 44.

Note: If the flat file you are parsing does not contain record identifiers,
you must select a default record. By selecting a default record, a CSV
(comma separated values) file can be parsed as a special case of record
with no record identifier, but with fixed field and record delimiters.

Delete Under Value, click Delete to delete the default record for this flat file
schema. The actual record definition still exists, but is no longer
assigned to this flat file schema.
Dictionary Displays the name of the flat file dictionary that contains the default
record.
Name Displays the name of the record reference that will be used as the
default record.
Floating Optional – The name of the record that is defined in the schema as a
Record floating record.

Note: If the floating record has an alternate name, specify the alternate
name in this field.

For details about how the parser handles floating records, see
“Floating Records” on page 45.

Flat File Schema Developer’s Guide Version 8.2 43


3 Creating and Editing Flat File Schemas and Dictionaries

3 Under Settings, the Undefined Data property helps control the generation of undefined
data errors at any location in the flat file schema.
 If you want to allow undefined data, select True. You now can choose whether to allow
undefined data at the record level. For more information about the record–level
property, see the Allow Undef Data property on page 58.
 If you do not want to allow undefined data in any location in this flat file schema, select
False. This is the default. If the validate variable of the convertToValues service is set
to true, the convertToValues service will generate errors when undefined data is
encountered.
When the convertToValues service processes an undefined record, it puts a placeholder
named unDefData in the resulting IS document and stores the record as a string in the
pipeline.

Note: For a file that is encoded using a multi-byte encoding, the behavior is different.
When you use a fixed length or variable length parser (but not a delimited parser) to
parse such a file, the service places unDefData and unDefBytes into the pipeline. If
you want to re-parse such a file to extract fixed byte position fields, use unDefBytes.

4 Under Settings, the Areas property enables you to add and edit areas for this flat file
schema. Click Choices to display the Areas dialog box, which enables you to use the
following buttons to add and edit areas.

Property Description

Click to add a new area to this flat file schema. You must save the flat file
schema before the new area will be available for use in your flat file
structure.
An area is a way to associate an arbitrary string with a given record. For
example, you may have an address record that needs to specify the
shipping address in the document header, but needs to specify the
billing address in the document detail. To differentiate these two
records, you would create “Header” and “Detail” areas. Then when
defining a record in “Step 3: Define the Structure of the Flat File Schema”
on page 50, you would assign the appropriate area to a record to identify
in which section of the document the record belongs.

Note: Areas are used primarily for EDI document parsing.

Click to insert a new area in a specific location in the list.

Click to delete an existing area.

44 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Floating Records
You can use the Floating Record property to designate any single record of a given flat file
schema to be a floating record. By designating a floating record, you enable that record to
appear in any position within a flat file without causing a parsing validation error.
If you do not use this property, validation errors will occur if the record structure of an
inbound document does not match the record structure defined in its flat file schema. For
example, consider the following EDI document and its flat file schema (where all records
are mandatory except the record NTE):

Flat file schema definition Input EDI document Output IS document


Rec1 Rec1 Rec1
Rec2 NTE NTE
Rec3 Rec2
The parser generates a validation error
NTE Rec3 because it expects NTE to be the last
record, not the second record. In
addition, it ignores Rec2 and Rec3.

To solve this problem, you would designate NTE to be a floating record so it may appear
anywhere in the EDI document without causing a validation error. (The position in which
it appears in the parsed record is explained in the following sections.) The parser creates
a container for NTE records, and places each NTE record that appears in an EDI
document into this container at run time. If a flat file schema contains multiple instances
of the designated floating record at multiple record levels, the system creates a container
for each record level. This property appears in the Properties panel of the Flat File
Schema Editor (see the table in step 8 on page 56).
This problem can also occur while converting outbound IS documents (IData objects) into
string documents. The parser supports floating records for both inbound and outbound
parsing (i.e., while executing the convertToValues and convertToString services, respectively).
For examples, see “Examples: Parsing Inbound Floating Records” on page 45 and
“Examples: Parsing Outbound Floating Records” on page 49.

Examples: Parsing Inbound Floating Records


When the convertToValues service receives a document that includes floating records, the
parser handles them as shown in the following examples. Assume that the Floating Record
property is set to the record NTE.

Flat File Schema Developer’s Guide Version 8.2 45


3 Creating and Editing Flat File Schemas and Dictionaries

Example 1:

Flat file schema definition Input EDI document Output IS document


Rec1 Rec1 Rec1
NTE [] Max Occurs 99 Rec2 NTE []
Rec2 Rec3 NTE (1)
Rec3 Rec4 NTE (2)
Rec4 NTE (1) NTE (3)
Rec5 NTE (2) Rec2
NTE (3) Rec3
Rec5 Rec4
Rec5

In accordance with the schema definition, the parser creates an NTE array as the first
record, and places NTE (1), NTE (2), and NTE (3) into it. A validation error is generated if
more than 99 NTE records appear in the document. NTE records are not allowed prior to
the Rec1 record.
Example 2:

Flat file schema definition Input EDI document Output IS document


Rec1 Rec1 Rec1
NTE [] Max Occurs 99 NTE (1) NTE []
Rec2 [] Max Occurs 99 Rec2 NTE (1)
NTE [] Max Occurs 99 Rec3 NTE (5)
Rec3 NTE (2) Rec2 []
Rec4 Rec4 Rec2
Rec5 NTE (3) NTE []
Rec2 NTE (2)
NTE (4) NTE (3)
Rec5 Rec3
NTE (5) Rec4
Rec2
NTE []
NTE (4)
Rec5

How Example 2 was Parsed


1 The first six records of the EDI document were parsed as follows:

Input EDI document Output IS document


Rec1 Rec1
NTE (1) NTE [] <== NTE container for Rec1.
Rec2 NTE (1)
Rec3 Rec2 []
NTE (2) Rec2
Rec4 NTE [] <== NTE container for Rec2 array.
NTE (2)
Rec3
Rec4

46 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

a The positions of the first three records (Rec1, NTE (1), and Rec2) match the
schema. In accordance with the schema definition, the parser:
 Creates an NTE container (an array) under Rec1, and places NTE (1) into it.
 Creates a Rec2 array, and places Rec2 into it.
b Even though the schema definition says the next record should be an NTE
(followed by Rec3), the next record in the document is Rec3 (followed by NTE (2)).
This is valid; the parser simply:
 Places Rec3 into the Rec2 array, as specified in the schema definition.
 Creates another NTE container (an array) under Rec2, as specified in the
schema definition. To determine which container to put NTE (2) in, the parser
looks for the last defined container at the current level. Thus, the parser places
NTE (2) in this container.

c The parser places the next record, Rec4, in the Rec2 array, in accordance with the
schema definition.
2 Parsing NTE (3):

Input EDI document Output IS document


Rec1 Rec1
NTE (1) NTE []
Rec2 NTE (1)
Rec3 Rec2 []
NTE (2) Rec2
Rec4 NTE []
NTE (3) NTE (2)
NTE (3) <== added to this container at
current level
Rec3
Rec4

To determine which container to put NTE (3) in, the parser looks for the last defined
container at the current level. Thus, the parser places NTE (3) in the same container as
NTE (2).

Flat File Schema Developer’s Guide Version 8.2 47


3 Creating and Editing Flat File Schemas and Dictionaries

3 Parsing Rec2 and NTE (4):

Input EDI document Output IS document


Rec1 Rec1
NTE (1) NTE []
Rec2 NTE (1)
Rec3 Rec2 []
NTE (2) Rec2
Rec4 NTE []
NTE (3) NTE (2)
Rec2 NTE (3)
NTE (4) Rec3
Rec4
Rec2
NTE [] <== creates an NTE container for
second Rec2
NTE (4)

In accordance with the schema definition, the parser adds another Rec2 to the Rec2
array. Just as with the first Rec2 in the array, the parser also creates another NTE
container, for the second Rec2.
4 Parsing Rec5 and NTE (5):

Input EDI document Output IS document


Rec1 Rec1
NTE (1) NTE []
Rec2 NTE (1)
Rec3 NTE (5) <== this container is same level as
NTE (2) Rec5 (current level)
Rec4 Rec2 []
NTE (3) Rec2
Rec2 NTE []
NTE (4) NTE (2)
Rec5 NTE (3)
NTE (5) Rec3
Rec4
Rec2
NTE []
NTE (4)
Rec5

a In accordance with the schema definition, the parser places Rec5 under Rec1.
b To determine which container to put NTE (5) in, the parser looks for the last
defined container at the current level. Thus, the parser places NTE (5) in the same
container as NTE (1).

48 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Examples: Parsing Outbound Floating Records


When the convertToString service converts an IS document (an IData object) to a string, the
parser places each floating record immediately following its parent record (as defined in
the IS document).
In the following examples, assume that the Floating Record property is set to the record
NTE.
Example 1:

Flat file schema definition Input IS document Output string


Rec1 Rec1 Rec1!Rec2!Rec3!NTE(1)!NTE(2)!Rec4
Rec2 Rec2
NTE [] Rec3
Rec3 NTE []
Rec4 NTE(1)
NTE(2)
Rec4

Because NTE(1) and NTE(2) are children of Rec3, the parser places them after Rec3 in the
string.
Example 2:

Flat file schema definition Input IS document Output string


Rec1 Rec1 Rec1!NTE(1)!NTE(2)!Rec2!Rec3!Rec4
Rec2 Rec2
NTE [] Rec3
Rec3 Rec4
Rec4 NTE []
NTE(1)
NTE(2)

Because NTE(1) and NTE(2) are children of Rec1, the parser places them after Rec1 in the
string.

Flat File Schema Developer’s Guide Version 8.2 49


3 Creating and Editing Flat File Schemas and Dictionaries

Step 3: Define the Structure of the Flat File Schema


Important! Validation is turned off by default. To enable validation, you must set the
validate variable of the convertToValues service to true. This enables errors to be generated
for the Ordered, Mandatory, Validator, and Undefined Data properties. For more information
about this service, see webMethods Integration Server Built-In Services Reference.

To define the structure of a flat file schema


1 With the flat file schema name selected in webMethods Developer Navigation Panel,
click the Flat File Structure tab of the Flat File Schema Editor.

2 To add the first record, click the name of the flat file schema in the Name column, and
then click . The Select New wizard appears. You also can right–click an element and
select Add.

3 Select one of the following.

50 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Property Description

Record Definition Select to create a record definition to be used one time in this flat
file schema. After selecting Record Definition, click Next.
Record Reference Select to create a reference to a record definition in a flat file
dictionary.
 After selecting Record Reference, click Next.
 Navigate to the flat file dictionary in which the record is
located, select the dictionary, and then click Next.
 Select the element that you want to reference and then click
Next.

4 In the Enter Record Definition Name(s) dialog box, type the name of the record.

Important! This name must match the value of its record identifier exactly as it will
appear in the flat file. The name of a record reference does not have to match the name
of the record definition in the flat file dictionary. The name of a record reference will
be matched to the record identifier in the record. The name of the record definition in
the flat file dictionary does not need to match the record identifier that appears in the
flat file.

To add another record definition at this time, click and type the record name.
When you have added all of the records for this level, click Finish.
The record(s) is added to the flat file schema structure. The Referring To field indicates
the record definition to which the record reference refers. The Dictionary field indicates
the flat file dictionary to which the record reference refers. If the element is a
definition, these two fields are empty.
5 In the Properties panel of the Flat File Schema Editor, specify the particular properties
for this record. For a list and further explanation of these properties, see the table in
step 8 on page 56.

Flat File Schema Developer’s Guide Version 8.2 51


3 Creating and Editing Flat File Schemas and Dictionaries

For element definitions, you see only one line of detail. For element references, you
will see two lines of detail: one for the instance of that element in this flat file schema,
and one for the element definition in the flat file dictionary. In a flat file dictionary
you can specify only certain fields for each element. The remaining fields must be set
in the particular instance of the element in the flat file schema. You cannot edit the
dictionary definition detail line. For information about creating flat file dictionaries,
see “Creating a Flat File Dictionary” on page 69.
6 To add more elements, select the element to which you want to add a child and click
. You also can right–click an element and select New. The valid element selections
display for the element you have selected.
 If you are adding a record definition, type the Name of the record in the Enter
Record Definition Name(s) dialog box.

Note: The name(s) must match the value of the identifier for each record exactly as
it will appear in the flat file.

52 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

To add additional record definitions at this level, click .


 If you are adding a composite definition, specify the Name, Position, and Mandatory
properties in the Enter Composite Definition Name(s) dialog box.

Flat File Schema Developer’s Guide Version 8.2 53


3 Creating and Editing Flat File Schemas and Dictionaries

Property Description

Name Type the name of the composite.


Position Type the field number in the record that contains the composite
you want to extract. This pulls the subfield data from the
composite.
If you leave this property empty, the composite will not be
extracted. For a description of composite extractors, see
“Extractors” on page 62.

Note: The extractor works only if a field and subfield delimiter


have been defined for this flat file schema.

Mandatory Optional – Select the check box to require that this composite
appear in the flat file.
If it is not selected, the composite is not required to appear in the
flat file. If it is selected and the convertToValues service validate
variable is set to true, errors will be generated if the composite
does not appear in the flat file.

To add additional composite definitions at this level, click .


 If you are adding a field definition, specify the Extractor Type, Name, Start, End, and
Mandatory properties in the Enter Field Definition Name(s) dialog box.

Extractor Type Property Description

Fixed Position Counting from zero (0), extracts a fixed number of


bytes from a record. For more information about
field extractors, see “Extractors” on page 62.
Name Type the name of the field.
Start Type the first byte to extract from the record.

54 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Extractor Type Property Description

End Type the first byte that is not included in the


extraction. If you enter a negative number (for
example, –1), the extractor returns all bytes from
the byte specified in Start to the last byte in the
record or composite.
Mandatory Optional – Select the check box to require that this
field appear in the flat file.
If is not selected, the field is not required to appear
in the flat file. If it is selected and the convertToValues
service validate variable is set to true, errors will be
generated if the field does not appear in the flat file.
Nth Field Counting from zero (0), indicates the field that you
want to extract from the record. For more
information about field extractors, see “Extractors”
on page 62.
Name Type the name of the field.
Position Type a value to indicate the position of the field that
you want to extract from the record.
This value cannot be null and must be an integer
greater than or equal to zero (0). For example, if you
type 1, the second field will be extracted. This
option is available only if you specified a field
delimiter when configuring your flat file schema.
This extractor returns the field as a key–value pair.
The key is the name of the field. The value is the
String value of the field.
Mandatory Optional – Select the check box to require that this
field appear in the flat file.
If is not selected, the field is not required to appear
in the flat file. If it is selected and the convertToValues
service validate variable is set to true, errors will be
generated if the field does not appear in the flat file.

To add additional field definitions at this level, click .


 If you are adding an element reference, complete the following steps:
 After selecting Reference, click Next.
 Navigate to the flat file dictionary in which the element is located, select the
dictionary, and then click Next.
 Select the element that you want to reference and then click Next.

Flat File Schema Developer’s Guide Version 8.2 55


3 Creating and Editing Flat File Schemas and Dictionaries

7 When you have added all of the elements for this level, click Finish.
8 For each of the following element levels and type, you can specify the following
properties in the Properties panel of the Flat File Schema Editor:

Element Property For details, see ...

Record Definition Ordered page 61


Mandatory page 61
Max Repeat page 61
Validator page 61
Area page 58
Position page 61
Allow Undef Data page 58
Check Fields page 59
Alternate Name page 58
Description page 59
Record Reference Ordered page 61
Mandatory page 61
Max Repeat page 61
Area page 58
Position page 61
Allow Undef Data page 58
Local Description page 60
Composite Definition Mandatory * page 61
Extractor page 59
Validator * page 61
Check Fields * page 59
Alternate Name * page 58
Description * page 59
ID Code * page 60
Local Description ** page 60
* not available for composite definitions in record
references
** not available for composite definitions in flat file
schemas
Composite Reference Mandatory * page 61
Extractor page 59
Alternate Name * page 58
Local Description page 60
* not available for composite references in record references

56 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Element Property For details, see ...

Field Definition Mandatory page 61


Extractor page 59
Validator page 61
Format Service page 60
DataType page 59
Alternate Name page 58
Description page 59
ID Code page 60
Local Description * page 60
* only available for field definitions in composite references
or record references
Field Reference Mandatory * page 61
Extractor * page 59
Local Description page 60
* not available for field definitions in composite references
or record references

9 After you have added all of the necessary elements to this flat file schema, click .

10 To map the output of the convertToValues service to another format, click on the Flat
File Structure tab. For more information about mapping flat file schemas, see
“Mapping Flat File Data” on page 29 of Chapter 2, “Processing Flat Files Overview”
of this guide.
You now can use this flat file schema to parse and convert inbound flat files to IS
documents (IData objects) and convert outbound documents to flat files.

Flat File Schema Developer’s Guide Version 8.2 57


3 Creating and Editing Flat File Schemas and Dictionaries

Flat File Schema Property Descriptions


The flat file schema properties that you can define using the Flat File Schema Editor are
described below, in alphabetic order.

Property Description

Allow Undef Optional. Use in record definitions and record references in flat file
Data schemas.
If the schema–level Undefined Data property is set to True, select True to
allow undefined data at the record level and not generate errors when
undefined data is encountered. The default is True. For more
information about the Undefined Data property, see page 44.
Select False to not allow undefined data at the record level. If the
validate variable of the convertToValues service is set to true, the
convertToValues service will generate errors when undefined data is
encountered.
Alternate Name Optional. Use in: record definitions and composite definitions in flat
file schemas; field definitions in composite definitions and record
definitions; record, composite, and field definitions in flat file
dictionaries.
An alternate name for the record definition. This name will appear as
the document name in the document type that is generated by this flat
file schema. This name will also appear in the Flow Editor. Use this
field to provide a more meaningful name that can be helpful when
mapping the record. For example, instead of using the record name
ST, you could specify the alternate name Transaction Start. It will also
appear as a tool tip comment in the Flow Editor. For details, see
“Displaying Element Descriptions and Alternate Names in the Flow
Editor” on page 67.
Area Optional. Use in record descriptions and record references in flat file
schemas.
If you have created areas for the flat file schema on the Settings tab,
from the Area drop–down list, select the area you want to use for this
record.
This field is used primarily for EDI document parsing. For more
information, see the Areas property on page 44.

58 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Property Description

Check Fields Optional. Use in: record definitions and composite definitions in flat
file schemas; record, composite, and field definitions in flat file
dictionaries.
Select True to report as errors more fields at the end of the record or
composite than are defined in the flat file schema.
Select False to allow extra fields at the end of a record or composite.
The default is False.
DataType Use in: field definitions in composite definitions and record
definitions; fields in flat file dictionaries.
Select the appropriate data type. It will also appear as a tool tip
comment in the Flow Editor. For details, see “Displaying Element
Descriptions and Alternate Names in the Flow Editor” on page 67.
Description Optional. Use in: record definitions and composite definitions in flat
file schemas; field definitions in composite definitions and record
definitions; record, composite, and field definitions in flat file
dictionaries.
Describe the purpose of the record, composite, or field. This
description will appear in the comments section of the document type
that is generated for this flat file schema. It will also appear as a tool
tip comment in the Flow Editor. For details, see “Displaying Element
Descriptions and Alternate Names in the Flow Editor” on page 67.
Extractor Use in: composite definitions in flat file schemas and record
references; composite references in record definitions and record
references; field definitions and field references in composite
definitions or record definitions.
Click the Extractor field, and then type the field number in the record
that contains the composite you want to extract. This pulls the field or
composite data from the record, or pulls the subfield data from the
composite.
If you leave this property empty, the composite will not be extracted.
For more information, see “Extractors” on page 62.

Note: The extractor works for a field only if field delimiters have been
defined for this flat file schema. The extractor works for a composite
only if field delimiters and subfield delimiters have been defined for
this flat file schema.

Flat File Schema Developer’s Guide Version 8.2 59


3 Creating and Editing Flat File Schemas and Dictionaries

Property Description

Format Service Use in: field definitions in composite definitions or record definitions;
fields in flat file dictionaries.
Click the Format Service field to select the service you want to invoke
for a particular field when convertToValues or convertToString is called,
and then click OK. For example, to alter the format of the date field,
you might invoke a service that changes the format of the field from
YYYYMMDD to MMDDYYYY. To clear the format service, simply
clear the text box.
For the service to be visible in the browser, the template specification
for the service on its Input/Output tab must be pub.flatFile:FormatService.
For information about format services, see “Format Services” on
page 66.
ID Code Use in: composite definitions in flat file schemas; field definitions in
composite definitions or record definitions; composite and field
definitions in flat file dictionaries.
The IDCode, which is provided by your SEF file, is used by the
WmEDI package. It will appear in the comments section of the
document type that is generated for this flat file schema. It will also
appear as a tool tip comment in the Flow Editor. For details, see
“Displaying Element Descriptions and Alternate Names in the Flow
Editor” on page 67.
Local Optional. Use in: record references in flat file schemas; composite
Description references in record definitions or record references; composite
definitions in record references; field definitions and field references
in composite references or record references.
Describe the record, composite, or field as it is used in this particular
flat file schema. Since the record that is being referenced is stored in a
flat file dictionary, it may be used differently in different flat file
schemas.
Local descriptions will also appear as a tool tip comment in the Flow
Editor. For details, see “Displaying Element Descriptions and
Alternate Names in the Flow Editor” on page 67.

60 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Property Description

Mandatory Optional. Use in: record definitions, record references, and composite
definitions in flat file schemas; composite references in record
definitions; field definitions and field references in composite
definitions or record definitions.
Select True to require that this record, composite, or field appear in the
flat file.
Select False to not require the record, composite, or field to appear in
the flat file. If you select True and the convertToValues service validate
variable is set to true, errors will be generated if the record does not
appear in the flat file.
Max Repeat Optional. Use in record definitions and record references in flat file
schemas.
Maximum number of times this record can repeat within the flat file.
You can select Unlimited or type any positive integer. The default value
is 1, except for default records. For all default records, the value is
always Unlimited and cannot be changed.
If you set this property and the convertToValues service validate variable
is set to true, errors will be generated if the number of record
instances exceeds the maximum repeat value.
Ordered Optional. Use in record definitions and record references in flat file
schemas.
Select True to require that the child records of this record appear in the
flat file in the order that they appear in the flat file schema. This
property applies only to records, not composites or fields.
Select False to allow the child records to appear in any order in the flat
file. If you select True and the convertToValues service validate variable is
set to true, errors will be generated if the records do not appear in this
order.
Position Reserved for future use.
Validator Optional. Use in: record definitions and composite definitions in flat
file schemas; field definitions in composite definitions or record
definitions; record definitions
Click the Validator field, and then type the desired validation you want
to be performed on this record, composite, or field in the flat file. For a
list of valid validators, see “Validators” on page 62.

Important! Validation is disabled by default. To enable validation, you


must set the validate variable of the convertToValues service to true.

Flat File Schema Developer’s Guide Version 8.2 61


3 Creating and Editing Flat File Schemas and Dictionaries

Extractors
Extractors represent the location of a field within a record, or of a subfield within a
composite. You extract fields from a composite using a Nth field extractor, while you
extract fields from a record using Nth field, ID Node, or Fixed Position extractors.

Note: To use Nth Field or ID Node extractors for a field or composite in a record, the field
delimiter must be specified. To use these extractors for a field in a composite, the subfield
delimiter must be specified. If these extractors are used without the appropriate delimiter
set, the field values will not be returned correctly.

 Nth Field. Counting from zero (0), Position indicates the position of the field that you
want to extract from the record. This value cannot be null and must be an integer
greater than or equal to zero (0). For example, if you type 1, the second field will be
extracted. This option is available only if you specified a field delimiter when
configuring your flat file schema. This extractor returns the field as a key–value pair.
The key is the name of the field. The value is the String value of the field.
Software AG recommends that you use this extractor instead of ID node.
 ID Node. This extractor is a variation of the Nth Field extractor and is available for
backward compatibility for users of the webMethods EDI Module. Counting from
zero (0), Position indicates the position of the field that you want to extract from the
record. This value cannot be null and must be an integer greater than or equal to zero
(0). This extractor returns the field as a key–value pair. The key is the name of the
field. The value is an IS document (IData object) containing a key–value pair in which
the key is always “code,” and the value is the String value of the field. Software AG
does not recommend that you use the ID node extractor.
 Fixed Position. Counting from zero (0), extracts a fixed number of bytes from a record.
 Start Position. First byte to extract from the record.
 End Position. First byte that is not included in the extraction. If you enter a negative
number (for example, –1), the extractor returns all bytes from the byte specified in
the Start Position to the last byte in the record or composite.
For example:
record = webMethods
Start Position = 1
End Position = 7
Extracted bytes = ebMeth

Validators
Different types of validators are available for records, composites, fields, and multi-byte
encoded records. You validate:
 Records and composites using conditional validators.
 Fields using either length or code list validators.
 Multi-byte encoded records, you use the byte count validator.

62 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Conditional Validators
Regardless of what type of flat file you are processing, you follow the syntax rules created
by the EDI Standards bodies ANSI X12 or UN/EDIFACT to specify conditional validators
for a flat file record or composite. In these rules, 0n and 0n0 represent the number of the
field defined in the record or composite, where n is the number of the field in the
composite or record. For example, in the following flat file:
Record1*FieldA*FieldB*FieldC*FieldD*FieldE;

To validate fields using the ANSI X12 conditional validator, you might enter the
following in the Validator property:
C0102C030405
A B C D E

Code Field

To validate the appropriate fields using the UN/EDIFACT conditional validator, you
might enter the following in the Validator property:
D5(010,020) D5(030,040,050)
A B C D E

Code Field

The record definition has five fields defined. Each with an Nth Field extractor, the first
extracting field A, the second field B and so on. Both of these validators indicate that if
Field A is present, Field B is required. If Field C is present, Field D and Field E are
required. However, if Field D and Field E are present, Field C need not be present.
The conditional validator refers to the location of the field in the definition, not the
location of the data in the flat file. For example, if you switched the extractors for the first
and second field such that the first field extracted the value Field B and the second field
extracts the value Field A, the conditional validator would indicate that if Field B is
present Field A is required.
Example:
Record1 – conditional validator C0102
Field A – Nth field extractor, position 1
FieldB – Nth field extractor, position 2
This indicates that if FieldA is present Field B also must be present. If you switched the
position of these fields in the record, you would get the following.
Example:
Record1 – conditional validator C0102
FieldB – Nth field extractor, position 2
FieldA – Nth field extractor, position 1
This now indicates that if Field B is present Field A also must be present.

Flat File Schema Developer’s Guide Version 8.2 63


3 Creating and Editing Flat File Schemas and Dictionaries

ANSI X12 Rule UN/EDIFACT Rule


Name (and Code) Name (and Code) Definition
Required (R) One or more (D3) At least one of the specified fields must be
present.
ANSI X12 Example: R030405
UN/EDIFACT Example: D3(030,040,050)
Conditional (C) If first, then all (D5) If a specified field is present, all of the fields
specified in a dependent set of fields also
must be present. If a dependent field is
present, the first specified field need not be
present.
ANSI X12 Example: C030405
UN/EDIFACT Example: D5(030,040,050)
Exclusion (E) One or none (D4) At most, only one of the specified fields can
be present.
ANSI X12 Example: E030405
UN/EDIFACT Example: D4(030,040,050)
List If first, then at least If a specified field is present, at least one of
Conditional (L) one (D6) the fields specified in a dependent set of
fields also must be present. If a dependent
field is present, the first specified field need
not be present.
ANSI X12 Example: L030405
UN/EDIFACT Example: D6(030,040,050)
Paired (P) All or none (D2) All of the specified fields must be present or
absent.
ANSI X12 Example: P030405
UN/EDIFACT Example: D2(010,020)
N/A One and only one Exactly one field may be present.
(D1)
UN/EDIFACT Example: D1(030,040,050)
N/A If first, then none If the first field is present, all others cannot be
(D7) included.
UN/EDIFACT Example: D7(030,040,050)

64 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Field Validators
You validate fields using either a length validator or a code list validator.

Length Validator
For a length validator, you specify the maximum and minimum number of characters this
field can contain to be considered valid.
 Minimum length. Minimum number of characters that this field can contain to be
considered valid. If the field contains fewer characters than the number entered, an
error will be generated. You can enter zero (0).
 Maximum length. Maximum number of characters that this field can contain to be
considered valid. If the field contains more characters than the number entered, an
error will be generated. If you enter a negative number (for example, –1), a maximum
length error will never be generated for this field, regardless of its value.

Code List Validator


In the Conditions box, type the appropriate code list conditions. The code list is a comma–
separated list of the allowed values for this field. If the value of the field is not contained
in the code list, errors will be generated.

Note: This validator validates only in ascending order and according to the ASCII values.

You can specify three different types of code lists:


 Simple Code List. A comma separated list of valid codes.
 Range List. A range list, which can occur within any type of code list, validates that a
string value is between a given start string and end string. The range is specified as
start string:end string. Values are considered to be valid for a given range if all of
the following conditions are true:
 The value is the same length as the start and end strings of the range.
 The character value in the same position in the start and end string comes from
the same character set (a–z, A–Z or 0–9).
 The value is lexically greater than or equal to the start string and lexically less
than or equal to the value of the end string.
For example A0:Z9 is valid, because the first character of each string comes from the
set A–Z, and the second character of each string comes from the set 0–9. A2:2B is not
valid because the first character of the start string does not come from the same
character set as the first character of the end string.
 Partition List. A partition joins together multiple code lists within one field, separated
by a pipe (|). For example, if you enter ABC,DEF|1,2, the allowed values of the field
are ABC1, ABC2, DEF1, and DEF2. Each set of code lists must have the same number
of bytes.

Flat File Schema Developer’s Guide Version 8.2 65


3 Creating and Editing Flat File Schemas and Dictionaries

The code list validator allows for the right hand side of the partition to be optional. For
example, if you enter ABC,DEF|1,,2, the allowed values of the field are:
ABC1, ABC2, ABC, DEF1, DEF2, and DEF.
The extra comma in 1,,2 indicates that the values 1 and 2 are optional.

Byte Count Validator


You use the byte count validator for multi-byte encoded records. You specify the
maximum and minimum number of bytes this field can contain to be considered valid.
 Minimum length. Minimum number of bytes that this field can contain to be considered
valid. If the field contains fewer bytes than the number entered, an error will be
generated. You can enter zero (0).
 Maximum length. Maximum number of bytes that this field can contain to be considered
valid. If the field contains more bytes than the number entered, an error will be
generated. If you enter a negative number (for example, –1), a maximum length error
will never be generated for this field, regardless of its value.

Format Services
You can use the Format Service property on the Flat File Structure tab of the Flat File Schema
Editor to specify the service you want to invoke for a particular field when convertToValues
or convertToString is called.

Important! If a particular field does not have a value (that is, a value is not returned in an IS
document (IData object) for convertToValues or is not present in the input data for
convertToString) the format service assigned to that field will not be executed.

A format service formats the string and optionally ensures that the value of the string
meets the restrictions specified in the format service. For example, when using the
convertToValues service to convert a date field in a flat file into an IS document (IData
object), you can specify that a particular format service be invoked for that field during
parsing. To alter the format of the date field, you might invoke a service that changes the
format of the field from YYYYMMDD to MMDDYYYY.

Note: If you are using the webMethods EDI Module, you can use the built–in format
services provided in the WmEDI package to format fields. For more information, see the
webMethods EDI Module User’s Guide and the webMethods EDI Module Built-in Services
Reference.

Creating Format Services


To create a format service for use with a field in a flat file schema or dictionary, the service
must implement the pub.flatFile:FormatService service as its template specification for the
format service (located on its Input/Output tab).

66 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Working with Format Error Messages


If the validate input variable of your format service was set to true to validate the format
and value of a field, and that field does not meet the criteria specified in the service, you
will receive an error message in the errorMessage output variable of the format service
indicating why this field could not be validated.

Disabling Format Services


To disable the format service for a particular field, you simply clear the text box and save
the flat file schema or dictionary. To disable all format services within the WmFlatFile
package regardless of what is specified in each field definition, open
IntegrationServer_directory\packages\WmFlatFile\config\ff.cnf and set the
enableFormatting variable to false.
For more detailed information about format services, see the description of
pub.flatFile:FormatService in webMethods Integration Server Built-In Services Reference.

Managing Dictionary Dependencies on Format Services


If you move or rename a format service, the Integration Server’s dependency manager
will ask whether it should update all the flat file schemas and flat file dictionaries that use
that format service with the new location or name of the format service.
If you delete a format service, the dependency manager will list all schemas and
dictionaries that will be impacted by the deletion, and prompts you to confirm the
deletion.

Displaying Element Descriptions and Alternate Names in the Flow Editor


The webMethods Developer Flow Editor will display the values of several properties that
you specified for the elements of your schema. They are visible as tool tips when you
move the cursor over the elements. Use these optional properties to provide helpful
comments and more meaningful names when mapping elements in flow services.
The Flow Editor will display the following properties:

Element Property
Record definition Description
Alternate Name
Record reference Local Description
Composite definition Description
Alternate Name
ID Code
Composite reference Alternate Name
Local Description

Flat File Schema Developer’s Guide Version 8.2 67


3 Creating and Editing Flat File Schemas and Dictionaries

Element Property
Field definition Description
Alternate Name
IDCode
DataType
Field reference Local Description

To display properties in the Flow Editor


1 Define values for the properties as described in step 8 of “Step 3: Define the Structure
of the Flat File Schema” on page 50.
2 Enable the Show Variable’s Comment option in the webMethods Developer’s Flow
Editor as follows:
a Click File  New in the menu bar.
b Select Flow Editor in the navigation area.
c Click Show Variable’s Comment.

Step 4: Test the Flat File Schema


Testing a flat file schema involves viewing a flat file schema in a readable structure. This
enables you to locate errors in your flat file schema that are keeping your flat file
documents from being parsed correctly. The test response you receive contains the same
information that would result from processing and validating a flat file.

Note: Although validation is turned off by default, testing a flat file schema always
performs validation regardless of you settings. To enable validation in the processing of
an actual flat file schema, you must set the validate variable of the convertToValues service to
true. For more information about this service, see webMethods Integration Server Built-In
Services Reference.

To test a flat file schema


1 In webMethods Developer Navigation panel, double–click the flat file schema that
you want to test.

2 Click . The Select file and encoding dialog box appears.

68 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

3 To select a flat file with which to test the flat file schema, click , navigate to and
select the test flat file, and then click Open. The name of your test flat file appears in
the top portion of the Test tab.
4 From the Encoding drop–down list, select the encoding for the flat file you are testing.
5 To run the test, click OK. The parsed and converted IS documents appear in the Results
panel. Any errors found when parsing the flat file appear in the Errors section of the
Flat File Schema Editor.

Note: If you make a change to the test file you are parsing, you must reload the file
before running a test.

For information about validation errors, see Appendix A, “Validation Errors” of this
guide.
6 After you have reviewed the results, you may find that it is necessary to edit your flat
file schema.

Creating a Flat File Dictionary


You can create a flat file dictionary for use with flat file schemas. Like a flat file schema, a
flat file dictionary contains definitions of records, composites, and fields that can be used
across multiple flat file schemas. Reusing these definitions reduces the amount of
memory consumed by a flat file schema. Flat file dictionaries can also contain references
to composite and field definitions in this dictionary and/or in other dictionaries.

Flat File Dictionary

After you have created elements, you edit the element and its child elements just as you
would elements in a flat file schema, except that you cannot add a record to a record.

Flat File Schema Developer’s Guide Version 8.2 69


3 Creating and Editing Flat File Schemas and Dictionaries

For more information about the circumstances for which you might want to create and
use a flat file dictionary, see “When Should I Create a Flat File Dictionary?” on page 20 in
Chapter 1, “Concepts” of this guide.

Note: The following procedure describes how to create a flat file dictionary using
webMethods Developer. For information about how to use Software AG Designer, see
webMethods Service Development Help.

To create a flat file dictionary


1 In webMethods Developer, click File  New in the menu bar.

2 In the New dialog box, select Flat File Dictionary, and then click Next.
3 Type the name of the new flat file dictionary, select its location (a folder in a
WmFlatFile–dependent package), and then click Finish.
The flat file dictionary you created is automatically selected, and the Flat File Schema
Editor displays in the right pane of the Developer. You now can use the Flat File
Schema Editor to configure the flat file dictionary.
4 To add elements, select the element type to which you want to add a child (Record
Definition, Composite Definition, or Field Definition) and click . You also can right–click
an element and select New.

70 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

The valid element selections display for the element you have selected. For each of the
following element levels, you can specify the following properties in the Properties
panel of the Flat File Schema Editor:

Element Property For details, see ...

Record Definition Validator page 61


Check Fields page 59
Alternate Name page 58
Description page 59
Define all other record definition properties in the record
reference instance in the flat file schema. (For a list of these
properties, see “Flat File Schema Property Descriptions” on
page 58.) You define child composite and field definitions
and references within a record the same way you define
them in a flat file schema.
Composite Definition Validator page 61
Check Fields page 59
Alternate Name page 58
Description page 59
ID Code page 60
Define all other composite definition properties in the
composite reference instance in the flat file schema. (For a list
of these properties, see “Flat File Schema Property
Descriptions” on page 58.) You define child field definitions
and references within a composite the same way you define
the elements in a flat file schema.
Field Definition Validator page 61
Format Service page 60
DataType page 59
Alternate Name page 58
Description page 59
ID Code page 60
Define all other field definition properties in the field
reference instance in the flat file schema. You cannot define
child elements for a field definition.

To add additional element definitions at this level, click .


5 After you have created elements, you edit the element and its child elements just as
you would elements in a flat file schema, except that you cannot add a record to a
record.

Flat File Schema Developer’s Guide Version 8.2 71


3 Creating and Editing Flat File Schemas and Dictionaries

6 After you have added all of the elements to this flat file dictionary, click to save
the dictionary.

Note: Elements added the dictionary cannot be referenced until the dictionary has
been saved.

You now can create flat file schemas based on this flat file dictionary.

Editing a Flat File Schema or Dictionary


Important! To edit a flat file schema or dictionary, you must have the proper access
permissions to do so and have locked the flat file schema. For information about access
control lists (ACLs) see “Setting Access Permissions” on page 73.

For flat file schemas and dictionaries, you can do the following:
 Edit any element properties. To do so, make the necessary changes on the Flat File
Structure tab and then save the flat file schema or dictionary. For a list of these settings
and properties, see “Creating a Flat File Schema” on page 38.
 Rename existing elements. To do so, right–click the element, and then select Rename.
 Re–structure the elements. To rearrange the structure of your flat file schema, use the
buttons at the top of the Flat File Structure tab.

Button Description
Select the element you want to delete, and click to delete.

Select the element you want to move, and click to move the element
up or down in the flat file schema structure.
Select the element you want to move, and click to move the element
left or right in the flat file schema structure.

Managing Flat File Dictionary Dependencies


If you move or rename a dictionary, the Integration Server’s dependency manager will
ask whether it should update all the flat file schemas and dictionaries that use this
dictionary with the new location or name of the dictionary.
If you delete a dictionary, the dependency manager will list all flat file schemas and
dictionaries that will be impacted by the deletion, and prompts you to confirm the
deletion. However, it does not identify the names of the records, fields, or composites that
reference the dictionary; that is your responsibility.
The dependency manager also manages dictionary dependencies on format services in a
similar way; see “Managing Dictionary Dependencies on Format Services” on page 67.

72 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Setting Access Permissions


Administrators of the Integration Server can set access control list (ACL) permissions to
control user access and editing privileges for each flat file schema or flat file dictionary.

To set access privileges for a flat file schema or dictionary


1 From the webMethods Developer Navigation Panel, double–click the flat file schema
for which you want to set permissions.
2 In the Properties panel, under Permissions, from the List ACL drop–down box, select
the ACL level to which you want to grant read access. This enables the ACL you
select to view this flat file schema or dictionary.

3 From the Write ACL drop–down box, select the ACL level to which you want to grant
write access. This enables the ACL you select to view and edit this flat file schema or
dictionary.

4 Click to save the flat file schema permissions.

Customizing the Flat File Configuration Settings


The WmFlatFile package provides the following flags you can use to customize some
aspects of the package’s default behavior. You implement these flags in the configuration
file:
IntegrationServer_directory\packages\WmFlatFile\config\ff.cnf

Flat File Schema Developer’s Guide Version 8.2 73


3 Creating and Editing Flat File Schemas and Dictionaries

Flag Value
alwaysSortFields Determines whether the pub.flatFile:convertToString service checks
the order of the fields in composites and records that it receives
as input (in ffValues) against the flat file schema that is specified
in the ffSchema input parameter.
 false (the default): Assume that the fields in composites and
records are in the same order as the flat file schema.
 true: Attempt to match the order of the fields in composites
and records to the order of the fields in composites and
records in the flat file schema.
Example: alwaysSortFields=true
useAlternateCodeSets Determines whether to enable the use of alternate code sets.
 true (the default): Enable the use of alternate code sets.
 false: Do not enable the use of alternate code sets.
Example: useAlternateCodeSets=true

74 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Flag Value
useReadableDelimiter Controls how the Delimiter record parser parses non-readable
Reporting delimiters, such as \r (carriage return), \n (line feed), or \t (tab).
 true (the default): The parser reports the delimiters as
human-readable characters, e.g., the carriage return
character is represented as \r. This variable does not impact
human-readable delimiters such as | or *.
 false: The parser reports the delimiters as the actual
delimiter character. For example, if the delimiter is a carriage
return, the value reported will be the non-readable carriage
return code (decimal 13 or hexidecimal OD).

Note: If you use the webMethods EDI Module, set this variable to
false.

This impacts how you can use the delimiter information in flow
mapping. If you use the delimiters directly in flows with
variable substitution, non-printable characters will not be
substituted correctly when useReadableDelimiterReporting=true.
For example, when the output of the convertToValues service
shows that the record delimiter is \n and a user flow has an
input set to the following:
abc%@delimiters\record%def
the resulting value will be as follows:
If useReadableDelimiterReporting=true, the resulting value is
abc\ndef

If useReadableDelimiterReporting=false, the resulting value is


abc
def

Flat File Schema Developer’s Guide Version 8.2 75


3 Creating and Editing Flat File Schemas and Dictionaries

Flag Value
spacePadJustifies Controls how the input parameter spacePad justifies fixed length
fields handled by the services pub.flatFile:convertToString and
wm.b2b.edi:convertToString.
 If spacePadJustifies=true and:
 spacePad is set to left, fixed length fields are left justified.
 spacePad is set to right, fixed length fields are right
justified.
 If spacePadJustifies=false (the default) and:
 spacePad is set to left, fixed length fields are right justified.
 spacePad is set to right, fixed length fields are left justified.
spacePadJustifies has no effect when spacePad is set to none.
Example: spacePadJustifies=false
dontTrimControl Determines how whitespace and control characters are handled
Characters by the service wm.b2b.edi:convertToString when the parameter
spacePad is set to left or right.
 If dontTrimControlCharacters=true, and spacePad is set to
left or right, the service does not truncate control characters
from delimited fields.
 If dontTrimControlCharacters=false, and spacePad is set to
left or right, control characters are treated as whitespace and
truncated.
Example: dontTrimControlCharacters=true

76 Flat File Schema Developer’s Guide Version 8.2


3 Creating and Editing Flat File Schemas and Dictionaries

Flag Value
useG11NEncodings Determines whether the pub.flatFile:convertToValues and
and pub.flatFile:convertToString services use the webMethods charset or
alwaysUseWebM the default charset provided by JVM.
Encodings
 If useG11NEncodings=true and either the encoding name
begins with WM_ OR alwaysUseWebMEncodings=true, the
pub.flatFile:convertToValues and pub.flatFile:convertToString services
use the webMethods charset.
 If useG11NEncodings=false,the pub.flatFile:convertToValues and
pub.flatFile:convertToString services use the default charset
provided by JVM, regardless of the value assigned to
alwaysUseWebMEncodings.

The default value for alwaysUseWebMEncodings is false and


useG11NEncodings is true.

Example:
alwaysUseWebMEncodings=false
useG11NEncodings=true

allowSubfield Determines whether Integration Server Flat File Adapter allows


DelimiterInNon subfield delimiters in non-composite elements.
CompositeField
 If allowSubfieldDelimiterInNonCompositeField=false,
subfield delimiters are not allowed in a non-composite
element. This is the default.
 If allowSubfieldDelimiterInNonCompositeField=true,
subfield delimiters are allowed in a non-composite element.
Example: allowSubfieldDelimiterInNonCompositeField=true

Flat File Schema Developer’s Guide Version 8.2 77


3 Creating and Editing Flat File Schemas and Dictionaries

78 Flat File Schema Developer’s Guide Version 8.2


4 Sending and Receiving Flat Files

 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
 Flat File Content Handler and Content Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
 Choosing the Service to Receive the Flat File from the Content Handler . . . . . . . . . . . . . . . . . . 81
 Submitting a Flat File to Integration Server in a String Variable . . . . . . . . . . . . . . . . . . . . . . . . . . 81
 Submitting a Flat File to Integration Server via HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
 Submitting a Flat File to Integration Server via FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
 Submitting a Flat File to Integration Server via File Polling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
 Submitting a Flat File to Integration Server via an E–mail Message . . . . . . . . . . . . . . . . . . . . . . 86

Flat File Schema Developer’s Guide Version 8.2 79


4 Sending and Receiving Flat Files

Overview
The webMethods Integration Server provides the following automated mechanisms for
sending and receiving any type of flat file.
 Submit a flat file to a service in a String variable (of any name), which the target
service can convert into an IData object using pub.flatFile:convertToValues.
 Post a flat file to a service via HTTP.
 FTP a flat file to a service.
 Submit a flat file to a service via File Polling.
 Send a flat file to a service as an e–mail message attachment.
For general steps to configure ports, which is not included in this guide, see the
“Configuring Ports” section of the “Configuring the Server” chapter in Administering
webMethods Integration Server.

Note: If you use Trading Networks, you can send flat files directly to Trading Networks.
For more information about how Trading Networks processes flat files, see sections about
flat file TN document types in Understanding webMethods B2B: webMethods Trading
Networks Concepts Guide and Building B2B Integrations: webMethods Trading Networks
Administrator’s Guide

Flat File Content Handler and Content Type


You submit a flat file to a flow service using one of the methods discussed in this chapter.
The WmFlatFile package registers a content handler for the content type “application/x–
wmflatfile.” This content handler passes the contents of the flat file to the service
specified in the submit method in an InputStream named ffdata. If an InputStream or
ByteArray named ffreturn is present when the service completes execution, the
InputStream is read and the results are returned to the invoker of the service, for
example, HTTP, FTP, etc.
The WmFlatFile package provides services that can be called within customized flow
services or the File Polling processing service to initially accept and consume inbound flat
files. These services are described in “Choosing the Service to Receive the Flat File from
the Content Handler” in this chapter. For more information about File Polling, see
“Submitting a Flat File to Integration Server via File Polling” on page 86.

80 Flat File Schema Developer’s Guide Version 8.2


4 Sending and Receiving Flat Files

Choosing the Service to Receive the Flat File from the


Content Handler
Those methods that use the flat file content handler must do the following:
 Accept an InputStream object called ffdata.
 Return data in an InputStream or a ByteArray called ffreturn.
The WmFlatFile package provides the pub.flatFile:convertToValues service to be used within
flow services to initially accept inbound flat files. Details about using this service to
process inbound documents are provided in “Processing Inbound Flat Files” on page 27
of Chapter 2, “Processing Flat Files Overview” of this guide.

Submitting a Flat File to Integration Server in a String Variable


One way to submit a flat file to the Integration Server is to pass the entire document to a
service in a String variable. This approach does not use the flat file content handler, so the
restrictions outlined in the previous section do not apply. Instead, the invoked service
must expect the contents of the flat file to be in a specific pipeline variable. The java client
must place the source file in the pipeline as a String. The invoked service then processes
the input data and can place parameters in the pipeline that will be returned to the java
client as determined by the specific scenario.
When you use this approach, you should code the target service to execute
pub.flatFile:convertToValues to convert the String variable (i.e., the flat file) to an IS document
(IData object). For more information about using convertToValues, see webMethods
Integration Server Built-In Services Reference.
The following code fragment illustrates how a Java client might submit a flat file to the
purch:postOrder service on the Integration Server. In this example, the client 1) loads the flat
file into a String, 2) puts the String into the element orders in an IS document (IData
object) named “inputs,” and 3) invokes purch:postOrder on the server at localhost:5555.
import com.wm.app.b2b.client.*;
import com.wm.util.*;
import com.wm.data.*;
import java.io.*;
public class ArbitraryFlatFileClient
.
.
//––Load FF into orders string
String orders = YourLoadFlatFileMethod(orderFile);
//––Put input values into IData object
IData inputs = IDataFactory.create();
IDataCursor inputsCursor = inputs.getcursor();
inputsCursor.last();
inputsCursor.insertAfter(“orders”, orders);
inputsCursor.insertAfter(“authCode”, authCode);
//––Submit request to server
c.connect(“localhost:5555”, “null”, null);

Flat File Schema Developer’s Guide Version 8.2 81


4 Sending and Receiving Flat Files

IData outputs = c.invoke(“purch”, “postOrder”, inputs);


c.disconnect();
if (inputsCursor.first(“response”))
{
//...process response
}

The Integration Server invokes postOrder to pass the flat file to convertToValues. This will
produce an “orders” string that can be mapped to the ffdata input variable in the
convertToValues service. As discussed in Chapter 2, “Processing Flat Files Overview” of this
guide, this service will produce an IS document (IData object).

Submitting a Flat File to Integration Server via HTTP


A client can post a flat file to a service via HTTP. To use this approach, you must have a
client that can do the following:
 Send a string of data (a flat file) to the Integration Server using the HTTP POST
method.
–AND–
 Set the value of the Content–Type request–header field to “application/x–wmflatfile.”
When the Integration Server receives an HTTP POST request where Content–Type is
application/x–wmflatfile, it passes the body of the request as an InputStream to the
service specified in the request’s URL. Because most browsers do not allow you to modify
the Content–Type header field, they are not suitable clients for this type of submission.
Clients that you might use to submit a flat file in this manner include PERL scripts (which
allow you to build and issue HTTP requests) or the Integration Server service,
pub.client:http.

Building a Client that Posts a Flat File to a Service


Regardless of which client you use, if you want to post a flat file to a service through
HTTP, you must specify certain information.

To build a client
1 Submit a POST request to the Integration Server.
2 Address the request to the URL of an service (for example,
http://rubicon:5555/invoke/purch/postOrder).

3 Set the Content–Type header field to “application/x–wmflatfile.”


4 Contain flat file data in the body of the message. The data must be the only text that
appears in the body of the request. Do not assign it to a name=value pair.
The following example describes the values that you set if you use pub.client:http to POST a
flat file to a service.

82 Flat File Schema Developer’s Guide Version 8.2


4 Sending and Receiving Flat Files

Set this Variable... To...

url This is the URL of the service that you want to invoke.
webMethods services can be invoked via a URL. The format
for specifying the URL is http://hostname:port/invoke/
folder.subfolder/service name, where hostname is the name of the
machine running the Integration Server, port is the port on
which the Integration Server is running, folder.subfolder is the
path to the service folder names, and service name is the name
of the service to invoke. The following value would invoke the
“ProcessFlatFile” flow service located in the “MyFFProcessing”
package on the “rubicon” server with port number “5555.”
Example: http://rubicon:5555/invoke/MyFFProcessing/
ProcessFlatFile

method “post”
headers.Content–Type Name: Content–type
Value: The specific content type for the document (application/
x–wmflatfile)
data.string This is the flat file that you want to post.
–OR–
data.bytes

You also will set any optional HTTP variables, such as authorization information, that are
required by your application. The invoked service will have an InputStream ffdata object
in the pipeline that contains the flat file data.

Submitting a Flat File to Integration Server via FTP


You can FTP a flat file to the Integration Server’s FTP listening port. By default the FTP
port is assigned to port “8021.” However, this assignment is configurable, so you should
check with your Integration Server administrator to see which port is used for FTP
communications on your Integration Server.
When the Integration Server receives a flat file on the FTP listening port, it passes it as an
InputStream to the service in the directory to which the file was FTP’d.
To submit a flat file to the Integration Server via FTP, the service to which you want to
pass the document must take an InputStream as input for the ffdata variable.
If you want to submit a flat file to a service through FTP, the application must specify
certain information.

Flat File Schema Developer’s Guide Version 8.2 83


4 Sending and Receiving Flat Files

To submit a flat file via FTP


1 Initiate an FTP session on the Integration Server’s FTP listening port.
2 Point to the directory that contains the service to which you want to pass the flat file.
Example: cd \ns\Purchasing\SubmitOrder

Important! Note that the root directory for this operation is your Integration Server’s
namespace directory (ns), not the root directory of the target machine. Therefore, if
you want to FTP a file to a service in the Purchasing folder, you use
\ns\Purchasing\ServiceName as the path to that service, not
IntegrationServer_directory\ns\Purchasing\ServiceName. Each folder in Designer or
Developer is treated as a directory when FTPing to the Integration Server. For
example, for the purchasing.purchaseRequests:rfq service, the directory name would be
\ns\purchasing\purchaseRequests\rfq.

3 Copy the flat file to this directory using the following command:
put sourceflatfile.txt destinationflatfile.txt;file content type
Where sourceflatfile.txt is the name of source file that you want to pass to the
Integration Server, destinationflatfile.txt is the name of the destination file, and
application:x–wmflatfile indicates the content type of the file submitted. For example, to
put a document called PurchaseOrder.txt on the Integration Server as
Partner1PO.txt, you would use the following FTP command:

Example: put PurchaseOrder.txt Partner1PO.txt;application:x–wmflatfile


Note that the file you FTP to the Integration Server is never actually written to the
server’s file system. The file you send and the output file it produces (see below) are
written to a virtual directory system maintained in your Integration Server session.

FTPing a File From a webMethods Integration Server


The pub.client folder contains built–in services that you can use to FTP a file from the
Integration Server. To use the pub.client:ftp service, you must set the variables listed in the
following table.

Set this variable... To set...


serverhost This is the name of the machine running the Integration Server.
serverport This is the port on the Integration Server that is listening for FTP
traffic.
username This is the valid user name on the target machine.
password This is the valid password for the username in username.
command “put”

84 Flat File Schema Developer’s Guide Version 8.2


4 Sending and Receiving Flat Files

Set this variable... To set...


dirpath If you are sending to the Integration Server, this is the local path to
the service that should be invoked after receiving the flat file. For
example, \ns\Purchasing\SubmitOrder. If sending to another type of
server, this is the working directory of the FTP server.
localfile This is the name of the source file.
remotefile This is the name of the remote file in which you want to save the
data you sending. For example, destinationflatfile.txt. If you are
sending to the Integration Server, the file name should be followed
by the content–type. For example,
destinationflatfile.txt;application:x–wmflatfile.

For more information about these services, see the webMethods Integration Server Built-In
Services Reference.

Getting Results from an FTP’d Document


The results from a service executed by an FTP request are written to the same virtual
directory to which the flat file was initially FTP’d. The name of the output file to which
results are written is sourcefile.txt.out.
You retrieve this document using the FTP “get” command. For example, if you put a
document called “PurchaseOrder.txt” on the Integration Server, you would use the
following FTP command to get its results:
Example: get PurchaseOrder.txt.out
“PurchaseOrder.txt.out” is the name of the flat file initially FTP’d to the service. This file
contains the value of the output variable ffreturn of the invoked service.
It is a good practice to make each file name that you FTP to the Integration Server unique
(perhaps by attaching a timestamp to the name) so that you do not inadvertently
overwrite other FTP’d documents or their results during an FTP session.

Important! When you end the FTP session, the Integration Server automatically deletes the
original file and its results from your session.

Flat File Schema Developer’s Guide Version 8.2 85


4 Sending and Receiving Flat Files

Submitting a Flat File to Integration Server via File Polling


You can send a flat file to the Integration Server via a File Polling processing service. For
general steps to configure the File Polling listener port, see the “Adding a File Polling
Port” section of the “Configuring Ports” chapter in Administering webMethods Integration
Server.
To poll specifically for flat files, you must specify the Default Content Type as
“application/x–wmflatfile”. When a file with this content type is posted to the directory
on the Integration Server that you are monitoring for flat files (Monitoring Directory), the
Integration Server executes the service that you specified as the Processing Service.
Because the content type is “application/x–wmflatfile”, when the Integration Server
receives the flat file in the appropriately configured monitoring directory, it passes the
document as an InputStream to the service configured in the pipeline variable ffdata.
The File Polling processing service of Integration Server processes files in the order in
which they are received. Integration Server determines the order for processing files by
comparing the timestamps of the files in the monitoring directory. In a high speed
environment, where many files are placed in the monitoring directory at once, resulting
in some of the files having the same timestamp, Integration Server processes the files
alphabetically.

Submitting a Flat File to Integration Server via an E–mail


Message
You can send a flat file document as an attachment to an e–mail message to an e–mail
mailbox and have the Integration Server automatically retrieve the e–mail message and
process the flat file it contains. To do this, your Integration Server must be configured
with an e–mail port that monitors the mailbox to which the flat file will be sent. (Consult
your Integration Server administrator to see whether an email port has been set up on
your Integration Server.)
When a flat file arrives in the e–mail port’s mailbox, the Integration Server automatically
retrieves the message and passes that document as an InputStream to the service
specified on the e–mail’s subject line (or, if a service is not specified on the subject line, the
e–mail port’s default service).

86 Flat File Schema Developer’s Guide Version 8.2


4 Sending and Receiving Flat Files

Requirements for Submitting a Flat File Document via an E-mail


Message
To submit a flat file to the Integration Server via an e–mail message, your client program
must specify certain information.

To submit a flat file via email


1 Put the flat file in an e–mail attachment.
2 Set the e–mail’s Content–Type header to “application/x–wmflatfile.”
3 Specify the name of the service that will process the file in the e–mail’s subject line. If
you leave the subject line empty, the document will be processed by the global service
if one is defined or, if not, by the default service assigned to the e–mail port (if one has
been assigned). For more information about specifying the port’s default service, see
Administering webMethods Integration Server.
The service that will process the flat file must take an InputStream as input in the ffdata
variable.
The following example describes the values that you would set if you used pub.client:smtp
to email a flat file to a service. For more information about using this service, see the
webMethods Integration Server Built-In Services Reference.

Set this Variable... To...

to A String specifying the e–mail address monitored by the Integration


Server’s e–mail port.
subject A String specifying the fully qualified name of the service to which
the Integration Server will pass the attached document.
Example: orders:ProcessPO
If you do not specify subject, the e–mail port invokes its default
service (if one has been assigned to it).
from A String containing the e–mail address to which the results of the
service will be sent.
attachments. The specific content type for the document (“application/x–
contenttype wmflatfile”).
attachments. A string specifying the fully qualified name of the file containing the
filename flat file.

Flat File Schema Developer’s Guide Version 8.2 87


4 Sending and Receiving Flat Files

Getting Results from an Emailed Document


If your e–mail port has been configured to return results, the results from a service
invoked through the port are written to sourcefile.txt.out, and then sent as an attachment
of an e–mail message to the sender of the original message.
This file contains the value of the output variable ffreturn of the invoked service. ffreturn
can be either an InputStream or a byte array.

Important! By default, the e–mail port does not return any results from requests that it
receives. If you want the port to return results, you must explicitly configure it to do so.
For more information about configuring the e–mail port to return results, see
Administering webMethods Integration Server.

88 Flat File Schema Developer’s Guide Version 8.2


A Validation Errors

 Validation Error Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90


 Validation Error Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Flat File Schema Developer’s Guide Version 8.2 89


A Validation Errors

Validation Error Contents


When the validate variable of the pub.flatFile:convertToValues service is set to true and an
object within the flat file does not conform to the flat file schema, the service generates
errors when validating the flat file. If the service finds that an object is invalid, it returns
validation errors in the errors output of the convertToValues service.

Example of Validation Results

This errors array contains the following types of information about the errors that
occurred in a record during validation.
 Each error in a record generates one entry in the errors array. For more information
about the fields in the errors array, see “General Error Entries in the errors Array” on
page 91.
 Each error in a child record also generates one item within the parent record, which
appears nested in the error array in the variable childErrors.
 Errors with conditional validators can generate detail information about the
conditions violated in a child errorDetails array, one entry in the array for each
violated condition. The pub.flatFile:convertToValues service only generates details about
violated conditions when the flag/detailedErrors input variable of the
pub.flatFile:convertToValues service is set to true. For more information, see “Entries for
Conditional Validator Errors in errorDetails Array” on page 91.

90 Flat File Schema Developer’s Guide Version 8.2


A Validation Errors

General Error Entries in the errors Array


An entry in the errors array contains the following information. For information about
errorDetails entries, see “Entries for Conditional Validator Errors in errorDetails Array”
on page 91.

Variable in errors Description


errorPosition Indicates where the error occurred within the parent element. For a
record, this indicates the position of the record within the flat file.
For a composite, this indicates the position of the field within the
composite. For a nested child record, this indicates the position of
the field within the record.
errorMessage A brief description of the error.
errorCode A number indicating the type of error. For a list, see “Validation
Error Codes” on page 94.
reference The name of the element in the flat file schema that contained the
error.
badData The value of the data that failed validation.
childErrors (Array). Indicates that a field or subfield within the record or
composite generated a validation error.

Entries for Conditional Validator Errors in errorDetails Array


The errorDetails array includes detail information about the conditions that were violated
when the following are true:
 When you set the validate and flag/detailedErrors input variables of the
pub.flatFile:convertToValues service to true.
–AND–
 The pub.flatFile:convertToValues service encounters errors with conditional validator
The following shows a sample of the errors array that includes the errorDetails array,
which contains details about violated conditions. See the table below the sample for more
information.

Flat File Schema Developer’s Guide Version 8.2 91


A Validation Errors

Example of Validation Results with Conditional Validation Errors

Portion of the array Description


errors For a description of this portion of the errors array, see “General
Error Entries in the errors Array” on page 91.
When the flag/detailedErrors input variable of the
pub.flatFile:convertToValues service is set to false, this is the only
information generated in the errors array about violated
conditions.
When the flag/detailedErrors is true, the pub.flatFile:convertToValues
service generates the detail in errorDetails array described below.

92 Flat File Schema Developer’s Guide Version 8.2


A Validation Errors

Portion of the array Description


errorDetails To provide information about the conditions that were violated,
the convertToValues service generates an entry in the errorDetails
array for each violated condition.
Variable in
errorDetails Description

errorPosition Always zero; the errorPosition is not meaningful at


this level of the errorDetails array.
errorMessage A brief description of the condition that was
violated.
errorCode A number indicating the type of error. For a list,
see “Validation Error Codes” on page 94.
reference Always null; the reference is not meaningful at this
level of the errorDetails array.
badData Always null; the badData is not meaningful at this
level of the errorDetails array.
condition The condition that was violated.
errorDetails Details about how the condition was violated. See
the description below.
errorDetails The child errorDetails array contains detail about how the
condition was violated. The convertToValues service generates an
entry for each way the condition was violated.
Variable in
errorDetails Description

errorPosition Indicates the position in the record that contains


the field that caused the condition to be violated.
errorMessage A brief description of the condition that was
violated.
errorCode A number indicating the type of error. For a list,
see “Validation Error Codes” on page 94.
reference The name of the element in the flat file schema
that contained the error.
badData The value of the data that failed validation.

Flat File Schema Developer’s Guide Version 8.2 93


A Validation Errors

Validation Error Codes


The following table describes the validation error codes that you might receive when the
validate variable of the pub.flatFile:convertToValues service is set to true and you are validating
a flat file or testing a flat file schema.

Error
Code Description
1 In the flat file schema, the Mandatory drop-down menu was set to true for this
element, but the element does not occur in the flat file.
2 Reserved for future use.
3 Unexpected element. This field is not allowed in the record or composite in
which it appears.
4 In the flat file schema, a length validator was specified in the Validator property
for this field. The value in the flat file exceeded the maximum length specified.
5 In the flat file schema, a length validator was specified in the Validator property
for this field. The value in the flat file did not meet the minimum length
specified.
6 Reserved for future use.
7 In the flat file schema, a code list validator was specified in the Validator
property for this field. The value in the flat file was not listed in the flat file
schema as a valid value.
8 Reserved for future use.
9 Reserved for future use.
10 In the flat file schema, a conditional validator was specified in the Validator
property for this composite or record. The contents of this composite or record
did not meet the conditional requirements. The errorMessage variable contains
the number of the condition that failed. If you had a validation string of
C010203R0405 and both conditions failed, the error message would state that
rules 0 and 1 were violated. If only the second is violated, it states that the rule
1 was violated.
If you require more detail about conditional validator errors, set the
flag/detailedErrors input variable of the pub.flatFile:convertToValues service to true.
For a description of the error details that convertToValues service generates when
you set flag/detailedErrors to true, see “Entries for Conditional Validator Errors
in errorDetails Array” on page 91.
11 Indicates that this record is not defined anywhere in the flat file schema. You
will receive this error only when you have not specified a Default Record or
selected Allow Undefined Data where this record appears in the flat file. If you
have specified either of these properties, you will not receive this error.

94 Flat File Schema Developer’s Guide Version 8.2


A Validation Errors

Error
Code Description
12 Indicates that this record is defined in this flat file schema, but it occurs in the
flat file in a location prohibited by the flat file schema.
13 Reserved for future use.
14 In the flat file schema, you specified a maximum repeat value in the Max Repeat
property for a particular record. The number of record instances in the flat file
exceeded the specified maximum number of repeats.
15 Reserved for future use.
16 Within a record, this indicates that the record contains a composite or field
error. For a composite, this indicates the that composite contains a subfield
error.
17 A string could not be formatted into the intended format. A format service
reported that the data could not be formatted properly. For information about
field format services, see “Format Services” on page 66 of Chapter 3, “Creating
and Editing Flat File Schemas and Dictionaries” of this guide.
18 Indicates that a conditional validation rule requires a field, but that field is not
present in the data.
19 Indicates that a field is excluded by a conditional validation rule, but the field is
present in the data.

Flat File Schema Developer’s Guide Version 8.2 95


A Validation Errors

96 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and
Dictionaries

 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
 Creating Flat File Dictionary Entries, Dictionaries, and Schemas . . . . . . . . . . . . . . . . . . . . . . . . 99
 Modifying Flat File Dictionary Entries, Dictionaries, and Schemas . . . . . . . . . . . . . . . . . . . . . . . 102
 Deleting Flat File Dictionary Entries, Dictionaries, and Schemas . . . . . . . . . . . . . . . . . . . . . . . . 109
 Sample Flow Services for Working with XML Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Flat File Schema Developer’s Guide Version 8.2 97


B Programmatically Creating Flat File Schemas and Dictionaries

Overview
You can use the services in the pub.flatFile.generate folder of the WmFlatFile package to
programmatically create, modify, and delete:
 flat file dictionary entries
 entire flat file dictionaries
 flat file schemas
To specify the data for the flat file dictionary entries, entire flat file dictionaries, or flat file
schemas, you can:
 Create the information in an XML file and execute a service you create that retrieves the
XML data from the XML file, then invokes the appropriate services in the
pub.flatFile.generate folder to make the changes in the Integration Server namespace.
When creating the XML data, it should conform to the following XML schema:
IntegrationServer_directory\packages\WmFlatFile\pub\FFGeneration.xsd

 Create a service that maps the data to an IS document (IData object), convert the IData object
to an XML string, and then invoke the appropriate services in the pub.flatFile.generate
folder to make the changes in the Integration Server namespace. The IS document
type to which the IData object must conform is provided in the WmFlatFile package:
 For a flat file dictionary entry or dictionary, use the pub.flatFile.generate:FFDictionary IS
document type.
 For a flat file schema, use the pub.flatFile.generate:FFSchema IS document type.
The sample.flatFile.generateFFSchema folder, which is in the WmFlatFileSamples package,
contains sample services that illustrate how to use the services in the pub.flatFile.generate
folder. The sample services are the sample.flatFile.generateFFSchema:delimited service and the
sample.flatFile.generateFFSchema:fixedLength service.
For detailed descriptions of the services in the sample.flatFile folder and the services in the
pub.flatFile folder listed in the following sections in this chapter, see the webMethods
Integration Server Built-In Services Reference.

98 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and Dictionaries

Creating Flat File Dictionary Entries, Dictionaries, and


Schemas
To create a flat file dictionary entry, entire flat file dictionary, or flat file schema, you
supply the data for the item you want to create; then invoke the appropriate service to
create the item in the Integration Server namespace.

Creating Flat File Dictionary Entries


The following describes the basic steps to create flat file dictionary entries when using
either an XML file or mapping data.

Using this method Follow this procedure


XML File 1 Supply the data for the entries you want to create by creating
the XML file that contains the data and that conforms to the
XML schema:
IntegrationServer_directory\packages\WmFlatFile\
pub\FFGeneration.xsd

2 Retrieve the contents of the XML file as an XML string. For


more information, see “Creating a Service that Retrieves the
XML File” on page 109.
3 Create the entries in the Integration Server namespace by
invoking the pub.flatFile.generate:updateFFDictionaryEntryFromXML
service.
Mapping Data 1 Map the data for the entries you want to create to an IData
object that conforms to the pub.flatFile.generate:FFDictionary IS
document type.
2 Convert the IData object to an XML string by invoking the
pub.xml:documentToXMLString service. When you invoke this
service:
 Set the encode input variable to true.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFDictionary.

For more information about the pub.xml:documentToXMLString


service, see the webMethods Integration Server Built-In Services
Reference.
3 Create the entries in the Integration Server namespace by
invoking the pub.flatFile.generate:updateFFDictionaryEntryFromXML
service.

Flat File Schema Developer’s Guide Version 8.2 99


B Programmatically Creating Flat File Schemas and Dictionaries

Creating an Entire Flat File Dictionary with Data


The following describes the basic steps to create an entire flat file dictionary when using
either an XML file or mapping data. This procedure describes how to create a flat file
dictionary that contains data. If you want to create an empty flat file dictionary, see
“Creating an Empty Flat File Dictionary” on page 101.

Important! The flat file dictionary you are creating must not already exist in the Integration
Server namespace. If the flat file dictionary already exists, the
pub.flatFile.generate:saveXMLAsFFDictionary service throws an exception.

Using this method Follow this procedure


XML File 1 Supply the data that includes all entries for the dictionary
you want to create by creating an XML file that contains the
data and that conforms to the XML schema:
IntegrationServer_directory\packages\WmFlatFile\
pub\FFGeneration.xsd

2 Retrieve the contents of the XML file as an XML string. For


more information, see “Creating a Service that Retrieves the
XML File” on page 109.
3 Create the dictionary in the Integration Server namespace by
invoking the pub.flatFile.generate:saveXMLAsFFDictionary service.
Mapping Data 1 Map the data for all entries for the dictionary you want to
create to an IData object that conforms to the
pub.flatFile.generate:FFDictionary IS document type.
2 Convert the IData object to an XML string by invoking the
pub.xml:documentToXMLString service. When you invoke this
service:
 Set the encode input variable to true.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFDictionary.

For more information about the pub.xml:documentToXMLString


service, see the webMethods Integration Server Built-In Services
Reference.
3 Create the dictionary in the Integration Server namespace by
invoking the pub.flatFile.generate:saveXMLAsFFDictionary service.

100 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and Dictionaries

Creating an Empty Flat File Dictionary


The following describes how to create an empty flat file dictionary. If you want to create a
flat file dictionary that contains data, see “Creating an Entire Flat File Dictionary with
Data” on page 100.

Important! The flat file dictionary you are creating must not already exist in the Integration
Server namespace. If the flat file dictionary already exists, the
pub.flatFile.generate:createFFDictionary service throws an exception.

Follow this procedure


1 Create the empty dictionary in the Integration Server namespace by invoking the
pub.flatFile.generate:createFFDictionary service.

Creating a Flat File Schema


The following describes the basic steps to create a flat file schema when using either an
XML file or mapping data:

Important! The flat file schema you are creating must not already exist in the Integration
Server namespace. If the flat file schema already exists, the
pub.flatFile.generate:saveXMLAsFFSchema service throws an exception.

Using this method Follow this procedure


XML File 1 Supply the data for the flat file schema you want to create by
creating an XML file that contains the data and that conforms
to the XML schema:
IntegrationServer_directory\packages\WmFlatFile\
pub\FFGeneration.xsd

2 Retrieve the contents of the XML file as an XML string. For


more information, see “Creating a Service that Retrieves the
XML File” on page 109.
3 Create the flat file schema in the Integration Server namespace
by invoking the pub.flatFile.generate:saveXMLAsFFSchema service.

Flat File Schema Developer’s Guide Version 8.2 101


B Programmatically Creating Flat File Schemas and Dictionaries

Using this method Follow this procedure


Mapping Data 1 Map the data for the flat file schema you want to create to an
IData object that conforms to the pub.flatFile.generate:FFSchema IS
document type.
2 Convert the IData object to an XML string by invoking the
pub.xml:documentToXMLString service. When you invoke this
service:
 Set the encode input variable to true.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFSchema.

For more information about the pub.xml:documentToXMLString


service, see the webMethods Integration Server Built-In Services
Reference.
3 Create the dictionary in the Integration Server namespace by
invoking the pub.flatFile.generate:saveXMLAsFFSchema service.

Modifying Flat File Dictionary Entries, Dictionaries, and


Schemas
This section describes how to modify an existing flat file dictionary entry, entire flat file
dictionary, or flat file schema.

Modifying an Existing Flat File Dictionary Entry


To modify an existing flat file dictionary entry, you first retrieve from the Integration
Server namespace the dictionary entry that you want to modify. You make your
modifications to the data; then invoke the appropriate service to write the changes back
to the Integration Server namespace. The following describes the basic steps to modify a
dictionary entry either using an XML file or mapping data.

102 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and Dictionaries

Using this method Follow this procedure


XML File 1 Retrieve the existing information for the dictionary entry from
the Integration Server namespace by invoking the
pub.flatFile.generate:getFFDictionaryEntryAsXML service and write it
to an XML file. For more information, see “Retrieving
Namespace Data to Write to an XML File” on page 110.
2 Update the data for the dictionary entry in the XML file. The
XML file must conform to the XML schema:
IntegrationServer_directory\packages\WmFlatFile\
pub\FFGeneration.xsd

3 Retrieve the contents of the XML file as an XML string. For


more information, see “Creating a Service that Retrieves the
XML File” on page 109.
4 Update the dictionary entry in the Integration Server
namespace by invoking the
pub.flatFile.generate:updateFFDictionaryEntryFromXML service.

Flat File Schema Developer’s Guide Version 8.2 103


B Programmatically Creating Flat File Schemas and Dictionaries

Using this method Follow this procedure


Mapping Data 1 Retrieve the existing information for the dictionary entry from
the Integration Server namespace by invoking the
pub.flatFile.generate:getFFDictionaryEntryAsXML service. The data is
returned as an XML string in the FFXML variable.
2 To convert the XML string in the FFXML variable to an IData
object:
a Invoke the pub.xml:xmlStringToXMLNode service to convert the
XML string to an XML node.
b Invoke the pub.xml:XMLNodeToDocument service to convert the
XML node to an IData object. When you invoke this
service:
 Set the makeArrays input variable to false.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFDictionary.

This creates an IData object that conforms to the


pub.flatFile.generate:FFDictionary IS document type.
For more information about the pub.xml:xmlStringToXMLNode and
pub.xml:XMLNodeToDocument services, see the webMethods
Integration Server Built-In Services Reference.
3 Map data to the IData object to make your changes.
4 Convert the IData object to an XML string by invoking the
pub.xml:documentToXMLString service. When you invoke this
service:
 Set the encode input variable to true.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFDictionary.

For more information about the pub.xml:documentToXMLString


service, see the webMethods Integration Server Built-In Services
Reference.
5 Update the dictionary entry in the Integration Server
namespace by invoking the
pub.flatFile.generate:updateFFDictionaryEntryFromXML service.

104 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and Dictionaries

Modifying an Existing Flat File Dictionary


To modify an existing flat file dictionary, you first retrieve from the Integration Server
namespace the item that you want to modify. You make your modifications to the data.
Delete the dictionary from the namespace before invoking the appropriate service to
write the changes back to the Integration Server namespace. The following describes the
basic steps to modify a flat file dictionary either using an XML file or mapping data.

Using this method Follow this procedure


XML File 1 Retrieve the existing information for the flat file dictionary
from the Integration Server namespace by invoking the
pub.flatFile.generate:findDependants service and write it to an XML
file. For more information, see “Retrieving Namespace Data to
Write to an XML File” on page 110.
2 Update the data for the flat file dictionary in the XML file. The
XML file must conform to the XML schema:
IntegrationServer_directory\packages\WmFlatFile\
pub\FFGeneration.xsd

3 Retrieve the contents of the XML file as an XML string. For


more information, see “Creating a Service that Retrieves the
XML File” on page 109.
4 Delete the existing flat file dictionary from the Integration
Server namespace by invoking the
pub.flatFile.generate:deleteFFDictionary service.
5 Create the flat file dictionary in the Integration Server
namespace again by invoking the
pub.flatFile.generate:saveXMLAsFFDictionary service.

Flat File Schema Developer’s Guide Version 8.2 105


B Programmatically Creating Flat File Schemas and Dictionaries

Using this method Follow this procedure


Mapping Data 1 Retrieve the existing information for the flat file dictionary
from the Integration Server namespace by invoking the
pub.flatFile.generate:findDependants service. The data is returned as
an XML string in the FFXML variable.
2 To convert the XML string in the FFXML variable to an IData
object:
a Invoke the pub.xml:xmlStringToXMLNode service to convert the
XML string to an XML node.
b Invoke the pub.xml:XMLNodeToDocument service to convert the
XML node to an IData object. When you invoke this
service:
 Set the makeArrays input variable to false.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFDictionary.

This creates an IData object that conforms to the


pub.flatFile.generate:FFDictionary IS document type.
For more information about the pub.xml:xmlStringToXMLNode and
pub.xml:XMLNodeToDocument services, see the webMethods
Integration Server Built-In Services Reference.
3 Map data to the IData object to make your changes.
4 Convert the IData object to an XML string by invoking the
pub.xml:documentToXMLString service. When you invoke this
service:
 Set the encode input variable to true.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFDictionary.

For more information about the pub.xml:documentToXMLString


service, see the webMethods Integration Server Built-In Services
Reference.
5 Delete the existing flat file dictionary from the Integration
Server namespace by invoking the
pub.flatFile.generate:deleteFFDictionary service.
6 Create the flat file dictionary in the Integration Server
namespace again by invoking the
pub.flatFile.generate:saveXMLAsFFDictionary service.

106 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and Dictionaries

Modifying an Existing Flat File Schema


To modify an existing flat file dictionary or flat file schema, you first retrieve from the
Integration Server namespace the item that you want to modify. You make your
modifications to the data. Delete the item from the namespace before invoking the
appropriate service to write the changes back to the Integration Server namespace. The
following describes the basic steps to modify a flat file schema either using an XML file or
mapping data.

Using this method Follow this procedure


XML File 1 Retrieve the existing information for the flat file schema from
the Integration Server namespace by invoking the
pub.flatFile.generate:getFFSchemaAsXML service and write it to an
XML file. For more information, see “Retrieving Namespace
Data to Write to an XML File” on page 110.
2 Update the data for the flat file schema in the XML file. The
XML file must conform to the XML schema:
IntegrationServer_directory\packages\WmFlatFile\
pub\FFGeneration.xsd

3 Retrieve the contents of the XML file as an XML string. For


more information, see “Creating a Service that Retrieves the
XML File” on page 109.
4 Delete the existing flat file schema from the Integration Server
namespace by invoking the pub.flatFile.generate:deleteFFSchema
service.
5 Create the flat file schema in the Integration Server namespace
again by invoking the pub.flatFile.generate:saveXMLAsFFSchema
service.

Flat File Schema Developer’s Guide Version 8.2 107


B Programmatically Creating Flat File Schemas and Dictionaries

Using this method Follow this procedure


Mapping Data 1 Retrieve the existing information for the flat file schema from
the Integration Server namespace by invoking the
pub.flatFile.generate:getFFSchemaAsXML service. The data is
returned as an XML string in the FFXML variable.
2 To convert the XML string in the FFXML variable to an IData
object:
a Invoke the pub.xml:xmlStringToXMLNode service to convert the
XML string to an XML node.
b Invoke the pub.xml:XMLNodeToDocument service to convert the
XML node to an IData object. When you invoke this
service:
 Set the makeArrays input variable to false.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFSchema.

This creates an IData object that conforms to the


pub.flatFile.generate:FFSchema IS document type.
For more information about the pub.xml:xmlStringToXMLNode and
pub.xml:XMLNodeToDocument services, see the webMethods
Integration Server Built-In Services Reference.
3 Map data to the IData object to make your changes.
4 Convert the IData object to an XML string by invoking the
pub.xml:documentToXMLString service. When you invoke this
service:
 Set the encode input variable to true.
 Set the documentTypeName input variable to
pub.flatFile.generate:FFSchema.

For more information about the pub.xml:documentToXMLString


service, see the webMethods Integration Server Built-In Services
Reference.
5 Delete the existing flat file schema from the Integration Server
namespace by invoking the pub.flatFile.generate:deleteFFSchema
service.
6 Create the flat file schema in the Integration Server namespace
again by invoking the pub.flatFile.generate:saveXMLAsFFSchema
service.

108 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and Dictionaries

Deleting Flat File Dictionary Entries, Dictionaries, and


Schemas
To delete a flat file dictionary entry, entire flat file dictionary, or flat file schema, you
invoke the appropriate service.

For this item... Use this service to delete the item from the namespace
flat file dictionary entry pub.flatFile.generate:deleteFFDictionaryEntry
entire flat file dictionary pub.flatFile.generate:deleteFFDictionary
flat file schema pub.flatFile.generate:deleteFFSchema

Sample Flow Services for Working with XML Files


This section shows sample flow services that show how to retrieve data from an XML file
in the local file system and how to retrieve data from the Integration Server namespace
that can be written to a file in the local file system.

Creating a Service that Retrieves the XML File


The following shows a sample flow service for retrieving data from an XML file.

Sample code for retrieving data from an XML file

Flow
Operation Description
1 Invoke the pub.file:getFile service to retrieve the XML file from the local file
system. The XML data must conform to the following XML schema:
IntegrationServer_directory\packages\WmFlatFile\pub\
FFGeneration.xsd

For more information about this service, see the webMethods Integration
Server Built-In Services Reference.

Flat File Schema Developer’s Guide Version 8.2 109


B Programmatically Creating Flat File Schemas and Dictionaries

Flow
Operation Description
2 Invoke the pub.string:bytesToString service to convert the file (in bytes format)
to a String. For more information about this service, see the webMethods
Integration Server Built-In Services Reference.
3 Invoke the appropriate service to make your changes to the Integration
Server namespace. In this sample, the flow service invokes the
pub.flatFile.generate:saveXMLAsFFSchema to save the XML data as a flat file
schema in the Integration Server namespace.
With the INVOKE saveXMLAsFFSchema flow operation selected, in the pipeline,
map the output from the pub.string:bytesToString service to the FFXML input of
the pub.flatFile.generate:saveXMLAsFFSchema service.

Retrieving Namespace Data to Write to an XML File


The following shows a sample flow service that retrieves data from the Integration Server
namespace that can be written to an XML file.

Sample code for retrieving namespace data that can be written to an XML file

110 Flat File Schema Developer’s Guide Version 8.2


B Programmatically Creating Flat File Schemas and Dictionaries

Flow
Operation Description
1 Invoke the appropriate service to retrieve the Integration Server namespace
data for a flat file dictionary entry, entire flat file dictionary, or flat file
schema. In this sample, the flow service invokes the
pub.flatFile.generate:findDependants service to retrieve the data for an entire flat
file dictionary.
2 Invoke the pub.string:stringToBytes service to convert the namespace data (in
String format) to a byte[]. For more information about this service, see the
webMethods Integration Server Built-In Services Reference.
With the INVOKE stringToBytes flow operation selected, in the pipeline, map
the FFXML output from the pub.flatFile.generate:findDependants service to the
input of the stringToBytes service.

3 Add code to or invoke a service that you create to write the byte[] to an
XML file.

Flat File Schema Developer’s Guide Version 8.2 111


B Programmatically Creating Flat File Schemas and Dictionaries

112 Flat File Schema Developer’s Guide Version 8.2


C Flat File Byte Count Parser

 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
 Handling Partial Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
 Stateful Encodings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Flat File Schema Developer’s Guide Version 8.2 113


C Flat File Byte Count Parser

Overview
The flat file parser measures the lengths and positions of all records and fields in flat file
schemas in terms of bytes, not characters. Prior to Version 6.5, Service Pack 2, the parser
measured all lengths and positions in characters.

Note: This change does not affect users who currently parse flat files using single-byte
encodings because one byte equals one character. Thus, there is no functional difference
between parsing bytes and characters.

This parser supports both single-byte encodings (equivalent to character encodings) and
multi-byte encodings. With multi-byte encodings, a byte count can differ from a character
count since a single character can be encoded to multiple bytes. Both the convertToValues
and the convertToString services support byte-count parsing for multi-byte encodings. In
addition, convertToString now includes an optional setting that returns a document as a
byte array instead of a string. For more information about pub.flatFile:convertToString, see
webMethods Integration Server Built-In Services Reference.

Important! Multi-byte encoded files must run on JVM version 1.4 or later.

There is no change in the way in which the parser handles the following entities:
 Delimited fields and records.
A delimiter may be a single character, but may not be byte based. Delimiter and
release character extractors still extract the specified character from the input file
based on a character position.
 The field length validator.
The parser still uses the String.length() method to validate field lengths (in
characters). However, the byte count validator validates the total number of bytes in a
field.

Important! The parser does not support the writing or reading of binary data (e.g., COMP-
3 COBOL fields), nor does it support multiple kinds of encodings within one file.

Handling Partial Characters


The parser reads and writes only complete characters. Partial characters are characters
that violate character boundary conditions, as described below.

114 Flat File Schema Developer’s Guide Version 8.2


C Flat File Byte Count Parser

Reading Partial Characters


The following table describes how the parser reads partial characters:

Character Boundary Condition How the Parser Handles the Condition


Reading a fixed position field that The field starts on the next complete character.
begins in the middle of a multi-byte The partial character is ignored.
character.
Reading a fixed position field that The field ends on the previous complete
ends in the middle of a multi-byte character. The partial character is not included
character. in the field.
Reading a fixed position record that If the bytes encode to an invalid character, an
begins or ends in the middle of a exception is thrown.
multi-byte character.
Note: If the bytes that begin or end the record are
encoded to a valid character, it will be the wrong
character.

To illustrate a case where the parser reads fixed position records that begin and end in the
middle of a multi-byte character, consider the following multi-byte encoding:
12121212

These eight bytes represent four two-byte characters. If we specified a fixed length file
with a record length of three bytes instead of two bytes, the parser would read this
encoding as follows, producing an undesirable result:

Record 1: 121
Record 2: 212
Record 3: 12

Note that:
 Record 1 contains one character, formed by the first two bytes of the file. The last byte
is a partial character; the parser ignores it.
 Record 2 contains one character, formed by the fifth and sixth bytes of the file. The
character formed by the third and fourth bytes is lost because these bytes span
Records 1 and 2, and cannot be properly decoded.
 Record 3 contains one character, formed by the seventh and eighth bytes.

Flat File Schema Developer’s Guide Version 8.2 115


C Flat File Byte Count Parser

Writing Partial Character Encodings


Partial characters present a similar problem when writing to a fixed length file. The
parser considers all fixed position fields to be “self contained”. This means that all
encoding information for a fixed position field is contained in the byte range specified for
the field. Keep this in mind when writing multi-byte encodings to fixed length fields
because it is possible to specify a field or record that does not end on a character
boundary.
Consider a fixed length field that is 10 bytes, but the string for that field encodes to more
than 10 bytes. In this case, the parser will truncate the byte array to fit into 10 bytes. This
could result in the creation of invalid characters. Thus, the parser always truncates a
string on a character boundary; only complete characters are written to the output file.
The following table describes how the parser writes partial characters:

Character Boundary Condition How the Parser Handles the Condition


Writing a string to a fixed position Truncates the string to fit the field.
field where the string is longer than
the fixed position field (where it
breaks at a character boundary).
Writing to a fixed position field that The field ends on the previous complete
ends in the middle of a multi-byte character. The partial character is not included
character. in the field, and is replaced by one or more pad
characters. For an example, see below.
Writing to a fixed position field in Does not generate an error during creation of
the middle of a delimited field that the file. Parsing the created file will likely result
contains a stateful encoding. in an encoding error.

To illustrate a case where the parser writes to a fixed position field that ends in the
middle of a multi-byte character, consider the following multi-byte encoding:

Number of
Field Bytes in Field Character 1 Character 2

Field1 4 12 12
Field2 4 12 345

The parser encodes this multi-byte encoding as follows:

Field Value

Field1 1212
Field2 12PP

116 Flat File Schema Developer’s Guide Version 8.2


C Flat File Byte Count Parser

The parser encodes Field1 properly; it considers character 1 and character 2 to be


complete characters.
The parser encodes Field2 as follows:
 It considers character 1 to be a complete character
 Since byte 3 does not begin on a character boundary, the parser considers character 2
to be a partial character. It truncates bytes, 3, 4, and 5 because those three bytes would
extend beyond the end of the field. It replaces these three bytes with two pad
characters (represented by PP).

Stateful Encodings
The parser can read any well-formed document that adheres to the rules of the
document’s particular kind of encoding. The parser can only write to files that have fixed
length fields or delimited records.

Note: Escape encodings behave similarly to stateful encodings. The parser truncates
characters preceding the escape sequence so that the integrity of the escape sequence is
maintained.

Stateful encodings have two specific bytes that indicate when the record’s state has
changed:
 | is a “shift-in” byte that indicates a change from the normal state to an alternate state
 O (the character O, not zero) is a “shift-out” byte that indicates a change from the
alternate state to the normal state

Writing Stateful Encodings


Consider a record definition with the following four-byte fields:

Start End
Field Position Position Record Value
A 0 3 Character value “AB” encodes to 5 bytes: |123O.
The character “A” is represented by bytes 1 and 2.
The character “B” is represented by byte 3.
B 4 8 Character value “C” encodes to 4 btyes: |45O.

The parser encodes this record as follows:


|12O|45O
Notice that the parser truncated byte 3 (the character “B”) from the first field so that the
field would fit within the four-byte limit. This truncation occurred on the character
boundary between the characters A and B, creating a properly encoded record.

Flat File Schema Developer’s Guide Version 8.2 117


C Flat File Byte Count Parser

Note: A different method of encoding, using a “padding” byte, would have produced this
result:

|12345OP

where P is an added padding byte, to extend the record length to the required eight bytes.
The parser does not use this method of encoding. Using this method, extracting the value
for the second field produces:

45OP

The parser cannot properly write this byte sequence. All fixed position fields must be
encoded as if they were a stand-alone sequence of bytes. No stateful encoding
information may be carried from one fixed position field to any other fixed position field.
However, delimited fields may carry stateful information from one field to the next field.
In contrast, delimited records may not carry stateful information from one record to the
next record. Thus, delimited fields are not necessarily “self contained”, but delimited
records are.

118 Flat File Schema Developer’s Guide Version 8.2


Index

A adding entries programmatically 99


access permissions, setting 73 programmatically 100
alternate code sets, enabling use of 74 programmatically creating empty dictionaries 101
alwaysSortFields variable 74 when to create 20
creating flat file schemas 38
B configuring the structure 50
adding element definitions 51
byte count validator, field 66
adding element references 51
record definition properties 56
C programmatically 101
character position field extractor 13 setting up flat file schemas 38
choosing services to receive flat files 81 specifying properties 43
code list validator 65
code sets, alternate D
enabling use of 74
default records 19
composite
deleting
defined 12
flat file dictionaries entries programmatically 109
extractors 62
flat file dictionaries programmatically 109
reusing definitions 20
flat file dictionaries, managing dependencies on
concepts
72
flat file dictionaries 20
flat file schemas programmatically 109
flat file schemas 13
fomat services, managing dependencies on 67
flat files 12
delimited field extractors 13
flat files supported 13
delimited records 13
overview 12
delimiter record parser
conditional validators 63
defined 38
configuration file
properties 41
alwaysSortFields variable 74
delimiters, specifying 39
customizing 73
delimiters, using readable and non-readable
enableFormatting variable 67
delimiters 75
spacePadJustifies variable 76
diagrams
useAlternateCodeSets variable 74
flat file processing 26
useReadableDelimiterReporting variable 75
inbound conversion and validation 28
configuring flat file schema structure 50
outbound conversion 33
adding element definitions 51
dictionaries, flat file
adding element references 51
creating empty dictionaries programmatically 101
record definition properties 56
creating programmatically 100
constraint types in flat file schemas 14
deleting programmatically 109
content handler, flat file 80
managing dependencies on 72
content type, flat file 80
modifying programmatically 105
conventions used in this document 7
retrieving data for from XML file 109
converting flat file to IS document (IData) 29
dictionary entries, flat file
converting IS document (IData) to flat file 33
creating programmatically 99
creating flat file dictionaries 69

Flat File Schema Developer’s Guide Version 8.2 119


Index

deleting programmatically 109 Flat File Schema Editor 21


modifying programmatically 102 Flat File Defintion tab 22
retrieving data for from XML file 109 Flat File Structure tab 22
documentation Properties panel 22
conventions used 7 flat file schemas
constraints
E content type 14
EDI record parser 39 structural 14
editing an existing flat file schema or dictionary 72 syntax rule 14
elements 12 creating 38
reusing definitions 20 creating programmatically 101
extractors 62 defined 13
deleting programmatically 109
editing 72
F
Flat File Schema Editor 21
ff.cnf configuration file identifying 21
alwaysSortFields variable 74 identifying records 15
customizing 73 modifying programmatically 107
enableFormatting variable 67 retrieving data for from XML file 109
spacePadJustifies variable 76 setting access permissions 73
useAlternateCodeSets variable 74 testing 69
useReadableDelimiterReporting variable 75 validation 14
field flat file user interface
defined 12 See Flat File schema Editor
extractors 62 flat files
reusing definitions 20 creating from IS documents (IData objects) 33
sorting 74 defined 12
validators 65 mapping 29
fixed length record parser processing 26
defined 38 sending and receiving 80
properties 42 content handler 80
fixed length records 13 content type 80
flat file dictionaries services for receiving 81
creating 69 via a flow service 81
creating empty dictionaries programmatically 101 via a string variable 81
creating entries programmatically 99 via e-mail 86
creating programmatically 100 via file polling 86
defined 20 via FTP 83
deleting entries programmatically 109 via HTTP 82
deleting programmatically 109 via Trading Networks 80
editing 72 types supported 13
Flat File Schema Editor 21 floating records
identifying 21 behavior of 45
modifying entries programmatically 102 examples of, inbound parsing 45
modifying programmatically 105 examples of, outbound parsing 49
retrieving data for from XML file 109 specifying in flat file schema 43
setting access permissions 73 flow services, requirements to receive flat files 81
flat file dictionary entries, retrieving data for from format services 66
XML file 109

120 Flat File Schema Developer’s Guide Version 8.2


Index

creating 66 inbound flat files 28


disabling 67 outbound flat files 33
error messages 67 position field extractors 13
managing dependencies on 67 posting a flat file via HTTP 82
processing 27 processing flat files 26
diagram 26
H format services 27
handling large flat files 32 inbound 27
default records 19
diagram 28
I
how to 28
identifiers, record 17 large files 32
identifying flat file schema records 15 mapping data 29
identifying flat file schemas and dictionaries 21 parsing 28
inbound flat file processing 27 undefined data 18
default records 19 validation error codes 94
diagram 28 validation error contents 90
how to 28 outbound 33
large files 32 diagram 33
mapping data 29 how to 33
parsing 28 parsing 33
undefined data 18 processing IS documents (IData) 29
validation error codes 14 program code conventions in this document 7
validation error contents 14 programmatically
IS documents (IData objects), creating from flat files create empty flat file dictionaries 101
28 create flat file dictionaries 100
create flat file dictionary entries 99
L create flat file schemas 101
large flat file handling 32 delete flat file dictionaries 109
length validator, field 65 delete flat file dictionary entries 109
delete flat file schemas 109
M modify flat file dictionaries 105
mapping flat file data 29 modify flat file dictionary entries 102
modifying modify flat file schemas 107
flat file dictionaries entries programmatically 102 properties of flat file schemas, specifying 43
flat file dictionaries programmatically 105
flat file schemas programmatically 107 R
record
O default 19
outbound flat file processing 33 defined 12
diagram 33 identifying 15
how to 33 reusing definitions 20
parsing 33 record identifiers 17
records with no identifiers 19
P record parsers 16, 38
delimiter
parsers, record 16
defined 38
parsing
properties 41

Flat File Schema Developer’s Guide Version 8.2 121


Index

EDI 39 U
fixed length undefined data 18
defined 38 updating
properties 42 flat file dictionaries entries programmatically 102
general properties 39 flat file dictionaries programmatically 105
specifying delimiters 39 flat file schemas programmatically 107
variable length, defined 39 useAlternateCodeSets variable 74
records, floating useReadableDelimiterReporting variable 75
behavior of 45
examples of, inbound parsing 45 V
examples of, outbound parsing 49
validation
specifying in flat file schema 43
defined 14
reusing element definitions 20
error codes 94
error contents 90
S validators
schemas, flat file about 62
creating programmatically 101 conditional 63
deleting programmatically 109 field 65
modifying programmatically 107 byte count 66
retrieving data for from XML file 109 code list 65
sending and receiving flat files length 65
content handler 80 variable length record parser, defined 39
content type 80 variable length records 13
overview 80
services for receiving 81 X
via a flow service 81
XML files, retrieving data from 109
via a string variable 81
via e-mail 86
via file polling 86
via FTP 83
via Trading Networks 80
setting access permissions 73
setting up flat file schemas 38
sorting order of fields in composites and records 74
spacePadJustifies variable 76
submitting a flat file via a string variable 81
submitting a flat file via e-mail 86
submitting a flat file via file polling 86
submitting a flat file via FTP 83
submitting a flat file via HTTPsending and receiving
flat files
via HTTP 82

T
testing flat file schemas 69
Trading Networks, sending flat files to 80
typographical conventions in this document 7

122 Flat File Schema Developer’s Guide Version 8.2


Index

Flat File Schema Developer’s Guide Version 8.2 123


Index

124 Flat File Schema Developer’s Guide Version 8.2

You might also like