From 64e16127008b2a6ff91e0a6b6cc714ac7721b19f Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 9 Apr 2026 18:41:17 +0200 Subject: [PATCH 01/12] all xml done --- docs/commands/theme/XML.md | 60 ++++++++++++++++++++++++++++++++ docs/commands/theme/XML_DOM.md | 62 ++++++++++++++++++++++++++++++++++ docs/commands/theme/XML_SAX.md | 31 +++++++++++++++++ 3 files changed, 153 insertions(+) diff --git a/docs/commands/theme/XML.md b/docs/commands/theme/XML.md index ca199ba7db0504..c4cac82e9e7d1d 100644 --- a/docs/commands/theme/XML.md +++ b/docs/commands/theme/XML.md @@ -5,6 +5,66 @@ sidebar_label: XML slug: /commands/theme/XML --- +## Overview of XML Commands + +:::note + +For XML support, 4D uses a library named Xerces.dll developed by the Apache Foundation company. + +::: + + +### XML, DOM, and SAX + +The **XML** theme groups together the generic XML "utilities" commands of 4D. These are option- and error-management commands. + +4D also offers two separate sets of XML commands: [DOM](../theme/XML_DOM.md) (Document Object Model) and [SAX](../theme/XML_SAX.md) (Simple API XML) are two different parsing modes for XML documents. + +- The DOM mode parses an XML source and builds its structure (its "tree") in memory. Because of this, access to each element of the source is extremely fast. However, since the entire tree structure is stored in memory, the processing of large XML documents may lead to the memory capacity being exceeded and thus provoke errors. +- The SAX mode does not build a tree structure in memory. In this mode, "events" (such as the start and end of an element) are generated when parsing the source. This mode lets you parse XML documents of any size, regardless of the amount of memory available. + +#### See also + +http://www.saxproject.org/?selected=event
+http://www.w3schools.com/xml/ + +### Preemptive mode + +XML references created by a [preemptive process](../../Develop/preemptive.md) can only be used in that specific process. Conversely, XML references created by a cooperative process can be used by any other cooperative process, but cannot be used by any preemptive process. + + +### Character Sets + +The following character sets are supported by the XML DOM and XML SAX commands of 4D: + +- ASCII +- UTF-8 +- UTF-16 (Big/Small Endian) +- UCS4 (Big/Small Endian) +- EBCDIC code pages IBM037, IBM1047 and IBM1140 encodings, +- ISO-8859-1 (or Latin1) +- Windows-1252. + + +### Glossary + +This non-exhaustive list details the main XML concepts used by the commands and functions of 4D. + +- **Attribute**: an XML sub-tag associated with an element. An attribute always contains a name and a value. +- **Child**: In an XML structure, an element in a level directly below another. +- **DTD**: *Document Type Declaration*. The DTD records the set of specific rules and properties that the XML must follow. These rules define, more particularly, the name and content of each tag as well as its context. This formalization of the elements can be used to check whether an XML document is in compliance (in which case, it is declared “valid”). The DTD may be included in the XML document (internal DTD) or in a separate document (external DTD). Note that the DTD is not mandatory. +- **Element**: an XML tag. An element always contains a name and a value. Optionally, an element may contain attributes. +- **ElementRef**: XML reference used by the 4D XML commands to specify an XML structure. This reference is made up of 8 coded characters in hexadecimal form, which means that its length is 32 characters on a 64-bit system. It is recommended to declare XML references as Text. +- **Parent**: In an XML structure, an element in a level directly above another. +- **Parsing, parser**: The act of analyzing the contents of a structured object in order to extract useful information. +- **Root**: An element located at the first level of an XML structure. +- **Sibling**: An element at the same level as another. +- **Structure**: structured XML object. This object can be a document, a variable, or an element. +- **Validation**: An XML document is “validated” by the parser when it is “well-formed” and in compliance with the DTD specifications. +- **Well-formed**: An XML document is declared “well-formed” by the parser when it complies with the generic XML specifications. +- **XML**: eXtensible Markup Language. A computerized data exchange standard enabling the transfer of data as well as their structure. The XML language is based on the use of tags and a specific syntax, in keeping with the HTML language. However, unlike the latter, the XML language allows the definition of customized tags. +- **XSL**: eXtensible Stylesheet Language. A language permitting the definition of style sheets used to process and display the contents of an XSL document. + || |---| diff --git a/docs/commands/theme/XML_DOM.md b/docs/commands/theme/XML_DOM.md index df18f4c44be734..dabf19701d806d 100644 --- a/docs/commands/theme/XML_DOM.md +++ b/docs/commands/theme/XML_DOM.md @@ -5,6 +5,68 @@ sidebar_label: XML DOM slug: /commands/theme/XML-DOM --- +## Overview of XML DOM Commands + +See [XML, DOM, and SAX](../theme/XML.md#xml-dom-and-sax) section for a definition of XML DOM. + +### Creating, opening and closing XML documents via DOM + +Objects created, modified or parsed by the 4D DOM commands can be text, URLs, documents or BLOBs. The DOM commands used for opening XML objects in 4D are [`DOM Parse XML source`](../../commands/dom-parse-xml-source) and [`DOM Parse XML variable`](../../commands/dom-parse-xml-variable). + +Many commands then let you read, parse and write the elements and attributes. Errors are recovered using the [`XML GET ERROR`](../../commands/xml-get-error) command. Do not forget to call the [`DOM CLOSE XML`](../../commands/dom-close-xml) command to close the source in the end. + +Note about use of XML BLOB parameters: For historical reasons, XML commands such as [`DOM Parse XML variable`](../../commands/dom-parse-xml-variable) accept BLOB type parameters. However, it is highly recommended to store XML structures as Text. The use of BLOBs is reserved for processing binary data. In conformity with XML specifications, binary data are automatically encoded in Base64, even when the BLOB contains text. + + +### Support of XPath notation + +Several XML DOM commands ([`DOM Create XML element`](../../commands/dom-create-xml-element), [`DOM Find XML element`](../../commands/dom-find-xml-element), [`DOM Create XML element arrays`](../../commands/dom-create-xml-element-arrays) and [`DOM SET XML ELEMENT VALUE`](../../commands/dom-set-xml-element-value)) support some XPath expressions for accessing XML elements. + +XPath notation comes from the XPath language, designed to navigate within XML structures. It allows the setting of elements directly within an XML structure via a "pathname" type syntax, without necessarily having to indicate the complete pathname in order to reach it. + +For example, given the following structure: + +```xml + + + + + + + +``` + +XPath notation allows you to access element 3 using the */RootElement/Elem1/Elem2/Elem3* syntax. + +4D also accepts indexed XPath elements using the *Element[ElementNum]* syntax. For example, given the following structure: + +```xml + + + aaa + bbb + ccc + + +``` + +XPath notation allows you to access the "ccc" value using the */RootElement/Elem1/Elem2[3]* syntax. + +For a comprehensive list of supported XPath expressions, refer to the [`DOM Find XML element`](../../commands/dom-find-xml-element) command description. + +:::note Compatibility + +Starting with 4D 18 R3, the XPath implementation has been modified to be more compliant and to support a wider set of expressions. If you want to benefit from the extended features in your converted databases, you need to select the **Use standard XPath** option of the [Compatibility page](../../settings/compatibility.md). + +::: + +### Error Handling + +Many functions in this theme return an XML element reference. If an error occurs during function execution (for example, if the root element reference is not valid), the *OK* variable is set to 0 and an error is generated. + +In addition, the reference returned in this case is a sequence of 32 zero "0" characters. + + || |---| diff --git a/docs/commands/theme/XML_SAX.md b/docs/commands/theme/XML_SAX.md index 6d5c3979213b4f..0bd973753cc699 100644 --- a/docs/commands/theme/XML_SAX.md +++ b/docs/commands/theme/XML_SAX.md @@ -5,6 +5,37 @@ sidebar_label: XML SAX slug: /commands/theme/XML-SAX --- +## Overview of XML SAX Commands + +See [XML, DOM, and SAX](../theme/XML.md#xml-dom-and-sax) section for a definition of XML SAX. + +### Creating, opening and closing XML documents via SAX + +The SAX commands work with the standard document references of 4D (**DocRef**, a Time type reference). It is therefore possible to use these commands jointly with the 4D commands used to manage documents, such as [`SEND PACKET`](../../commands/send-packet) or [`Append document`](../../commands/append-document). + +The creation and opening of XML documents by programming is carried out using the [`Create document`](../../commands/create-document) and [`Open document`](../../commands/open-document) commands. Subsequently, the use of an XML command with these documents will cause the automatic activation of XML mechanisms such as encoding. For instance, the `` header will be written automatically in the document. + +:::note + +Documents read by SAX commands must be opened in read-only mode by the [`Open document`](../../commands/open-document) command. This avoids any conflict between 4D and the Xerces library when you open "regular" and XML documents simultaneously. If you execute a SAX parsing command with a document open in read-write mode, an alert message is displayed and parsing is impossible. + +::: + +Closing an XML document must be carried out using the [`CLOSE DOCUMENT`](../../commands/close-document) command. If any XML elements were open, they will be closed automatically. + +### About end-of-line characters and BOM management + +When writing SAX documents, 4D uses the following default settings for end-of-line characters and BOM (byte order mask) usage: + +- CRLF characters on Windows and LF on macOS for end-of-line characters +- files are written without BOM. + +:::note Compatibility + +In projects created with 4D versions up to 19.x, by default 4D uses CRLF as end-of-line characters on macOS for SAX and a BOM. You can control the `XML line ending` and `XML BOM` management using the [`XML SET OPTIONS`](../../commands/xml-set-options) command and a [Compatibility setting](../../settings/compatibility.md). Important: Since SAX file lines are written directly at each statement, if you need to set the BOM and/or end-of-line options, you must call the [`XML SET OPTIONS`](../../commands/xml-set-options) command before the first SAX writing command. + +::: + || |---| From 75daef02eca894fb8a35f724356f93a5c4f6d42a Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 10 Apr 2026 17:47:28 +0200 Subject: [PATCH 02/12] forms started --- docs/FormEditor/forms.md | 22 ++++++++++ docs/commands/theme/XML.md | 17 ++++---- docs/commands/theme/XML_DOM.md | 80 +++++++++++++++++----------------- docs/commands/theme/XML_SAX.md | 43 +++++++++--------- 4 files changed, 94 insertions(+), 68 deletions(-) diff --git a/docs/FormEditor/forms.md b/docs/FormEditor/forms.md index 1752c59a143b15..363a933f46d0b8 100644 --- a/docs/FormEditor/forms.md +++ b/docs/FormEditor/forms.md @@ -67,6 +67,28 @@ You can add or modify 4D forms using the following elements: } ``` +## Using forms + +In your 4D desktop applications, forms are called using specific commands of the 4D Language. Basically to display a form, your code has to execute the following sequence: + +1. Open a window or select an already opened window. +2. Select the form to be displayed in the window. +3. Select the datasource of the form. + +All these steps require to use commands of both the [**Windows**](../commands/theme/Windows.md) and [**Forms**](../commands/theme/Forms.md) themes. + +::note Compatibility + +All-in-one commands such as [`ADD RECORD`](../commands/add-record) or [`MODIFY RECORD`](../commands/add-record) merge all steps in a single call. These legacy commands can still be used for prototyping or basic developments but are not adapted to modern, fully controlled interfaces. + +::: + +### Opening a form window + +The main way to open a window for your form is to call the [`Open form window`](../commands/open-form-window) command. This command takes a form name as parameter, so that the window size will automatically fit the form size, taking its [size properties](../FormEditor/properties_FormSize.md) into account. For example: + + + ## Project form and Table form There are two categories of forms: diff --git a/docs/commands/theme/XML.md b/docs/commands/theme/XML.md index c4cac82e9e7d1d..b592bec6d156ea 100644 --- a/docs/commands/theme/XML.md +++ b/docs/commands/theme/XML.md @@ -5,6 +5,14 @@ sidebar_label: XML slug: /commands/theme/XML --- +|| +|---| +|[](../../commands/xml-decode)
| +|[](../../commands/xml-get-error)
| +|[](../../commands/xml-get-options)
| +|[](../../commands/xml-set-options)
| + + ## Overview of XML Commands :::note @@ -18,7 +26,7 @@ For XML support, 4D uses a library named Xerces.dll developed by the Apache Foun The **XML** theme groups together the generic XML "utilities" commands of 4D. These are option- and error-management commands. -4D also offers two separate sets of XML commands: [DOM](../theme/XML_DOM.md) (Document Object Model) and [SAX](../theme/XML_SAX.md) (Simple API XML) are two different parsing modes for XML documents. +4D also offers two separate sets of XML commands: [**DOM**](../theme/XML_DOM.md) (Document Object Model) and [**SAX**](../theme/XML_SAX.md) (Simple API XML) are two different parsing modes for XML documents. - The DOM mode parses an XML source and builds its structure (its "tree") in memory. Because of this, access to each element of the source is extremely fast. However, since the entire tree structure is stored in memory, the processing of large XML documents may lead to the memory capacity being exceeded and thus provoke errors. - The SAX mode does not build a tree structure in memory. In this mode, "events" (such as the start and end of an element) are generated when parsing the source. This mode lets you parse XML documents of any size, regardless of the amount of memory available. @@ -65,10 +73,3 @@ This non-exhaustive list details the main XML concepts used by the commands and - **XML**: eXtensible Markup Language. A computerized data exchange standard enabling the transfer of data as well as their structure. The XML language is based on the use of tags and a specific syntax, in keeping with the HTML language. However, unlike the latter, the XML language allows the definition of customized tags. - **XSL**: eXtensible Stylesheet Language. A language permitting the definition of style sheets used to process and display the contents of an XSL document. - -|| -|---| -|[](../../commands/xml-decode)
| -|[](../../commands/xml-get-error)
| -|[](../../commands/xml-get-options)
| -|[](../../commands/xml-set-options)
| diff --git a/docs/commands/theme/XML_DOM.md b/docs/commands/theme/XML_DOM.md index dabf19701d806d..35952a7bf19560 100644 --- a/docs/commands/theme/XML_DOM.md +++ b/docs/commands/theme/XML_DOM.md @@ -5,6 +5,47 @@ sidebar_label: XML DOM slug: /commands/theme/XML-DOM --- + + +|| +|---| +|[](../../commands/dom-append-xml-child-node)
| +|[](../../commands/dom-append-xml-element)
| +|[](../../commands/dom-close-xml)
| +|[](../../commands/dom-count-xml-attributes)
| +|[](../../commands/dom-count-xml-elements)
| +|[](../../commands/dom-create-xml-element)
| +|[](../../commands/dom-create-xml-element-arrays)
| +|[](../../commands/dom-create-xml-ref)
| +|[](../../commands/dom-export-to-file)
| +|[](../../commands/dom-export-to-var)
| +|[](../../commands/dom-find-xml-element)
| +|[](../../commands/dom-find-xml-element-by-id)
| +|[](../../commands/dom-get-first-child-xml-element)
| +|[](../../commands/dom-get-last-child-xml-element)
| +|[](../../commands/dom-get-next-sibling-xml-element)
| +|[](../../commands/dom-get-parent-xml-element)
| +|[](../../commands/dom-get-previous-sibling-xml-element)
| +|[](../../commands/dom-get-root-xml-element)
| +|[](../../commands/dom-get-xml-attribute-by-index)
| +|[](../../commands/dom-get-xml-attribute-by-name)
| +|[](../../commands/dom-get-xml-child-nodes)
| +|[](../../commands/dom-get-xml-document-ref)
| +|[](../../commands/dom-get-xml-element)
| +|[](../../commands/dom-get-xml-element-name)
| +|[](../../commands/dom-get-xml-element-value)
| +|[](../../commands/dom-get-xml-information)
| +|[](../../commands/dom-insert-xml-element)
| +|[](../../commands/dom-parse-xml-source)
| +|[](../../commands/dom-parse-xml-variable)
| +|[](../../commands/dom-remove-xml-attribute)
| +|[](../../commands/dom-remove-xml-element)
| +|[](../../commands/dom-set-xml-attribute)
| +|[](../../commands/dom-set-xml-declaration)
| +|[](../../commands/dom-set-xml-element-name)
| +|[](../../commands/dom-set-xml-element-value)
| + + ## Overview of XML DOM Commands See [XML, DOM, and SAX](../theme/XML.md#xml-dom-and-sax) section for a definition of XML DOM. @@ -66,42 +107,3 @@ Many functions in this theme return an XML element reference. If an error occurs In addition, the reference returned in this case is a sequence of 32 zero "0" characters. - - -|| -|---| -|[](../../commands/dom-append-xml-child-node)
| -|[](../../commands/dom-append-xml-element)
| -|[](../../commands/dom-close-xml)
| -|[](../../commands/dom-count-xml-attributes)
| -|[](../../commands/dom-count-xml-elements)
| -|[](../../commands/dom-create-xml-element)
| -|[](../../commands/dom-create-xml-element-arrays)
| -|[](../../commands/dom-create-xml-ref)
| -|[](../../commands/dom-export-to-file)
| -|[](../../commands/dom-export-to-var)
| -|[](../../commands/dom-find-xml-element)
| -|[](../../commands/dom-find-xml-element-by-id)
| -|[](../../commands/dom-get-first-child-xml-element)
| -|[](../../commands/dom-get-last-child-xml-element)
| -|[](../../commands/dom-get-next-sibling-xml-element)
| -|[](../../commands/dom-get-parent-xml-element)
| -|[](../../commands/dom-get-previous-sibling-xml-element)
| -|[](../../commands/dom-get-root-xml-element)
| -|[](../../commands/dom-get-xml-attribute-by-index)
| -|[](../../commands/dom-get-xml-attribute-by-name)
| -|[](../../commands/dom-get-xml-child-nodes)
| -|[](../../commands/dom-get-xml-document-ref)
| -|[](../../commands/dom-get-xml-element)
| -|[](../../commands/dom-get-xml-element-name)
| -|[](../../commands/dom-get-xml-element-value)
| -|[](../../commands/dom-get-xml-information)
| -|[](../../commands/dom-insert-xml-element)
| -|[](../../commands/dom-parse-xml-source)
| -|[](../../commands/dom-parse-xml-variable)
| -|[](../../commands/dom-remove-xml-attribute)
| -|[](../../commands/dom-remove-xml-element)
| -|[](../../commands/dom-set-xml-attribute)
| -|[](../../commands/dom-set-xml-declaration)
| -|[](../../commands/dom-set-xml-element-name)
| -|[](../../commands/dom-set-xml-element-value)
| diff --git a/docs/commands/theme/XML_SAX.md b/docs/commands/theme/XML_SAX.md index 0bd973753cc699..de16e6c401d184 100644 --- a/docs/commands/theme/XML_SAX.md +++ b/docs/commands/theme/XML_SAX.md @@ -5,6 +5,28 @@ sidebar_label: XML SAX slug: /commands/theme/XML-SAX --- + +|| +|---| +|[](../../commands/sax-add-processing-instruction)
| +|[](../../commands/sax-add-xml-cdata)
| +|[](../../commands/sax-add-xml-comment)
| +|[](../../commands/sax-add-xml-doctype)
| +|[](../../commands/sax-add-xml-element-value)
| +|[](../../commands/sax-close-xml-element)
| +|[](../../commands/sax-get-xml-cdata)
| +|[](../../commands/sax-get-xml-comment)
| +|[](../../commands/sax-get-xml-document-values)
| +|[](../../commands/sax-get-xml-element)
| +|[](../../commands/sax-get-xml-element-value)
| +|[](../../commands/sax-get-xml-entity)
| +|[](../../commands/sax-get-xml-node)
| +|[](../../commands/sax-get-xml-processing-instruction)
| +|[](../../commands/sax-open-xml-element)
| +|[](../../commands/sax-open-xml-element-arrays)
| +|[](../../commands/sax-set-xml-declaration)
| + + ## Overview of XML SAX Commands See [XML, DOM, and SAX](../theme/XML.md#xml-dom-and-sax) section for a definition of XML SAX. @@ -35,24 +57,3 @@ When writing SAX documents, 4D uses the following default settings for end-of-li In projects created with 4D versions up to 19.x, by default 4D uses CRLF as end-of-line characters on macOS for SAX and a BOM. You can control the `XML line ending` and `XML BOM` management using the [`XML SET OPTIONS`](../../commands/xml-set-options) command and a [Compatibility setting](../../settings/compatibility.md). Important: Since SAX file lines are written directly at each statement, if you need to set the BOM and/or end-of-line options, you must call the [`XML SET OPTIONS`](../../commands/xml-set-options) command before the first SAX writing command. ::: - - -|| -|---| -|[](../../commands/sax-add-processing-instruction)
| -|[](../../commands/sax-add-xml-cdata)
| -|[](../../commands/sax-add-xml-comment)
| -|[](../../commands/sax-add-xml-doctype)
| -|[](../../commands/sax-add-xml-element-value)
| -|[](../../commands/sax-close-xml-element)
| -|[](../../commands/sax-get-xml-cdata)
| -|[](../../commands/sax-get-xml-comment)
| -|[](../../commands/sax-get-xml-document-values)
| -|[](../../commands/sax-get-xml-element)
| -|[](../../commands/sax-get-xml-element-value)
| -|[](../../commands/sax-get-xml-entity)
| -|[](../../commands/sax-get-xml-node)
| -|[](../../commands/sax-get-xml-processing-instruction)
| -|[](../../commands/sax-open-xml-element)
| -|[](../../commands/sax-open-xml-element-arrays)
| -|[](../../commands/sax-set-xml-declaration)
| From c25acffe8beebdbcf5460e16a061022ce89a4903 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 15 Apr 2026 18:05:07 +0200 Subject: [PATCH 03/12] Update forms.md --- docs/FormEditor/forms.md | 47 +++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/docs/FormEditor/forms.md b/docs/FormEditor/forms.md index 363a933f46d0b8..cb931948f48ea7 100644 --- a/docs/FormEditor/forms.md +++ b/docs/FormEditor/forms.md @@ -69,24 +69,55 @@ You can add or modify 4D forms using the following elements: ## Using forms -In your 4D desktop applications, forms are called using specific commands of the 4D Language. Basically to display a form, your code has to execute the following sequence: +In your 4D desktop applications, forms can be used in various ways, depending on their status within your interface needs. A form can be: -1. Open a window or select an already opened window. -2. Select the form to be displayed in the window. -3. Select the datasource of the form. +- used in its own window for data viewing, processing, editing, or to display on-screen information to the user, +- used embedded in another form (subform), +- used a template for printing. -All these steps require to use commands of both the [**Windows**](../commands/theme/Windows.md) and [**Forms**](../commands/theme/Forms.md) themes. + +### Using project forms in windows + +Forms are called using specific commands of the 4D Language. The straighforward steps to display a form on screen are: + +1. Call the [`Open form window`](../commands/open-form-window) command to open a window tailored for your project form. +2. Call the [`DIALOG`](../commands/dialog) command to actually load the form in the window, ready for user interaction. +3. (optional) Use the [`Form`](../commands/form) command from within the form context to access form data. You can also use [`CALL FORM`](../commands/call-form) to control the form execution. + +Example: + +```4d +var $win:=Open form window("Edit_Customer";Movable form dialog box) +DIALOG("Edit_Children";$mydata) //displays dialog filled with values +``` ::note Compatibility -All-in-one commands such as [`ADD RECORD`](../commands/add-record) or [`MODIFY RECORD`](../commands/add-record) merge all steps in a single call. These legacy commands can still be used for prototyping or basic developments but are not adapted to modern, fully controlled interfaces. +All-in-one commands such as [`ADD RECORD`](../commands/add-record) or [`MODIFY RECORD`](../commands/add-record) merge all steps in a single call. These legacy commands can still be used for prototyping or basic developments but are not adapted to modern, fully controlled interfaces. They directly rely on the 4D database and legacy features such as [table forms](#project-form-and-table-form) and do not benefit from the power and flexibility of [ORDA features](../ORDA/overview.md). Unless specific needs, it is recommended to use project forms for your 4D desktop application interfaces. ::: -### Opening a form window +### Using forms to be printed + +You can use forms to print data, either as page or as list. To print a form in your 4D application: + +1. Call the [`Print form`](../commands/print-form) command. +2. (optional) Use commands of the [Printing](../commands/theme/Printing.md) theme to control printing area and page breaks. + +### Using forms as subforms + +A form can be embedded within another form, in which case it becomes a subform. A subform is actually a [form object](../FormObjects/subform_overview.md) and follow specific rules. + +A subform is automatically used when its parent form is [displayed in a window](#using-project-forms-in-windows). + + +### Other form usages -The main way to open a window for your form is to call the [`Open form window`](../commands/open-form-window) command. This command takes a form name as parameter, so that the window size will automatically fit the form size, taking its [size properties](../FormEditor/properties_FormSize.md) into account. For example: +There are several other ways to use forms in the 4D applications, including: +- a form can be [inherited](#inherited-forms) from another form, +- a form can be [associated to a listbox](../FormObjects/properties_ListBox.md#detail-form-name) in response to a user action to display a row using an edit button or a double-click, +- the [label editor can use a form](../Desktop/labels.md#form-to-use) as template to print labels. ## Project form and Table form From 609d2e1742e0fbf0b2ea8db518b714df5b7972de Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 16 Apr 2026 10:53:48 +0200 Subject: [PATCH 04/12] example with screenshots --- docs/FormEditor/forms.md | 42 +++++++++++++------ docs/assets/en/FormEditor/example-form-1.png | Bin 0 -> 3173 bytes docs/assets/en/FormEditor/example-form-2.png | Bin 0 -> 5884 bytes 3 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 docs/assets/en/FormEditor/example-form-1.png create mode 100644 docs/assets/en/FormEditor/example-form-2.png diff --git a/docs/FormEditor/forms.md b/docs/FormEditor/forms.md index cb931948f48ea7..98ccb60e7ffd27 100644 --- a/docs/FormEditor/forms.md +++ b/docs/FormEditor/forms.md @@ -72,8 +72,9 @@ You can add or modify 4D forms using the following elements: In your 4D desktop applications, forms can be used in various ways, depending on their status within your interface needs. A form can be: - used in its own window for data viewing, processing, editing, or to display on-screen information to the user, +- used as template for printing, - used embedded in another form (subform), -- used a template for printing. +- or called by specific features like the Label editor. ### Using project forms in windows @@ -84,33 +85,48 @@ Forms are called using specific commands of the 4D Language. The straighforward 2. Call the [`DIALOG`](../commands/dialog) command to actually load the form in the window, ready for user interaction. 3. (optional) Use the [`Form`](../commands/form) command from within the form context to access form data. You can also use [`CALL FORM`](../commands/call-form) to control the form execution. -Example: - -```4d -var $win:=Open form window("Edit_Customer";Movable form dialog box) -DIALOG("Edit_Children";$mydata) //displays dialog filled with values -``` - ::note Compatibility All-in-one commands such as [`ADD RECORD`](../commands/add-record) or [`MODIFY RECORD`](../commands/add-record) merge all steps in a single call. These legacy commands can still be used for prototyping or basic developments but are not adapted to modern, fully controlled interfaces. They directly rely on the 4D database and legacy features such as [table forms](#project-form-and-table-form) and do not benefit from the power and flexibility of [ORDA features](../ORDA/overview.md). Unless specific needs, it is recommended to use project forms for your 4D desktop application interfaces. ::: -### Using forms to be printed -You can use forms to print data, either as page or as list. To print a form in your 4D application: +#### Simple example + +You create the following form in the [Form editor](./formEditor.md): + +![](../assets/en/FormEditor/example-form-1.png) + +If you execute the following project method: + +```4d +var $mydata:={name: "Smith"; age: 42} +var $win:=Open form window("myForm"; Movable form dialog box) +SET WINDOW TITLE("My First 4D Form") +DIALOG("myForm"; $mydata) //displays dialog filled with values +``` + +4D displays: + +![](../assets/en/FormEditor/example-form-1.png) -1. Call the [`Print form`](../commands/print-form) command. -2. (optional) Use commands of the [Printing](../commands/theme/Printing.md) theme to control printing area and page breaks. ### Using forms as subforms -A form can be embedded within another form, in which case it becomes a subform. A subform is actually a [form object](../FormObjects/subform_overview.md) and follow specific rules. +A form can be embedded within another form, in which case it becomes a [subform object](../FormObjects/subform_overview.md) which follows specific rules. A subform is automatically used when its parent form is [displayed in a window](#using-project-forms-in-windows). +### Using forms to be printed + +You can use forms to print data, either as page or as list. To print a form in your 4D application: + +1. Call the [`Print form`](../commands/print-form) command. +2. (optional) Use commands of the [Printing](../commands/theme/Printing.md) theme to control printing area and page breaks. + + ### Other form usages There are several other ways to use forms in the 4D applications, including: diff --git a/docs/assets/en/FormEditor/example-form-1.png b/docs/assets/en/FormEditor/example-form-1.png new file mode 100644 index 0000000000000000000000000000000000000000..450212bbde995ba7a79a943038fab33f9eba6def GIT binary patch literal 3173 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 bj=6~C#7`SV)@0$&004j+TV5_Oa=Z6$^%wEw literal 0 HcmV?d00001 diff --git a/docs/assets/en/FormEditor/example-form-2.png b/docs/assets/en/FormEditor/example-form-2.png new file mode 100644 index 0000000000000000000000000000000000000000..edd1a0ad5b48c47fd2b28dd38646c502cd2c3e27 GIT binary patch literal 5884 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 Date: Thu, 16 Apr 2026 10:56:31 +0200 Subject: [PATCH 05/12] Update forms.md --- docs/FormEditor/forms.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/FormEditor/forms.md b/docs/FormEditor/forms.md index 98ccb60e7ffd27..53ac7cb8b8c7bf 100644 --- a/docs/FormEditor/forms.md +++ b/docs/FormEditor/forms.md @@ -109,7 +109,7 @@ DIALOG("myForm"; $mydata) //displays dialog filled with values 4D displays: -![](../assets/en/FormEditor/example-form-1.png) +![](../assets/en/FormEditor/example-form-2.png) ### Using forms as subforms From 289aa06d4ff0042a49ae07fcf041c9c20fc27819 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 16 Apr 2026 18:40:46 +0200 Subject: [PATCH 06/12] after proofreads --- docs/Develop/async.md | 2 +- docs/FormEditor/forms.md | 74 +++++++++++++--- docs/assets/en/FormEditor/Subform-example.png | Bin 0 -> 15559 bytes docs/assets/en/FormEditor/example-form-1.png | Bin 3173 -> 3698 bytes docs/assets/en/FormEditor/example-form-2.png | Bin 5884 -> 6409 bytes docs/commands/theme/System_Documents.md | 82 ++++++++++++++++++ docs/language-legacy/Data Entry/dialog.md | 8 +- .../Windows/open-form-window.md | 5 +- 8 files changed, 153 insertions(+), 18 deletions(-) create mode 100644 docs/assets/en/FormEditor/Subform-example.png diff --git a/docs/Develop/async.md b/docs/Develop/async.md index 3b0e4335599517..9d49f86305fe69 100644 --- a/docs/Develop/async.md +++ b/docs/Develop/async.md @@ -61,7 +61,7 @@ The calling process posts a message then the worker executes it. The worker can ### Event listening -In event-driven development, it is obvious that some code must be able to listen for incoming events. Events can be generated by the user interface (such as a mouse click on an object or a keyboard key pressed) or by any other interaction such as an http request or the end of another action. For example, when a form is displayed using the `DIALOG` command, user actions can trigger events that your code can process. A click on a button will trigger the code associated to the button. +In event-driven development, it is obvious that some code must be able to listen for incoming events. Events can be generated by the user interface (such as a mouse click on an object or a keyboard key pressed) or by any other interaction such as an http request or the end of another action. For example, when a form is displayed using the [`DIALOG`](../commands/dialog) command, user actions can trigger events that your code can process. A click on a button will trigger the code associated to the button. In the context of asynchronous execution, the following features place your code in listening mode: diff --git a/docs/FormEditor/forms.md b/docs/FormEditor/forms.md index 53ac7cb8b8c7bf..9ade252eef8c42 100644 --- a/docs/FormEditor/forms.md +++ b/docs/FormEditor/forms.md @@ -77,13 +77,14 @@ In your 4D desktop applications, forms can be used in various ways, depending on - or called by specific features like the Label editor. -### Using project forms in windows +### Using a project form in a window Forms are called using specific commands of the 4D Language. The straighforward steps to display a form on screen are: -1. Call the [`Open form window`](../commands/open-form-window) command to open a window tailored for your project form. -2. Call the [`DIALOG`](../commands/dialog) command to actually load the form in the window, ready for user interaction. -3. (optional) Use the [`Form`](../commands/form) command from within the form context to access form data. You can also use [`CALL FORM`](../commands/call-form) to control the form execution. +1. Call the [`Open form window`](../commands/open-form-window) command to configure a window tailored for your project form. Note that the command itself does not display anything. +2. Call the [`DIALOG`](../commands/dialog) command to actually load the form in the form window, ready for user interaction. [`DIALOG`](../commands/dialog) loads form data and places your code in listening mode to user events (see also ["Event listening" paragraph](../Develop/async.md#event-listening). +3. (optional) Use the [`Form`](../commands/form) command from within the form context to access form data. + ::note Compatibility @@ -94,17 +95,33 @@ All-in-one commands such as [`ADD RECORD`](../commands/add-record) or [`MODIFY R #### Simple example -You create the following form in the [Form editor](./formEditor.md): +You create the following basic form in the [Form editor](./formEditor.md): ![](../assets/en/FormEditor/example-form-1.png) +The form is [associated with a "Person" class](./properties_FormProperties.md#form-class), defined as follow: + +```4d + //cs.Person +property name : Text +property age : Integer + +Class constructor + This.name:="" + This.age:=0 +``` + If you execute the following project method: ```4d var $mydata:={name: "Smith"; age: 42} var $win:=Open form window("myForm"; Movable form dialog box) -SET WINDOW TITLE("My First 4D Form") DIALOG("myForm"; $mydata) //displays dialog filled with values +CLOSE WINDOW($win) //releases reference +If (OK=1) //the user clicked OK + var $name : Text:=Form.name //gets data + var $age : Integer:=Form.age +End if ``` 4D displays: @@ -114,17 +131,52 @@ DIALOG("myForm"; $mydata) //displays dialog filled with values ### Using forms as subforms -A form can be embedded within another form, in which case it becomes a [subform object](../FormObjects/subform_overview.md) which follows specific rules. +A form can be embedded within another form, in which case it becomes a [subform object](../FormObjects/subform_overview.md) which follows specific rules. A subform is automatically used when its parent form is [displayed in a window](#using-a-project-form-in-a-window). + +In the same way that you pass an object to a form with the [`DIALOG`](../commands/dialog) command, you can also pass an object to a subform area using the property list. Then, you can use it in the subform with the [`Form`](../commands/form) command. In this example, the "InvoiceAddress" object is bound to the subform: + +![](../assets/en/FormEditor/subform-example.png) -A subform is automatically used when its parent form is [displayed in a window](#using-project-forms-in-windows). ### Using forms to be printed -You can use forms to print data, either as page or as list. To print a form in your 4D application: +You can use forms to print data, either as page or as list. + +- To simply print some part of a form, use the [`Print form`](../commands/print-form) command. For example: -1. Call the [`Print form`](../commands/print-form) command. -2. (optional) Use commands of the [Printing](../commands/theme/Printing.md) theme to control printing area and page breaks. +```4d +var $formData:={} +$formData.lastname:="Smith" +$formData.firstname:="john" +$formData.request:="I need more COFFEE" +var $h:=Print form("Request_var";$formData;Form detail) +``` + +- To print a form within a printing job to process data during printing, use [`FORM LOAD`](../commands/form-load) and [`Print object`](../commands/print-object) commands. For example: + +```4d + var $formData : Object + var $over : Boolean + var $full : Boolean + + OPEN PRINTING JOB + $formData:={} + $formData.LBcollection:=[] + ... //fill the collection with data + + FORM LOAD("GlobalForm";$formData) + $over:=False + Repeat + $full:=Print object(*;"LB") // the datasource of this "LB" listbox is Form.LBcollection + LISTBOX GET PRINT INFORMATION(*;"LB";lk printing is over;$over) + If(Not($over)) + PAGE BREAK + End if + Until($over) + FORM UNLOAD + CLOSE PRINTING JOB + ``` ### Other form usages diff --git a/docs/assets/en/FormEditor/Subform-example.png b/docs/assets/en/FormEditor/Subform-example.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1cd6b7e973b8c557d957727430f34172499483 GIT binary patch literal 15559 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/FormEditor/example-form-1.png b/docs/assets/en/FormEditor/example-form-1.png index 450212bbde995ba7a79a943038fab33f9eba6def..ce157014371ec1b5c1cb5701e4fd650bde6926e7 100644 GIT binary patch literal 3698 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 literal 3173 zcmd5Zbi=0)0^V%DZJN)A(VD55Neks(@` zB64P7a<0sr<+NcA-@M^)53D;SY+l6Dvp2knYNhAnqY6K`~RTviSMOaiJ}Rg*gTR z0J1e(5UI!Hcme=BR^gWoZNjck4_Luo@I~wAtVrO;2k!@Y#K_up8f`j1P|W&tJgg(e z$O;m}Qk0f*&p5t#>@+ixRg-b(hbhcW;?j6#_FUqLN=a7xaAy3I;tY^`{td~WtR`91 zZDOPW*ed-kt)s9`W%i)hC?AI^iRV`hsRCWC3>3@60QDmwy8zW!cFO@w{tjW#rBL7x zY!5^%<9_Y00KT*`@_O3&&{o12Y>mkLIaiJ^KZ6SVY(^o4hllsqR7bA}W|>`GT^vOy z$prOTll#E2+tf*>MCLDofu~r~c!T+KH}C#ANZ8xXO5K-ukK{pI@zyMui$T|sPL-SV z)r7QQuF>=7r#YTXfmjAb2LvQ(XJz(VRI=p&>eOg(0&&^L@WY2&Y0(NuXzm@46*)_L z*{uCMv3;@k7Pe&Ti< z`m3*R^^vC~pGB`SQt3$-UMyVOvE7D{jxN20yF%X24&&gP&7P1?oZgQ-KGp$IC(pi+ z2AyA8kVyaPXh9pw#Sey6&=<`>&ys1lsTzpgwI6rA87_{WDOukcS1x_@yNOVdxp0j& zeEIS$f8^c_R3q0xE!UyhM@g4^&f8Wl2$}C-6X0Vlcb`bP#|cV04sQ9bdVu8d_#`?a z?lrly*~@lXCvmwvYwc0@J{Bzyl(hke?DQ(Fa;$8do=s!h75EVYkn1FEqPY@xZq7;C z$Kr6vt9rK1W;Jm)A2;3@b0X)#!kI`yzA(Vc%$>kzw2f_J$1LKawewBQ@2A2#ab$1w zl;f8Spq>5Fsz0YX{s1a8#E{hL%4%=FXH>&c=4!|s>0h6ow53_@RBT4vtjlu#QRy2} zaNFi?#xuH_WB1$9!jD$x^5fSbQ%)5~(_oU;ZaH|3l6tvD9U49I>SLC(m))KK1;2}) zRLzf|q4c53VJHQ+sxgtfceRv0`qfnD1-98Hwz+EbN+|i~yAK6ZOHK0eS!y&J zByYBwwcT48$jJCuB+eNfeO7EL{qUuBSf+u%+Jx%RazvK1Mp63Gx+p#v@I{wfdY~jp zQnW1?UmQpn*%x!6z2dF*@Z8rRjEjAowiakpHdQ_+Na=O(@wWPuSlIzt0W^To4 z*K-Q-^>TI$y16SOoOn*1^X9JAnKYJr{obYzhU8yGq8)!upSh!R!G2lv@M}?9ix{|J zO7?weS@W7tQK*7cPjsU|RIpBLQAw0PoHx^K4~spbu%L@ko!_qaFFrKNL?|tgi^cb* zS1mZ2cv@fhe0(< zWef?r;hb(4Hk@+Pp6mrGT33Zqao`3OZSbMacPcUx`=cqcWc`OD4mj@%_=w@*Nhz9s ztnt3{J?F#V1(3&W`MrL?xd8Zz46UK447-`7_=tXOD1VU4qX6rD|QHgMQCMAAh zd0G8o$=j#lZ7ab&u@3L#V}#->Xq&vd-m{*#Yk#0(P@P7y_50OJA|X2Jz!V!q!tlHG zE^G^uD^!^=@f3y+g4bk<%Y5Hl=Pl*hsczqe2I_hs3)-a)V&hI8wLNx{qGnDmrLJ6> zRaKzRdJO%{elMzd%_b3r9E>u!Rm^zy;g7`1PEbz#VHRa!Mqp!1ZY(A>(&&ZQrg3IY zp4k|?u~+42*NxBMt9qJ(RkQ1?Q3jo@;dhZV&m4E`hEg_P7of8ji`RQr#%_dkqc)w@ z{M(~OYgH1FYIGa92dDseLeERm!yWP)hN&$;JIXE|vA|(0 z(RGD3?{Z9^+s1m_o!!E%qg=eN*%+sAd-xXITJky_mB z12b&U<9@l8oM5kQO`z&0OM;AH*qz>5z?77Up@e0LrNzj8y!mkjdnV9T|2oYb_w8Q> zigEZco02-s?1$5{vy%;ps^R>ZG{J5+=g`oynf?#Th3sa7%mgo4u*h%2r?s_+DnPKo zKh+38MGqYD!C2 z3fXysgV&dMJYPJ%kFac0%44cv#Wpttg~Ij#UryON2@PdKZs$fx>66;HLAy$|U$wCp z{VvpsokbacgTA^gQRYMIR7fXddckx}^;ffxh`3({)Y3h2!##G|(}$mv%}+g_>Z{wo z&b?F=w(#U;j9C-qAY+IN?O{YoVG*aly$OHb)BbBuz1t9>(xK{YdxYPpD(APeb7$q# z`oQ!-S)rF2W^vT^BHv^J0j{ciU7e?!YiT(+mUQ?HD-hoTJGJEzF~Lt_ciL;n5(o_5 zeCWF4ioQG&Cbiyk^XlHiV3AmklZ#XZ>qR)*LLfvd=@&AT#?gZFyB#V6T>h=652$xXrLBbszq&7%3;+62ZX z%8}jAEfYa)Q?M5@IH_*_CYGtSGG@+H4zDnvj^z~6?inEf$|j5D^SVF^$?ODMcob(F zSar)_-hqOo@;D<0OcCt?71s-eeVFjl(;f~*CTIM*y|Kczh=`>5Y_2WDF&K>gn(W8I zZJWUYW@RM-xDiKG5EgtVC#T-t-mSC{{HFe_NoY^t@py~%MOl)cE+pYpCIY61b+Lux^QLxza| bj=6~C#7`SV)@0$&004j+TV5_Oa=Z6$^%wEw diff --git a/docs/assets/en/FormEditor/example-form-2.png b/docs/assets/en/FormEditor/example-form-2.png index edd1a0ad5b48c47fd2b28dd38646c502cd2c3e27..592ae7d506e652325822925d2809eed5c8a84229 100644 GIT binary patch literal 6409 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 literal 5884 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](../../commands/text-to-document)
| |[](../../commands/volume-attributes)
| |[](../../commands/volume-list)
| + + +:::info Compatibility + +Legacy commands from this theme can usually be usefully replaced by commands of the [*File and Folder*](./File_and_Folder.md) theme and their associated [File](../../API/FileClass.md), [Folder](../../API/FolderClass.md), [ZipFile](../../API/ZipFileClass.md) and [ZipFolder](../../API/ZipFolderClass.md) classes, allowing you to handle files and folders as objects. + +::: + + +## Document reference number + +You open a document with the [`Open document`](../../commands/open-document), [`Create document`](../../commands/create-document) and [`Append document`](../../commands/append-document) commands. Once a document is open, you can read and write characters from and to the document using commands such as [`RECEIVE PACKET`](../../commands/receive-packet) and [`SEND PACKET`](../../commands/send-packet). When you are finished with the document, you usually close it using the `CLOSE DOCUMENT` command. + +All open documents returned by these commands are referred to using a **document reference number** (*DocRef*). A *DocRef* uniquely identifies an open document. It is formally an expression of the **Time** type. All commands working with open documents expect *DocRef* as a parameter. If you pass an incorrect *DocRef* to one of these commands, a file manager error occurs. + +A document can be opened in **read/write** mode by only one process at a time. In **read-only** mode, one process can open several documents, several processes can open multiple documents, you can open the same document as many times as necessary, but you cannot open the same document in read/write mode twice at a time. The `Create document` and `Append document` commands automatically open documents in read/write mode. Only the `Open document` command lets you choose the opening mode. + +:::note + +When it is called from a [preemptive process](../../Develop/preemptive.md), a *DocRef* reference can only be used from this preemptive process. When it is called from a cooperative process, a *DocRef* reference can be used from any other cooperative process. + +::: + + +## The Document system variable + +`Open document`, `Create document`, `Append document` and `Select document` enable you to access a document using the standard Open or Save file dialog boxes. When you access a document through a standard dialog, 4D returns the full pathname of the document in the [`Document` system variable](../../Concepts/variables.md#system-variables). This system variable has to be distinguished from the *document* parameter that appears in the parameter list of the commands. + + + +## Absolute or relative pathname + +Most of the routines of this section accept document names, relative pathnames or absolute pathnames: + +Relative pathnames define a location with respect to a folder located on disk. Passing only a document name is considered as using a relative pathname. In 4D, a relative pathname is usually expressed with respect to the database folder, i.e. the folder containing the structure file. Relative pathnames are especially useful when deploying applications in heterogenous environments. +Absolute pathnames define a location with respect to the root of the volume and so they do not depend on the current location of the database folder. +To determine whether a pathname passed to a command must be interpreted as absolute or relative, 4D applies a specific algorithm on each platform. + +Windows +If the parameter contains only two characters and if the second one is a ':', + or if the text contains ':' and '\' as the second and third character, + or if the text starts with "\\", +then the pathname is absolute. + +In all other cases, the pathname is relative. + +Examples with the CREATE FOLDER command: + + CREATE FOLDER("lundi") // relative path + CREATE FOLDER("\Monday") // relative path + CREATE FOLDER("\Monday\Tuesday") // relative path + CREATE FOLDER("c:") // absolute path + CREATE FOLDER("d:\Monday") // absolute path + CREATE FOLDER("\\srv-Internal\temp") // absolute path + +macOS +If the text starts with a folder separator ':', + or if does not contain any, +then the path is relative. + +In all other cases, it is absolute. + +Examples with the CREATE FOLDER command: + + CREATE FOLDER("Monday") // relative path + CREATE FOLDER("macintosh hd:") // absolute path + CREATE FOLDER("Monday:Tuesday") // absolute path (a volume must be called Monday) + CREATE FOLDER(":Monday:Tuesday") // relative path + +:::note + +See also [**Absolute and relative pathnames** in the Concepts section](../../Concepts/paths.md#absolute-and-relative-pathnames). + +::: + +## Extracting pathname contents + +You can handle pathname contents using the Path to object and Object to path commands. In particular, using these commands, you can extract from a pathname: + +a file name, +the parent folder path, +the file or folder extension. \ No newline at end of file diff --git a/docs/language-legacy/Data Entry/dialog.md b/docs/language-legacy/Data Entry/dialog.md index fc5405d48bf146..7c5a8845635065 100644 --- a/docs/language-legacy/Data Entry/dialog.md +++ b/docs/language-legacy/Data Entry/dialog.md @@ -33,11 +33,11 @@ displayed_sidebar: docs ## Description -The **DIALOG** command presents the *form* to the user, along with *formData* parameter(s) (optional). +The **DIALOG** command presents the *form* to the user, along with *formData* parameter(s) (optional), in the last opened window. This command is designed to work with customized and advanced user interfaces based on forms. You can use it to display information coming from the database or other locations, or to provide data entry features. Unlike [ADD RECORD](../commands/add-record) or [MODIFY RECORD](../commands/modify-record), **DIALOG** gives you full control over the form, its contents and the navigation and validation buttons. -This command is typically called along with the [Open form window](../commands/open-form-window) to display sophisticated forms, as shown in the following example: +This command must be called along with the [Open form window](../commands/open-form-window) to display sophisticated forms, as shown in the following example: ![](../../assets/en/commands/pict3541609.en.png) @@ -69,7 +69,7 @@ To fill the "form data" object, you have two possibilities: ::: -The dialog is closed by the user either with an "accept" action (triggered by the ak accept standard action, the Enter key, or the [ACCEPT](../commands/accept) command), or with a "cancel" action (triggered by the ak cancel standard action, the Escape key, or the [CANCEL](../commands/cancel) command). An accept action will set the OK system variable to 1, while a cancel action will set OK to 0\. +The dialog is closed by the user either with an "accept" action (triggered by the `ak accept` standard action, the Enter key, or the [ACCEPT](../commands/accept) command), or with a "cancel" action (triggered by the `ak cancel` standard action, the Escape key, or the [CANCEL](../commands/cancel) command). An accept action will set the OK [system variable](../../Concepts/variables.md#system-variables) to 1, while a cancel action will set OK to 0. Keep in mind that validation does not equal saving: if the dialog includes fields, you must explicitly call the [SAVE RECORD](../commands/save-record) command to save any data that has been modified. @@ -78,7 +78,7 @@ This form then reacts “normally” to user actions and is closed using a stand **Notes:** -* You can combine the use of the **DIALOG**(form;\*) syntax with the [CALL FORM](../commands/call-form) command to establish communication between the forms. +* You can combine the use of the **DIALOG**(form;\*) syntax with the [`CALL FORM`](../commands/call-form) command to establish communication between the forms. * You must create a window before calling the **DIALOG**(form;\*) statement. It is not possible to use the current dialog window in the process nor the window created by default for each process. Otherwise, error -9909 is generated. * When the *\** parameter is used, the window is closed automatically following a standard action or a call to the [CANCEL](../commands/cancel) or [ACCEPT](../commands/accept) command. You do not have to manage the closing of the window itself. diff --git a/docs/language-legacy/Windows/open-form-window.md b/docs/language-legacy/Windows/open-form-window.md index 3e974daf0ce230..c58bbc1639b8a1 100644 --- a/docs/language-legacy/Windows/open-form-window.md +++ b/docs/language-legacy/Windows/open-form-window.md @@ -173,7 +173,7 @@ These window types have the following properties: |Suitable for scroll bars|No|No|No| |Modal|Yes|Yes, but can be moved|Yes, but can be moved| -**Usage**: `DIALOG`, `ADD RECORD(...;...*)` or equivalent. +**Usage**: [`DIALOG`](../commands/dialog), `ADD RECORD(...;...*)` or equivalent. #### Palette form window {#palette-form-window} @@ -225,7 +225,7 @@ Sheet windows are specific to macOS. These windows are displayed above the main - Since a sheet window must be drawn above a form, its display is pushed back in the [`On Load` event](../../Events/onLoad.md) of the first form loaded in the window ([see example 3](#example-3)). -**Usage**: `DIALOG`, `ADD RECORD(...;...*)` or equivalent, under macOS (not standard under Windows). +**Usage**: [`DIALOG`](../commands/dialog), `ADD RECORD(...;...*)` or equivalent, under macOS (not standard under Windows). #### Toolbar form window {#toolbar-form-window} @@ -299,6 +299,7 @@ which displays: ## See also +[DIALOG](../commands/dialog) [FORM GET PROPERTIES](../commands/form-get-properties) [Open window](../commands/open-window) From 41231c48cdb1c615104a2d9960c1a07d1ffcf98b Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Fri, 17 Apr 2026 12:48:11 +0200 Subject: [PATCH 07/12] Update forms.md --- docs/FormEditor/forms.md | 41 ++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/docs/FormEditor/forms.md b/docs/FormEditor/forms.md index 9ade252eef8c42..6211a78bfa96d5 100644 --- a/docs/FormEditor/forms.md +++ b/docs/FormEditor/forms.md @@ -69,7 +69,7 @@ You can add or modify 4D forms using the following elements: ## Using forms -In your 4D desktop applications, forms can be used in various ways, depending on their status within your interface needs. A form can be: +Forms are called using specific commands of the 4D Language. In your 4D desktop applications, forms can be used in various ways, depending on their status within your interface needs. A form can be: - used in its own window for data viewing, processing, editing, or to display on-screen information to the user, - used as template for printing, @@ -79,10 +79,10 @@ In your 4D desktop applications, forms can be used in various ways, depending on ### Using a project form in a window -Forms are called using specific commands of the 4D Language. The straighforward steps to display a form on screen are: +When you want to use a form as on-screen dialog, you need to (1) create a window and (2) load the form within the window, along with an event loop to process user actions. The straighforward steps to display a form on screen are: -1. Call the [`Open form window`](../commands/open-form-window) command to configure a window tailored for your project form. Note that the command itself does not display anything. -2. Call the [`DIALOG`](../commands/dialog) command to actually load the form in the form window, ready for user interaction. [`DIALOG`](../commands/dialog) loads form data and places your code in listening mode to user events (see also ["Event listening" paragraph](../Develop/async.md#event-listening). +1. Call the [`Open form window`](../commands/open-form-window) command to create and preconfigure a window tailored for your form. Note that the command only draw aan empty window, it does not display anything. +2. In the same method, call the [`DIALOG`](../commands/dialog) command to actually load the form in the opened form window, ready for user interaction. [`DIALOG`](../commands/dialog) loads form data and places your code in listening mode to user events. When you call this command without asterisk (\*), the dialog will stay on screen and the code execution is frozen until an event occurs (see also ["Event listening" paragraph](../Develop/async.md#event-listening)). 3. (optional) Use the [`Form`](../commands/form) command from within the form context to access form data. @@ -99,10 +99,10 @@ You create the following basic form in the [Form editor](./formEditor.md): ![](../assets/en/FormEditor/example-form-1.png) -The form is [associated with a "Person" class](./properties_FormProperties.md#form-class), defined as follow: +The form is [associated with a "myForm" class](./properties_FormProperties.md#form-class), defined as follow: ```4d - //cs.Person + //cs.myForm property name : Text property age : Integer @@ -111,17 +111,30 @@ Class constructor This.age:=0 ``` -If you execute the following project method: +The form class is automatically instantiated by 4D once the form is loaded. If you execute the following project method: ```4d -var $mydata:={name: "Smith"; age: 42} -var $win:=Open form window("myForm"; Movable form dialog box) -DIALOG("myForm"; $mydata) //displays dialog filled with values + // Instantiate a form object that will host form data and UI logic +var $formObject:=cs.myForm.new() + + //Prepare default value within the form object +$formObject.name:="Smith" +$formObject.age:=42 + + // Create an empty window with ad-hoc settings that fits the desired form dimensions, resizing properties, + // and window type (this does not render the form) +var $win:=Open form window("myForm"; Movable form dialog box; Horizontally centered; Vertically centered) + + //Render the form, and provide $formObject's data. Dialog also activates the form event loop +DIALOG("myForm"; $formObject) + + //Without asterisk to Dialog statement, the form waits for a closing action from the user + //before executing the rest of the code. Calling Close window is just a good practice CLOSE WINDOW($win) //releases reference -If (OK=1) //the user clicked OK - var $name : Text:=Form.name //gets data - var $age : Integer:=Form.age -End if + + //Display data modified by the user, if any/ +ALERT($formObject.name+" is "+String($formObject.age)+" years old!") + ``` 4D displays: From 1c9be4351f18146188c05f88d0893b34557822a0 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Mon, 11 May 2026 18:50:46 +0200 Subject: [PATCH 08/12] supported tags (en cours) --- docs/FormObjects/properties_Text.md | 91 ++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) diff --git a/docs/FormObjects/properties_Text.md b/docs/FormObjects/properties_Text.md index fe10e060cdd6fe..d0f687d2109097 100644 --- a/docs/FormObjects/properties_Text.md +++ b/docs/FormObjects/properties_Text.md @@ -427,6 +427,7 @@ This property enables the possibility of using [specific styles](https://doc.4d. By default, this option is not enabled. + #### JSON Grammar |Name|Data Type|Possible Values| @@ -439,7 +440,95 @@ By default, this option is not enabled. #### Commands -[LISTBOX Get property](../commands/listbox-get-property) - [LISTBOX SET PROPERTY](../commands/listbox-set-property) - [OBJECT Is styled text](../commands/object-is-styled-text) - +[LISTBOX Get property](../commands/listbox-get-property) - [LISTBOX SET PROPERTY](../commands/listbox-set-property) - [OBJECT Is styled text](../commands/object-is-styled-text) + +### Supported tags + +You can use the following tags in 4D multi-style text areas. + +#### 4D Expression + +```html + +``` + +This tag inserts a 4D expression (expression, method, field, variable, command, etc.) in the text. The expression is tokenized and evaluated: + +- when the expression is inserted +- when the object is loaded +- when the `computeExpressions` standard action is called from an interface object or by the [`INVOKE ACTION`](../commands/invoke-action) command +- when the [`ST COMPUTE EXPRESSIONS`](../commands/st-compute-expressions) command is executed +- when the [`ST FREEZE EXPRESSIONS`](../commands/st-freeze-expressions) command is executed, if the second `*` parameter is passed. + +The evaluated value of the expression is not saved in the `` tag, only its reference is. + +Note: To ensure that expressions will be evaluated correctly regardless of the 4D language or version used, we recommend using the token syntax for elements whose name might vary between different versions (commands, tables, fields, constants). For example, to insert the `Current time` command, enter `Current time:C178`. For more information about this, refer to *Using tokens in formulas*. + +#### URL + +```html +
Visible label +``` + +This tag inserts a URL in the text. Example: + +```html +4D Web Site +``` + +#### User link + +```html +Click here +``` + +"User links" look the same as URLs, but when you click them, they do not automatically open the source. You can pass any string you want as reference, and it is up to the developer to program any custom actions that occur when it is clicked. This means you can create links which are not URLs but references to files, 4D methods, and so on, that you can open or execute when they are clicked. The [`ST Get content type`](../commands/st-get-content-type) command detects if a user link has been clicked. + +User links are defined using the [`ST SET TEXT`](../commands/st-set-text) command. For example: + +```4d +ST SET TEXT(txtVar;"This is a user link: User Label";$start;$end) + ``` + +#### Custom tags + +You can insert any tag in plain text, for example ``. It is stored in the code of the plain text without being interpreted or displayed. This is particularly useful in the context of e-mails in HTML format and including pictures for example. + +#### Style tags + +This paragraph lists the attributes of \ tags that are supported by 4D in rich text areas. You can use these tags to implement custom style handling. Only the tags listed below are supported by 4D for style variations. + +Font name + ... + +Font size + ... + +Font style +Bold + ... +Italic or normal + ... + ... +Underline + ... +Strikethrough +... +Note : The "strikethrough" style is not supported under Mac OS, but this tag can still be managed by programming. +Font colors + ... +or +... + +Background colors + ... +or +... + +Color values +For font color and background color attributes, the color value can be either the hexadecimal code for an RGB color, or the name of one of the 16 HTML colors defined for standard CSS by the W3C: + + --- From ae5aa3a7f6be28eddc32aa0f492b77d009e897a7 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 28 May 2026 16:28:59 +0200 Subject: [PATCH 09/12] supported tags (finished) --- docs/FormObjects/properties_Text.md | 47 ++++----- docs/assets/en/FormObjects/colors1.png | Bin 0 -> 32632 bytes docs/assets/en/FormObjects/colors2.png | Bin 0 -> 34897 bytes docs/assets/en/FormObjects/multistyle-ex1.png | Bin 0 -> 906 bytes docs/assets/en/FormObjects/multistyle-ex2.png | Bin 0 -> 777 bytes docs/commands/theme/Styled_Text.md | 93 ++++++++++++++++++ 6 files changed, 112 insertions(+), 28 deletions(-) create mode 100644 docs/assets/en/FormObjects/colors1.png create mode 100644 docs/assets/en/FormObjects/colors2.png create mode 100644 docs/assets/en/FormObjects/multistyle-ex1.png create mode 100644 docs/assets/en/FormObjects/multistyle-ex2.png diff --git a/docs/FormObjects/properties_Text.md b/docs/FormObjects/properties_Text.md index d0f687d2109097..4d0d7726e11f01 100644 --- a/docs/FormObjects/properties_Text.md +++ b/docs/FormObjects/properties_Text.md @@ -498,36 +498,27 @@ You can insert any tag in plain text, for example ` ... - -Font size - ... - -Font style -Bold - ... -Italic or normal - ... - ... -Underline - ... -Strikethrough -... -Note : The "strikethrough" style is not supported under Mac OS, but this tag can still be managed by programming. -Font colors - ... -or -... - -Background colors - ... -or -... - -Color values +- Font name: ` ... ` +- Font size: ` ... ` +- Font style: + - Bold ` ... ` + - Italic ` ... ` + - Normal ` ... ` + - Underline ` ... ` + - Strikethrough `...` + +*Note: The "strikethrough" style is not supported under macOS, but this tag can still be managed by programming.* + +- Font colors: ` ... ` or `...` +- Background colors: ` ... ` or `...` + +#### Color values + For font color and background color attributes, the color value can be either the hexadecimal code for an RGB color, or the name of one of the 16 HTML colors defined for standard CSS by the W3C: +![](../assets/en/FormObjects/colors1.png) +![](../assets/en/FormObjects/colors2.png) + diff --git a/docs/assets/en/FormObjects/colors1.png b/docs/assets/en/FormObjects/colors1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc0759ba0abc00f5ddc4acc7c728808e9ed24d0e GIT binary patch literal 32632 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/FormObjects/colors2.png b/docs/assets/en/FormObjects/colors2.png new file mode 100644 index 0000000000000000000000000000000000000000..48d25eafd9007107f8a4632a171ae8a3620bd941 GIT binary patch literal 34897 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 literal 0 HcmV?d00001 diff --git a/docs/assets/en/FormObjects/multistyle-ex2.png b/docs/assets/en/FormObjects/multistyle-ex2.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea1e2de1b9d124717c988f4f1d7c5dbfe708e4a GIT binary patch literal 777 zcmV+k1NQuhP)Tcjp6q#ZVxY5S2fj@csDSd*^rWy#tidXapZG#=)*P@Sh-PKRTVx zu6MHE2+n%CuJ3v?dyJrSaDDxC*ZbL5`1R2n_=}ta?(_Fs>fO|GzZJp zhs)r7I54K8eqay|-oH5%L&wZO+sco{G8zP=g>F%LB|0c3KnQEKw43A-LX98~R7_Dx zTurD^|$Q8OIV2(5wScATU%$2I?jS_Ad_Z& z)1uBq#``OaoX}vj+n31-o;UXlJy^2>qqjZ5O$G@_>Fh)%hvqqq91CIE*RN>2@o?r+ zx_w|4%GxwGooc(d;smSep4S3zaRg07cy*2#rkKVxdqc`yV=neh=Ua%^8RtaL+00000NkvXX Hu0mjfqik$x literal 0 HcmV?d00001 diff --git a/docs/commands/theme/Styled_Text.md b/docs/commands/theme/Styled_Text.md index 669252bc519127..2c9583e9ae1f9b 100644 --- a/docs/commands/theme/Styled_Text.md +++ b/docs/commands/theme/Styled_Text.md @@ -23,3 +23,96 @@ slug: /commands/theme/Styled-Text |[](../../commands/st-set-options)
| |[](../../commands/st-set-plain-text)
| |[](../../commands/st-set-text)
| + + +## Working with text handling commands + +### User interface + +The commands that can be used to manipulate text objects by programming do not take any style tags integrated into the text into account. They act upon displayed text only. This concerns the following commands: + +- [User Interface](./User_Interface.md) theme commands +- [`HIGHLIGHT TEXT`](../../commands/highlight-text) +- [`GET HIGHLIGHT`](../../commands/get-highlight) + +When you use these commands with commands that manipulate character strings, it is necessary to filter the formatting characters using the [`ST Get plain text`](../../commands/st-get-plain-text) command: + +```4d + HIGHLIGHT TEXT([Products]Notes;1;Length(ST Get plain text([Products]Notes))+1) +``` + +### Objects (Forms) + +The commands that can be used to modify the style of objects (for example, [`OBJECT SET FONT`](../../commands/object-set-font)) apply to the whole object and not to the selection. + +If the object does not have the focus when the command is executed, the modification is applied simultaneously to the object (the text area) and to its associated variable. If the object does have the focus, the modification is carried out on the object but not on the associated variable. The modification is only applied to the variable when the object loses the focus. Keep this principle in mind when programming text areas. + +:::note + +If the [**Store with default style tags**](../../FormObjects/properties_Text.md#store-with-default-style-tags) option is checked for the object, the use of these commands will cause a modification of the tags saved with each object. + +::: + + +Note also that only default properties are affected by these commands (as well as any properties saved by means of default tags). Custom style tags remain as they are. For example, given a multi-style area where default tags were saved: + +![](../../assets/en/FormObjects/multistyle-ex1.png) + +The plain text of the area is as follows: + +```html +This is the word red +``` + +If you execute the following code: + +```4d +OBJECT SET COLOR(*;"myArea";-(Blue+(256*Yellow))) +``` + +The red color remains: + +![](../../assets/en/FormObjects/multistyle-ex2.png) + +and code is: + +```html +This is the word red +``` + +The following commands are concerned: + +- [`OBJECT SET RGB COLORS`](../../commands/object-set-rgb-colors) +- [`OBJECT SET FONT`](../../commands/object-set-font) +- [`OBJECT SET FONT STYLE`](../../commands/object-set-font-style) +- [`OBJECT SET FONT SIZE`](../../commands/object-set-font-size) + +In the context of multi-style areas, such commands should be used to set default styles only. To manage styles during database execution, we recommend using the commands of the "Styled Text" theme. + +### Get edited text + +When it is used with a rich text area, the [`Get edited text`](../../commands/get-edited-text) command returns the text of the current area including any style tags. + +To retrieve the "plain" text (text without tags) being edited, you must use the [`ST Get plain text`](../../commands/st-get-plain-text) command: + +```4d +ST Get plain text(Get edited text) +``` + +### Query and order by commands + +Queries and sorts carried out among multi-style objects take into account any style tags saved in the object. If a style modification has been made within a word, searching for the word will not be successful. + +To be able to carry out valid searches and sorts, you must use the [`ST Get plain text`](../../commands/st-get-plain-text) command. For example: + +```4d +QUERY BY FORMULA([MyTable];ST Get plain text([MyTable]MyFieldStyle)="very well") +``` + +## Automatic normalization of line endings + +In order to ensure multi-platform compatibility of texts handled in the database, 4D automatically normalizes line endings so that they occupy a single character: `\r` (carriage return). This normalization is carried out at the level of form objects (variables or fields) hosting plain or multi-style text. Line endings that are not native, or that use a mix of several characters (for example `\r\n`), are considered as a single `\r`. + +Note that in compliance with the XML standard (multi-style text format), the multi-style text commands also normalize line endings for text variables that are not associated with objects. + +This principle makes it easier to use multi-style text commands or commands such as [`HIGHLIGHT TEXT`](../../commands/highlight-text) in a multi-platform context. However, you must take this into account in your processing when you work with texts from heterogeneous sources. \ No newline at end of file From f65ba4f9078abd7f2ce3d3122698d8caeb894219 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Thu, 28 May 2026 17:49:29 +0200 Subject: [PATCH 10/12] web services et system documents --- docs/commands/theme/System_Documents.md | 56 ++++++++++++++-------- docs/commands/theme/Web_Services_Client.md | 7 +++ docs/commands/theme/Web_Services_Server.md | 5 ++ 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/docs/commands/theme/System_Documents.md b/docs/commands/theme/System_Documents.md index 66efd631190f9a..9bcf5380e29c9a 100644 --- a/docs/commands/theme/System_Documents.md +++ b/docs/commands/theme/System_Documents.md @@ -67,48 +67,66 @@ When it is called from a [preemptive process](../../Develop/preemptive.md), a *D ## The Document system variable -`Open document`, `Create document`, `Append document` and `Select document` enable you to access a document using the standard Open or Save file dialog boxes. When you access a document through a standard dialog, 4D returns the full pathname of the document in the [`Document` system variable](../../Concepts/variables.md#system-variables). This system variable has to be distinguished from the *document* parameter that appears in the parameter list of the commands. +[`Open document`](../../commands/open-document), [`Create document`](../../commands/create-document), [`Append document`](../../commands/append-document`) and [`Select document`](../../commands/select-document) commands enable you to access a document using the standard Open or Save file dialog boxes. When you access a document through a standard dialog, 4D returns the full pathname of the document in the [`Document` system variable](../../Concepts/variables.md#system-variables). This system variable has to be distinguished from the *document* parameter that appears in the parameter list of the commands. ## Absolute or relative pathname -Most of the routines of this section accept document names, relative pathnames or absolute pathnames: +Most of the routines of this section accept **document names**, **relative pathnames** or **absolute pathnames**. + +- **Relative pathnames** define a location with respect to a folder located on disk. Passing only a document name is considered as using a relative pathname. In 4D, a relative pathname is usually expressed with respect to the [project folder](../../Project/architecture.md#project-folder), i.e. the folder containing the .project file. Relative pathnames are especially useful when deploying applications in heterogenous environments. +- **Absolute pathnames** define a location with respect to the root of the volume and so they do not depend on the current location of the project folder. -Relative pathnames define a location with respect to a folder located on disk. Passing only a document name is considered as using a relative pathname. In 4D, a relative pathname is usually expressed with respect to the database folder, i.e. the folder containing the structure file. Relative pathnames are especially useful when deploying applications in heterogenous environments. -Absolute pathnames define a location with respect to the root of the volume and so they do not depend on the current location of the database folder. To determine whether a pathname passed to a command must be interpreted as absolute or relative, 4D applies a specific algorithm on each platform. -Windows -If the parameter contains only two characters and if the second one is a ':', - or if the text contains ':' and '\' as the second and third character, - or if the text starts with "\\", -then the pathname is absolute. +### Windows + +- If the parameter contains only two characters and if the second one is a ':' +- or if the text contains ':' and '\' as the second and third character, +- or if the text starts with "\\", +- then the pathname is absolute. In all other cases, the pathname is relative. -Examples with the CREATE FOLDER command: +Examples with the [`CREATE FOLDER`](../../commands/create-folder) command: +```4d CREATE FOLDER("lundi") // relative path CREATE FOLDER("\Monday") // relative path CREATE FOLDER("\Monday\Tuesday") // relative path CREATE FOLDER("c:") // absolute path CREATE FOLDER("d:\Monday") // absolute path CREATE FOLDER("\\srv-Internal\temp") // absolute path +``` + +:::note + +The code editor of 4D allows the use of [escape sequences](../../Concepts/quick-tour.md#escape-sequences). An escape sequence begins with a backslash `\`, followed by a character. For example, `\t` is the escape sequence for the Tab character. + +The `\` character is also used as the separator in pathnames in Windows. In general, 4D will correctly interpret Windows pathnames that are entered in the method editor by replacing single backslashes `\` with double backslashes `\\`. For example, `C:\Folder` will become `C:\\Folder`. -macOS -If the text starts with a folder separator ':', - or if does not contain any, -then the path is relative. +However, if you write `C:\MyDocuments\New`, 4D will display `C:\\MyDocuments\New`. In this case, the second `\` is incorrectly interpreted as `\N` (an existing escape sequence). You must therefore enter a double `\\` when you want to insert a backslash before a character that is used in one of the escape sequences recognized by 4D. + +::: + +### macOS + +- If the text starts with a folder separator ':', +- or if does not contain any, +- then the path is relative. In all other cases, it is absolute. -Examples with the CREATE FOLDER command: +Examples with the [`CREATE FOLDER`](../../commands/create-folder) command: + +```4d CREATE FOLDER("Monday") // relative path CREATE FOLDER("macintosh hd:") // absolute path CREATE FOLDER("Monday:Tuesday") // absolute path (a volume must be called Monday) CREATE FOLDER(":Monday:Tuesday") // relative path +``` :::note @@ -118,8 +136,8 @@ See also [**Absolute and relative pathnames** in the Concepts section](../../Con ## Extracting pathname contents -You can handle pathname contents using the Path to object and Object to path commands. In particular, using these commands, you can extract from a pathname: +You can handle pathname contents using the [`Path to object`](../../commands/path-to-object) and [`Object to path`](../../commands/object-to-path) commands. In particular, using these commands, you can extract from a pathname: -a file name, -the parent folder path, -the file or folder extension. \ No newline at end of file +- a file name, +- the parent folder path, +- the file or folder extension. \ No newline at end of file diff --git a/docs/commands/theme/Web_Services_Client.md b/docs/commands/theme/Web_Services_Client.md index 683fc77569c1ca..052b6283b0839b 100644 --- a/docs/commands/theme/Web_Services_Client.md +++ b/docs/commands/theme/Web_Services_Client.md @@ -14,3 +14,10 @@ slug: /commands/theme/Web-Services-Client |[](../../commands/web-service-get-result)
| |[](../../commands/web-service-set-option)
| |[](../../commands/web-service-set-parameter)
| + + +A Web Service is a set of functions published on a network. These functions can be called and used by any application compatible with Web Services and connected to the network. Web Services can carry out all types of tasks, such as supervising the routing of packages at a transporter’s, e-commerce, monitoring market values, etc. + +Subscription to Web Services with 4D is easy to carry out using the [Web Services Wizard](https://doc.4d.com/4Dv21/4D/21/Subscribing-to-a-Web-Service-in-4D.300-7676804.en.html). In most cases, this Wizard will be sufficient for you to be able to use Web Services. However, if you want to customize certain mechanisms, you must use the client SOAP commands of 4D. + +Note: By convention, the terms “SOAP” and “Web Service” have been used to differentiate between command (and constant) names on the server and client side, respectively. These two concepts refer to the same technology. \ No newline at end of file diff --git a/docs/commands/theme/Web_Services_Server.md b/docs/commands/theme/Web_Services_Server.md index f5ae3fd7397f47..cdcf0ff83dbddb 100644 --- a/docs/commands/theme/Web_Services_Server.md +++ b/docs/commands/theme/Web_Services_Server.md @@ -13,3 +13,8 @@ slug: /commands/theme/Web-Services-Server |[](../../commands/soap-reject-new-requests)
| |[](../../commands/soap-request)
| |[](../../commands/soap-send-fault)
| + + +Publication of Web Services with 4D is carried out easily using [options in the method properties](../../Project/project-method-properties.md#web-services). In most cases, this operation will be sufficient to enable you to publish Web Services. However, if you want to customize certain mechanisms, use data arrays, etc., you must use the server SOAP commands of 4D. + +Note: By convention, the terms “SOAP” and “Web Service” have been used to differentiate between command (and constant) names on the server and client side, respectively. These two concepts refer to the same technology. \ No newline at end of file From a67567b35ff5f81c5e988932b400d47e2fcede00 Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 3 Jun 2026 10:28:03 +0200 Subject: [PATCH 11/12] fixed Form FR --- .../current/language-legacy/Forms/form.md | 2 +- .../version-21-R3/language-legacy/Forms/form.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Forms/form.md b/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Forms/form.md index 0da9db082c7eb4..76b6d3f3792996 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Forms/form.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Forms/form.md @@ -1,7 +1,7 @@ --- id: form slug: /commands/form -title: Formulaire +title: Form displayed_sidebar: docs --- diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Forms/form.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Forms/form.md index 0da9db082c7eb4..76b6d3f3792996 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Forms/form.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Forms/form.md @@ -1,7 +1,7 @@ --- id: form slug: /commands/form -title: Formulaire +title: Form displayed_sidebar: docs --- From 06cd4c921614ebcb18ddf4ba2f8012d36d9d6ecc Mon Sep 17 00:00:00 2001 From: arnaud-4d Date: Wed, 3 Jun 2026 10:57:55 +0200 Subject: [PATCH 12/12] fix OWC glitch --- docs/commands-legacy/on-web-connection-database-method.md | 2 +- docs/language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../current/language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21-R2/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../current/language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21-R2/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../current/language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21-R2/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../current/language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21-R2/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21-R2/commands-legacy/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../language-legacy/Web Server/web-validate-digest.md | 2 +- .../commands-legacy/on-web-connection-database-method.md | 2 +- .../version-21/commands-legacy/web-validate-digest.md | 2 +- 40 files changed, 40 insertions(+), 40 deletions(-) diff --git a/docs/commands-legacy/on-web-connection-database-method.md b/docs/commands-legacy/on-web-connection-database-method.md index 9fc4c87ddcf86f..f514efb2440d66 100644 --- a/docs/commands-legacy/on-web-connection-database-method.md +++ b/docs/commands-legacy/on-web-connection-database-method.md @@ -43,7 +43,7 @@ You must declare these parameters as shown below: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Code for the method ``` diff --git a/docs/language-legacy/Web Server/web-validate-digest.md b/docs/language-legacy/Web Server/web-validate-digest.md index 14e206d49b6f53..0c9f9d0974d6f3 100644 --- a/docs/language-legacy/Web Server/web-validate-digest.md +++ b/docs/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Example using *On Web Authentication Database Method* in Digest mode: ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //For security reasons, refuse names containing @ diff --git a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md index b6cb73307c1cff..d80d53e51e71c0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Debe declarar estos seis parámetros de esta manera: ```4d   // Método de base On Web Connection   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Código para el método ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md b/i18n/es/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md index cef1d4d747a6c0..e95b4725cd2ffa 100644 --- a/i18n/es/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/es/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Ejemplo de método de base On Web Authentication en modo Digest: ```4d   // Método de base On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md index 77a590e7b47c29..ee8a847c39edb0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Debe declarar estos seis parámetros de esta manera: ```4d   // Método de base On Web Connection   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Código para el método ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md index b680eef20f3d6b..62d08a287b815b 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Ejemplo de método de base On Web Authentication en modo Digest: ```4d   // Método de base On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md index b6cb73307c1cff..d80d53e51e71c0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Debe declarar estos seis parámetros de esta manera: ```4d   // Método de base On Web Connection   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Código para el método ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md index cef1d4d747a6c0..e95b4725cd2ffa 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Ejemplo de método de base On Web Authentication en modo Digest: ```4d   // Método de base On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md index 77a590e7b47c29..ee8a847c39edb0 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Debe declarar estos seis parámetros de esta manera: ```4d   // Método de base On Web Connection   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Código para el método ``` diff --git a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md index bb24cfcc764d90..3c8d863063fe7a 100644 --- a/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md +++ b/i18n/es/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Ejemplo de método de base On Web Authentication en modo Digest: ```4d   // Método de base On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md index 733ba0fadc64b7..38e9843440b452 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Vous devez déclarer ces six paramètres de la manière suivante : ```4d   // Méthode base Sur connexion Web   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Code pour la méthode ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md b/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md index b6245ce6a06444..2f3a9a2e8bfb33 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/fr/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Exemple de *Méthode base Sur authentification Web* en mode Digest ```4d   // Méthode base Sur authentification Web - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $utilisateur : Text  var $0 : Boolean diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md index 8e5bf1f19c4b43..2c7cabbf4ebc9d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Vous devez déclarer ces six paramètres de la manière suivante : ```4d   // Méthode base Sur connexion Web   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Code pour la méthode ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md index 86ddf242c03f66..665573d752b534 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Exemple de *Méthode base Sur authentification Web* en mode Digest ```4d   // Méthode base Sur authentification Web - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $utilisateur : Text  var $0 : Boolean diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md index 733ba0fadc64b7..38e9843440b452 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Vous devez déclarer ces six paramètres de la manière suivante : ```4d   // Méthode base Sur connexion Web   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Code pour la méthode ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md index b6245ce6a06444..2f3a9a2e8bfb33 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Exemple de *Méthode base Sur authentification Web* en mode Digest ```4d   // Méthode base Sur authentification Web - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $utilisateur : Text  var $0 : Boolean diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md index 8e5bf1f19c4b43..2c7cabbf4ebc9d 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md @@ -47,7 +47,7 @@ Vous devez déclarer ces six paramètres de la manière suivante : ```4d   // Méthode base Sur connexion Web   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean     // Code pour la méthode ``` diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md index ec01eb1535db96..7d4e3338a2f909 100644 --- a/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md +++ b/i18n/fr/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Exemple de *Méthode base Sur authentification Web* en mode Digest ```4d   // Méthode base Sur authentification Web - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $utilisateur : Text  var $0 : Boolean diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md index 12d4d623f01530..ebfd475005dc2d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Connection データベースメソッド -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean   // メソッドコード ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md b/i18n/ja/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md index 9a1c2afb9cebf7..562e3442db3046 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/ja/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //セキュリティに関する理由のため、@を含む名前を拒否する diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md index a8990929daf9df..090cabe87a3922 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Connection データベースメソッド -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean   // メソッドコード ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md index 0949e4df4c72a6..3928930835d721 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //セキュリティに関する理由のため、@を含む名前を拒否する diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md index 12d4d623f01530..ebfd475005dc2d 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Connection データベースメソッド -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean   // メソッドコード ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md index 9a1c2afb9cebf7..562e3442db3046 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //セキュリティに関する理由のため、@を含む名前を拒否する diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md index a8990929daf9df..090cabe87a3922 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Connection データベースメソッド -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean   // メソッドコード ``` diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md index 3a9ed6a06c7d42..62928bde6c0225 100644 --- a/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md +++ b/i18n/ja/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ displayed_sidebar: docs ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //セキュリティに関する理由のため、@を含む名前を拒否する diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md b/i18n/pt/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md index 1bf6e4a4fd3196..5ab24e3cd89ed6 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/commands-legacy/on-web-connection-database-method.md @@ -49,7 +49,7 @@ Você deve declarar esses parâmetros da seguinte maneira: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Código para o método ``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md b/i18n/pt/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md index 888f98104d3aa3..1fcbaf9e73c404 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/pt/docusaurus-plugin-content-docs/current/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Exemplo de método de base On Web Authentication em modo Digest: ```4d   // Método de banco On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md index a4b10d43ffe734..3300834e4ddd81 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/on-web-connection-database-method.md @@ -49,7 +49,7 @@ Você deve declarar esses parâmetros da seguinte maneira: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Código para o método ``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md index 02b2ab7e6c67c5..114164d4d245e3 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R2/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Exemplo de método de base On Web Authentication em modo Digest: ```4d   // Método de banco On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md index 1bf6e4a4fd3196..5ab24e3cd89ed6 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/commands-legacy/on-web-connection-database-method.md @@ -49,7 +49,7 @@ Você deve declarar esses parâmetros da seguinte maneira: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Código para o método ``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md index 888f98104d3aa3..1fcbaf9e73c404 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Exemplo de método de base On Web Authentication em modo Digest: ```4d   // Método de banco On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md index a4b10d43ffe734..3300834e4ddd81 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/on-web-connection-database-method.md @@ -49,7 +49,7 @@ Você deve declarar esses parâmetros da seguinte maneira: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Código para o método ``` diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md index 3e2c5d9e5b1dd1..322fad990562fe 100644 --- a/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md +++ b/i18n/pt/docusaurus-plugin-content-docs/version-21/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Exemplo de método de base On Web Authentication em modo Digest: ```4d   // Método de banco On Web Authentication - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  var $usuario : Text  var $0 : Boolean diff --git a/versioned_docs/version-21-R2/commands-legacy/on-web-connection-database-method.md b/versioned_docs/version-21-R2/commands-legacy/on-web-connection-database-method.md index a9f02b0a7cf7de..abafad99bb8fc7 100644 --- a/versioned_docs/version-21-R2/commands-legacy/on-web-connection-database-method.md +++ b/versioned_docs/version-21-R2/commands-legacy/on-web-connection-database-method.md @@ -43,7 +43,7 @@ You must declare these parameters as shown below: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Code for the method ``` diff --git a/versioned_docs/version-21-R2/commands-legacy/web-validate-digest.md b/versioned_docs/version-21-R2/commands-legacy/web-validate-digest.md index 533c32fbe38fb5..4b7bdf7dc0f126 100644 --- a/versioned_docs/version-21-R2/commands-legacy/web-validate-digest.md +++ b/versioned_docs/version-21-R2/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Example using *On Web Authentication Database Method* in Digest mode: ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //For security reasons, refuse names containing @ diff --git a/versioned_docs/version-21-R3/commands-legacy/on-web-connection-database-method.md b/versioned_docs/version-21-R3/commands-legacy/on-web-connection-database-method.md index 9fc4c87ddcf86f..f514efb2440d66 100644 --- a/versioned_docs/version-21-R3/commands-legacy/on-web-connection-database-method.md +++ b/versioned_docs/version-21-R3/commands-legacy/on-web-connection-database-method.md @@ -43,7 +43,7 @@ You must declare these parameters as shown below: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Code for the method ``` diff --git a/versioned_docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md b/versioned_docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md index 14e206d49b6f53..0c9f9d0974d6f3 100644 --- a/versioned_docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md +++ b/versioned_docs/version-21-R3/language-legacy/Web Server/web-validate-digest.md @@ -46,7 +46,7 @@ Example using *On Web Authentication Database Method* in Digest mode: ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //For security reasons, refuse names containing @ diff --git a/versioned_docs/version-21/commands-legacy/on-web-connection-database-method.md b/versioned_docs/version-21/commands-legacy/on-web-connection-database-method.md index a9f02b0a7cf7de..abafad99bb8fc7 100644 --- a/versioned_docs/version-21/commands-legacy/on-web-connection-database-method.md +++ b/versioned_docs/version-21/commands-legacy/on-web-connection-database-method.md @@ -43,7 +43,7 @@ You must declare these parameters as shown below: ```4d   // On Web Connection Database Method   -#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) +#DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text)     // Code for the method ``` diff --git a/versioned_docs/version-21/commands-legacy/web-validate-digest.md b/versioned_docs/version-21/commands-legacy/web-validate-digest.md index bb841821b0fda6..f4ecfa769683ad 100644 --- a/versioned_docs/version-21/commands-legacy/web-validate-digest.md +++ b/versioned_docs/version-21/commands-legacy/web-validate-digest.md @@ -46,7 +46,7 @@ Example using *On Web Authentication Database Method* in Digest mode: ```4d   // On Web Authentication Database Method - #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ;\ $user : Text ; $pw : Text) -> $result : Boolean + #DECLARE($url : Text ; $http : Text ; $ipBrowser : Text ; $ipServer : Text ; $user : Text ; $pw : Text) -> $result : Boolean  $result:=False  $user:=$5   //For security reasons, refuse names containing @