This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/main by this push:
     new 319e6e1f12 Issue #7902 : Document field format metadata, Script 
result, and date time zones (#7961)
319e6e1f12 is described below

commit 319e6e1f12d7b6b2d8059c2053a7cb712633a53d
Author: Matt Casters <[email protected]>
AuthorDate: Sat Aug 15 10:20:39 2026 +0200

    Issue #7902 : Document field format metadata, Script result, and date time 
zones (#7961)
    
    Add a canonical Formatting numbers and dates page covering Format, Length,
    Precision, Decimal, Group, Currency, string/date conversion, and DST gap
    and overlap hours. Document the Script result? column and Row Generator
    Value/Group, link transform pages that reuse these columns, and add
    column-header tooltips on the dialogs that caused the confusion.
    
    Fixes #7902
---
 .../hop/i18n/messages/messages_en_US.properties    |  11 +
 docs/hop-user-manual/modules/ROOT/nav.adoc         |   1 +
 .../modules/ROOT/pages/concepts.adoc               |   2 +
 .../pages/metadata-types/beam-file-definition.adoc |   1 +
 .../metadata-types/static-schema-definition.adoc   |   1 +
 .../ROOT/pages/pipeline/formatting-values.adoc     | 233 +++++++++++++++++++++
 .../modules/ROOT/pages/pipeline/transforms.adoc    |   3 +
 .../pages/pipeline/transforms/addconstant.adoc     |  23 +-
 .../ROOT/pages/pipeline/transforms/addxml.adoc     |   3 +-
 .../pages/pipeline/transforms/beamfileinput.adoc   |   3 +-
 .../pages/pipeline/transforms/beamfileoutput.adoc  |   3 +-
 .../ROOT/pages/pipeline/transforms/calculator.adoc |   4 +-
 .../pages/pipeline/transforms/concatfields.adoc    |   2 +-
 .../ROOT/pages/pipeline/transforms/datagrid.adoc   |  26 ++-
 .../ROOT/pages/pipeline/transforms/excelinput.adoc |   4 +-
 .../pages/pipeline/transforms/excelwriter.adoc     |   3 +-
 .../ROOT/pages/pipeline/transforms/formula.adoc    |   3 +-
 .../pages/pipeline/transforms/getdatafromxml.adoc  |   3 +-
 .../pages/pipeline/transforms/getvariable.adoc     |   4 +-
 .../pipeline/transforms/google-sheets-input.adoc   |  11 +
 .../ROOT/pages/pipeline/transforms/injector.adoc   |   1 +
 .../ROOT/pages/pipeline/transforms/javascript.adoc |   9 +-
 .../ROOT/pages/pipeline/transforms/jsoninput.adoc  |   5 +-
 .../pipeline/transforms/jsonnormalizeinput.adoc    |   5 +-
 .../ROOT/pages/pipeline/transforms/ldapinput.adoc  |   3 +-
 .../pages/pipeline/transforms/loadfileinput.adoc   |   3 +-
 .../pages/pipeline/transforms/mysqlbulkloader.adoc |   2 +
 .../pages/pipeline/transforms/odata-input.adoc     |   1 +
 .../pages/pipeline/transforms/propertyinput.adoc   |   3 +-
 .../ROOT/pages/pipeline/transforms/regexeval.adoc  |   2 +-
 .../pages/pipeline/transforms/rowgenerator.adoc    |  26 ++-
 .../pages/pipeline/transforms/salesforceinput.adoc |   1 +
 .../ROOT/pages/pipeline/transforms/script.adoc     |  52 ++++-
 .../pages/pipeline/transforms/selectvalues.adoc    |  13 +-
 .../pipeline/transforms/setvalueconstant.adoc      |   2 +-
 .../ROOT/pages/pipeline/transforms/switchcase.adoc |   5 +-
 .../pages/pipeline/transforms/textfileinput.adoc   |  64 +-----
 .../pages/pipeline/transforms/textfileoutput.adoc  |   4 +-
 .../transforms/userdefinedjavaexpression.adoc      |   1 +
 .../ROOT/pages/pipeline/transforms/validator.adoc  |   5 +-
 .../ROOT/pages/pipeline/transforms/xmloutput.adoc  |   6 +-
 .../pipeline/transforms/xmloutputadvanced.adoc     |   1 +
 .../ROOT/pages/pipeline/transforms/yamlinput.adoc  |   1 +
 .../field-metadata/date-format-symbols.adoc        |  55 +++++
 .../snippets/field-metadata/field-columns.adoc     |  45 ++++
 .../field-metadata/number-format-symbols.adoc      |  41 ++++
 .../hop-concepts/columninfo-wiget-defaults.adoc    |  31 ---
 .../pages/snippets/hop-concepts/data-types.adoc    |   9 +-
 .../modules/ROOT/templates/template-plugin.adoc    |   5 +
 .../googlesheets/GoogleSheetsInputDialog.java      |   9 +
 .../transforms/constant/ConstantDialog.java        |  11 +
 .../constant/messages/messages_en_US.properties    |  10 +
 .../transforms/getvariable/GetVariableDialog.java  |   8 +
 .../rowgenerator/RowGeneratorDialog.java           |  10 +
 .../pipeline/transforms/script/ScriptDialog.java   |   8 +
 .../script/messages/messages_en_US.properties      |   7 +
 56 files changed, 678 insertions(+), 130 deletions(-)

diff --git 
a/core/src/main/resources/org/apache/hop/i18n/messages/messages_en_US.properties
 
b/core/src/main/resources/org/apache/hop/i18n/messages/messages_en_US.properties
index 1c5d1e79c0..99e06be908 100644
--- 
a/core/src/main/resources/org/apache/hop/i18n/messages/messages_en_US.properties
+++ 
b/core/src/main/resources/org/apache/hop/i18n/messages/messages_en_US.properties
@@ -52,16 +52,27 @@ System.Button.Test=&Test
 System.Button.Variable=&Variable...
 System.Button.Yes=Yes
 System.Column.Currency=Currency
+System.Column.Currency.Tooltip=Optional currency symbol used when the format 
mask contains a currency sign. Examples\: $, \u20AC.
 System.Column.Decimal=Decimal
+System.Column.Decimal.Tooltip=Character that separates the integer and 
fractional parts. Example\: . in 10,000.00 (US) or , in 10.000,00 (DE).
 System.Column.Format=Format
+System.Column.Format.Tooltip=Number or date pattern used to parse and print 
this field (Java DecimalFormat or SimpleDateFormat).
 System.Column.Group=Group
+System.Column.Group.Tooltip=Thousands grouping symbol (for example , in 
1,000.00 or . in 1.000,00). Not a row group.
 System.Column.Length=Length
+System.Column.Length.Tooltip=String\: max characters. Number\: significant 
digits. Integer\: display width. Date\: printed length (4 = year). -1 = unset.
 System.Column.Name=Name
+System.Column.Name.Tooltip=Name of the field on the output stream.
 System.Column.Precision=Precision
+System.Column.Precision.Tooltip=Decimal digits after the radix for Number and 
BigNumber. Unused for String, Date and Boolean.
 System.Column.SetEmptyString=Set empty string?
+System.Column.SetEmptyString.Tooltip=Y\: emit an empty string instead of null 
when the constant is empty.
 System.Column.TrimType=Trim type
+System.Column.TrimType.Tooltip=How to trim whitespace before conversion\: 
none, left, right, or both.
 System.Column.Type=Type
+System.Column.Type.Tooltip=Hop data type of this field (String, Integer, 
Number, Date, ...).
 System.Column.Value=Value
+System.Column.Value.Tooltip=A single constant value for this field, parsed 
using Type and Format. Not a comma-separated list.
 System.Combo.Identical=3
 System.Combo.No=N
 System.Combo.Primary=0
diff --git a/docs/hop-user-manual/modules/ROOT/nav.adoc 
b/docs/hop-user-manual/modules/ROOT/nav.adoc
index fc4d99eb10..a118fd3206 100644
--- a/docs/hop-user-manual/modules/ROOT/nav.adoc
+++ b/docs/hop-user-manual/modules/ROOT/nav.adoc
@@ -69,6 +69,7 @@ under the License.
 ** xref:pipeline/metadata-injection.adoc[Metadata Injection]
 ** xref:pipeline/specify-copies.adoc[Specify copies]
 ** xref:pipeline/partitioning.adoc[Partitioning]
+** xref:pipeline/formatting-values.adoc[Formatting numbers and dates]
 ** xref:pipeline/transforms.adoc[Transforms]
 *** xref:pipeline/transforms/abort.adoc[Abort]
 *** xref:pipeline/transforms/addchecksum.adoc[Add a checksum]
diff --git a/docs/hop-user-manual/modules/ROOT/pages/concepts.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/concepts.adoc
index f14b4ecee5..095be56f33 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/concepts.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/concepts.adoc
@@ -35,6 +35,8 @@ xref:metadata-driven-architecture.adoc[Metadata Driven 
Architecture]
 // Data types
 include::snippets/hop-concepts/data-types.adoc[]
 
+xref:pipeline/formatting-values.adoc[Formatting numbers and dates] describes 
Format, Length, Precision, Decimal, Group and Currency — the field metadata 
used whenever Hop converts a value to or from a String.
+
 == Various
 
 The following items are an alphabetically ordered list of concepts that are 
used throughout Hop and will be mentioned at various locations in the Hop tools 
and documentation.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/metadata-types/beam-file-definition.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/metadata-types/beam-file-definition.adoc
index 3871ad4d6f..e323a4cd40 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/metadata-types/beam-file-definition.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/metadata-types/beam-file-definition.adoc
@@ -44,6 +44,7 @@ Transforms:
 |Enclosure|field enclosure used for fields in the file definition
 |Field Definitions|List of field name, type, format, length and precision.
 Describes the file layout for this field definition.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |===
 
 == Samples
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/metadata-types/static-schema-definition.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/metadata-types/static-schema-definition.adoc
index a890cb4b4e..8131a64329 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/metadata-types/static-schema-definition.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/metadata-types/static-schema-definition.adoc
@@ -49,6 +49,7 @@ Transforms:
 |Field Separator|separator used between fields in the schema definition
 |Enclosure|field enclosure used for fields in the schema definition
 |Field Definitions|List of fields and attributes that describe the file layout 
for this schema definition.
+Format, Length, Precision, Decimal, Group and Currency are described in 
xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |===
 
 ////
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/formatting-values.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/formatting-values.adoc
new file mode 100644
index 0000000000..3d17cdcc30
--- /dev/null
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/formatting-values.adoc
@@ -0,0 +1,233 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+  http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+////
+:description: How Hop uses Format, Length, Precision, Decimal, Group and 
Currency when converting numbers and dates to and from strings, including time 
zones and daylight saving time.
+:imagesdir: ../assets/images
+
+= Formatting numbers and dates
+
+Many transforms show a fields table with columns such as *Format*, *Length*, 
*Precision*, *Decimal*, *Group* and *Currency*.
+These columns are field metadata.
+They tell Hop how to read a string into a typed value, and how to write a 
typed value back to a string.
+
+They look obvious after a decade of using them.
+They are not, especially *Group*, which is a thousands separator and not a row 
group.
+
+This page is the single description of those columns.
+Transform and action pages that expose them link here instead of repeating the 
same one-liners.
+
+== When this metadata is used
+
+Hop applies format metadata when it converts between a String and another type:
+
+* reading and writing text, CSV, XML, JSON, Excel and similar files
+* previewing rows in Hop Gui
+* parsing a constant *Value* (Row Generator, Add Constants, Data Grid)
+* concatenating fields, logging, and converting to String in scripts
+
+Hop does *not* rewrite values when it writes to a relational database.
+The database driver receives the typed value (Integer, Number, Date, …).
+See xref:concepts.adoc#data-types[Data types].
+
+== The shared field columns
+
+include::../snippets/field-metadata/field-columns.adoc[]
+
+== Number formats
+
+include::../snippets/field-metadata/number-format-symbols.adoc[]
+
+=== Worked examples
+
+The *Decimal* and *Group* columns change the characters that `.` and `,` in 
the mask stand for.
+They do not change the mask itself.
+
+[options="header"]
+|===
+|Value|Format|Decimal|Group|Currency|Result
+|1234.5|`#,##0.00`|`.`|`,`| |`1,234.50`
+|1234.5|`#,##0.00`|`,`|`.`| |`1.234,50`
+|1234.5|`¤ #,##0.00`|`.`|`,`|`$`|`$ 1,234.50`
+|1234.5|`0.###E0`|`.`|`,`| |`1.2345E3`
+|0.25|`0%`|`.`|`,`| |`25%`
+|===
+
+Leave Decimal and Group empty to use the JVM default locale.
+That is convenient on one machine and a source of surprises when the same 
pipeline runs in another country.
+Prefer an explicit Format, Decimal and Group whenever you parse or write 
numbers as text.
+
+== Date and timestamp formats
+
+include::../snippets/field-metadata/date-format-symbols.adoc[]
+
+=== Common masks
+
+[options="header"]
+|===
+|Mask|Example
+|`yyyy-MM-dd`|`2026-08-14`
+|`yyyy-MM-dd HH:mm:ss`|`2026-08-14 19:51:00`
+|`yyyy-MM-dd HH:mm:ss.SSS`|`2026-08-14 19:51:00.123`
+|`yyyyMMdd`|`20260814`
+|`yyyy-MM-dd'T'HH:mm:ss.SSSZ`|`2026-08-14T19:51:00.123+0000`
+|===
+
+Quote literal letters with single quotes (`'T'` above).
+Unquoted letters are pattern symbols.
+
+[[string-to-date]]
+=== String to Date and Date to String
+
+A Hop `Date` is a `java.util.Date`: an instant, stored as milliseconds since 
`1970-01-01 00:00:00 UTC`.
+It does *not* remember a time zone.
+The time zone only matters when Hop converts that instant to a String, or a 
String back to an instant.
+
+Hop uses Java `SimpleDateFormat` for both directions:
+
+* *String → Date* (`convertStringToDate`) — the Format mask, Date Locale and 
Date Time Zone on the field tell the parser how to read the text.
+* *Date → String* (`convertDateToString`) — the same metadata prints the 
instant.
+
+If you leave *Date Time Zone* empty, Hop uses the JVM default 
(`TimeZone.getDefault()`).
+A pipeline that parses cleanly on a laptop set to `UTC` can fail on a server 
set to `America/New_York` (EST/EDT) or `Europe/Brussels` (CET/CEST).
+Set the zone explicitly on the field 
(xref:pipeline/transforms/selectvalues.adoc[Select Values] → Meta-data tab → 
*Date Time Zone*) whenever the string does not carry an offset.
+
+*Date Format Lenient?* (same tab) is passed to `SimpleDateFormat.setLenient`.
+The default is *not* lenient: a value that is not a real wall-clock time in 
that zone throws
+
+`couldn't convert string [...] to a date using format [...]`
+
+Lenient mode will invent a nearby valid time instead of failing.
+That hides bad data. Prefer a strict parse and an explicit zone.
+
+==== Time zone letters in the mask
+
+[options="header"]
+|===
+|Letter|What the string must contain|Example
+|`Z`|RFC 822 offset, no colon|`+0000`, `-0500`, `+0100`
+|`X`|ISO 8601 offset (`XX` / `XXX` for `-0500` / `-05:00`)|`Z`, `-05`, 
`-0500`, `-05:00`
+|`z`|Named zone or GMT offset|`UTC`, `EST`, `CEST`, `GMT-05:00`
+|===
+
+If the mask has *no* `Z`, `X` or `z`, the digits in the string are a 
*wall-clock time in the field's Date Time Zone* (or the JVM default).
+They are not "just UTC" unless that zone is `UTC`.
+
+Good round-trip masks:
+
+* `yyyy-MM-dd'T'HH:mm:ss.SSSX` → `2026-03-08T07:30:00.000Z`
+* `yyyy-MM-dd HH:mm:ssZ` → `2026-03-08 07:30:00+0000`
+
+==== Daylight saving time: the missing hour and the doubled hour
+
+Regions that observe daylight saving time (DST) change the civil clock twice a 
year.
+The UTC timeline never skips or repeats.
+The local wall clock does.
+
+*Spring forward (gap).*
+Clocks jump ahead one hour.
+That local hour *does not exist*.
+
+* `America/New_York` (EST → EDT): second Sunday of March, `02:00` becomes 
`03:00`.
+  In 2026 that is `2026-03-08`.
+  `2026-03-08 02:30:00` is not a real local time.
+* `Europe/Brussels` (CET → CEST): last Sunday of March, `02:00` becomes 
`03:00`.
+  In 2026 that is `2026-03-29`.
+  `2026-03-29 02:30:00` is not a real local time.
+
+*Fall back (overlap).*
+Clocks jump back one hour.
+That local hour *occurs twice*.
+
+* `America/New_York` (EDT → EST): first Sunday of November, `02:00` becomes 
`01:00`.
+  In 2026 that is `2026-11-01`.
+  `2026-11-01 01:30:00` happens first as EDT (UTC−4) and again as EST (UTC−5).
+* `Europe/Brussels` (CEST → CET): last Sunday of October, `03:00` becomes 
`02:00`.
+  In 2026 that is `2026-10-25`.
+  `2026-10-25 02:30:00` happens twice.
+
+[options="header"]
+|===
+|Direction|Gap (spring)|Overlap (fall)
+|String → Date|A timezone-less string whose local time falls in the missing 
hour *throws* (strict parse).
+Typical Hop error: `couldn't convert string [2026-03-29 02:30:00] to a date 
using format [yyyy-MM-dd HH:mm:ss]`.
+|The same local time maps to *two* instants.
+`SimpleDateFormat` picks one of them.
+You cannot tell which hour the source meant unless the string carries an 
offset.
+|Date → String|Every instant still prints.
+A UTC instant just after the jump prints as `03:xx` local, never as `02:xx`.
+|Two different instants print as the *same* local string if the mask has no 
`Z` / `X` / `z`.
+Parsing that string back is not a safe round-trip.
+|===
+
+==== The UTC-string-in-a-local-JVM trap
+
+This is the one that bites.
+
+Source systems often store UTC as a *naive* string: `2026-03-29 02:30:00`, 
meaning 02:30 UTC, with no `Z` and no offset.
+That instant is perfectly valid in UTC (it is 03:30 CEST, or 21:30 the 
previous evening in EDT).
+
+If Hop parses that string with Format `yyyy-MM-dd HH:mm:ss` and the JVM (or 
the field) is in `Europe/Brussels` or `America/New_York`, the parser treats 
`02:30` as *local* wall-clock time.
+On the spring-forward night that local time does not exist, and the convert 
throws — even though the original value was a normal UTC timestamp.
+
+The same string in November can parse, but to the wrong instant of the two 
01:30 / 02:30 locals.
+
+Fixes, in order of preference:
+
+. Put the offset in the string and in the mask (`Z` or `X`). Then the JVM 
default zone no longer matters.
+. Keep the naive UTC string, but set *Date Time Zone* to `UTC` on the field 
that parses it (and on the field that writes it back).
+. Do *not* rely on *Date Format Lenient = Y* to paper over the gap.
+  Lenient parsing will shift `02:30` to some other local time and you will 
load the wrong instant with no error.
+
+When you *write* dates to text, CSV, JSON or logs from a DST-observing JVM, 
use a mask with an offset, or set the output field's Date Time Zone to `UTC`.
+Otherwise a reader in another zone — or the same pipeline after a DST weekend 
— will not reconstruct the instant you had.
+
+== Rounding
+
+include::../snippets/rounding-types.adoc[]
+
+== Common mistakes
+
+*Treating Group as a category.*
+Group is the thousands separator (`,` or `.`).
+It does not group rows.
+Use xref:pipeline/transforms/groupby.adoc[Group By] or 
xref:pipeline/transforms/memgroupby.adoc[Memory Group By] for that.
+
+*Putting several values in one Value cell.*
+Value is a single constant.
+`1,2,3` is one string, not three rows.
+Use xref:pipeline/transforms/datagrid.adoc[Data Grid] when you need more than 
one distinct row.
+
+*Swapping Decimal and Group.*
+`1.234,50` needs Decimal `,` and Group `.`.
+The opposite pair will not parse, or will parse the wrong number.
+
+*Leaving Format empty for locale-specific numbers.*
+Without an explicit mask, Hop uses JVM defaults.
+A pipeline that works on a US laptop can fail on a European server.
+
+*Expecting Length to change a Date's internal value.*
+Length `4` on a Date only affects how that date is *printed* as a string 
(typically the year).
+The Date on the stream is still a full date-time.
+
+*Parsing a UTC date string in a local time zone.*
+`2026-03-29 02:30:00` is a normal UTC timestamp and a missing local hour in 
CEST.
+Set *Date Time Zone* to `UTC`, or include `Z` / `X` in the mask.
+See <<string-to-date>>.
+
+*Sending large integers through JavaScript.*
+JavaScript numbers are IEEE 754 doubles.
+Integers longer than about 15–16 digits can change.
+See xref:pipeline/transforms/javascript.adoc#numeric-values[JavaScript — 
Numeric values].
diff --git a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc
index 1582534598..693269fb0d 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms.adoc
@@ -22,6 +22,9 @@ under the License.
 Transforms are the cornerstone of HOP, they are used to process and transform 
your data, they are the building blocks that are used to create a pipeline.
 The pages nested under this topic contain information on how to use the 
transforms and what you have to pay attention too when using them.
 
+Field tables often share Format, Length, Precision, Decimal, Group and 
Currency columns.
+Those are explained once in xref:pipeline/formatting-values.adoc[Formatting 
numbers and dates].
+
 * xref:pipeline/transforms/abort.adoc[Abort]
 * xref:pipeline/transforms/addchecksum.adoc[Add a checksum]
 * xref:pipeline/transforms/addconstant.adoc[Add Constants]
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addconstant.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addconstant.adoc
index a9f0d2819c..3505d56887 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addconstant.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addconstant.adoc
@@ -46,6 +46,23 @@ The Add Constant Values transform is a simple and high 
performance way to add co
 |Option|Description
 |Transform name|Name of the transform.
 *Note*: This name has to be unique in a single pipeline.
-|Fields|specify the name, type, and value in the form of a string.
-Then, specify the formats to convert the value into the chosen data type.
-|===
\ No newline at end of file
+|Fields|Name, type and constant *Value* for each field to add.
+The value is entered as a string and converted with the format metadata on the 
same row.
+See <<fields-table>>.
+|===
+
+[[fields-table]]
+== Fields
+
+include::../../snippets/field-metadata/field-columns.adoc[]
+
+[options="header"]
+|===
+|Column|Description
+|Name|Name of the constant field added to every input row.
+|Type|Hop data type of the constant.
+See xref:concepts.adoc#data-types[Data types].
+|===
+
+IMPORTANT: *Value* is a *single* constant per field.
+*Group* is the thousands separator, not a row group.
\ No newline at end of file
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addxml.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addxml.adoc
index 3df3de478e..27b1c66374 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addxml.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/addxml.adoc
@@ -67,7 +67,8 @@ The table below describes each of the available properties 
for a field.
 |Fieldname|Name of the field
 |Element name|The name of the element in the XML file to use
 |Type|Type of the field can be either String, Date, or Number
-|Format|Select the date or number format to apply to the values in the field
+|Format|Select the date or number format to apply to the values in the field.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|Output string is padded to this length if it is specified
 |Precision|The number of decimal places used to display floating point numbers.
 |Currency|Symbol used to represent currencies like $10,000.00 or E5.000,00
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileinput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileinput.adoc
index a5f074fd02..37f97a8f07 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileinput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileinput.adoc
@@ -68,6 +68,7 @@ A file definition can be used to define a file structure 
definition.
 |Field name|The field name.
 |Type|The field data type.
 |Format|The field format.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|The field length.
-|Precision|The field precisiom.
+|Precision|The field precision.
 |===
\ No newline at end of file
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileoutput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileoutput.adoc
index 0302ffa5b8..fa6c432925 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileoutput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/beamfileoutput.adoc
@@ -71,6 +71,7 @@ A file definition can be used to define a file structure 
definition.
 |Field name|The field name.
 |Type|The field data type.
 |Format|The field format.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|The field length.
-|Precision|The field precisiom.
+|Precision|The field precision.
 |===
\ No newline at end of file
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/calculator.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/calculator.adoc
index 6021871c63..64a3b2f1aa 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/calculator.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/calculator.adoc
@@ -61,11 +61,13 @@ TIP: The execution speed of the Calculator is far better 
than the speed provided
 |Field C|The third field to use in the calculation.
 |Value Type|The data type to use for the result of this calculation.
 |Length|The length to set for the result of this calculation.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Precision|The precision to set for the result of this calculation.
 |Remove|A boolean flag to set. Set to `Y` for temporary fields that are only 
required for intermediate calculations and don't need to be included in the 
output.
 |Conversion mask|Conversion mask to apply to date or numeric fields.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Decimal symbol|The decimal symbol to set in the output field.
-|Grouping symbol|The grouping symbol to set in the output field.
+|Grouping symbol|The thousands grouping symbol to set in the output field, not 
a row group.
 |Currency symbol|The currency symbol to set in the output field.
 |===
 
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/concatfields.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/concatfields.adoc
index 22a0b8ccd9..40b23556f4 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/concatfields.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/concatfields.adoc
@@ -69,7 +69,7 @@ This is identical to the fields tab option of the Text File 
Output transform and
 |Name|The name of the field.
 |Type|Type of the field can be either String, Date or Number.
 |Format|The format mask to convert with.
-See Number Formats for a complete description of format symbols.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length a|The length option depends on the field type follows:
 
 - Number - Total number of significant figures in a number
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/datagrid.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/datagrid.adoc
index 3244f607d2..9821c9a2f7 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/datagrid.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/datagrid.adoc
@@ -47,11 +47,31 @@ Place a Data grid onto the data orchestration grid. On the 
Meta tab, add the fie
 
 [width="90%, options="header"]
 |===
-|Meta tab|specify the field metadata (output specification) of the data
-|Data Tab|contains the data.
-Everything is entered in String format so make sure you use the correct format 
masks in the metadata tab.
+|Meta tab|Field metadata (name, type and format masks) used to parse the 
strings on the Data tab.
+See <<meta-tab>>.
+|Data Tab|The grid of values.
+Every cell is a string.
+Hop converts each cell using the Type and Format of that column on the Meta 
tab.
 |===
 
+[[meta-tab]]
+== Meta tab
+
+include::../../snippets/field-metadata/field-columns.adoc[]
+
+[options="header"]
+|===
+|Column|Description
+|Name|Name of the output field (the column).
+|Type|Hop data type.
+Each Data-tab cell in this column is parsed into this type.
+See xref:concepts.adoc#data-types[Data types].
+|===
+
+TIP: The Data tab has one column per Meta-tab field and one row per output row.
+That is how you specify *several different values*.
+Do not try to put comma-separated values in a single cell; that is one string.
+
 == Metadata Injection Support
 
 This transform supports metadata injection.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelinput.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelinput.adoc
index 1786a79ff3..d0233c58d3 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelinput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelinput.adoc
@@ -137,8 +137,8 @@ Number: total number of significant figures in a number; 
String: total length of
 |Trim type|Truncates the field (left, right, both) before processing.
 Useful for fields that have no static length.
 |Repeat|If set to Y, will repeat this value if the field in the next row is 
empty.
-|Format|The format mask (number type).
-See Text File Input transform and the section "Number Formats" for a complete 
description of format symbols.
+|Format|The format mask (number type or date format).
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Currency|Symbol used to represent currencies.
 |Decimal|A decimal point; this is either a dot or a comma.
 |Grouping|A method of separating units of thousands in numbers of four digits 
or larger.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelwriter.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelwriter.adoc
index 71ba30cf45..f096724cff 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelwriter.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/excelwriter.adoc
@@ -163,10 +163,11 @@ The `ignore manual fields` ignores any fields manually 
defined in the transform'
 |Schema Definition|Name of the 
xref:metadata-types/static-schema-definition.adoc[Schema Definition] that we 
want to reference.
 |Name|The field to write
 |Type|The type of data
-|Format|The Excel format to use in the sheet.
+|Format|The *Excel* number/date format to use in the sheet, not Hop's 
DecimalFormat / SimpleDateFormat mask.
 Please consult the Excel manual for valid formats.
 There are some online references as well.
 For `.ods`, common Excel format tokens are converted to OpenDocument 
equivalents where possible.
+Hop field-metadata formats are described in 
xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Style from cell|A cell (i.e. A1, B3 etc.) to copy the styling from for this 
column (usually some pre-styled cell in a template)
 |Field Title|If set, this is used for the Header/Footer instead of the Hop 
field name
 |Header/Footer style from cell|A cell to copy the styling from for 
headers/footers (usually some pre-styled cell in a template)
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/formula.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/formula.adoc
index 650dd970ff..3f41570c0e 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/formula.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/formula.adoc
@@ -112,7 +112,8 @@ NOTE: `#N/A` is the exception: it means "no value 
available" and is written to t
 
 * Note: You may have to add quotes around variables in formulas as variables 
have no type.
 |Value type|the data type for the new formula field
-|Length|field length
+|Length|field length.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Precision|field precision
 |Replace value|select a pipeline field from the dropdown to replace that 
field's value with the formula result. It is not recommended to pre-create a 
field with a NULL value in a "Get variables" transform as that is considered a 
hack and is not supported behavior.
 | Set Null to #N/A | By default, Null values will create a blank cell during 
the calculation. Use this option to insert `#N/A` in the cell
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getdatafromxml.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getdatafromxml.adoc
index 39e73f1ea0..fea7e6c192 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getdatafromxml.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getdatafromxml.adoc
@@ -155,7 +155,8 @@ You can also do this using the 
xref:pipeline/transforms/xmlinputstream.adoc[XML
 * Single node: retrieve the XML contents returned by an XPath expression. 
Contrary to "Value of", the result of "Single node" is an XML snippet.
 
 |Type|The data type to convert to
-|Format|The format or conversion mask to use in the data type conversion
+|Format|The format or conversion mask to use in the data type conversion.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|The maximum number of characters in the the output data value
 |Precision|The number of decimal places used to display numbers in the output 
data
 |Currency|The currency symbol to use for monetary values.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getvariable.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getvariable.adoc
index 6b010b6171..d9a4e1e9c6 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getvariable.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/getvariable.adoc
@@ -94,13 +94,15 @@ include::../../snippets/variables/control-space.adoc[]
 
 |Type|Specifies the field type: String, Date, Number, Boolean, Integer, 
BigNumber, Serializable, or Binary.
 |Format|Allows you to specify the format of the field after the type has been 
determined.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|For Number: Total number of significant figures in a number; For 
String: total length of string; For Date: length of printed output of the 
string (for example, entering 4 would only return the year).
 |Precision|For Number: Number of floating point digits.
 Not used for String, Date, or Boolean.
 |Currency|Used to interpret numbers with currency symbols.
 For example, $10,000.00 or E5.000,00.
 |Decimal|Used to indicate whether to use a period (".") or comma (",") for 
number values.
-|Group|Used to indicate whether to use a period (".") or comma (",") for 
number values.
+|Group|Thousands grouping symbol: a period (`.`) or comma (`,`).
+This is *not* a row group.
 |TrimType|Type trim this field before processing: select either none, left, 
right, or both (left and right).
 |===
 
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/google-sheets-input.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/google-sheets-input.adoc
index 14362914a6..a5c6258af0 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/google-sheets-input.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/google-sheets-input.adoc
@@ -84,3 +84,14 @@ Fields name are always defined in the first line of the 
google spreadsheet.
 
 **Get Fields** lets you get fields and guess their types, format, precision, 
decimal and group delimiter as well as trim type.
 
+include::../../snippets/field-metadata/field-columns.adoc[]
+
+[options="header"]
+|===
+|Column|Description
+|Name|Name of the output field. Taken from the first row of the sheet when you 
click *Get Fields*.
+|Type|Hop data type used to parse the cell text.
+See xref:concepts.adoc#data-types[Data types].
+|Trim type|How to trim whitespace from the cell text before conversion: none, 
left, right, or both.
+|===
+
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/injector.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/injector.adoc
index 27682e658c..442a32411e 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/injector.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/injector.adoc
@@ -51,5 +51,6 @@ Among other things you can build 'headless' pipelines with 
it: pipelines that ha
 |Fieldname|Specify the field name of the rows to inject.
 |Type|Specify the type of data.
 |Length|For Number: Total number of significant figures in a number; For 
String: total length of string; For Date: length of printed output of the 
string.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Precision|For Number: Number of floating point digits; For String, Date, 
Boolean: unused.
 |===
\ No newline at end of file
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/javascript.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/javascript.adoc
index 30a9cfd6d5..80ad0e901a 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/javascript.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/javascript.adoc
@@ -204,13 +204,18 @@ The Fields table contains a list of variables from your 
script, and enables you
 |Fieldname|Specify the name of the incoming field.
 |Rename to|Specify a new name for the incoming field.
 |Type|Specify a data type for the output field.
-|Length|Specify the length of the output field.
-|Precision|Specify the precision value of the output field.
+|Length|Length of the output field.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
+|Precision|Precision of the output field.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Replace value ‘Fieldname’ or ‘Rename to’|Specify whether to replace the value 
of the selected field with another value or to rename a field. The values are Y 
(Yes) and N (No).
 |Get variables|Retrieve a list of Javascript variables from your script. You 
can manually add variables as the ‘Get variables’ button may not always work.
 |Test Script|Test the syntax of your script, and displays the Generate Rows 
dialog box with a set of rows for testing.
 |===
 
+NOTE: This is the Rhino *JavaScript* transform.
+The GraalVM / JSR-223 *Script* transform has an extra *Script result?* column; 
see xref:pipeline/transforms/script.adoc#fields-table[Script — Fields table].
+
 == Javascript Internal API Objects
 
 You can use the following internal API objects (for reference see the classes 
in the source):
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsoninput.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsoninput.adoc
index 728cb6aa03..b8ff826d7c 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsoninput.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsoninput.adoc
@@ -141,7 +141,7 @@ All records can be retrieved by adding the asterisk * in 
the path.
 For example, $.mydata.*
 |Type|Data type of the input field.
 |Format|An optional mask for converting the format of the original field.
-See Common Formats for information on common valid date and numeric formats 
you can use in this transform.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|Length of the field.
 |Precision|Number of floating point digits for number-type fields.
 |Currency|Currency symbol ($ or €, for example).
@@ -164,7 +164,8 @@ Click Select fields from snippet button and paste the 
entire JSON text and it wi
 
 *Dates and Timestamps*
 
-For Hop types of Date and Timestamp, use the Format column to specify the 
incoming format. E.g. for Date: yyyy-MM-dd. You can either select a format from 
the dropdown or enter format text directly. Hop uses SimpleDateFormat (Java 
Platform SE 8) at 
https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
+For Hop types of Date and Timestamp, use the Format column to specify the 
incoming format. E.g. for Date: yyyy-MM-dd. You can either select a format from 
the dropdown or enter format text directly.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 
 *Examples of Timestamp formats:*
 
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsonnormalizeinput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsonnormalizeinput.adoc
index e65b45e457..fff58707fc 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsonnormalizeinput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsonnormalizeinput.adoc
@@ -121,7 +121,7 @@ The table has the following columns:
 |Path|Flattened key for the value *within each record*, after nested objects 
are merged into dotted (or custom-separated) paths. This is *not* a JsonPath 
into the whole document—that is what **Record JsonPath** on the Content tab is 
for. Examples: `orderId`, `customer.name`. The value must match a key produced 
for that row by flattening (unless **Ignore missing field paths** is enabled, 
in which case a missing key yields null). Wildcards, filters, and regex are not 
used in this column—on [...]
 |Type|Data type of the input field.
 |Format|An optional mask for converting the format of the original field.
-See Common Formats for information on common valid date and numeric formats 
you can use in this transform.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|Length of the field.
 |Precision|Number of floating point digits for number-type fields.
 |Currency|Currency symbol ($ or €, for example).
@@ -144,7 +144,8 @@ Click *Select fields from snippet* and paste JSON 
text—typically *one represen
 
 *Dates and timestamps*
 
-For Hop types of *Date* and *Timestamp*, use the *Format* column to specify 
the incoming format. For example, for Date: `yyyy-MM-dd`. You can select a 
format from the dropdown or enter format text directly. Hop uses 
https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html[SimpleDateFormat,window=_blank]
 (Java 8).
+For Hop types of *Date* and *Timestamp*, use the *Format* column to specify 
the incoming format. For example, for Date: `yyyy-MM-dd`. You can select a 
format from the dropdown or enter format text directly.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 
 *Examples of Timestamp formats:*
 
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/ldapinput.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/ldapinput.adoc
index ece712583b..00af107b07 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/ldapinput.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/ldapinput.adoc
@@ -100,7 +100,8 @@ Note: If you renamed a field in the Select & Alter tab, the 
name here must match
 |Fetch as|String, Binary
 |Is sorted Key?| Y/N
 |Type|The data type for this field.
-|Format|The format mask (number type or date format)
+|Format|The format mask (number type or date format).
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|The field length.
 |Precision|The precision option depends on the field type, but only Number is 
supported; it returns the number of floating point digits.
 |Currency|Symbol used to represent currencies
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/loadfileinput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/loadfileinput.adoc
index badc41e223..2535bb6bbe 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/loadfileinput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/loadfileinput.adoc
@@ -84,7 +84,8 @@ The fields to load from the file.
 |Name|The name of the imported field.
 |Element|File content or size
 |Type|The data type for this field
-|Format|The format mask
+|Format|The format mask.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|The field length
 |Precision|The precision option depends on the field type, but only Number is 
supported; it returns the number of floating point digits
 |Currency|Symbol used to represent currencies
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/mysqlbulkloader.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/mysqlbulkloader.adoc
index c7f3186a74..eafa2eb19b 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/mysqlbulkloader.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/mysqlbulkloader.adoc
@@ -78,5 +78,7 @@ On the server side the following query should return "ON" 
`show global variables
 * Format as Date (yyyy-MM-dd)
 * Format as a timestamp (yyyy-MM-dd HH:mm:ss)
 * Format as Number (grouping symbol is "," - decimal is ".")
+
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates] for the 
date and number masks.
 * Escape enclosure characters when found
 |===
\ No newline at end of file
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/odata-input.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/odata-input.adoc
index 7dd97a2f19..d2388b784c 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/odata-input.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/odata-input.adoc
@@ -93,6 +93,7 @@ image::transforms/odata-input-fields-tab.png[OData input 
Fields Tab, align="cent
 |OData Path|The JSON property path of the field within the entity JSON object 
(e.g., `UserName`, `AddressInfo/0/City/Name` for nested structures).
 |Type|The Hop data type (String, Integer, Number, Date, Boolean, BigNumber).
 |Format|Optional parsing format for date or numeric fields.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Get Fields|Connects to the `$metadata` endpoint of the OData service and 
automatically populates the fields list based on the selected Entity Set's 
schema properties.
 |===
 
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/propertyinput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/propertyinput.adoc
index 690ecce393..956a2c0edc 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/propertyinput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/propertyinput.adoc
@@ -113,7 +113,8 @@ A unique list is kept in memory that can be used in the 
next workflow action in
 |Name|The name of the output field
 |Column|The attribute to read
 |Type|The data type for the field. This might require conversion if the source 
file does not use the same type. The following options all apply to the result 
after conversion.
-|Format|The format or conversion mask to use in the data type conversion
+|Format|The format or conversion mask to use in the data type conversion.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|The maximum number of characters for the output data type, or -1 for 
no limit.
 |Precision|The number of decimal places used for displaying floating-point 
numbers.
 |Currency|The currency symbol to display for monetary value.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/regexeval.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/regexeval.adoc
index 672a0f8c00..dce56386e8 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/regexeval.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/regexeval.adoc
@@ -98,7 +98,7 @@ The transform will capture the values `Author, Ann` and `53`, 
so you can create
 |Length|Length of the field.
 |Precision|Number of floating point digits for number-type fields.
 |Format|An optional mask for converting the format of the original field.
-See Common Formats for information on common valid date and numeric formats 
you can use in this transform.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Group|A grouping can be a "," (10,000.00 for example) or "." (5.000,00 for 
example)
 |Decimal|The character used as a decimal point.
 |Currency|Currency symbol ($ or € for example)
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/rowgenerator.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/rowgenerator.adoc
index 0842b66e31..fc5c49ae93 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/rowgenerator.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/rowgenerator.adoc
@@ -56,10 +56,34 @@ Examples:
 |Option|Description
 |Transform Name|Name of the transform this name has to be unique in a single 
pipeline
 |Limit|Sets the maximum number of rows you want to generate
-|Fields|This table is where you configure the structure and values of the rows 
you are generating (optional).
+|Fields|Structure and constant values of the generated rows (optional).
+See <<fields-table>>.
 |Never stop generating rows|This option is intended for real-time use cases 
where you never want to stop the running pipeline.
 The output of this transform is then used to drive recurring tasks like 
polling from a file, queue, database, ...
 |Interval in ms|The interval between generated rows in milliseconds.
 |Current row time field name|The *optional *field name for the Date field 
containing the time when the current row was generated
 |Previous row time field name|The *optional *field name for the Date field 
containing the time when the previous row was generated
 |===
+
+[[fields-table]]
+== Fields
+
+Each row in the Fields table defines one output field.
+Every generated pipeline row carries the same constants.
+
+include::../../snippets/field-metadata/field-columns.adoc[]
+
+[options="header"]
+|===
+|Column|Description
+|Name|Name of the generated field.
+|Type|Hop data type.
+The *Value* string is parsed into this type.
+See xref:concepts.adoc#data-types[Data types].
+|===
+
+IMPORTANT: *Value* is a *single* constant, not a comma-separated list.
+`1,2,3` is one string (or a parse error), not three rows.
+*Group* is the thousands separator (`,` in `1,000.00`), not a row group.
+
+To emit several different rows of sample data, use 
xref:pipeline/transforms/datagrid.adoc[Data Grid] instead.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/salesforceinput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/salesforceinput.adoc
index ac0825985e..90c6cb58c9 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/salesforceinput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/salesforceinput.adoc
@@ -166,6 +166,7 @@ The following are the properties display in the Fields tab:
 Select ‘Y’(es) or ‘N’(o).
 |Type|The data type of the field.
 |Format|An optional mask for converting the format of the original field.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length a| The length of the field depends on the following field types:
 
 * Number: Total number of significant figures in a number
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/script.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/script.adoc
index a6cd5e159d..52478896cc 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/script.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/script.adoc
@@ -69,10 +69,60 @@ On Java 17 and later, the JVM no longer includes an 
ECMAScript engine; Hop bundl
 `End`: The script will be executed after the last row was read
 
 |Fields
-|Here you can specify the fields to retrieve from the context of the transform 
script after every row.
+|Fields to retrieve from the transform-script context after every row.
+See <<fields-table>>.
 
 |===
 
+[[fields-table]]
+== Fields table
+
+Each row describes one output field.
+
+[options="header"]
+|===
+|Column|Description
+|Fieldname|Name of the script variable to read after each row.
+|Rename to|Output field name if it should differ from *Fieldname*.
+Leave empty to keep the variable name.
+|Type|Hop data type of the output field.
+See xref:concepts.adoc#data-types[Data types].
+|Length|See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
+|Precision|See xref:pipeline/formatting-values.adoc[Formatting numbers and 
dates].
+|Replace value 'Fieldname' or 'Rename to'|`Y` overwrites an incoming field of 
that name.
+`N` (default) appends a new field.
+|Script result?|`Y`: fill this field with the *return value of the last 
expression* in the transform script, not with a named variable.
+`N` (default): read the script binding named in *Fieldname*.
+Mark at most one field as `Y`.
+|===
+
+=== Script result?
+
+After the transform script runs, Hop evaluates each Fields row:
+
+* *Script result? = N* — the field value is `bindings.get(Fieldname)`, the 
script variable of that name.
+* *Script result? = Y* — the field value is the value returned by the script 
engine (`eval`).
+  In ECMAScript, Groovy and Python that is the value of the last expression in 
the script.
+
+Use *Script result?* when the interesting value is an expression, not a named 
variable.
+
+.ECMAScript — named variable (Script result? = N)
+[source,javascript]
+----
+var total = price * quantity;
+----
+
+Define a field `total` with *Script result?* = `N`.
+
+.ECMAScript — last expression (Script result? = Y)
+[source,javascript]
+----
+price * quantity
+----
+
+Define any field name (for example `total`) with *Script result?* = `Y`.
+The field is filled with the product, even though the script never assigned a 
variable called `total`.
+
 == Variable bindings
 
 To allow you to work with the input field values or the surrounding Java 
ecosystem Hop exposes a bunch of variable bindings.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/selectvalues.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/selectvalues.adoc
index ff6c85e05a..df344a596f 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/selectvalues.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/selectvalues.adoc
@@ -94,22 +94,27 @@ Click `Get fields to change` to import fields from previous 
transforms.
 |Length|The field length
 |Precision|The precision option depends on the field type, but only Number is 
supported; it returns the number of floating point digits
 |Binary to Normal?|Converts a string to a numeric data type, when appropriate
-|Format|The format mask (number type or date format)
+|Format|The format mask (number type or date format).
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Date Format Lenient?|Determines whether the date parser is strict or lenient.
 Leniency means that invalid date values are processed.
 If set to N, only strictly valid date values will be accepted; if set to Y, 
the parser will attempt to determine the intention of an incorrect date, if 
possible, and correct it.
+Do not use Y to hide daylight-saving gaps — see 
xref:pipeline/formatting-values.adoc#string-to-date[String to Date and Date to 
String].
 |Date Locale|Specifies the date locale to use for date conversions and 
calculations.
 Leave blank to use the default encoding on your system or chose from the 
populated this list accordingly.
 |Date Time Zone|Specifies the date time zone to use for date conversions and 
calculations.
-Leave blank to use the default encoding on your system or chose from the 
populated list accordingly.
+Leave blank to use the JVM default (`TimeZone.getDefault()`).
+Set this to `UTC` when the string is a timezone-less UTC timestamp, or include 
`Z` / `X` in the Format mask.
+See xref:pipeline/formatting-values.adoc#string-to-date[String to Date and 
Date to String].
 |Lenient number conversion|When this option is set to Y, numbers get parsed 
until it finds a non-numeric value (e.g. a dash or slash) and stops parsing 
without reporting an error.
 When set to N, numbers get parsed strictly throwing an error in case invalid 
numbers are in the input.
 |Encoding|Specifies the text file encoding to use.
 Leave blank to use the default encoding on your system.
 To use Unicode, specify UTF-8 or UTF-16. On first use, Hop searches your 
system for available encodings and populates this list accordingly.
 |Decimal|A decimal point; this is either a dot or a comma
-|Grouping|A method of separating units of thousands in numbers of four digits 
or larger.
-This is either a dot or a comma.
+|Grouping|Thousands grouping symbol (`.` or `,`).
+This is *not* a row group.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Currency|Symbol used to represent currencies
 |Rounding type|This option allows you to define how Numbers are rounded when 
they are converted to String.
 This happens when previewing the data, but also when data is bulk loaded or 
converted to a string in scripts.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/setvalueconstant.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/setvalueconstant.adoc
index 1019f07de9..3137ea0a44 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/setvalueconstant.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/setvalueconstant.adoc
@@ -50,6 +50,6 @@ The Set Field Value To A Constant transform replaces the 
value of a field with a
 |Field|Specify the field that contains the value you want to replace.
 |Replace by value|Specify the value that will replace the original field value 
specified.
 |Conversion mask (Date)|Specify a date format for the replaced field.
-See Common Formats for information on common valid date formats you can use in 
this transform.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Set empty string?|Specify Y to allow an empty string when the value is empty; 
otherwise, a null value is used.
 |===
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/switchcase.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/switchcase.adoc
index e1211434c5..78e5d4230c 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/switchcase.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/switchcase.adoc
@@ -52,9 +52,10 @@ In our case we route rows of data to one or more target 
transforms based on the
 |Use string contains comparison|If checked, the comparison will be true if the 
value is found anywhere in the field being tested.
 Unchecked and the value has to exactly match the field.
 |Case value data type|The data type of the values specified in this dialog
-|Case value conversion mask|The conversion mask of the values specified in 
this dialog (numeric / date values)
+|Case value conversion mask|The conversion mask of the values specified in 
this dialog (numeric / date values).
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Case value decimal symbol|The decimal symbol of the values specified in this 
dialog (numeric values)
-|Case value grouping symbol|The grouping symbol of the values specified in 
this dialog (numeric values)
+|Case value grouping symbol|The thousands grouping symbol of the values 
specified in this dialog (numeric values), not a row group.
 |Case values|Here you can specify a value-target transform pair, one per row.
 To specify a null value, simply leave the value column blank while entering a 
target transform.
 Please note that it is possible to specify the same target transform more than 
once.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileinput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileinput.adoc
index bcc785786a..c63824b22e 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileinput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileinput.adoc
@@ -221,76 +221,32 @@ Available options include:
 |Schema Definition|Name of the 
xref:metadata-types/static-schema-definition.adoc[Schema Definition] that we 
want to reference.
 |Name|Name of the field to include in the output.
 |Type|Data type for the field. This can be either String, Date or Number
-|Format|See Number Formats for a complete description of format symbols.
+|Format|Number or date pattern.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Position|This is needed when processing the 'Fixed' filetype.
 It is zero based, so the first character starts with position 0.
 |Length|For Number: Total number of significant figures in a number; For 
String: total length of string; For Date: length of printed output of the 
string (e.g. 4 only gives back the year).
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Precision|For Number: The number of floating point digits displayed
 |Currency|Used to interpret monetary values like $10,000.00 or E5.000,00
 |Decimal|The character used as the decimal point for numbers. Typically a "." 
(10,000.00) or "," (5.000,00)
-|Grouping|A character used as a thousands separator for numbers. Typically a 
"," (10,000.00) or "." (5.000,00)
+|Grouping|A character used as a thousands separator for numbers. Typically a 
"," (10,000.00) or "." (5.000,00).
+This is *not* a row group.
 |Null if|Specify a value that will be replaced with a null value in the output.
 |Default|Default value in case the field in the text file was not specified 
(empty)
 |Trim type|Specify how whitespace is trimmed from the value in the column. 
This can be left (removes leading spaces), right (removes trailing spaces), 
both, or none.
 |Repeat|If the corresponding value in this row is empty, repeat the one from 
the last row when it was not empty.
 |===
 
-**Number Formats**
+==== Number formats
 
-The information below on Number formats was taken from the Sun Java API 
documentation, located at 
http://java.sun.com/j2se/1.4.2/docs/api/java/text/DecimalFormat.html.
-For further information on valid numeric formats used in this transform, view 
the Number Formatting Table.
+include::../../snippets/field-metadata/number-format-symbols.adoc[]
 
-[options="header"]
-|===
-|Symbol|Location|Localized|Meaning
-|0|Number|Yes|Digit
-|#|Number|Yes|Digit, zero shows as absent
-|.|Number|Yes|Decimal separator or monetary decimal separator
-|-|Number|Yes|Minus sign
-|,|Number|Yes|Grouping separator
-|E|Number|Yes|Separates mantissa and exponent in scientific notation; need not 
be quoted in prefix or suffix
-|;|Sub pattern boundary|Yes|Separates positive and negative sub patterns
-|%|Prefix or suffix|Yes|Multiply by 100 and show as percentage
-|\u2030|Prefix or suffix|Yes|Multiply by 1000 and show as per mille
-|€ (\u00A4)|Prefix or suffix|No|Currency sign, replaced by currency symbol.
-If doubled, replaced by international currency symbol.
-If present in a pattern, the monetary decimal separator is used instead of the 
decimal separator.
-|'|Prefix or suffix|No|Used to quote special characters in a prefix or suffix, 
for example, "'#'#" formats 123 to "#123".
-To create a single quote itself, use two in a row: "# o''clock".
-|===
-
-**Scientific Notation**
-
-In a pattern, the exponent character immediately followed by one or more digit 
characters indicates scientific notation (for example, "0.###E0" formats the 
number 1234 as "1.234E3".
+==== Date formats
 
-**Date formats**
+include::../../snippets/field-metadata/date-format-symbols.adoc[]
 
-The information on Date formats was taken from the Sun Java API documentation, 
located at:
-
-http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html.
-For further information on valid date formats used in this transform, view the 
Date Formatting Table.
-
-[options="header"]
-|===
-|Letter|Date or Time Component|Presentation|Examples
-|M|Month in year|Month|July; Jul; 07
-|w|Week in year|Number|27
-|W|Week in month|Number|2
-|D|Day in year|Number|189
-|d|Day in month|Number|10
-|F|Day of week in month|Number|2
-|E|Day in week|Text|Tuesday; Tue
-|a|Am/pm marker|Text|PM
-|H|Hour in day (0-23)|Number 0|
-|k|Hour in day (1-24)|Number 24|
-|K|Hour in am/pm (0-11)|Number 0|
-|h|Hour in am/pm (1-12)|Number 12|
-|m|Minute in hour|Number 30|
-|s|Second in minute|Number 55|
-|S|Millisecond|Number 978|
-|z|Time zone|General time zone|Pacific Standard Time; PST; GMT-08:00
-|Z|Time zone|RFC 822 time zone|-0800
-|===
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates] for 
Decimal, Group, Currency, Length, Precision and worked examples.
 
 == Additional Output Fields Tab
 
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileoutput.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileoutput.adoc
index 9e4e8b5756..787ccbb445 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileoutput.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/textfileoutput.adoc
@@ -131,6 +131,7 @@ The table below describes each of the options for 
configuring the field properti
 |Name|The name of the field.
 |Type|Data type of the field. This can be either String, Date or Number.
 |Format|Select a format to apply to the field value. Only applies to numbers 
and dates.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length a| The length option depends on the field type:
 
 * Number - Total number of significant figures in a number
@@ -139,7 +140,8 @@ The table below describes each of the options for 
configuring the field properti
 |Precision |For numbers, specifies the number of floating point digits
 |Currency|Symbol used to represent currencies, such as dollars ($10,000.00) or 
Euros (E5.000,00)
 |Decimal|The character used to represent the decimal point in a floating-point 
number. A decimal point can be a "." (10,000.00) or "," (5.000,00).
-|Group|The character used to represent the thousands separator in numbers. 
This can be a "," (10,000.00) or "." (5.000,00)
+|Group|The thousands separator in numbers. This can be a "," (10,000.00) or 
"." (5.000,00).
+This is *not* a row group.
 |Trim type|The trimming method used to remove blank spaces from string values. 
This can be left (removes leading spaces), right (removes trailing spaces), 
both, or none.
 
 Note: Trimming only works when there is no field length given. 
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/userdefinedjavaexpression.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/userdefinedjavaexpression.adoc
index bc0c3e9258..7846503808 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/userdefinedjavaexpression.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/userdefinedjavaexpression.adoc
@@ -80,6 +80,7 @@ If you want to overwrite an existing field, you need to 
define the same field he
 |Java expression|The Java expression to evaluate. See examples below.
 |Value type|The field's data type.
 |Length|The maximum length of a string in the new field.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Precision|The number of decimal places used to express numbers.
 |Replace value|Set this to be identical to the "New field" name when you want 
to replace the value in an existing field.
 |===
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/validator.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/validator.adoc
index 2887dc1975..d7d8fecd88 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/validator.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/validator.adoc
@@ -85,13 +85,14 @@ Once you select a validation on the left hand side of the 
dialog you can specify
 |The data type that the input field needs to have
 
 |Conversion mask
-|The expected conversion mask
+|The expected conversion mask.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 
 |Decimal symbol
 |The expected decimal symbol
 
 |Grouping symbol
-|The expected decimal symbol
+|The expected thousands grouping symbol, not a row group.
 
 |Null allows?
 |Disable this if null values are not allows
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutput.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutput.adoc
index 921eb24b96..7172629c61 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutput.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutput.adoc
@@ -80,7 +80,8 @@ This encoding is specified in the header of the XML file.
 |Elementname|The name of the element in the XML file to use.
 |Content Type| Is the field an attribute or Element
 |Type|Type of the field can be either String, Date, or Number.
-|Format| The format mask used to convert the values
+|Format| The format mask used to convert the values.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length a|The length option depends on the field type follows:
 
 * Number - Total number of significant figures in a number
@@ -95,7 +96,8 @@ This encoding is specified in the header of the XML file.
 
 |Currency|Symbol used to represent currencies such as $10,000.00 or E5.000,00
 |Decimal|A decimal point can be a "." (10,000.00) or "," (5.000,00)
-|Group|A grouping can be a "," (10,000.00) or "." (5.000,00)
+|Group|A thousands grouping symbol can be a "," (10,000.00) or "." (5.000,00).
+This is *not* a row group.
 |Null|If the value of the field is null, insert this string into the textfile
 |Get fields|Click to retrieve the list of fields from the input stream(s).
 |Minimal width|Alter the options in the fields tab in such a way that the 
resulting width of lines in the text file is minimal; for example instead of 
save 0000001, "1" is written, and so on.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutputadvanced.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutputadvanced.adoc
index ea8f830a56..cd4fc48e9d 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutputadvanced.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/xmloutputadvanced.adoc
@@ -65,6 +65,7 @@ The dialog is organized into three tabs: *File*, *Content* 
and *XML Tree*.
 |Include time in filename|Append the system time (`HHmmss`) to the filename.
 |Specify custom date/time format|Use a custom date/time pattern instead of the 
date/time toggles above.
 |Date/time format|Java `SimpleDateFormat` pattern, used when the custom format 
toggle is on.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Split every N rows|Maximum rows per file before rolling over to a new split, 
or per completed XML field segment when *Output* includes an XML field. `0` = 
no splitting.
 |Zip output file|Wrap each output file in a zip archive (one entry per file). 
Generated XSDs are written next to the archive, not inside it.
 |Do not open new file at start|Defer file creation until the first input row 
is received.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/yamlinput.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/yamlinput.adoc
index 02f70bcb50..85860805db 100644
--- a/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/yamlinput.adoc
+++ b/docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/yamlinput.adoc
@@ -85,6 +85,7 @@ The YAML Input transform reads data from YAML structures, 
files or incoming fiel
 |Key|The key to the element.
 |Type|The data type to convert to.
 |Format|The format or conversion mask to use in the data type conversion.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
 |Length|The length of the output data type.
 |Precision|The precision of the output data type.
 |Currency|The currency symbol to use during data type conversion.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/date-format-symbols.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/date-format-symbols.adoc
new file mode 100644
index 0000000000..c665fe19f9
--- /dev/null
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/date-format-symbols.adoc
@@ -0,0 +1,55 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+  http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+////
+
+Date and timestamp format masks follow Java `SimpleDateFormat`.
+See the 
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/text/SimpleDateFormat.html[Java
 21 SimpleDateFormat] documentation for the full pattern language.
+
+[options="header"]
+|===
+|Letter|Date or Time Component|Presentation|Examples
+|G|Era designator|Text|AD
+|y|Year|Year|1996; 96
+|Y|Week year|Year|2009; 09
+|M|Month in year|Month|July; Jul; 07
+|w|Week in year|Number|27
+|W|Week in month|Number|2
+|D|Day in year|Number|189
+|d|Day in month|Number|10
+|F|Day of week in month|Number|2
+|E|Day name in week|Text|Tuesday; Tue
+|u|Day number of week (1 = Monday)|Number|1
+|a|Am/pm marker|Text|PM
+|H|Hour in day (0-23)|Number|0
+|k|Hour in day (1-24)|Number|24
+|K|Hour in am/pm (0-11)|Number|0
+|h|Hour in am/pm (1-12)|Number|12
+|m|Minute in hour|Number|30
+|s|Second in minute|Number|55
+|S|Millisecond|Number|978
+|z|Time zone|General time zone|Pacific Standard Time; PST; GMT-08:00
+|Z|Time zone|RFC 822 time zone|-0800
+|X|Time zone|ISO 8601 time zone|-08; -0800; -08:00
+|===
+
+A `Date` value has millisecond precision.
+A `Timestamp` value can carry nanoseconds; the format mask still uses the 
`SimpleDateFormat` letters above, so only milliseconds (`S`) are expressed in 
the mask.
+See xref:concepts.adoc#data-types[Data types] for how Timestamp conversions 
work.
+
+`z`, `Z` and `X` put a time zone or offset in the string.
+Without them, Hop reads and writes wall-clock time in the field's Date Time 
Zone (or the JVM default).
+That is where daylight-saving gaps and overlaps show up.
+See xref:pipeline/formatting-values.adoc#string-to-date[String to Date and 
Date to String].
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/field-columns.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/field-columns.adoc
new file mode 100644
index 0000000000..0fa8423835
--- /dev/null
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/field-columns.adoc
@@ -0,0 +1,45 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+  http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+////
+
+The columns below appear on many field tables.
+They are xref:pipeline/formatting-values.adoc[field metadata]: they control 
how Hop converts a string to a typed value, and how a typed value is written 
back to a string.
+They do *not* change the value stored in a database.
+
+[options="header"]
+|===
+|Column|Description
+|Format / Conversion mask|Number or date pattern used to parse and print the 
value.
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates].
+|Length|String: maximum characters.
+Number / BigNumber: significant digits.
+Integer: display width (leading zeros when writing).
+Date: length of the printed string (for example `4` prints only the year).
+Use `-1` when unset.
+|Precision|Decimal digits after the radix for Number and BigNumber.
+Not used for String, Date or Boolean.
+|Decimal|Character that separates the integer and fractional parts.
+`.` in `10,000.00` (US) or `,` in `10.000,00` (DE).
+|Group / Grouping|Thousands grouping symbol.
+`,` in `10,000.00` (US) or `.` in `10.000,00` (DE).
+This is *not* a row group or category.
+|Currency|Optional currency symbol used when the format mask contains a 
currency sign (`¤`).
+Examples: `$`, `€`.
+|Value|A *single* constant, entered as a string and parsed with Type, Format, 
Decimal, Group and Currency.
+Not a comma-separated list of values.
+Use xref:pipeline/transforms/datagrid.adoc[Data Grid] when you need several 
different rows.
+|Set empty string?|When the constant is empty, emit an empty string (`""`) 
instead of `null`.
+|===
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/number-format-symbols.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/number-format-symbols.adoc
new file mode 100644
index 0000000000..beb820d264
--- /dev/null
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/field-metadata/number-format-symbols.adoc
@@ -0,0 +1,41 @@
+////
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+  http://www.apache.org/licenses/LICENSE-2.0
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+////
+
+Number format masks follow Java `DecimalFormat`.
+See the 
https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/text/DecimalFormat.html[Java
 21 DecimalFormat] documentation for the full pattern language.
+
+[options="header"]
+|===
+|Symbol|Location|Localized|Meaning
+|0|Number|Yes|Digit
+|#|Number|Yes|Digit, zero shows as absent
+|.|Number|Yes|Decimal separator or monetary decimal separator
+|-|Number|Yes|Minus sign
+|,|Number|Yes|Grouping separator
+|E|Number|Yes|Separates mantissa and exponent in scientific notation; need not 
be quoted in prefix or suffix
+|;|Sub pattern boundary|Yes|Separates positive and negative sub patterns
+|%|Prefix or suffix|Yes|Multiply by 100 and show as percentage
+|\u2030|Prefix or suffix|Yes|Multiply by 1000 and show as per mille
+|¤ (`\u00A4`)|Prefix or suffix|No|Currency sign, replaced by the currency 
symbol.
+If doubled, replaced by the international currency symbol.
+If present in a pattern, the monetary decimal separator is used instead of the 
decimal separator.
+|'|Prefix or suffix|No|Used to quote special characters in a prefix or suffix, 
for example, `'#'#` formats 123 to `#123`.
+To create a single quote itself, use two in a row: `# o''clock`.
+|===
+
+In a pattern, the exponent character immediately followed by one or more digit 
characters indicates scientific notation.
+For example, `0.###E0` formats the number 1234 as `1.234E3`.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-concepts/columninfo-wiget-defaults.adoc
 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-concepts/columninfo-wiget-defaults.adoc
deleted file mode 100644
index 61f16f0758..0000000000
--- 
a/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-concepts/columninfo-wiget-defaults.adoc
+++ /dev/null
@@ -1,31 +0,0 @@
-////
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-  http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-////
-Some transforms share a common field information panel. That panel allows a 
user to modify metadata about the way information is stored or handled by the 
particular
-transform on canvas, but it will also set the expectation for how it is 
presented or output by other transforms.
-
-New Field  - What an output name should be for a field sent out from the step.
-Type - What type (String, Integer, Numeric, etc.) for the field being sent out 
from the step.
-Length - Usually for Strings, but if you specify a length for an integer it 
will have a padding effect of prepending 0s until the int is long enough.
-Precision - Usually for Numerics in steps that care about significant digits 
after a decimal point.
-Format - Used frequently to give dates, or numerics, even currency a format. 
It obeys, 
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html and
-supports common number formats. (find link for that standard).
-Group - is used to specify which character is used for separating thousands in 
the output - i.e commas in the US (1,000) and periods in Germany (1.000)
-Decimal - is the character that should be used as a dividing marker between 
whole numbers on the left and fractioal parts on the right i.e. 1,000.10 in the 
US
-and 1.000,10 in Germany.
-Currency - Hanging around, but not used by many transforms. Need to know which 
one as an example.
-Nullif - What value should be written in for a field if it came back as <null>
-Default - What value should be given the field in case it was empty.
diff --git 
a/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-concepts/data-types.adoc 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-concepts/data-types.adoc
index b588a4390b..d1261b8e5b 100644
--- 
a/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-concepts/data-types.adoc
+++ 
b/docs/hop-user-manual/modules/ROOT/pages/snippets/hop-concepts/data-types.adoc
@@ -15,6 +15,7 @@ specific language governing permissions and limitations
 under the License.
 ////
 
+[[data-types]]
 == Data types
 
 As a best practice for producing consistent, predictable outcomes when working 
with your data in Apache Hop, you must consider how the Apache Hop engine 
processes different data types and field metadata in transformations and jobs.
@@ -50,10 +51,10 @@ NOTE: Apache Hop also comes with a number of additional 
complex data types (e.g.
 - When converting from a String to another type, Hop uses the format settings 
defined in the transform metadata (for example, date masks, decimal symbols, 
and grouping characters).
 - When converting from another type to a String, Hop applies the same 
metadata-based format.
 
-For these reasons, it is important to be explicit about formats when working 
with String types.
-A common issue arises with decimal separators, which may differ between 
environments.
-For example, an EU locale typically uses `,` for decimals, while a US locale 
uses `.`.
-Using an explicit format avoids these inconsistencies.
+Be explicit about formats when working with String types.
+A common issue is the decimal separator, which differs between environments: 
an EU locale typically uses `,`, a US locale uses `.`.
+
+See xref:pipeline/formatting-values.adoc[Formatting numbers and dates] for 
Format, Length, Precision, Decimal, Group and Currency.
 
 === Timestamp
 
diff --git a/docs/hop-user-manual/modules/ROOT/templates/template-plugin.adoc 
b/docs/hop-user-manual/modules/ROOT/templates/template-plugin.adoc
index 081d2416c4..8e5e6abf89 100644
--- a/docs/hop-user-manual/modules/ROOT/templates/template-plugin.adoc
+++ b/docs/hop-user-manual/modules/ROOT/templates/template-plugin.adoc
@@ -19,3 +19,8 @@ under the License.
 
 *This is a template document*
 
+Document every option that is visible in the dialog.
+
+* Every table column in the dialog needs a row in the Options table. 
One-liners are fine.
+* Shared field-metadata columns (Format, Length, Precision, Decimal, Group, 
Currency, Value) are explained once in 
xref:pipeline/formatting-values.adoc[Formatting numbers and dates]. Link there 
instead of re-explaining them.
+* If you add a new column to a dialog, add the Options row and a column-header 
tooltip in the same change.
diff --git 
a/plugins/tech/google/src/main/java/org/apache/hop/pipeline/transforms/googlesheets/GoogleSheetsInputDialog.java
 
b/plugins/tech/google/src/main/java/org/apache/hop/pipeline/transforms/googlesheets/GoogleSheetsInputDialog.java
index 2683553de7..5b9640c68f 100644
--- 
a/plugins/tech/google/src/main/java/org/apache/hop/pipeline/transforms/googlesheets/GoogleSheetsInputDialog.java
+++ 
b/plugins/tech/google/src/main/java/org/apache/hop/pipeline/transforms/googlesheets/GoogleSheetsInputDialog.java
@@ -455,6 +455,15 @@ public class GoogleSheetsInputDialog extends 
BaseTransformDialog {
               ColumnInfo.COLUMN_TYPE_CCOMBO,
               ValueMetaBase.trimTypeDesc)
         };
+    columnInformation[0].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Name.Tooltip"));
+    columnInformation[1].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Type.Tooltip"));
+    columnInformation[2].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Format.Tooltip"));
+    columnInformation[3].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Length.Tooltip"));
+    columnInformation[4].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Precision.Tooltip"));
+    columnInformation[5].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Currency.Tooltip"));
+    columnInformation[6].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Decimal.Tooltip"));
+    columnInformation[7].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Group.Tooltip"));
+    columnInformation[8].setToolTip(BaseMessages.getString(PKG, 
"System.Column.TrimType.Tooltip"));
 
     wFields =
         new TableView(
diff --git 
a/plugins/transforms/constant/src/main/java/org/apache/hop/pipeline/transforms/constant/ConstantDialog.java
 
b/plugins/transforms/constant/src/main/java/org/apache/hop/pipeline/transforms/constant/ConstantDialog.java
index 3bb3a7e759..e5510cbb0f 100644
--- 
a/plugins/transforms/constant/src/main/java/org/apache/hop/pipeline/transforms/constant/ConstantDialog.java
+++ 
b/plugins/transforms/constant/src/main/java/org/apache/hop/pipeline/transforms/constant/ConstantDialog.java
@@ -129,6 +129,17 @@ public class ConstantDialog extends BaseTransformDialog {
               BaseMessages.getString(PKG, SYSTEM_COMBO_YES),
               BaseMessages.getString(PKG, "System.Combo.No")
             });
+    colinf[0].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Name.Column.Tooltip"));
+    colinf[1].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Type.Column.Tooltip"));
+    colinf[2].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Format.Column.Tooltip"));
+    colinf[3].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Length.Column.Tooltip"));
+    colinf[4].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Precision.Column.Tooltip"));
+    colinf[5].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Currency.Column.Tooltip"));
+    colinf[6].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Decimal.Column.Tooltip"));
+    colinf[7].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Group.Column.Tooltip"));
+    colinf[8].setToolTip(BaseMessages.getString(PKG, 
"ConstantDialog.Value.Column.Tooltip"));
+    colinf[9].setToolTip(
+        BaseMessages.getString(PKG, 
"ConstantDialog.Value.SetEmptyString.Tooltip"));
 
     wFields =
         new TableView(
diff --git 
a/plugins/transforms/constant/src/main/resources/org/apache/hop/pipeline/transforms/constant/messages/messages_en_US.properties
 
b/plugins/transforms/constant/src/main/resources/org/apache/hop/pipeline/transforms/constant/messages/messages_en_US.properties
index d5db357cec..9884451d84 100644
--- 
a/plugins/transforms/constant/src/main/resources/org/apache/hop/pipeline/transforms/constant/messages/messages_en_US.properties
+++ 
b/plugins/transforms/constant/src/main/resources/org/apache/hop/pipeline/transforms/constant/messages/messages_en_US.properties
@@ -30,19 +30,29 @@ Constant.CheckResult.SpecifyTypeError=Please specify the 
value type of field [{0
 Constant.Log.LineNr=LineNr : {0}
 Constant.Log.Wrote.Row=Wrote row {0} : {1}
 ConstantDialog.Currency.Column=Currency
+ConstantDialog.Currency.Column.Tooltip=Optional currency symbol used when the 
format mask contains a currency sign. Examples\: $, \u20AC.
 ConstantDialog.Decimal.Column=Decimal
+ConstantDialog.Decimal.Column.Tooltip=Character that separates the integer and 
fractional parts. Example\: . in 10,000.00 (US) or , in 10.000,00 (DE).
 ConstantDialog.DialogTitle=Add constants
 ConstantDialog.Fields.Label=Fields :
 ConstantDialog.Format.Column=Format
+ConstantDialog.Format.Column.Tooltip=Number or date pattern used to parse the 
Value string (Java DecimalFormat or SimpleDateFormat).
 ConstantDialog.Group.Column=Group
+ConstantDialog.Group.Column.Tooltip=Thousands grouping symbol (for example , 
in 1,000.00 or . in 1.000,00). Not a row group.
 ConstantDialog.Length.Column=Length
+ConstantDialog.Length.Column.Tooltip=String\: max characters. Number\: 
significant digits. Integer\: display width. Date\: printed length. -1 = unset.
 ConstantDialog.Name.Column=Name
+ConstantDialog.Name.Column.Tooltip=Name of the constant field added to every 
input row.
 ConstantDialog.NoFieldName.Message=Row(s) {0} have a value but no field 
name.\n\nA constant without a name can''t be added to the output rows. Please 
give it a name or clear the row.
 ConstantDialog.NoFieldName.Title=Missing field name
 ConstantDialog.Precision.Column=Precision
+ConstantDialog.Precision.Column.Tooltip=Decimal digits after the radix for 
Number and BigNumber. Unused for String, Date and Boolean.
 ConstantDialog.Type.Column=Type
+ConstantDialog.Type.Column.Tooltip=Hop data type of the constant. The Value 
string is parsed into this type.
 ConstantDialog.Value.Column=Value
+ConstantDialog.Value.Column.Tooltip=A single constant value for this field, 
parsed using Type and Format. Not a comma-separated list.
 ConstantDialog.Value.SetEmptyString=Set empty string?
+ConstantDialog.Value.SetEmptyString.Tooltip=Y\: emit an empty string instead 
of null when the constant is empty.
 ConstantMeta.CheckResult.FieldsReceived=Transform is connected to previous 
one, receiving {0} fields
 ConstantMeta.CheckResult.NoFields=Couldn''t find fields from previous 
transforms, check the hops...\!
 ConstantMeta.Injection.Currency.Field=Currency
diff --git 
a/plugins/transforms/getvariable/src/main/java/org/apache/hop/pipeline/transforms/getvariable/GetVariableDialog.java
 
b/plugins/transforms/getvariable/src/main/java/org/apache/hop/pipeline/transforms/getvariable/GetVariableDialog.java
index 5e2e20c8de..7ac38d8743 100644
--- 
a/plugins/transforms/getvariable/src/main/java/org/apache/hop/pipeline/transforms/getvariable/GetVariableDialog.java
+++ 
b/plugins/transforms/getvariable/src/main/java/org/apache/hop/pipeline/transforms/getvariable/GetVariableDialog.java
@@ -133,6 +133,14 @@ public class GetVariableDialog extends BaseTransformDialog 
{
 
     colinf[1].setToolTip(BaseMessages.getString(PKG, 
"GetVariableDialog.VariableColumn.Tooltip"));
     colinf[1].setUsingVariables(true);
+    colinf[2].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Type.Tooltip"));
+    colinf[3].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Format.Tooltip"));
+    colinf[4].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Length.Tooltip"));
+    colinf[5].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Precision.Tooltip"));
+    colinf[6].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Currency.Tooltip"));
+    colinf[7].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Decimal.Tooltip"));
+    colinf[8].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Group.Tooltip"));
+    colinf[9].setToolTip(BaseMessages.getString(PKG, 
"System.Column.TrimType.Tooltip"));
 
     wFields =
         new TableView(
diff --git 
a/plugins/transforms/rowgenerator/src/main/java/org/apache/hop/pipeline/transforms/rowgenerator/RowGeneratorDialog.java
 
b/plugins/transforms/rowgenerator/src/main/java/org/apache/hop/pipeline/transforms/rowgenerator/RowGeneratorDialog.java
index 7a6a06f7b0..8569706bbd 100644
--- 
a/plugins/transforms/rowgenerator/src/main/java/org/apache/hop/pipeline/transforms/rowgenerator/RowGeneratorDialog.java
+++ 
b/plugins/transforms/rowgenerator/src/main/java/org/apache/hop/pipeline/transforms/rowgenerator/RowGeneratorDialog.java
@@ -234,6 +234,16 @@ public class RowGeneratorDialog extends 
BaseTransformDialog {
               BaseMessages.getString(PKG, CONST_SYSTEM_COMBO_YES),
               BaseMessages.getString(PKG, "System.Combo.No"))
         };
+    colinf[0].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Name.Tooltip"));
+    colinf[1].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Type.Tooltip"));
+    colinf[2].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Format.Tooltip"));
+    colinf[3].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Length.Tooltip"));
+    colinf[4].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Precision.Tooltip"));
+    colinf[5].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Currency.Tooltip"));
+    colinf[6].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Decimal.Tooltip"));
+    colinf[7].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Group.Tooltip"));
+    colinf[8].setToolTip(BaseMessages.getString(PKG, 
"System.Column.Value.Tooltip"));
+    colinf[9].setToolTip(BaseMessages.getString(PKG, 
"System.Column.SetEmptyString.Tooltip"));
 
     wFields =
         new TableView(
diff --git 
a/plugins/transforms/script/src/main/java/org/apache/hop/pipeline/transforms/script/ScriptDialog.java
 
b/plugins/transforms/script/src/main/java/org/apache/hop/pipeline/transforms/script/ScriptDialog.java
index 26482733a1..9ef7ffc812 100644
--- 
a/plugins/transforms/script/src/main/java/org/apache/hop/pipeline/transforms/script/ScriptDialog.java
+++ 
b/plugins/transforms/script/src/main/java/org/apache/hop/pipeline/transforms/script/ScriptDialog.java
@@ -308,6 +308,8 @@ public class ScriptDialog extends BaseTransformDialog {
             BaseMessages.getString(PKG, "ScriptDialog.ColumnInfo.ReturnValue"),
             ColumnInfo.COLUMN_TYPE_CCOMBO,
             YES_NO_COMBO);
+    scriptResultColumn.setToolTip(
+        BaseMessages.getString(PKG, 
"ScriptDialog.ColumnInfo.ReturnValue.Tooltip"));
 
     ColumnInfo[] colinf =
         new ColumnInfo[] {
@@ -337,6 +339,12 @@ public class ScriptDialog extends BaseTransformDialog {
               YES_NO_COMBO),
           scriptResultColumn,
         };
+    colinf[0].setToolTip(BaseMessages.getString(PKG, 
"ScriptDialog.ColumnInfo.Filename.Tooltip"));
+    colinf[1].setToolTip(BaseMessages.getString(PKG, 
"ScriptDialog.ColumnInfo.RenameTo.Tooltip"));
+    colinf[2].setToolTip(BaseMessages.getString(PKG, 
"ScriptDialog.ColumnInfo.Type.Tooltip"));
+    colinf[3].setToolTip(BaseMessages.getString(PKG, 
"ScriptDialog.ColumnInfo.Length.Tooltip"));
+    colinf[4].setToolTip(BaseMessages.getString(PKG, 
"ScriptDialog.ColumnInfo.Precision.Tooltip"));
+    colinf[5].setToolTip(BaseMessages.getString(PKG, 
"ScriptDialog.ColumnInfo.Replace.Tooltip"));
 
     wFields =
         new TableView(
diff --git 
a/plugins/transforms/script/src/main/resources/org/apache/hop/pipeline/transforms/script/messages/messages_en_US.properties
 
b/plugins/transforms/script/src/main/resources/org/apache/hop/pipeline/transforms/script/messages/messages_en_US.properties
index 1d69a99be7..150116490a 100644
--- 
a/plugins/transforms/script/src/main/resources/org/apache/hop/pipeline/transforms/script/messages/messages_en_US.properties
+++ 
b/plugins/transforms/script/src/main/resources/org/apache/hop/pipeline/transforms/script/messages/messages_en_US.properties
@@ -33,12 +33,19 @@ Script.Script1=Script 1
 ScriptDialog.AddCopy=Add copy
 ScriptDialog.AddNewTab=Add new
 ScriptDialog.ColumnInfo.Filename=Fieldname
+ScriptDialog.ColumnInfo.Filename.Tooltip=Script variable to read after each 
row.
 ScriptDialog.ColumnInfo.Length=Length
+ScriptDialog.ColumnInfo.Length.Tooltip=String\: max characters. Number\: 
significant digits. Integer\: display width. Date\: printed length. -1 = unset.
 ScriptDialog.ColumnInfo.Precision=Precision
+ScriptDialog.ColumnInfo.Precision.Tooltip=Decimal digits after the radix for 
Number and BigNumber. Unused for String, Date and Boolean.
 ScriptDialog.ColumnInfo.RenameTo=Rename to
+ScriptDialog.ColumnInfo.RenameTo.Tooltip=Output field name if it should differ 
from Fieldname.
 ScriptDialog.ColumnInfo.Replace=Replace value ''Fieldname'' or ''Rename to''
+ScriptDialog.ColumnInfo.Replace.Tooltip=Y\: overwrite an incoming field of 
that name. N\: append a new field.
 ScriptDialog.ColumnInfo.ReturnValue=Script result?
+ScriptDialog.ColumnInfo.ReturnValue.Tooltip=Y\: fill this field with the 
return value of the last expression in the script. N\: read the script variable 
named in Fieldname.
 ScriptDialog.ColumnInfo.Type=Type
+ScriptDialog.ColumnInfo.Type.Tooltip=Hop data type of the output field.
 ScriptDialog.CompiledScriptOK.DialogMessage=This script compiled without 
problems.
 ScriptDialog.CompiledScriptOK.DialogTitle=OK
 ScriptDialog.ConfirmDeleteItem.Label=Do you really want to delete {0} ?

Reply via email to