[Date Prev][Date Next] [Thread Prev][Thread Next]
[Date Index] [Thread Index] [New search]

Re: ANN: Need database for publishing



This is in response to Rick Quattro's challenge: Since I don't subscribe to 
the framescript users yahoo group, I'd appreciate it if someone on Free 
framers would post it there.

============================================

I've had a client for the past 6 or so years who produces a 900-page 
membership directory every year or two. Each of the 28,000 members 
worldwide has a who's-who-type biography which is assembled from more than 
30 record fields. Members are listed by country/state/city. In some cases, 
members have offices in several different cities, and are listed under each 
city. An alphabetical index of members must be generated which lists each 
member's name, with the location(s) of each of his/her offices, and the 
page number(s) where the member appears in the geographical listings.

Prior to each new issue of the directory, using UniMerge, I use UniMerge to 
produce for the client a customized questionnaire for each member showing 
the data currently in the client's database. The questionnaire is a 
self-mailer which is sent to each member for review and 
correction/updating. After the database has been updated from the returned 
questionnaires, I use UniMerge to produce the member directory.

In addition to the geographical and alphabetical member listings, the 
directory includes a Buyer's guide, also extracted from a database, 
providing information about suppliers of products which the members use. 
Suppliers pay for having their company listed, and, for an additional fee, 
can include a display ad. I also use UniMerge to produce the Buyer's guide 
for the client.

About 2 years ago, the client notified me that my services would no longer 
be needed because they had purchased new and very expensive database 
software which had what supposedly was a highly sophisticated built-in 
database publishing capability. I told the client to call me back when they 
discovered that the new system didn't work. Sure enough, 6 months later, I 
got the call.

Now, you may ague that this story is merely anecdotal, but it really isn't. 
The reason being that there is a right and a wrong way to do database 
publishing. UniMerge is the right way, and custom coding is the wrong way.
.
Many of the companies who switched to UniMerge (By the way, I have no 
financial or other interest in the product other than the fact that I use 
it successfully) had previously developed custom code to accomplish their 
database publishing, where the custom code produced documents (e.g., MIF) 
that could be opened in their DTP of choice. Inevitably, over time, changes 
in the database record structure, changes in new versions of the DTP, and 
changes in the presentation and formatting of the output occurred, and they 
found that it was constantly necessary to modify the code. The result was 
intolerable delays while the custom code was being massaged, tested, 
re-massaged, and tested again.  The custom code usually ended up as 
unmanageable spaghetti.

Then they discovered UniMerge. What they found was that UniMerge had in it 
all the capabilities they would have liked to have had in their custom code 
if they had the time and the money. so they threw away all their custom 
code and bought UniMerge.

A framescript is nothing more or less than custom code of the type 
described above. That's the wrong way.

The right way is the way UniMerge does it. UniMerge operates like the 
ribosomes in living cells.Ribosomes manufacture the myriad types of 
proteins which are required in living organisms. Ribosomes accomplish this 
by pulling out of the cellular soup the chemical building blocks for making 
each specific protein, and then fashioning them together in the prescribed 
way. To obtain the prescription for building a particular type of protein, 
ribosome reads that segment of the RNA in the cell's nucleus which defines 
how to build that protein.

The ribosome, in other words is an infinitely flexible chemical machine 
capable of following any instructions it receives from the RNA.

The analogy to database publishing with UniMerge is almost exact:

UniMerge = Ribosome

Protein building blocks = fields in the data record.

RNA = the FrameMaker report template, which not only contains the complete 
formatting instructions, but also contains commands which UniMerge 
recognizes and executes.These commands are used to evaluate and manipulate 
the data fields, based on their content. With UniMerge, for example, you 
can convert data records into tagged SGML or XML, even including attribute 
values.

In the FrameMaker report template, fields are represented by their field 
names. Field names can be inserted in, above, or below static text which is 
also to be output with the the data. Markers of any type can be inserted 
that also include field names, which are replaced at merge time by their 
field values, thus enabling the production of running header footers, 
generated indexes, etc.

At merge time, UniMerge replaces the field names with their field values in 
each record. The UniMerge output is a MIF file, which can then be opened in 
FrameMaker and printed.

The UniMerge command language is elegant, powerful, and simple.
The generalized command syntax is:

COMMAND ar1 arg2...[OPTION1 value1 ....OPTIONn valueN], where:
Capitalized words indicate keywords that must be typed verbatim.

Arguments and values are variable information that depend on your application.

Square brackets enclose parameters which are optional.

Curly brackets enclose a list of options separated by vertical bars.

These commands (there are 15 commands, but some can have many variations to 
accomplish many different things), embedded in the FrameMaker report 
template, allow allow the following actions to be accomplished while 
UniMerge is merging the data records with the template:

1. Declare a database name, and issue live queries to it. (the alternative 
is to operate on ASCII database extracts, in which case no query is required).

2. Declare each record field and its data type. UniMerge also allows you to 
create derived fields, in which the derived field value is calculated, 
using any valid expression,  from data fields and/or variables..

3. Recognize and process, in any desired manner, repeating groups of 
subrecords  (including multiple nested levels of such subrecords) produced 
by relational joins.

4. Define, declare, and assign values to report variables, which can be 
stored semi-persistently for use while UniMerge is processing the data 
records. Report variables can also be used to produce totals or subtotals

5. Perform IF-THEN-ELSE conditional processing to any number of nested 
levels, in which one or more data fields and/or report and system variables 
are evaluated. The outcome of such processing can determine whether a field 
or an entire data record is rejected, or how it is formatted or modified. A 
look-ahead/back feature allows such conditional processing to be performed 
on the next or previous record, so as, for instance to compare a field in 
the current record with the same field in the previous or next record.

6. Format and/or modify data fields in any of the following ways:

Specifying the case (Upper, Lower, or Initial Caps) of strings
Adding characters within strings (e.g., to format social security numbers, 
telephone numbers, etc.)
Adding smart quotes to strings
Truncate a string, find/extract a substring within a string, or rearrange 
the content of a string by chopping it into substrings and then 
reassembling it.
Collapsing blank fields
Specifying the number of decimal digits in numbers
Specifying a leading zero for numbers less than 1
Specifying a delimiter between thousands in numbers
Prefixing a number with a dollar sign
Prefixing positive or negative numbers with a + or a - sign
Enclosing a negative number in parentheses
Replacing the number 0 with text
Formatting dates and times
Translating enumerated field values to text strings.

7. Extract any specified text fragment from an external FrameMaker file, 
and insert it anywhere in the output.

8. Import by reference any external graphic into the merged file. If data 
records specify an external graphic file, that file can be inserted

9. Detect errors, anomalies, or other useful information about the data 
records, and log a user-defined message to the screen or a log file which 
can identify the particular data record to which that message pertains.
10. Merge several FrameMaker report templates into a single application.

11. Issue, in the midst of record processing, an operating system command 
to be executed.

In addition, Unimerge allows you to use Control and Job files, as follows:

Control Files
Sometimes you may want to use a UniMerge command without putting the 
command in the report template itself. For example, you may want to use the 
same report template in different circumstances without having to modify 
it. Control files (ASCII text files) are used for this purpose. UniMerge 
commands that are not position-dependent can be put in a control file. When 
you execute UniMerge, you specify which control file to use.

Job Files
In some batch processing applications, you may want to assemble and collate 
a "packet" that contains more than one report. You may also want to send 
duplicate copies of a report to different locations. These tasks are 
accomplished by a job file (an ASCII text file), which provides a way to 
merge several reports in a single application.

On systems which allow the use of fmbatch and fmprint, UniMerge also 
provides a printaction command which can be embedded in job files so that 
each file that is output by UniMerge during a merge operation can be 
printed without human interaction.

UniMerge is very fast because it runs directly under DOS or Unix, and is 
not burdened with a GUI. I've achieved merging speeds of up to 6000 records 
per minute on a fairly slow machine. With UniMerge, I've produced single 
files having as many as 1000 pages in a couple of minutes without a single 
hiccup.

There are many more features and subtleties of UniMerge which I haven't the 
space to mention. I have a PDF paper more fully describing database 
publishing with UniMerge and FrameMaker on Shlomo's webseite:

www.microtype.com/

Click the Resources link, and look for "Dan Emory's Articles." You'll find 
it there.

================================================

Now, Rick, I suppose it might somehow be remotely possible, 
using  FrameScript plus one whole heck of a lot of surrounding C code, to 
produce a Unimerge-like generic application having all of its features, 
speed, and reliability described above. Or, you could even try to use 
FrameScript to produce a customized solution for a relatively simple 
database publishing application, and then try to tweak it a bit (more 
likely alot) for each succeeding application. But why bother with either of 
those approaches? It's all already done in UniMerge, which only costs about 
$600, and can be easily customized (by means of the FrameMaker report 
template, control files, and job files) for any application, regardless of 
whether it's simple or complex.

====================
| Nullius in Verba |
====================
Dan Emory, Dan Emory & Associates
FrameMaker/FrameMaker+SGML Document Design & Database Publishing
Voice/Fax: 949-722-8971 E-Mail: danemory@primenet.com
177 Riverside Ave., STE F, #1151, Newport Beach, CA 92663


** To unsubscribe, send a message to majordomo@omsys.com **
** with "unsubscribe framers" (no quotes) in the body.   **